ETH Price: $3,445.73 (-2.57%)
Gas: 2 Gwei

Token

AnimeVerse (Anime)
 

Overview

Max Total Supply

1,000,000,000,000 Anime

Holders

117 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
54,752,339 Anime

Value
$0.00
0x59ed8403f45918d21ecf8fc6c6c0f23845c53e2a
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

An Eco-System designed to benefit society while generating passive income for holders. By combining the love for anime and crypto, AnimeVerse will be present in events to support charitable causes to communities throughout the region

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AnimeVerse

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 3000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-24
*/

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

interface IERC20 {
  function totalSupply() external view returns (uint256);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  function balanceOf(address account) external view returns (uint256);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function allowance(address _owner, address spender) external view returns (uint256);
  function approve(address spender, uint256 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
  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);
    function sync() external;
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

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

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

interface Cashier {
    function setRewardsProperties(uint256 _minPeriod, uint256 _minReflection) external;
    function tally(address user, uint256 amount) external;
    function load() external payable;
    function cashout(uint256 gas) external;
    function giveMeWelfarePlease(address hobo) external;
    function getTotalDistributed() external view returns(uint256);
    function getUserInfo(address user) external view returns(string memory, string memory, string memory, string memory);
    function getUserRealizedRewards(address user) external view returns (uint256);
    function getPendingRewards(address user) external view returns (uint256);
    function initialize() external;
}

contract AnimeVerse is IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => bool) private _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _isExcludedFromDividends;
    mapping (address => bool) private _liquidityHolders;

    uint256 constant private startingSupply = 1_000_000_000_000;
    string constant private _name = "AnimeVerse";
    string constant private _symbol = "Anime";
    uint8 constant private _decimals = 9;

    uint256 constant private _tTotal = startingSupply * 10**_decimals;

    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
    }

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

    Fees public _taxRates = Fees({
        buyFee: 980,
        sellFee: 9800,
        transferFee: 980
        });

    Ratios public _ratios = Ratios({
        rewards: 800,
        liquidity: 600,
        marketing: 2580,
        total: 800 + 600 + 2580
        });

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

    IRouter02 public dexRouter;
    address public lpPair;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant private ZERO = 0x0000000000000000000000000000000000000000;

    struct TaxWallets {
        address payable marketing;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0xa7E83DbA467A88Caff9Fde901C2a6a6553E92A58)
        });

    uint256 private _maxTxAmountBuy = (_tTotal * 15) / 1000;
    uint256 private _maxTxAmountSell = (_tTotal * 75) / 10000;
    uint256 private _maxWalletSize = (_tTotal * 15) / 1000;

    Cashier reflector;
    uint256 reflectorGas = 300000;

    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent;

    bool public processReflect = false;

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

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

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

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountBNB, uint256 amount);

    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

        _tOwned[_owner] = _tTotal;
        emit Transfer(ZERO, _owner, _tTotal);
        emit OwnershipTransferred(address(0), _owner);

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
        } else if (block.chainid == 1 || block.chainid == 4) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            //Ropstein DAI 0xaD6D458402F60fD3Bd25163575031ACDce07538D
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } else {
            revert();
        }

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

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

        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _isExcludedFromDividends[_owner] = true;
        _isExcludedFromDividends[lpPair] = true;
        _isExcludedFromDividends[address(this)] = true;
        _isExcludedFromDividends[DEAD] = true;
        _isExcludedFromDividends[ZERO] = true;
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    function transferOwner(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        _isExcludedFromFees[_owner] = false;
        _isExcludedFromDividends[_owner] = false;
        _isExcludedFromFees[newOwner] = true;
        _isExcludedFromDividends[newOwner] = true;
        
        if(balanceOf(_owner) > 0) {
            _finalizeTransfer(_owner, newOwner, balanceOf(_owner), false, false, true);
        }
        
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
        
    }

    function renounceOwnership() external onlyOwner {
        _isExcludedFromFees[_owner] = false;
        _isExcludedFromDividends[_owner] = false;
        address oldOwner = _owner;
        _owner = address(0);
        emit OwnershipTransferred(oldOwner, address(0));
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    receive() external payable {}

    function totalSupply() external pure override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external pure override returns (uint8) { if (_tTotal == 0) { revert(); } 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 balanceOf(address account) public view override returns (uint256) { return _tOwned[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the 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 transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transfer(msg.sender, recipient, amount);
    }

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

        return _transfer(sender, recipient, amount);
    }

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

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

    function setInitializers(address aInitializer, address cInitializer) external onlyOwner {
        require(!tradingEnabled);
        require(cInitializer != address(this) && aInitializer != address(this) && cInitializer != aInitializer);
        reflector = Cashier(cInitializer);
        antiSnipe = AntiSnipe(aInitializer);
    }

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

    function isExcludedFromDividends(address account) external view returns(bool) {
        return _isExcludedFromDividends[account];
    }

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

    function isExcludedFromProtection(address account) external view returns (bool) {
        return _isExcludedFromProtection[account];
    }

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

    function setDividendExcluded(address holder, bool enabled) public onlyOwner {
        require(holder != address(this) && holder != lpPair);
        _isExcludedFromDividends[holder] = enabled;
        if (enabled) {
            reflector.tally(holder, 0);
        } else {
            reflector.tally(holder, _tOwned[holder]);
        }
    }

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

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

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabled(account, enabled);
        setDividendExcluded(account, enabled);
    }

    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabledMultiple(accounts, enabled);
        for(uint256 i = 0; i < accounts.length; i++){
            setDividendExcluded(accounts[i], enabled);
        }
    }

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

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

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

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

    function 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 {}
        try reflector.initialize() {} catch {}
        tradingEnabled = true;
        swapThreshold = (balanceOf(lpPair) * 10) / 10000;
        swapAmount = (balanceOf(lpPair) * 25) / 10000;
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        require(buyFee + sellFee <= maxRoundtripTax, "Cannot exceed roundtrip maximum.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setRatios(uint16 rewards, uint16 liquidity, uint16 marketing) external onlyOwner {
        _ratios.rewards = rewards;
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.total = rewards + liquidity + marketing;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(_ratios.total <= total, "Cannot exceed sum of buy and sell fees.");
    }

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

    function setMaxTxPercents(uint256 percentBuy, uint256 divisorBuy, uint256 percentSell, uint256 divisorSell) external onlyOwner {
        require((_tTotal * percentBuy) / divisorBuy >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        require((_tTotal * percentSell) / divisorSell >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmountBuy = (_tTotal * percentBuy) / divisorBuy;
        _maxTxAmountSell = (_tTotal * percentSell) / divisorSell;
    }

    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 getMaxTXBuy() public view returns (uint256) {
        return _maxTxAmountBuy / (10**_decimals);
    }

    function getMaxTXSell() public view returns (uint256) {
        return _maxTxAmountSell / (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;
        require(swapThreshold <= swapAmount, "Threshold cannot be above amount.");
    }

    function setPriceImpactSwapAmount(uint256 priceImpactSwapPercent) external onlyOwner {
        require(priceImpactSwapPercent <= 200, "Cannot set above 2%.");
        piSwapPercent = priceImpactSwapPercent;
    }

    function setContractSwapEnabled(bool swapEnabled, bool processReflectEnabled, bool priceImpactSwapEnabled) external onlyOwner {
        contractSwapEnabled = swapEnabled;
        processReflect = processReflectEnabled;
        piContractSwapsEnabled = priceImpactSwapEnabled;
        emit ContractSwapEnabledUpdated(swapEnabled);
    }

    function setRewardsProperties(uint256 _minPeriod, uint256 _minReflection, uint256 minReflectionMultiplier) external onlyOwner {
        _minReflection = _minReflection * 10**minReflectionMultiplier;
        reflector.setRewardsProperties(_minPeriod, _minReflection);
    }

    function setReflectorSettings(uint256 gas) external onlyOwner {
        require(gas < 750000);
        reflectorGas = gas;
    }

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

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

        if (sell) {
            if (!inSwap) {
                if(contractSwapEnabled
                    ) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        uint256 swapAmt = swapAmount;
                        if(piContractSwapsEnabled) { swapAmt = (balanceOf(lpPair) * piSwapPercent) / masterTaxDivisor; }
                        if(contractTokenBalance >= swapAmt) { contractTokenBalance = swapAmt; }
                        contractSwap(contractTokenBalance);
                    }
                }
            }
        } 
        return _finalizeTransfer(from, to, amount, buy, sell, other);
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool buy, bool sell, bool other) internal returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }

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

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

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

        _tOwned[from] -= amount;
        uint256 amountReceived = amount;
        if (takeFee) {
            amountReceived = takeTaxes(from, amount, buy, sell, other);
        }
        _tOwned[to] += amountReceived;

        processRewards(from, to);

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function processRewards(address from, address to) internal {
        if (!_isExcludedFromDividends[from]) {
            try reflector.tally(from, _tOwned[from]) {} catch {}
        }
        if (!_isExcludedFromDividends[to]) {
            try reflector.tally(to, _tOwned[to]) {} catch {}
        }
        if (processReflect) {
            try reflector.cashout(reflectorGas) {} catch {}
        }
    }

    function takeTaxes(address from, uint256 amount, bool buy, bool sell, bool other) internal returns (uint256) {
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }

        if (currentFee == 0) {
            return amount;
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;

        _tOwned[address(this)] += feeAmount;
        emit Transfer(from, address(this), feeAmount);

        return amount - feeAmount;
    }

    function contractSwap(uint256 contractTokenBalance) internal swapping {
        Ratios memory ratios = _ratios;
        if (ratios.total == 0) {
            return;
        }
        
        if(_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        uint256 toLiquify = ((contractTokenBalance * ratios.liquidity) / (ratios.total)) / 2;
        uint256 swapAmt = contractTokenBalance - toLiquify;

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

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

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

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

        amtBalance -= liquidityBalance;
        ratios.total -= ratios.liquidity;
        bool success;
        uint256 rewardsBalance = (amtBalance * ratios.rewards) / ratios.total;
        uint256 marketingBalance = amtBalance - (rewardsBalance);

        if (ratios.rewards > 0) {
            try reflector.load{value: rewardsBalance}() {} catch {}
        }

        if(ratios.marketing > 0){
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 35000}("");
        }
    }

    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));
            }
            if(address(reflector) ==  address(0)) {
                reflector = Cashier(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

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

    function manualDeposit() external onlyOwner {
        try reflector.load{value: address(this).balance}() {} catch {}
    }

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

//=====================================================================================
//            Reflector

    function giveMeWelfarePlease() external {
        reflector.giveMeWelfarePlease(msg.sender);
    }

    function getTotalReflected() external view returns (uint256) {
        return reflector.getTotalDistributed();
    }

    function getUserInfo(address user) external view returns (string memory, string memory, string memory, string memory) {
        return reflector.getUserInfo(user);
    }

    function getUserRealizedGains(address user) external view returns (uint256) {
        return reflector.getUserRealizedRewards(user);
    }

    function getUserUnpaidEarnings(address user) external view returns (uint256) {
        return reflector.getPendingRewards(user);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"rewards","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"getMaxTXBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTXSell","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":"getTotalReflected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserRealizedGains","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveMeWelfarePlease","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRoundtripTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processReflect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"processReflectEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setDividendExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"aInitializer","type":"address"},{"internalType":"address","name":"cInitializer","type":"address"}],"name":"setInitializers","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":"percentBuy","type":"uint256"},{"internalType":"uint256","name":"divisorBuy","type":"uint256"},{"internalType":"uint256","name":"percentSell","type":"uint256"},{"internalType":"uint256","name":"divisorSell","type":"uint256"}],"name":"setMaxTxPercents","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":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"rewards","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setReflectorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minReflection","type":"uint256"},{"internalType":"uint256","name":"minReflectionMultiplier","type":"uint256"}],"name":"setRewardsProperties","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":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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"}]

60006003556103d4608081905261264860a05260c052600a805465ffffffffffff19166503d4264803d417815561032060e05261025861010052610a1461012052610f8c61014052600b80546001600160401b031916670f8c0a140258032017905561018060405273a7e83dba467a88caff9fde901c2a6a6553e92a58610160819052600e80546001600160a01b03191690911790556103e890620000a79060099062000881565b620000b89064e8d4a5100062000899565b620000c590600f62000899565b620000d19190620008bb565b600f55612710620000e56009600a62000881565b620000f69064e8d4a5100062000899565b6200010390604b62000899565b6200010f9190620008bb565b6010556103e8620001236009600a62000881565b620001349064e8d4a5100062000899565b6200014190600f62000899565b6200014d9190620008bb565b601155620493e06013556014805461ff00191690556019805462ffffff19169055600080546001600160a01b031916331790556200018e6009600a62000881565b6200019f9064e8d4a5100062000899565b600080546001600160a01b039081168252600160205260408220929092558054909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001f26009600a62000881565b620002039064e8d4a5100062000899565b60405190815260200160405180910390a3600080546040516001600160a01b0390911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3466038036200028257600c80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000369565b46606103620002b757600c80546001600160a01b03191673d99d1c33f9fc3444f8101754abc46c52416550d117905562000369565b4660011480620002c75750466004145b15620002f957600c80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000369565b4661a86a036200032f57600c80546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d417905562000369565b4660fa036200036457600c80546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c2917905562000369565b600080fd5b600c60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e39190620008de565b6001600160a01b031663c9c65396600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046b9190620008de565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620004b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004de9190620008de565b600d80546001600160a01b0319166001600160a01b039283169081179091556000908152600260205260408120805460ff1916600117905554600c546200052d92918216911660001962000640565b600c54620005499030906001600160a01b031660001962000640565b600080546001600160a01b0390811682526006602090815260408084208054600160ff1991821681179092553080875283872080548316841790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805483168417905586548616875260089094528286208054821683179055600d5490941685528185208054851682179055918452832080548316821790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548316821790559180527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c78054909116909117905562000909565b6001600160a01b038316620006a85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200070b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200069f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007c3578160001904821115620007a757620007a76200076c565b80851615620007b557918102915b93841c939080029062000787565b509250929050565b600082620007dc575060016200087b565b81620007eb575060006200087b565b81600181146200080457600281146200080f576200082f565b60019150506200087b565b60ff8411156200082357620008236200076c565b50506001821b6200087b565b5060208310610133831016604e8410600b841016171562000854575081810a6200087b565b62000860838362000782565b80600019048211156200087757620008776200076c565b0290505b92915050565b60006200089260ff841683620007cb565b9392505050565b6000816000190483118215151615620008b657620008b66200076c565b500290565b600082620008d957634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620008f157600080fd5b81516001600160a01b03811681146200089257600080fd5b61514c80620009196000396000f3fe6080604052600436106104695760003560e01c80636386c1c711610243578063b421626c11610143578063ee5d9c2d116100bb578063f94aa1b41161008a578063fdb78c0e1161006f578063fdb78c0e14610d9b578063fe575a8714610dba578063feadde9c14610dda57600080fd5b8063f94aa1b414610d5b578063fb78680d14610d7b57600080fd5b8063ee5d9c2d14610cf7578063eec2744e14610d0c578063efe7dc9014610d2c578063f7c245ea14610d4657600080fd5b8063cf84770611610112578063dd62ed3e116100f7578063dd62ed3e14610c71578063eafb5a3c14610cb7578063eb50e70e14610cd757600080fd5b8063cf84770614610be6578063d0b1449d14610c5157600080fd5b8063b421626c14610b53578063b7df8b3614610b73578063c0488b5614610b8d578063c705c56914610bad57600080fd5b80638a63bd9b116101d6578063a9059cbb116101a5578063ab5cb5a61161018a578063ab5cb5a614610b33578063b1b08f711461071c578063b3d514fb1461071c57600080fd5b8063a9059cbb14610af3578063aa22b17214610b1357600080fd5b80638a63bd9b14610a6e5780638a8c523c14610a8357806395d89b4114610a985780639dc6761514610ade57600080fd5b806370a082311161021257806370a08231146109e5578063715018a614610a1b57806380c581d114610a30578063893d20e814610a5057600080fd5b80636386c1c7146109605780636505079a146109905780636ab86dc1146109b05780636b639a25146109c557600080fd5b80632b28fc7a116103695780634ada218b116102e15780634fbee193116102b0578063590ffdce11610295578063590ffdce146108e75780635cce86cd146109075780636372c68f1461094057600080fd5b80634fbee1931461088e57806350a8e016146108c757600080fd5b80634ada218b1461081a5780634be6ca13146108395780634e718e481461084e5780634fb2e45d1461086e57600080fd5b806333251a0b1161033857806340f83bf71161031d57806340f83bf7146107cf578063452ed4f1146107e457806346ea7ac81461080457600080fd5b806333251a0b1461078f57806336fddb04146107af57600080fd5b80632b28fc7a1461071c5780632e8fa82114610732578063313ce5671461074857806332cde6641461076f57600080fd5b80630dcbcf1c116103fc57806323b872dd116103cb5780632610eaca116103b05780632610eaca146106c657806328577751146106e657806329dd8798146106fc57600080fd5b806323b872dd1461068657806326003957146106a657600080fd5b80630dcbcf1c146106035780630fa604e41461063c57806318160ddd14610651578063218950bc1461066657600080fd5b806306fdde031161043857806306fdde03146105445780630758d9241461059357806309231602146105b3578063095ea7b3146105d357600080fd5b806303fd2a45146104755780630445b667146104a857806305bbedb6146104cc578063069d955f146104ee57600080fd5b3661047057005b600080fd5b34801561048157600080fd5b5061048b61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104b457600080fd5b506104be60155481565b60405190815260200161049f565b3480156104d857600080fd5b506104ec6104e736600461485e565b610dfa565b005b3480156104fa57600080fd5b50600a5461051f9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161049f565b34801561055057600080fd5b5060408051808201909152600a81527f416e696d6556657273650000000000000000000000000000000000000000000060208201525b60405161049f9190614908565b34801561059f57600080fd5b50600c5461048b906001600160a01b031681565b3480156105bf57600080fd5b506104ec6105ce36600461491b565b610f10565b3480156105df57600080fd5b506105f36105ee366004614934565b61102b565b604051901515815260200161049f565b34801561060f57600080fd5b506105f361061e366004614960565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561064857600080fd5b506104be611098565b34801561065d57600080fd5b506104be6110b8565b34801561067257600080fd5b506104ec61068136600461497d565b6110fc565b34801561069257600080fd5b506105f36106a13660046149ab565b611203565b3480156106b257600080fd5b506104ec6106c13660046149ec565b61127b565b3480156106d257600080fd5b506104ec6106e1366004614a0e565b6113c8565b3480156106f257600080fd5b506104be60185481565b34801561070857600080fd5b506104ec610717366004614ac9565b61152a565b34801561072857600080fd5b506104be6107d081565b34801561073e57600080fd5b506104be60165481565b34801561075457600080fd5b5061075d61160e565b60405160ff909116815260200161049f565b34801561077b57600080fd5b506104ec61078a366004614b3c565b61163d565b34801561079b57600080fd5b506104ec6107aa366004614960565b61179d565b3480156107bb57600080fd5b506104ec6107ca366004614b7f565b611838565b3480156107db57600080fd5b506104be6118ab565b3480156107f057600080fd5b50600d5461048b906001600160a01b031681565b34801561081057600080fd5b506104be610bb881565b34801561082657600080fd5b506019546105f390610100900460ff1681565b34801561084557600080fd5b506104be6118c6565b34801561085a57600080fd5b506104ec61086936600461491b565b6118e1565b34801561087a57600080fd5b506104ec610889366004614960565b61197f565b34801561089a57600080fd5b506105f36108a9366004614960565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156108d357600080fd5b506019546105f39062010000900460ff1681565b3480156108f357600080fd5b506104ec610902366004614b7f565b611bd9565b34801561091357600080fd5b506105f3610922366004614960565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561094c57600080fd5b506104be61095b366004614960565b611c4c565b34801561096c57600080fd5b5061098061097b366004614960565b611cd5565b60405161049f9493929190614bad565b34801561099c57600080fd5b506104ec6109ab366004614bfa565b611d76565b3480156109bc57600080fd5b506104ec611e2d565b3480156109d157600080fd5b506104ec6109e0366004614b7f565b611eda565b3480156109f157600080fd5b506104be610a00366004614960565b6001600160a01b031660009081526001602052604090205490565b348015610a2757600080fd5b506104ec612037565b348015610a3c57600080fd5b506104ec610a4b366004614b7f565b612109565b348015610a5c57600080fd5b506000546001600160a01b031661048b565b348015610a7a57600080fd5b506105f36122b0565b348015610a8f57600080fd5b506104ec612319565b348015610aa457600080fd5b5060408051808201909152600581527f416e696d650000000000000000000000000000000000000000000000000000006020820152610586565b348015610aea57600080fd5b506104ec6125d8565b348015610aff57600080fd5b506105f3610b0e366004614934565b612650565b348015610b1f57600080fd5b506104ec610b2e366004614b3c565b612664565b348015610b3f57600080fd5b506104be610b4e366004614960565b6127d6565b348015610b5f57600080fd5b506104ec610b6e366004614c45565b612822565b348015610b7f57600080fd5b506017546105f39060ff1681565b348015610b9957600080fd5b506104ec610ba8366004614c71565b612903565b348015610bb957600080fd5b506105f3610bc8366004614960565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610bf257600080fd5b50600b54610c239061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff9586168152938516602085015291841691830191909152909116606082015260800161049f565b348015610c5d57600080fd5b506104ec610c6c36600461491b565b612b53565b348015610c7d57600080fd5b506104be610c8c36600461497d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610cc357600080fd5b506104ec610cd2366004614960565b612baf565b348015610ce357600080fd5b506104ec610cf2366004614960565b612f58565b348015610d0357600080fd5b506104ec612fcf565b348015610d1857600080fd5b506104ec610d27366004614b7f565b6130aa565b348015610d3857600080fd5b506019546105f39060ff1681565b348015610d5257600080fd5b506104be613184565b348015610d6757600080fd5b50600e5461048b906001600160a01b031681565b348015610d8757600080fd5b506104ec610d96366004614c71565b61320b565b348015610da757600080fd5b506014546105f390610100900460ff1681565b348015610dc657600080fd5b506105f3610dd5366004614960565b613334565b348015610de657600080fd5b506104ec610df5366004614b7f565b6133c3565b6000546001600160a01b03163314610e475760405162461bcd60e51b815260206004820181905260248201526000805160206150f783398151915260448201526064015b60405180910390fd5b6019546040517f05bbedb600000000000000000000000000000000000000000000000000000000815263010000009091046001600160a01b0316906305bbedb690610e989085908590600401614ce7565b600060405180830381600087803b158015610eb257600080fd5b505af1158015610ec6573d6000803e3d6000fd5b5050505060005b8251811015610f0b57610ef9838281518110610eeb57610eeb614d0b565b602002602001015183611eda565b80610f0381614d37565b915050610ecd565b505050565b6000546001600160a01b03163314610f585760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b61012c811015610faa5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610e3e565b6019546040517f092316020000000000000000000000000000000000000000000000000000000081526004810183905263010000009091046001600160a01b0316906309231602906024015b600060405180830381600087803b15801561101057600080fd5b505af1158015611024573d6000803e3d6000fd5b5050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906110869086815260200190565b60405180910390a35060015b92915050565b60006110a66009600a614e35565b6011546110b39190614e44565b905090565b60006110c66009600a614e35565b6110d59064e8d4a51000614e66565b6000036110e157600080fd5b6110ed6009600a614e35565b6110b39064e8d4a51000614e66565b6000546001600160a01b031633146111445760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b601954610100900460ff161561115957600080fd5b6001600160a01b038116301480159061117b57506001600160a01b0382163014155b80156111995750816001600160a01b0316816001600160a01b031614155b6111a257600080fd5b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000009390921692909202179055565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611268576001600160a01b038416600090815260046020908152604080832033845290915281208054849290611262908490614e85565b90915550505b611273848484613436565b949350505050565b6000546001600160a01b031633146112c35760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6103e86112d26009600a614e35565b6112e19064e8d4a51000614e66565b6112eb9190614e44565b81836112f96009600a614e35565b6113089064e8d4a51000614e66565b6113129190614e66565b61131c9190614e44565b10156113905760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610e3e565b808261139e6009600a614e35565b6113ad9064e8d4a51000614e66565b6113b79190614e66565b6113c19190614e44565b6011555050565b6000546001600160a01b031633146114105760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b80518251146114615760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610e3e565b60005b82518160ff161015610f0b57818160ff168151811061148557611485614d0b565b60200260200101516114ac336001600160a01b031660009081526001602052604090205490565b10156114b757600080fd5b61151733848360ff16815181106114d0576114d0614d0b565b60200260200101516009600a6114e69190614e35565b858560ff16815181106114fb576114fb614d0b565b602002602001015161150d9190614e66565b6000806001613936565b508061152281614e9c565b915050611464565b6000546001600160a01b031633146115725760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6019546040517f0109da69000000000000000000000000000000000000000000000000000000008152851515600482015284151560248201528315156044820152821515606482015263010000009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156115f057600080fd5b505af1158015611604573d6000803e3d6000fd5b5050505050505050565b600061161c6009600a614e35565b61162b9064e8d4a51000614e66565b60000361163757600080fd5b50600990565b6000546001600160a01b031633146116855760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6107d08361ffff16111580156116a157506107d08261ffff1611155b80156116b357506107d08161ffff1611155b6116ff5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610e3e565b610bb861170c8385614ebb565b61ffff16111561175e5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610e3e565b600a805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6000546001600160a01b031633146117e55760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6019546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b90602401610ff6565b6000546001600160a01b031633146118805760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60006118b96009600a614e35565b6010546110b39190614e44565b60006118d46009600a614e35565b600f546110b39190614e44565b6000546001600160a01b031633146119295760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b60c881111561197a5760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f74207365742061626f76652032252e0000000000000000000000006044820152606401610e3e565b601855565b6000546001600160a01b031633146119c75760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b038116611a435760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e3e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b03821601611ae15760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e3e565b600080546001600160a01b039081168252600660208181526040808520805460ff1990811690915585548516865260088084528287208054831690558786168752938352818620805482166001908117909155938352818620805490911684179055845490931684525290205415611b7c57600080546001600160a01b03168082526001602052604090912054611b7a9190839061150d565b505b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314611c215760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6012546040517ff5df70180000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f5df7018906024015b602060405180830381865afa158015611cb1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110929190614ee1565b6012546040517f6386c1c70000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690636386c1c790602401600060405180830381865afa158015611d3f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d679190810190614f5e565b93509350935093509193509193565b6000546001600160a01b03163314611dbe5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6014805461ff001916610100851515908102919091179091556019805460ff1990811685151517909155601780549091168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a1505050565b6000546001600160a01b03163314611e755760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ec557600080fd5b505af193505050508015611ed7575060015b50565b6000546001600160a01b03163314611f225760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b0382163014801590611f495750600d546001600160a01b03838116911614155b611f5257600080fd5b6001600160a01b0382166000908152600860205260409020805460ff19168215801591909117909155611fea57601254604051636f823f4f60e11b81526001600160a01b038481166004830152600060248301529091169063df047e9e906044015b600060405180830381600087803b158015611fce57600080fd5b505af1158015611fe2573d6000803e3d6000fd5b505050505050565b6012546001600160a01b0383811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401611fb4565b5050565b6000546001600160a01b0316331461207f5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b600080546001600160a01b039081168252600660209081526040808420805460ff1990811690915584548416855260089092528084208054909216909155825473ffffffffffffffffffffffffffffffffffffffff198116845590519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b031633146121515760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b8015156000036121ce576001600160a01b03828116600081815260026020526040808220805460ff1916905560195490517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915263010000009004909116906380c581d190604401611fb4565b60035415612235576203f480600354426121e89190614e85565b116122355760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610e3e565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560195491517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483015263010000009004909116906380c581d190604401611fb4565b600080546001600160a01b031633146122f95760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b600c546123139030906001600160a01b0316600019613c1a565b50600190565b6000546001600160a01b031633146123615760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b601954610100900460ff16156123b95760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610e3e565b60195462010000900460ff166124115760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610e3e565b601954630100000090046001600160a01b031661245957601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b601954600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff421660448201526009606482015263010000009092041690636c115c3490608401600060405180830381600087803b1580156124e557600080fd5b505af19250505080156124f6575060015b50601260009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561254757600080fd5b505af1925050508015612558575060015b506019805461ff001916610100179055600d546001600160a01b03166000908152600160205260409020546127109061259290600a614e66565b61259c9190614e44565b601555600d546001600160a01b0316600090815260016020526040902054612710906125c9906019614e66565b6125d39190614e44565b601655565b6012546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b15801561263657600080fd5b505af115801561264a573d6000803e3d6000fd5b50505050565b600061265d338484613436565b9392505050565b6000546001600160a01b031633146126ac5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b600b805461ffff8381166401000000000265ffff0000000019868316620100000263ffffffff19909416928816929092179290921716179055806126f08385614ebb565b6126fa9190614ebb565b600b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16660100000000000061ffff93841602179055600a5460009161274b9162010000810482169116614ebb565b600b5461ffff9182169250660100000000000090041681101561264a5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610e3e565b6012546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed201790602401611c94565b6000546001600160a01b0316331461286a5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b61287581600a61500b565b61287f9083614e66565b6012546040517f155ad51800000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b03169063155ad51890604401600060405180830381600087803b1580156128e657600080fd5b505af11580156128fa573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b0316331461294b5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6103e861295a6009600a614e35565b6129699064e8d4a51000614e66565b6129739190614e44565b83856129816009600a614e35565b6129909064e8d4a51000614e66565b61299a9190614e66565b6129a49190614e44565b1015612a185760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610e3e565b6103e8612a276009600a614e35565b612a369064e8d4a51000614e66565b612a409190614e44565b8183612a4e6009600a614e35565b612a5d9064e8d4a51000614e66565b612a679190614e66565b612a719190614e44565b1015612ae55760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610e3e565b8284612af36009600a614e35565b612b029064e8d4a51000614e66565b612b0c9190614e66565b612b169190614e44565b600f558082612b276009600a614e35565b612b369064e8d4a51000614e66565b612b409190614e66565b612b4a9190614e44565b60105550505050565b6000546001600160a01b03163314612b9b5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b620b71b08110612baa57600080fd5b601355565b6000546001600160a01b03163314612bf75760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c609190615017565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd19190615017565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d589190615017565b90506001600160a01b038116612ef657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dca9190615017565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3b9190615017565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec49190615017565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612f1f565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155610f0b903090600019613c1a565b6000546001600160a01b03163314612fa05760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b600e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146130175760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b60195462010000900460ff16156130705760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610e3e565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611ed7573d6000803e3d6000fd5b6000546001600160a01b031633146130f25760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6019546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015263010000009092049091169063eec2744e90604401600060405180830381600087803b15801561316257600080fd5b505af1158015613176573d6000803e3d6000fd5b505050506120338282611eda565b601254604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa1580156131e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b39190614ee1565b6000546001600160a01b031633146132535760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b82846132616009600a614e35565b6132709064e8d4a51000614e66565b61327a9190614e66565b6132849190614e44565b60155580826132956009600a614e35565b6132a49064e8d4a51000614e66565b6132ae9190614e66565b6132b89190614e44565b6016819055601554111561264a5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b6019546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa15801561339f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110929190615034565b6000546001600160a01b0316331461340b5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b60006001600160a01b0384166134b45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610e3e565b6001600160a01b0383166135305760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b600082116135a65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610e3e565b6001600160a01b0384166000908152600260205260408120548190819060ff16156135d45760019250613602565b6001600160a01b03861660009081526002602052604090205460ff16156135fe5760019150613602565b5060015b61360c8787613d72565b1561388657601954610100900460ff166136685760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610e3e565b8215613706576001600160a01b03861660009081526007602052604090205460ff1661370657600f548511156137065760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610e3e565b81156137a4576001600160a01b03871660009081526007602052604090205460ff166137a4576010548511156137a45760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610e3e565b600c546001600160a01b038781169116148015906137c0575081155b15613886576001600160a01b03861660009081526007602052604090205460ff166138865760115485613808886001600160a01b031660009081526001602052604090205490565b6138129190615051565b11156138865760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610e3e565b811561391d5760145460ff1661391d57601454610100900460ff161561391d5730600090815260016020526040902054601554811061391b5760165460175460ff161561390557601854600d546001600160a01b0316600090815260016020526040902054612710916138f891614e66565b6139029190614e44565b90505b808210613910578091505b61391982613e43565b505b505b61392b878787868686613936565b979650505050505050565b60195460009062010000900460ff16613a38576139538787614313565b60195462010000900460ff1615801561397157506139718787613d72565b801561399657506001600160a01b03871660009081526005602052604090205460ff16155b80156139bb57506001600160a01b03861660009081526005602052604090205460ff16155b80156139c5575081155b15613a385760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b613a428787613d72565b15613af6576019546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015288811660248301526044820188905260009263010000009004169063ecd07a53906064016020604051808303816000875af1925050508015613adf575060408051601f3d908101601f19168201909252613adc91810190615034565b60015b613ae857600080fd5b905080613af457600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff1680613b3857506001600160a01b03871660009081526006602052604090205460ff165b15613b41575060005b6001600160a01b03881660009081526001602052604081208054889290613b69908490614e85565b909155508690508115613b8657613b8389888888886144c2565b90505b6001600160a01b03881660009081526001602052604081208054839290613bae908490615051565b90915550613bbe905089896145ad565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c0391815260200190565b60405180910390a350600198975050505050505050565b6001600160a01b038316613c955760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b6001600160a01b038216613d115760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b03848116911614801590613d9f57506000546001600160a01b03838116911614155b8015613db657506000546001600160a01b03163214155b8015613ddb57506001600160a01b03821660009081526009602052604090205460ff16155b8015613e0057506001600160a01b03831660009081526009602052604090205460ff16155b8015613e1757506001600160a01b03821661dead14155b8015613e2b57506001600160a01b03821615155b801561265d575050506001600160a01b031630141590565b6014805460ff1916600117905560408051608081018252600b5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052600003613ea45750614306565b306000908152600460209081526040808320600c546001600160a01b0316845290915290205460001914613efd57306000908152600460209081526040808320600c546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836020015161ffff1685613f1e9190614e66565b613f289190614e44565b613f329190614e44565b90506000613f408285614e85565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613f7a57613f7a614d0b565b6001600160a01b03928316602091820292909201810191909152600c54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613fec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140109190615017565b8160018151811061402357614023614d0b565b6001600160a01b039283166020918202929092010152600c546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790614082908590600090869030904290600401615069565b600060405180830381600087803b15801561409c57600080fd5b505af11580156140b0573d6000803e3d6000fd5b50479250600091508490506140c58684614e66565b6140cf9190614e44565b905084156141c057600c546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561415e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061418391906150a5565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6141ca8183614e85565b91508560200151866060018181516141e291906150d3565b61ffff9081169091526060880151885160009350839291821691614207911686614e66565b6142119190614e44565b9050600061421f8286614e85565b895190915061ffff161561429157601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561427d57600080fd5b505af19350505050801561428f575060015b505b604089015161ffff16156142fc57600e546040516001600160a01b03909116906188b89083906000818181858888f193505050503d80600081146142f1576040519150601f19603f3d011682016040523d82523d6000602084013e6142f6565b606091505b50909350505b5050505050505050505b506014805460ff19169055565b60195462010000900460ff16156143925760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b61439c8282613d72565b1580156143b65750600d546001600160a01b038281169116145b15612033576001600160a01b038083166000908152600960205260409020805460ff19166001179055601980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff16620100001790819055630100000090041661444b57601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b6012546001600160a01b031661447b576012805473ffffffffffffffffffffffffffffffffffffffff1916301790555b6014805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b60008084156144d85750600a5461ffff16614502565b83156144f15750600a5462010000900461ffff16614502565b50600a54640100000000900461ffff165b8060000361451357859150506145a4565b60006127106145228389614e66565b61452c9190614e44565b30600090815260016020526040812080549293508392909190614550908490615051565b909155505060405181815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361459f8188614e85565b925050505b95945050505050565b6001600160a01b03821660009081526008602052604090205460ff1661463e576012546001600160a01b0383811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b15801561462b57600080fd5b505af192505050801561463c575060015b505b6001600160a01b03811660009081526008602052604090205460ff166146cf576012546001600160a01b0382811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b1580156146bc57600080fd5b505af19250505080156146cd575060015b505b60195460ff1615612033576012546013546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb916147289160040190815260200190565b600060405180830381600087803b15801561474257600080fd5b505af1925050508015614753575060015b15612033575050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561479b5761479b61475c565b604052919050565b600067ffffffffffffffff8211156147bd576147bd61475c565b5060051b60200190565b6001600160a01b0381168114611ed757600080fd5b600082601f8301126147ed57600080fd5b813560206148026147fd836147a3565b614772565b82815260059290921b8401810191818101908684111561482157600080fd5b8286015b84811015614845578035614838816147c7565b8352918301918301614825565b509695505050505050565b8015158114611ed757600080fd5b6000806040838503121561487157600080fd5b823567ffffffffffffffff81111561488857600080fd5b614894858286016147dc565b92505060208301356148a581614850565b809150509250929050565b60005b838110156148cb5781810151838201526020016148b3565b8381111561264a5750506000910152565b600081518084526148f48160208601602086016148b0565b601f01601f19169290920160200192915050565b60208152600061265d60208301846148dc565b60006020828403121561492d57600080fd5b5035919050565b6000806040838503121561494757600080fd5b8235614952816147c7565b946020939093013593505050565b60006020828403121561497257600080fd5b813561265d816147c7565b6000806040838503121561499057600080fd5b823561499b816147c7565b915060208301356148a5816147c7565b6000806000606084860312156149c057600080fd5b83356149cb816147c7565b925060208401356149db816147c7565b929592945050506040919091013590565b600080604083850312156149ff57600080fd5b50508035926020909101359150565b60008060408385031215614a2157600080fd5b823567ffffffffffffffff80821115614a3957600080fd5b614a45868387016147dc565b9350602091508185013581811115614a5c57600080fd5b85019050601f81018613614a6f57600080fd5b8035614a7d6147fd826147a3565b81815260059190911b82018301908381019088831115614a9c57600080fd5b928401925b82841015614aba57833582529284019290840190614aa1565b80955050505050509250929050565b60008060008060808587031215614adf57600080fd5b8435614aea81614850565b93506020850135614afa81614850565b92506040850135614b0a81614850565b91506060850135614b1a81614850565b939692955090935050565b803561ffff81168114614b3757600080fd5b919050565b600080600060608486031215614b5157600080fd5b614b5a84614b25565b9250614b6860208501614b25565b9150614b7660408501614b25565b90509250925092565b60008060408385031215614b9257600080fd5b8235614b9d816147c7565b915060208301356148a581614850565b608081526000614bc060808301876148dc565b8281036020840152614bd281876148dc565b90508281036040840152614be681866148dc565b9050828103606084015261392b81856148dc565b600080600060608486031215614c0f57600080fd5b8335614c1a81614850565b92506020840135614c2a81614850565b91506040840135614c3a81614850565b809150509250925092565b600080600060608486031215614c5a57600080fd5b505081359360208301359350604090920135919050565b60008060008060808587031215614c8757600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b83811015614cdc5781516001600160a01b031687529582019590820190600101614cb7565b509495945050505050565b604081526000614cfa6040830185614ca3565b905082151560208301529392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198203614d4a57614d4a614d21565b5060010190565b600181815b80851115614d8c578160001904821115614d7257614d72614d21565b80851615614d7f57918102915b93841c9390800290614d56565b509250929050565b600082614da357506001611092565b81614db057506000611092565b8160018114614dc65760028114614dd057614dec565b6001915050611092565b60ff841115614de157614de1614d21565b50506001821b611092565b5060208310610133831016604e8410600b8410161715614e0f575081810a611092565b614e198383614d51565b8060001904821115614e2d57614e2d614d21565b029392505050565b600061265d60ff841683614d94565b600082614e6157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614e8057614e80614d21565b500290565b600082821015614e9757614e97614d21565b500390565b600060ff821660ff8103614eb257614eb2614d21565b60010192915050565b600061ffff808316818516808303821115614ed857614ed8614d21565b01949350505050565b600060208284031215614ef357600080fd5b5051919050565b600082601f830112614f0b57600080fd5b815167ffffffffffffffff811115614f2557614f2561475c565b614f386020601f19601f84011601614772565b818152846020838601011115614f4d57600080fd5b6112738260208301602087016148b0565b60008060008060808587031215614f7457600080fd5b845167ffffffffffffffff80821115614f8c57600080fd5b614f9888838901614efa565b95506020870151915080821115614fae57600080fd5b614fba88838901614efa565b94506040870151915080821115614fd057600080fd5b614fdc88838901614efa565b93506060870151915080821115614ff257600080fd5b50614fff87828801614efa565b91505092959194509250565b600061265d8383614d94565b60006020828403121561502957600080fd5b815161265d816147c7565b60006020828403121561504657600080fd5b815161265d81614850565b6000821982111561506457615064614d21565b500190565b85815284602082015260a06040820152600061508860a0830186614ca3565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156150ba57600080fd5b8351925060208401519150604084015190509250925092565b600061ffff838116908316818110156150ee576150ee614d21565b03939250505056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212200547f5059cfd9303319f5c6fe69f07cb4a1eefe5b10614756a0be1f343bcb50564736f6c634300080e0033

Deployed Bytecode

0x6080604052600436106104695760003560e01c80636386c1c711610243578063b421626c11610143578063ee5d9c2d116100bb578063f94aa1b41161008a578063fdb78c0e1161006f578063fdb78c0e14610d9b578063fe575a8714610dba578063feadde9c14610dda57600080fd5b8063f94aa1b414610d5b578063fb78680d14610d7b57600080fd5b8063ee5d9c2d14610cf7578063eec2744e14610d0c578063efe7dc9014610d2c578063f7c245ea14610d4657600080fd5b8063cf84770611610112578063dd62ed3e116100f7578063dd62ed3e14610c71578063eafb5a3c14610cb7578063eb50e70e14610cd757600080fd5b8063cf84770614610be6578063d0b1449d14610c5157600080fd5b8063b421626c14610b53578063b7df8b3614610b73578063c0488b5614610b8d578063c705c56914610bad57600080fd5b80638a63bd9b116101d6578063a9059cbb116101a5578063ab5cb5a61161018a578063ab5cb5a614610b33578063b1b08f711461071c578063b3d514fb1461071c57600080fd5b8063a9059cbb14610af3578063aa22b17214610b1357600080fd5b80638a63bd9b14610a6e5780638a8c523c14610a8357806395d89b4114610a985780639dc6761514610ade57600080fd5b806370a082311161021257806370a08231146109e5578063715018a614610a1b57806380c581d114610a30578063893d20e814610a5057600080fd5b80636386c1c7146109605780636505079a146109905780636ab86dc1146109b05780636b639a25146109c557600080fd5b80632b28fc7a116103695780634ada218b116102e15780634fbee193116102b0578063590ffdce11610295578063590ffdce146108e75780635cce86cd146109075780636372c68f1461094057600080fd5b80634fbee1931461088e57806350a8e016146108c757600080fd5b80634ada218b1461081a5780634be6ca13146108395780634e718e481461084e5780634fb2e45d1461086e57600080fd5b806333251a0b1161033857806340f83bf71161031d57806340f83bf7146107cf578063452ed4f1146107e457806346ea7ac81461080457600080fd5b806333251a0b1461078f57806336fddb04146107af57600080fd5b80632b28fc7a1461071c5780632e8fa82114610732578063313ce5671461074857806332cde6641461076f57600080fd5b80630dcbcf1c116103fc57806323b872dd116103cb5780632610eaca116103b05780632610eaca146106c657806328577751146106e657806329dd8798146106fc57600080fd5b806323b872dd1461068657806326003957146106a657600080fd5b80630dcbcf1c146106035780630fa604e41461063c57806318160ddd14610651578063218950bc1461066657600080fd5b806306fdde031161043857806306fdde03146105445780630758d9241461059357806309231602146105b3578063095ea7b3146105d357600080fd5b806303fd2a45146104755780630445b667146104a857806305bbedb6146104cc578063069d955f146104ee57600080fd5b3661047057005b600080fd5b34801561048157600080fd5b5061048b61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104b457600080fd5b506104be60155481565b60405190815260200161049f565b3480156104d857600080fd5b506104ec6104e736600461485e565b610dfa565b005b3480156104fa57600080fd5b50600a5461051f9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161049f565b34801561055057600080fd5b5060408051808201909152600a81527f416e696d6556657273650000000000000000000000000000000000000000000060208201525b60405161049f9190614908565b34801561059f57600080fd5b50600c5461048b906001600160a01b031681565b3480156105bf57600080fd5b506104ec6105ce36600461491b565b610f10565b3480156105df57600080fd5b506105f36105ee366004614934565b61102b565b604051901515815260200161049f565b34801561060f57600080fd5b506105f361061e366004614960565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561064857600080fd5b506104be611098565b34801561065d57600080fd5b506104be6110b8565b34801561067257600080fd5b506104ec61068136600461497d565b6110fc565b34801561069257600080fd5b506105f36106a13660046149ab565b611203565b3480156106b257600080fd5b506104ec6106c13660046149ec565b61127b565b3480156106d257600080fd5b506104ec6106e1366004614a0e565b6113c8565b3480156106f257600080fd5b506104be60185481565b34801561070857600080fd5b506104ec610717366004614ac9565b61152a565b34801561072857600080fd5b506104be6107d081565b34801561073e57600080fd5b506104be60165481565b34801561075457600080fd5b5061075d61160e565b60405160ff909116815260200161049f565b34801561077b57600080fd5b506104ec61078a366004614b3c565b61163d565b34801561079b57600080fd5b506104ec6107aa366004614960565b61179d565b3480156107bb57600080fd5b506104ec6107ca366004614b7f565b611838565b3480156107db57600080fd5b506104be6118ab565b3480156107f057600080fd5b50600d5461048b906001600160a01b031681565b34801561081057600080fd5b506104be610bb881565b34801561082657600080fd5b506019546105f390610100900460ff1681565b34801561084557600080fd5b506104be6118c6565b34801561085a57600080fd5b506104ec61086936600461491b565b6118e1565b34801561087a57600080fd5b506104ec610889366004614960565b61197f565b34801561089a57600080fd5b506105f36108a9366004614960565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156108d357600080fd5b506019546105f39062010000900460ff1681565b3480156108f357600080fd5b506104ec610902366004614b7f565b611bd9565b34801561091357600080fd5b506105f3610922366004614960565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561094c57600080fd5b506104be61095b366004614960565b611c4c565b34801561096c57600080fd5b5061098061097b366004614960565b611cd5565b60405161049f9493929190614bad565b34801561099c57600080fd5b506104ec6109ab366004614bfa565b611d76565b3480156109bc57600080fd5b506104ec611e2d565b3480156109d157600080fd5b506104ec6109e0366004614b7f565b611eda565b3480156109f157600080fd5b506104be610a00366004614960565b6001600160a01b031660009081526001602052604090205490565b348015610a2757600080fd5b506104ec612037565b348015610a3c57600080fd5b506104ec610a4b366004614b7f565b612109565b348015610a5c57600080fd5b506000546001600160a01b031661048b565b348015610a7a57600080fd5b506105f36122b0565b348015610a8f57600080fd5b506104ec612319565b348015610aa457600080fd5b5060408051808201909152600581527f416e696d650000000000000000000000000000000000000000000000000000006020820152610586565b348015610aea57600080fd5b506104ec6125d8565b348015610aff57600080fd5b506105f3610b0e366004614934565b612650565b348015610b1f57600080fd5b506104ec610b2e366004614b3c565b612664565b348015610b3f57600080fd5b506104be610b4e366004614960565b6127d6565b348015610b5f57600080fd5b506104ec610b6e366004614c45565b612822565b348015610b7f57600080fd5b506017546105f39060ff1681565b348015610b9957600080fd5b506104ec610ba8366004614c71565b612903565b348015610bb957600080fd5b506105f3610bc8366004614960565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610bf257600080fd5b50600b54610c239061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff9586168152938516602085015291841691830191909152909116606082015260800161049f565b348015610c5d57600080fd5b506104ec610c6c36600461491b565b612b53565b348015610c7d57600080fd5b506104be610c8c36600461497d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610cc357600080fd5b506104ec610cd2366004614960565b612baf565b348015610ce357600080fd5b506104ec610cf2366004614960565b612f58565b348015610d0357600080fd5b506104ec612fcf565b348015610d1857600080fd5b506104ec610d27366004614b7f565b6130aa565b348015610d3857600080fd5b506019546105f39060ff1681565b348015610d5257600080fd5b506104be613184565b348015610d6757600080fd5b50600e5461048b906001600160a01b031681565b348015610d8757600080fd5b506104ec610d96366004614c71565b61320b565b348015610da757600080fd5b506014546105f390610100900460ff1681565b348015610dc657600080fd5b506105f3610dd5366004614960565b613334565b348015610de657600080fd5b506104ec610df5366004614b7f565b6133c3565b6000546001600160a01b03163314610e475760405162461bcd60e51b815260206004820181905260248201526000805160206150f783398151915260448201526064015b60405180910390fd5b6019546040517f05bbedb600000000000000000000000000000000000000000000000000000000815263010000009091046001600160a01b0316906305bbedb690610e989085908590600401614ce7565b600060405180830381600087803b158015610eb257600080fd5b505af1158015610ec6573d6000803e3d6000fd5b5050505060005b8251811015610f0b57610ef9838281518110610eeb57610eeb614d0b565b602002602001015183611eda565b80610f0381614d37565b915050610ecd565b505050565b6000546001600160a01b03163314610f585760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b61012c811015610faa5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610e3e565b6019546040517f092316020000000000000000000000000000000000000000000000000000000081526004810183905263010000009091046001600160a01b0316906309231602906024015b600060405180830381600087803b15801561101057600080fd5b505af1158015611024573d6000803e3d6000fd5b5050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906110869086815260200190565b60405180910390a35060015b92915050565b60006110a66009600a614e35565b6011546110b39190614e44565b905090565b60006110c66009600a614e35565b6110d59064e8d4a51000614e66565b6000036110e157600080fd5b6110ed6009600a614e35565b6110b39064e8d4a51000614e66565b6000546001600160a01b031633146111445760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b601954610100900460ff161561115957600080fd5b6001600160a01b038116301480159061117b57506001600160a01b0382163014155b80156111995750816001600160a01b0316816001600160a01b031614155b6111a257600080fd5b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000009390921692909202179055565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611268576001600160a01b038416600090815260046020908152604080832033845290915281208054849290611262908490614e85565b90915550505b611273848484613436565b949350505050565b6000546001600160a01b031633146112c35760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6103e86112d26009600a614e35565b6112e19064e8d4a51000614e66565b6112eb9190614e44565b81836112f96009600a614e35565b6113089064e8d4a51000614e66565b6113129190614e66565b61131c9190614e44565b10156113905760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610e3e565b808261139e6009600a614e35565b6113ad9064e8d4a51000614e66565b6113b79190614e66565b6113c19190614e44565b6011555050565b6000546001600160a01b031633146114105760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b80518251146114615760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610e3e565b60005b82518160ff161015610f0b57818160ff168151811061148557611485614d0b565b60200260200101516114ac336001600160a01b031660009081526001602052604090205490565b10156114b757600080fd5b61151733848360ff16815181106114d0576114d0614d0b565b60200260200101516009600a6114e69190614e35565b858560ff16815181106114fb576114fb614d0b565b602002602001015161150d9190614e66565b6000806001613936565b508061152281614e9c565b915050611464565b6000546001600160a01b031633146115725760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6019546040517f0109da69000000000000000000000000000000000000000000000000000000008152851515600482015284151560248201528315156044820152821515606482015263010000009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156115f057600080fd5b505af1158015611604573d6000803e3d6000fd5b5050505050505050565b600061161c6009600a614e35565b61162b9064e8d4a51000614e66565b60000361163757600080fd5b50600990565b6000546001600160a01b031633146116855760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6107d08361ffff16111580156116a157506107d08261ffff1611155b80156116b357506107d08161ffff1611155b6116ff5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610e3e565b610bb861170c8385614ebb565b61ffff16111561175e5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610e3e565b600a805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6000546001600160a01b031633146117e55760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6019546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b90602401610ff6565b6000546001600160a01b031633146118805760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60006118b96009600a614e35565b6010546110b39190614e44565b60006118d46009600a614e35565b600f546110b39190614e44565b6000546001600160a01b031633146119295760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b60c881111561197a5760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f74207365742061626f76652032252e0000000000000000000000006044820152606401610e3e565b601855565b6000546001600160a01b031633146119c75760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b038116611a435760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e3e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b03821601611ae15760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e3e565b600080546001600160a01b039081168252600660208181526040808520805460ff1990811690915585548516865260088084528287208054831690558786168752938352818620805482166001908117909155938352818620805490911684179055845490931684525290205415611b7c57600080546001600160a01b03168082526001602052604090912054611b7a9190839061150d565b505b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314611c215760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6012546040517ff5df70180000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f5df7018906024015b602060405180830381865afa158015611cb1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110929190614ee1565b6012546040517f6386c1c70000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690636386c1c790602401600060405180830381865afa158015611d3f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d679190810190614f5e565b93509350935093509193509193565b6000546001600160a01b03163314611dbe5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6014805461ff001916610100851515908102919091179091556019805460ff1990811685151517909155601780549091168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a1505050565b6000546001600160a01b03163314611e755760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ec557600080fd5b505af193505050508015611ed7575060015b50565b6000546001600160a01b03163314611f225760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b0382163014801590611f495750600d546001600160a01b03838116911614155b611f5257600080fd5b6001600160a01b0382166000908152600860205260409020805460ff19168215801591909117909155611fea57601254604051636f823f4f60e11b81526001600160a01b038481166004830152600060248301529091169063df047e9e906044015b600060405180830381600087803b158015611fce57600080fd5b505af1158015611fe2573d6000803e3d6000fd5b505050505050565b6012546001600160a01b0383811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401611fb4565b5050565b6000546001600160a01b0316331461207f5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b600080546001600160a01b039081168252600660209081526040808420805460ff1990811690915584548416855260089092528084208054909216909155825473ffffffffffffffffffffffffffffffffffffffff198116845590519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b031633146121515760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b8015156000036121ce576001600160a01b03828116600081815260026020526040808220805460ff1916905560195490517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915263010000009004909116906380c581d190604401611fb4565b60035415612235576203f480600354426121e89190614e85565b116122355760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610e3e565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560195491517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483015263010000009004909116906380c581d190604401611fb4565b600080546001600160a01b031633146122f95760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b600c546123139030906001600160a01b0316600019613c1a565b50600190565b6000546001600160a01b031633146123615760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b601954610100900460ff16156123b95760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610e3e565b60195462010000900460ff166124115760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610e3e565b601954630100000090046001600160a01b031661245957601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b601954600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff421660448201526009606482015263010000009092041690636c115c3490608401600060405180830381600087803b1580156124e557600080fd5b505af19250505080156124f6575060015b50601260009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561254757600080fd5b505af1925050508015612558575060015b506019805461ff001916610100179055600d546001600160a01b03166000908152600160205260409020546127109061259290600a614e66565b61259c9190614e44565b601555600d546001600160a01b0316600090815260016020526040902054612710906125c9906019614e66565b6125d39190614e44565b601655565b6012546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b15801561263657600080fd5b505af115801561264a573d6000803e3d6000fd5b50505050565b600061265d338484613436565b9392505050565b6000546001600160a01b031633146126ac5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b600b805461ffff8381166401000000000265ffff0000000019868316620100000263ffffffff19909416928816929092179290921716179055806126f08385614ebb565b6126fa9190614ebb565b600b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16660100000000000061ffff93841602179055600a5460009161274b9162010000810482169116614ebb565b600b5461ffff9182169250660100000000000090041681101561264a5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610e3e565b6012546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed201790602401611c94565b6000546001600160a01b0316331461286a5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b61287581600a61500b565b61287f9083614e66565b6012546040517f155ad51800000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b03169063155ad51890604401600060405180830381600087803b1580156128e657600080fd5b505af11580156128fa573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b0316331461294b5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6103e861295a6009600a614e35565b6129699064e8d4a51000614e66565b6129739190614e44565b83856129816009600a614e35565b6129909064e8d4a51000614e66565b61299a9190614e66565b6129a49190614e44565b1015612a185760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610e3e565b6103e8612a276009600a614e35565b612a369064e8d4a51000614e66565b612a409190614e44565b8183612a4e6009600a614e35565b612a5d9064e8d4a51000614e66565b612a679190614e66565b612a719190614e44565b1015612ae55760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610e3e565b8284612af36009600a614e35565b612b029064e8d4a51000614e66565b612b0c9190614e66565b612b169190614e44565b600f558082612b276009600a614e35565b612b369064e8d4a51000614e66565b612b409190614e66565b612b4a9190614e44565b60105550505050565b6000546001600160a01b03163314612b9b5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b620b71b08110612baa57600080fd5b601355565b6000546001600160a01b03163314612bf75760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c609190615017565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd19190615017565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d589190615017565b90506001600160a01b038116612ef657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dca9190615017565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3b9190615017565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec49190615017565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612f1f565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155610f0b903090600019613c1a565b6000546001600160a01b03163314612fa05760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b600e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146130175760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b60195462010000900460ff16156130705760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610e3e565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611ed7573d6000803e3d6000fd5b6000546001600160a01b031633146130f25760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6019546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015263010000009092049091169063eec2744e90604401600060405180830381600087803b15801561316257600080fd5b505af1158015613176573d6000803e3d6000fd5b505050506120338282611eda565b601254604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa1580156131e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b39190614ee1565b6000546001600160a01b031633146132535760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b82846132616009600a614e35565b6132709064e8d4a51000614e66565b61327a9190614e66565b6132849190614e44565b60155580826132956009600a614e35565b6132a49064e8d4a51000614e66565b6132ae9190614e66565b6132b89190614e44565b6016819055601554111561264a5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b6019546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa15801561339f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110929190615034565b6000546001600160a01b0316331461340b5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b60006001600160a01b0384166134b45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610e3e565b6001600160a01b0383166135305760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b600082116135a65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610e3e565b6001600160a01b0384166000908152600260205260408120548190819060ff16156135d45760019250613602565b6001600160a01b03861660009081526002602052604090205460ff16156135fe5760019150613602565b5060015b61360c8787613d72565b1561388657601954610100900460ff166136685760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610e3e565b8215613706576001600160a01b03861660009081526007602052604090205460ff1661370657600f548511156137065760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610e3e565b81156137a4576001600160a01b03871660009081526007602052604090205460ff166137a4576010548511156137a45760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610e3e565b600c546001600160a01b038781169116148015906137c0575081155b15613886576001600160a01b03861660009081526007602052604090205460ff166138865760115485613808886001600160a01b031660009081526001602052604090205490565b6138129190615051565b11156138865760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610e3e565b811561391d5760145460ff1661391d57601454610100900460ff161561391d5730600090815260016020526040902054601554811061391b5760165460175460ff161561390557601854600d546001600160a01b0316600090815260016020526040902054612710916138f891614e66565b6139029190614e44565b90505b808210613910578091505b61391982613e43565b505b505b61392b878787868686613936565b979650505050505050565b60195460009062010000900460ff16613a38576139538787614313565b60195462010000900460ff1615801561397157506139718787613d72565b801561399657506001600160a01b03871660009081526005602052604090205460ff16155b80156139bb57506001600160a01b03861660009081526005602052604090205460ff16155b80156139c5575081155b15613a385760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b613a428787613d72565b15613af6576019546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015288811660248301526044820188905260009263010000009004169063ecd07a53906064016020604051808303816000875af1925050508015613adf575060408051601f3d908101601f19168201909252613adc91810190615034565b60015b613ae857600080fd5b905080613af457600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff1680613b3857506001600160a01b03871660009081526006602052604090205460ff165b15613b41575060005b6001600160a01b03881660009081526001602052604081208054889290613b69908490614e85565b909155508690508115613b8657613b8389888888886144c2565b90505b6001600160a01b03881660009081526001602052604081208054839290613bae908490615051565b90915550613bbe905089896145ad565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c0391815260200190565b60405180910390a350600198975050505050505050565b6001600160a01b038316613c955760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b6001600160a01b038216613d115760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b03848116911614801590613d9f57506000546001600160a01b03838116911614155b8015613db657506000546001600160a01b03163214155b8015613ddb57506001600160a01b03821660009081526009602052604090205460ff16155b8015613e0057506001600160a01b03831660009081526009602052604090205460ff16155b8015613e1757506001600160a01b03821661dead14155b8015613e2b57506001600160a01b03821615155b801561265d575050506001600160a01b031630141590565b6014805460ff1916600117905560408051608081018252600b5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052600003613ea45750614306565b306000908152600460209081526040808320600c546001600160a01b0316845290915290205460001914613efd57306000908152600460209081526040808320600c546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836020015161ffff1685613f1e9190614e66565b613f289190614e44565b613f329190614e44565b90506000613f408285614e85565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613f7a57613f7a614d0b565b6001600160a01b03928316602091820292909201810191909152600c54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613fec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140109190615017565b8160018151811061402357614023614d0b565b6001600160a01b039283166020918202929092010152600c546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790614082908590600090869030904290600401615069565b600060405180830381600087803b15801561409c57600080fd5b505af11580156140b0573d6000803e3d6000fd5b50479250600091508490506140c58684614e66565b6140cf9190614e44565b905084156141c057600c546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561415e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061418391906150a5565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6141ca8183614e85565b91508560200151866060018181516141e291906150d3565b61ffff9081169091526060880151885160009350839291821691614207911686614e66565b6142119190614e44565b9050600061421f8286614e85565b895190915061ffff161561429157601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561427d57600080fd5b505af19350505050801561428f575060015b505b604089015161ffff16156142fc57600e546040516001600160a01b03909116906188b89083906000818181858888f193505050503d80600081146142f1576040519150601f19603f3d011682016040523d82523d6000602084013e6142f6565b606091505b50909350505b5050505050505050505b506014805460ff19169055565b60195462010000900460ff16156143925760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b61439c8282613d72565b1580156143b65750600d546001600160a01b038281169116145b15612033576001600160a01b038083166000908152600960205260409020805460ff19166001179055601980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff16620100001790819055630100000090041661444b57601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b6012546001600160a01b031661447b576012805473ffffffffffffffffffffffffffffffffffffffff1916301790555b6014805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b60008084156144d85750600a5461ffff16614502565b83156144f15750600a5462010000900461ffff16614502565b50600a54640100000000900461ffff165b8060000361451357859150506145a4565b60006127106145228389614e66565b61452c9190614e44565b30600090815260016020526040812080549293508392909190614550908490615051565b909155505060405181815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361459f8188614e85565b925050505b95945050505050565b6001600160a01b03821660009081526008602052604090205460ff1661463e576012546001600160a01b0383811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b15801561462b57600080fd5b505af192505050801561463c575060015b505b6001600160a01b03811660009081526008602052604090205460ff166146cf576012546001600160a01b0382811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b1580156146bc57600080fd5b505af19250505080156146cd575060015b505b60195460ff1615612033576012546013546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb916147289160040190815260200190565b600060405180830381600087803b15801561474257600080fd5b505af1925050508015614753575060015b15612033575050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561479b5761479b61475c565b604052919050565b600067ffffffffffffffff8211156147bd576147bd61475c565b5060051b60200190565b6001600160a01b0381168114611ed757600080fd5b600082601f8301126147ed57600080fd5b813560206148026147fd836147a3565b614772565b82815260059290921b8401810191818101908684111561482157600080fd5b8286015b84811015614845578035614838816147c7565b8352918301918301614825565b509695505050505050565b8015158114611ed757600080fd5b6000806040838503121561487157600080fd5b823567ffffffffffffffff81111561488857600080fd5b614894858286016147dc565b92505060208301356148a581614850565b809150509250929050565b60005b838110156148cb5781810151838201526020016148b3565b8381111561264a5750506000910152565b600081518084526148f48160208601602086016148b0565b601f01601f19169290920160200192915050565b60208152600061265d60208301846148dc565b60006020828403121561492d57600080fd5b5035919050565b6000806040838503121561494757600080fd5b8235614952816147c7565b946020939093013593505050565b60006020828403121561497257600080fd5b813561265d816147c7565b6000806040838503121561499057600080fd5b823561499b816147c7565b915060208301356148a5816147c7565b6000806000606084860312156149c057600080fd5b83356149cb816147c7565b925060208401356149db816147c7565b929592945050506040919091013590565b600080604083850312156149ff57600080fd5b50508035926020909101359150565b60008060408385031215614a2157600080fd5b823567ffffffffffffffff80821115614a3957600080fd5b614a45868387016147dc565b9350602091508185013581811115614a5c57600080fd5b85019050601f81018613614a6f57600080fd5b8035614a7d6147fd826147a3565b81815260059190911b82018301908381019088831115614a9c57600080fd5b928401925b82841015614aba57833582529284019290840190614aa1565b80955050505050509250929050565b60008060008060808587031215614adf57600080fd5b8435614aea81614850565b93506020850135614afa81614850565b92506040850135614b0a81614850565b91506060850135614b1a81614850565b939692955090935050565b803561ffff81168114614b3757600080fd5b919050565b600080600060608486031215614b5157600080fd5b614b5a84614b25565b9250614b6860208501614b25565b9150614b7660408501614b25565b90509250925092565b60008060408385031215614b9257600080fd5b8235614b9d816147c7565b915060208301356148a581614850565b608081526000614bc060808301876148dc565b8281036020840152614bd281876148dc565b90508281036040840152614be681866148dc565b9050828103606084015261392b81856148dc565b600080600060608486031215614c0f57600080fd5b8335614c1a81614850565b92506020840135614c2a81614850565b91506040840135614c3a81614850565b809150509250925092565b600080600060608486031215614c5a57600080fd5b505081359360208301359350604090920135919050565b60008060008060808587031215614c8757600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b83811015614cdc5781516001600160a01b031687529582019590820190600101614cb7565b509495945050505050565b604081526000614cfa6040830185614ca3565b905082151560208301529392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198203614d4a57614d4a614d21565b5060010190565b600181815b80851115614d8c578160001904821115614d7257614d72614d21565b80851615614d7f57918102915b93841c9390800290614d56565b509250929050565b600082614da357506001611092565b81614db057506000611092565b8160018114614dc65760028114614dd057614dec565b6001915050611092565b60ff841115614de157614de1614d21565b50506001821b611092565b5060208310610133831016604e8410600b8410161715614e0f575081810a611092565b614e198383614d51565b8060001904821115614e2d57614e2d614d21565b029392505050565b600061265d60ff841683614d94565b600082614e6157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614e8057614e80614d21565b500290565b600082821015614e9757614e97614d21565b500390565b600060ff821660ff8103614eb257614eb2614d21565b60010192915050565b600061ffff808316818516808303821115614ed857614ed8614d21565b01949350505050565b600060208284031215614ef357600080fd5b5051919050565b600082601f830112614f0b57600080fd5b815167ffffffffffffffff811115614f2557614f2561475c565b614f386020601f19601f84011601614772565b818152846020838601011115614f4d57600080fd5b6112738260208301602087016148b0565b60008060008060808587031215614f7457600080fd5b845167ffffffffffffffff80821115614f8c57600080fd5b614f9888838901614efa565b95506020870151915080821115614fae57600080fd5b614fba88838901614efa565b94506040870151915080821115614fd057600080fd5b614fdc88838901614efa565b93506060870151915080821115614ff257600080fd5b50614fff87828801614efa565b91505092959194509250565b600061265d8383614d94565b60006020828403121561502957600080fd5b815161265d816147c7565b60006020828403121561504657600080fd5b815161265d81614850565b6000821982111561506457615064614d21565b500190565b85815284602082015260a06040820152600061508860a0830186614ca3565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156150ba57600080fd5b8351925060208401519150604084015190509250925092565b600061ffff838116908316818110156150ee576150ee614d21565b03939250505056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212200547f5059cfd9303319f5c6fe69f07cb4a1eefe5b10614756a0be1f343bcb50564736f6c634300080e0033

Deployed Bytecode Sourcemap

5098:25781:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6858:73;;;;;;;;;;;;6889:42;6858:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;6858:73:0;;;;;;;;7543:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;7543:28:0;245:177:1;16875:294:0;;;;;;;;;;-1:-1:-1;16875:294:0;;;;;:::i;:::-;;:::i;:::-;;6256:114;;;;;;;;;;-1:-1:-1;6256:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;2855:6:1;2888:15;;;2870:34;;2940:15;;;2935:2;2920:18;;2913:43;2992:15;;2972:18;;;2965:43;;;;2833:2;2818:18;6256:114:0;2649:365:1;12239:80:0;;;;;;;;;;-1:-1:-1;12311:5:0;;;;;;;;;;;;;;;;;12239:80;;;;;;;:::i;6795:26::-;;;;;;;;;;-1:-1:-1;6795:26:0;;;;-1:-1:-1;;;;;6795:26:0;;;17629:150;;;;;;;;;;-1:-1:-1;17629:150:0;;;;;:::i;:::-;;:::i;12660:216::-;;;;;;;;;;-1:-1:-1;12660:216:0;;;;;:::i;:::-;;:::i;:::-;;;4747:14:1;;4740:22;4722:41;;4710:2;4695:18;12660:216:0;4582:187:1;15723:140:0;;;;;;;;;;-1:-1:-1;15723:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;15821:34:0;15797:4;15821:34;;;:25;:34;;;;;;;;;15723:140;20507:112;;;;;;;;;;;;;:::i;11910:115::-;;;;;;;;;;;;;:::i;14960:335::-;;;;;;;;;;-1:-1:-1;14960:335:0;;;;;:::i;:::-;;:::i;13574:306::-;;;;;;;;;;-1:-1:-1;13574:306:0;;;;;:::i;:::-;;:::i;19990:267::-;;;;;;;;;;-1:-1:-1;19990:267:0;;;;;:::i;:::-;;:::i;29322:411::-;;;;;;;;;;-1:-1:-1;29322:411:0;;;;;:::i;:::-;;:::i;7651:28::-;;;;;;;;;;;;;;;;17426:195;;;;;;;;;;-1:-1:-1;17426:195:0;;;;;:::i;:::-;;:::i;6539:42::-;;;;;;;;;;;;6577:4;6539:42;;7578:25;;;;;;;;;;;;;;;;12031:112;;;;;;;;;;;;;:::i;:::-;;;8100:4:1;8088:17;;;8070:36;;8058:2;8043:18;12031:112:0;7928:184:1;18387:488:0;;;;;;;;;;-1:-1:-1;18387:488:0;;;;;:::i;:::-;;:::i;17310:108::-;;;;;;;;;;-1:-1:-1;17310:108:0;;;;;:::i;:::-;;:::i;15871:140::-;;;;;;;;;;-1:-1:-1;15871:140:0;;;;;:::i;:::-;;:::i;20385:114::-;;;;;;;;;;;;;:::i;6828:21::-;;;;;;;;;;-1:-1:-1;6828:21:0;;;;-1:-1:-1;;;;;6828:21:0;;;6692:46;;;;;;;;;;;;6734:4;6692:46;;7731:34;;;;;;;;;;-1:-1:-1;7731:34:0;;;;;;;;;;;20265:112;;;;;;;;;;;;;:::i;21008:215::-;;;;;;;;;;-1:-1:-1;21008:215:0;;;;;:::i;:::-;;:::i;10474:759::-;;;;;;;;;;-1:-1:-1;10474:759:0;;;;;:::i;:::-;;:::i;15303:127::-;;;;;;;;;;-1:-1:-1;15303:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;15394:28:0;15370:4;15394:28;;;:19;:28;;;;;;;;;15303:127;7772:36;;;;;;;;;;-1:-1:-1;7772:36:0;;;;;;;;;;;16376:134;;;;;;;;;;-1:-1:-1;16376:134:0;;;;;:::i;:::-;;:::i;15583:132::-;;;;;;;;;;-1:-1:-1;15583:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;15677:30:0;15653:4;15677:30;;;:21;:30;;;;;;;;;15583:132;30592:140;;;;;;;;;;-1:-1:-1;30592:140:0;;;;;:::i;:::-;;:::i;30413:171::-;;;;;;;;;;-1:-1:-1;30413:171:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;21231:340::-;;;;;;;;;;-1:-1:-1;21231:340:0;;;;;:::i;:::-;;:::i;29741:124::-;;;;;;;;;;;;;:::i;16019:349::-;;;;;;;;;;-1:-1:-1;16019:349:0;;;;;:::i;:::-;;:::i;12410:103::-;;;;;;;;;;-1:-1:-1;12410:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;12494:16:0;12476:7;12494:16;;;:7;:16;;;;;;;12410:103;11241:277;;;;;;;;;;;;;:::i;14436:516::-;;;;;;;;;;-1:-1:-1;14436:516:0;;;;;:::i;:::-;;:::i;12325:79::-;;;;;;;;;;-1:-1:-1;12377:7:0;12395:6;-1:-1:-1;;;;;12395:6:0;12325:79;;13233:173;;;;;;;;;;;;;:::i;17787:592::-;;;;;;;;;;;;;:::i;12149:84::-;;;;;;;;;;-1:-1:-1;12223:7:0;;;;;;;;;;;;;;;;;12149:84;;30179:100;;;;;;;;;;;;;:::i;13414:152::-;;;;;;;;;;-1:-1:-1;13414:152:0;;;;;:::i;:::-;;:::i;18883:420::-;;;;;;;;;;-1:-1:-1;18883:420:0;;;;;:::i;:::-;;:::i;30740:136::-;;;;;;;;;;-1:-1:-1;30740:136:0;;;;;:::i;:::-;;:::i;21579:275::-;;;;;;;;;;-1:-1:-1;21579:275:0;;;;;:::i;:::-;;:::i;7610:34::-;;;;;;;;;;-1:-1:-1;7610:34:0;;;;;;;;19446:536;;;;;;;;;;-1:-1:-1;19446:536:0;;;;;:::i;:::-;;:::i;15438:137::-;;;;;;;;;;-1:-1:-1;15438:137:0;;;;;:::i;:::-;-1:-1:-1;;;;;15534:33:0;15510:4;15534:33;;;:24;:33;;;;;;;;;15438:137;6379:151;;;;;;;;;;-1:-1:-1;6379:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11177:6:1;11210:15;;;11192:34;;11262:15;;;11257:2;11242:18;;11235:43;11314:15;;;11294:18;;;11287:43;;;;11366:15;;;11361:2;11346:18;;11339:43;11154:3;11139:19;6379:151:0;10944:444:1;21862:131:0;;;;;;;;;;-1:-1:-1;21862:131:0;;;;;:::i;:::-;;:::i;12519:133::-;;;;;;;;;;-1:-1:-1;12519:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;12621:19:0;;;12603:7;12621:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;12519:133;13888:540;;;;;;;;;;-1:-1:-1;13888:540:0;;;;;:::i;:::-;;:::i;19311:127::-;;;;;;;;;;-1:-1:-1;19311:127:0;;;;;:::i;:::-;;:::i;29873:182::-;;;;;;;;;;;;;:::i;16674:193::-;;;;;;;;;;-1:-1:-1;16674:193:0;;;;;:::i;:::-;;:::i;7688:34::-;;;;;;;;;;-1:-1:-1;7688:34:0;;;;;;;;30287:118;;;;;;;;;;;;;:::i;7091:128::-;;;;;;;;;;-1:-1:-1;7091:128:0;;;;-1:-1:-1;;;;;7091:128:0;;;20627:373;;;;;;;;;;-1:-1:-1;20627:373:0;;;;;:::i;:::-;;:::i;7497:39::-;;;;;;;;;;-1:-1:-1;7497:39:0;;;;;;;;;;;17177:125;;;;;;;;;;-1:-1:-1;17177:125:0;;;;;:::i;:::-;;:::i;16518:148::-;;;;;;;;;;-1:-1:-1;16518:148:0;;;;;:::i;:::-;;:::i;16875:294::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;;;;;;;;;16983:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;16983:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;17021:8;;17031:7;;16983:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17054:9;17050:112;17073:8;:15;17069:1;:19;17050:112;;;17109:41;17129:8;17138:1;17129:11;;;;;;;;:::i;:::-;;;;;;;17142:7;17109:19;:41::i;:::-;17090:3:::0;::::1;::::0;::::1;:::i;:::-;;;;17050:112;;;;16875:294:::0;;:::o;17629:150::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;17713:3:::1;17706;:10;;17698:31;;;::::0;-1:-1:-1;;;17698:31:0;;13877:2:1;17698:31:0::1;::::0;::::1;13859:21:1::0;13916:1;13896:18;;;13889:29;13954:10;13934:18;;;13927:38;13982:18;;17698:31:0::1;13675:331:1::0;17698:31:0::1;17740:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;391:25:1::0;;;17740:9:0;;;::::1;-1:-1:-1::0;;;;;17740:9:0::1;::::0;:26:::1;::::0;364:18:1;;17740:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17629:150:::0;:::o;12660:216::-;12764:10;12735:4;12752:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12752:32:0;;;;;;;;;;:41;;;12809:37;12735:4;;12752:32;;12809:37;;;;12787:6;391:25:1;;379:2;364:18;;245:177;12809:37:0;;;;;;;;-1:-1:-1;12864:4:0;12660:216;;;;;:::o;20507:112::-;20552:7;20597:13;5934:1;20597:2;:13;:::i;:::-;20579:14;;:32;;;;:::i;:::-;20572:39;;20507:112;:::o;11910:115::-;11965:7;5996:13;5934:1;5996:2;:13;:::i;:::-;5979:30;;5776:17;5979:30;:::i;:::-;11991:1;11980:12;11976:31;;11996:8;;;11976:31;5996:13;5934:1;5996:2;:13;:::i;:::-;5979:30;;5776:17;5979:30;:::i;14960:335::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;15068:14:::1;::::0;::::1;::::0;::::1;;;15067:15;15059:24;;;::::0;::::1;;-1:-1:-1::0;;;;;15102:29:0;::::1;15126:4;15102:29;::::0;::::1;::::0;:62:::1;;-1:-1:-1::0;;;;;;15135:29:0;::::1;15159:4;15135:29;;15102:62;:94;;;;;15184:12;-1:-1:-1::0;;;;;15168:28:0::1;:12;-1:-1:-1::0;;;;;15168:28:0::1;;;15102:94;15094:103;;;::::0;::::1;;15208:9;:33:::0;;-1:-1:-1;;15208:33:0::1;-1:-1:-1::0;;;;;15208:33:0;;::::1;;::::0;;15252:9:::1;:35:::0;;;::::1;::::0;;;;::::1;::::0;;;::::1;;::::0;;14960:335::o;13574:306::-;-1:-1:-1;;;;;13695:19:0;;13674:4;13695:19;;;:11;:19;;;;;;;;13715:10;13695:31;;;;;;;;-1:-1:-1;;13695:52:0;13691:126;;-1:-1:-1;;;;;13764:19:0;;;;;;:11;:19;;;;;;;;13784:10;13764:31;;;;;;;:41;;13799:6;;13764:19;:41;;13799:6;;13764:41;:::i;:::-;;;;-1:-1:-1;;13691:126:0;13836:36;13846:6;13854:9;13865:6;13836:9;:36::i;:::-;13829:43;13574:306;-1:-1:-1;;;;13574:306:0:o;19990:267::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;20132:4:::1;5996:13;5934:1;5996:2;:13;:::i;:::-;5979:30;::::0;5776:17:::1;5979:30;:::i;:::-;20122:14;;;;:::i;:::-;20110:7:::0;20099;5996:13:::1;5934:1;5996:2;:13;:::i;:::-;5979:30;::::0;5776:17:::1;5979:30;:::i;:::-;20089:17;;;;:::i;:::-;20088:29;;;;:::i;:::-;:49;;20080:112;;;::::0;-1:-1:-1;;;20080:112:0;;16358:2:1;20080:112:0::1;::::0;::::1;16340:21:1::0;16397:2;16377:18;;;16370:30;16436:34;16416:18;;;16409:62;16507:20;16487:18;;;16480:48;16545:19;;20080:112:0::1;16156:414:1::0;20080:112:0::1;20242:7:::0;20231;5996:13:::1;5934:1;5996:2;:13;:::i;:::-;5979:30;::::0;5776:17:::1;5979:30;:::i;:::-;20221:17;;;;:::i;:::-;20220:29;;;;:::i;:::-;20203:14;:46:::0;-1:-1:-1;;19990:267:0:o;29322:411::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;29457:7:::1;:14;29438:8;:15;:33;29430:67;;;::::0;-1:-1:-1;;;29430:67:0;;16777:2:1;29430:67:0::1;::::0;::::1;16759:21:1::0;16816:2;16796:18;;;16789:30;16855:23;16835:18;;;16828:51;16896:18;;29430:67:0::1;16575:345:1::0;29430:67:0::1;29513:7;29508:218;29530:8;:15;29526:1;:19;;;29508:218;;;29600:7;29608:1;29600:10;;;;;;;;;;:::i;:::-;;;;;;;29575:21;29585:10;-1:-1:-1::0;;;;;12494:16:0;12476:7;12494:16;;;:7;:16;;;;;;;12410:103;29575:21:::1;:35;;29567:44;;;::::0;::::1;;29626:88;29644:10;29656:8;29665:1;29656:11;;;;;;;;;;:::i;:::-;;;;;;;5934:1;29680:2;:13;;;;:::i;:::-;29669:7;29677:1;29669:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;29695:5;29702::::0;29709:4:::1;29626:17;:88::i;:::-;-1:-1:-1::0;29547:3:0;::::1;::::0;::::1;:::i;:::-;;;;29508:218;;17426:195:::0;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;17548:9:::1;::::0;:65:::1;::::0;;;;17337:14:1;;17330:22;17548:65:0::1;::::0;::::1;17312:41:1::0;17396:14;;17389:22;17369:18;;;17362:50;17455:14;;17448:22;17428:18;;;17421:50;17514:14;;17507:22;17487:18;;;17480:50;17548:9:0;;;::::1;-1:-1:-1::0;;;;;17548:9:0::1;::::0;:24:::1;::::0;17284:19:1;;17548:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17426:195:::0;;;;:::o;12031:112::-;12083:5;5996:13;5934:1;5996:2;:13;:::i;:::-;5979:30;;5776:17;5979:30;:::i;:::-;12107:1;12096:12;12092:31;;12112:8;;;12092:31;-1:-1:-1;5934:1:0;;12031:112::o;18387:488::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;6577:4:::1;18494:6;:21;;;;:65;;;;;6627:4;18536:7;:23;;;;18494:65;:117;;;;;6681:4;18580:11;:31;;;;18494:117;18486:170;;;::::0;-1:-1:-1;;;18486:170:0;;17743:2:1;18486:170:0::1;::::0;::::1;17725:21:1::0;17782:2;17762:18;;;17755:30;17821:25;17801:18;;;17794:53;17864:18;;18486:170:0::1;17541:347:1::0;18486:170:0::1;6734:4;18675:16;18684:7:::0;18675:6;:16:::1;:::i;:::-;:35;;;;18667:80;;;::::0;-1:-1:-1;;;18667:80:0;;18324:2:1;18667:80:0::1;::::0;::::1;18306:21:1::0;;;18343:18;;;18336:30;18402:34;18382:18;;;18375:62;18454:18;;18667:80:0::1;18122:356:1::0;18667:80:0::1;18758:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;18794:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;18832:35:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;18387:488::o;17310:108::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;17379:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;17379:31:0::1;::::0;::::1;160:74:1::0;17379:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;17379:31:0::1;14:226:1::0;15871:140:0;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;-1:-1:-1;;;;;15963:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;15963:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15871:140::o;20385:114::-;20430:7;20477:13;5934:1;20477:2;:13;:::i;:::-;20457:16;;:34;;;;:::i;20265:112::-;20309:7;20355:13;5934:1;20355:2;:13;:::i;:::-;20336:15;;:33;;;;:::i;21008:215::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;21138:3:::1;21112:22;:29;;21104:62;;;::::0;-1:-1:-1;;;21104:62:0;;18685:2:1;21104:62:0::1;::::0;::::1;18667:21:1::0;18724:2;18704:18;;;18697:30;18763:22;18743:18;;;18736:50;18803:18;;21104:62:0::1;18483:344:1::0;21104:62:0::1;21177:13;:38:::0;21008:215::o;10474:759::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;-1:-1:-1;;;;;10553:22:0;::::1;10545:96;;;::::0;-1:-1:-1;;;10545:96:0;;19034:2:1;10545:96:0::1;::::0;::::1;19016:21:1::0;19073:2;19053:18;;;19046:30;19112:34;19092:18;;;19085:62;19183:31;19163:18;;;19156:59;19232:19;;10545:96:0::1;18832:425:1::0;10545:96:0::1;10660:16:::0;-1:-1:-1;;;;;10660:16:0;::::1;::::0;10652:90:::1;;;::::0;-1:-1:-1;;;10652:90:0;;19034:2:1;10652:90:0::1;::::0;::::1;19016:21:1::0;19073:2;19053:18;;;19046:30;19112:34;19092:18;;;19085:62;19183:31;19163:18;;;19156:59;19232:19;;10652:90:0::1;18832:425:1::0;10652:90:0::1;10783:5;10773:6:::0;;-1:-1:-1;;;;;10773:6:0;;::::1;10753:27:::0;;:19:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;10753:35:0;;::::1;::::0;;;10824:6;;;::::1;10799:32:::0;;:24:::1;:32:::0;;;;;;:40;;;::::1;::::0;;10850:29;;::::1;::::0;;;;;;;;:36;;;::::1;-1:-1:-1::0;10850:36:0;;::::1;::::0;;;10897:34;;;;;;:41;;;;::::1;::::0;::::1;::::0;;10972:6;;;;::::1;12494:16:::0;;;;;;10962:21;10959:127:::1;;11018:6;::::0;;-1:-1:-1;;;;;11018:6:0::1;12494:16:::0;;;:7;:16;;;;;;;11000:74:::1;::::0;11018:6;11026:8;;11036:17:::1;12410:103:::0;11000:74:::1;;10959:127;11106:16;11125:6:::0;;-1:-1:-1;;;;;11142:17:0;;::::1;-1:-1:-1::0;;11142:17:0;::::1;::::0;::::1;::::0;;11175:40:::1;::::0;11125:6;;;::::1;::::0;;;11175:40:::1;::::0;11106:16;11175:40:::1;10534:699;10474:759:::0;:::o;16376:134::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;-1:-1:-1;;;;;16464:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;16464:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16376:134::o;30592:140::-;30686:9;;:38;;;;;-1:-1:-1;;;;;178:55:1;;;30686:38:0;;;160:74:1;30659:7:0;;30686:9;;:32;;133:18:1;;30686:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30413:171::-;30549:9;;:27;;;;;-1:-1:-1;;;;;178:55:1;;;30549:27:0;;;160:74:1;30471:13:0;;;;;;;;30549:9;;:21;;133:18:1;;30549:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30549:27:0;;;;;;;;;;;;:::i;:::-;30542:34;;;;;;;;30413:171;;;;;:::o;21231:340::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;21368:19:::1;:33:::0;;-1:-1:-1;;21368:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;21412:14:::1;:38:::0;;-1:-1:-1;;21412:38:0;;::::1;::::0;::::1;;;::::0;;;21461:22:::1;:47:::0;;;;::::1;::::0;::::1;;;::::0;;21524:39:::1;::::0;4722:41:1;;;21524:39:0::1;::::0;4710:2:1;4695:18;21524:39:0::1;;;;;;;21231:340:::0;;;:::o;29741:124::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;29800:9:::1;;;;;;;;;-1:-1:-1::0;;;;;29800:9:0::1;-1:-1:-1::0;;;;;29800:14:0::1;;29822:21;29800:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;29796:62:::0;29741:124::o;16019:349::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;-1:-1:-1;;;;;16114:23:0;::::1;16132:4;16114:23;::::0;::::1;::::0;:43:::1;;-1:-1:-1::0;16151:6:0::1;::::0;-1:-1:-1;;;;;16141:16:0;;::::1;16151:6:::0;::::1;16141:16;;16114:43;16106:52;;;::::0;::::1;;-1:-1:-1::0;;;;;16169:32:0;::::1;;::::0;;;:24:::1;:32;::::0;;;;:42;;-1:-1:-1;;16169:42:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;16222:139:::1;;16250:9;::::0;:26:::1;::::0;-1:-1:-1;;;16250:26:0;;-1:-1:-1;;;;;21188:55:1;;;16250:26:0::1;::::0;::::1;21170:74:1::0;16250:9:0::1;21260:18:1::0;;;21253:34;16250:9:0;;::::1;::::0;:15:::1;::::0;21143:18:1;;16250:26:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16019:349:::0;;:::o;16222:139::-:1;16309:9;::::0;-1:-1:-1;;;;;16333:15:0;;::::1;16309:9;16333:15:::0;;;16309:9;16333:15:::1;::::0;;;;;;;16309:40;;-1:-1:-1;;;16309:40:0;;::::1;::::0;::::1;21170:74:1::0;;;;21260:18;;;21253:34;16309:9:0;::::1;::::0;:15:::1;::::0;21143:18:1;;16309:40:0::1;20988:305:1::0;16222:139:0::1;16019:349:::0;;:::o;11241:277::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;11330:5:::1;11320:6:::0;;-1:-1:-1;;;;;11320:6:0;;::::1;11300:27:::0;;:19:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;11300:35:0;;::::1;::::0;;;11371:6;;;::::1;11346:32:::0;;:24:::1;:32:::0;;;;;;:40;;;;::::1;::::0;;;11416:6;;-1:-1:-1;;11433:19:0;::::1;::::0;;11468:42;;11416:6;::::1;::::0;11330:5;11416:6;;11468:42:::1;::::0;11330:5;;11468:42:::1;11289:229;11241:277::o:0;14436:516::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;14517:16;::::1;;14528:5;14517:16:::0;14513:432:::1;;-1:-1:-1::0;;;;;14550:13:0;;::::1;14566:5;14550:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;14550:21:0::1;::::0;;14586:9:::1;::::0;:32;;;;;::::1;::::0;::::1;21768:74:1::0;;;;21858:18;;;21851:50;;;;14586:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;21741:18:1;;14586:32:0::1;21600:307:1::0;14513:432:0::1;14655:17;::::0;:22;14651:152:::1;;14744:6;14724:17;;14706:15;:35;;;;:::i;:::-;:44;14698:89;;;::::0;-1:-1:-1;;;14698:89:0;;22114:2:1;14698:89:0::1;::::0;::::1;22096:21:1::0;;;22133:18;;;22126:30;22192:34;22172:18;;;22165:62;22244:18;;14698:89:0::1;21912:356:1::0;14698:89:0::1;-1:-1:-1::0;;;;;14817:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;14817:20:0::1;14833:4;14817:20:::0;;::::1;::::0;;;14872:15:::1;14852:17;:35:::0;14902:9:::1;::::0;:31;;;;;::::1;::::0;::::1;21768:74:1::0;;;;21858:18;;;21851:50;14902:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;21741:18:1;;14902:31:0::1;21600:307:1::0;13233:173:0;13297:4;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;13346:9:::1;::::0;13314:62:::1;::::0;13331:4:::1;::::0;-1:-1:-1;;;;;13346:9:0::1;-1:-1:-1::0;;13314:8:0::1;:62::i;:::-;-1:-1:-1::0;13394:4:0::1;13233:173:::0;:::o;17787:592::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;17849:14:::1;::::0;::::1;::::0;::::1;;;17848:15;17840:52;;;::::0;-1:-1:-1;;;17840:52:0;;22475:2:1;17840:52:0::1;::::0;::::1;22457:21:1::0;22514:2;22494:18;;;22487:30;22553:26;22533:18;;;22526:54;22597:18;;17840:52:0::1;22273:348:1::0;17840:52:0::1;17911:16;::::0;;;::::1;;;17903:53;;;::::0;-1:-1:-1;;;17903:53:0;;22828:2:1;17903:53:0::1;::::0;::::1;22810:21:1::0;22867:2;22847:18;;;22840:30;22906:26;22886:18;;;22879:54;22950:18;;17903:53:0::1;22626:348:1::0;17903:53:0::1;17978:9;::::0;;;::::1;-1:-1:-1::0;;;;;17978:9:0::1;17967:99;;18018:9;:36:::0;;;::::1;18048:4;18018:36:::0;::::1;;::::0;;17967:99:::1;18080:9;::::0;18100:6:::1;::::0;18080:85:::1;::::0;;;;-1:-1:-1;;;;;18100:6:0;;::::1;18080:85;::::0;::::1;23202:74:1::0;23324:10;18115:12:0::1;23312:23:1::0;23292:18;;;23285:51;23384:18;18137:15:0::1;23372:31:1::0;23352:18;;;23345:59;5934:1:0::1;23420:18:1::0;;;23413:45;18080:9:0;;;::::1;;::::0;:19:::1;::::0;23174::1;;18080:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;18076:101:::0;18191:9:::1;;;;;;;;;-1:-1:-1::0;;;;;18191:9:0::1;-1:-1:-1::0;;;;;18191:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;18235:14:0::1;:21:::0;;-1:-1:-1;;18235:21:0::1;;;::::0;;18294:6:::1;::::0;-1:-1:-1;;;;;18294:6:0::1;-1:-1:-1::0;12494:16:0;;;-1:-1:-1;12494:16:0;;;;;;18310:5:::1;::::0;18284:22:::1;::::0;18304:2:::1;18284:22;:::i;:::-;18283:32;;;;:::i;:::-;18267:13;:48:::0;18350:6:::1;::::0;-1:-1:-1;;;;;18350:6:0::1;12476:7:::0;12494:16;;;:7;:16;;;;;;18366:5:::1;::::0;18340:22:::1;::::0;18360:2:::1;18340:22;:::i;:::-;18339:32;;;;:::i;:::-;18326:10;:45:::0;17787:592::o;30179:100::-;30230:9;;:41;;;;;30260:10;30230:41;;;160:74:1;-1:-1:-1;;;;;30230:9:0;;;;:29;;133:18:1;;30230:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30179:100::o;13414:152::-;13494:4;13518:40;13528:10;13540:9;13551:6;13518:9;:40::i;:::-;13511:47;13414:152;-1:-1:-1;;;13414:152:0:o;18883:420::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;18984:7:::1;:25:::0;;::::1;19060:29:::0;;::::1;::::0;::::1;-1:-1:-1::0;;19020:29:0;;::::1;::::0;::::1;-1:-1:-1::0;;19020:29:0;;;18984:25;;::::1;19020:29:::0;;;;;;;::::1;19060;;::::0;;19080:9;19116:19:::1;19040:9:::0;19002:7;19116:19:::1;:::i;:::-;:31;;;;:::i;:::-;19100:7;:47:::0;;;::::1;::::0;::::1;::::0;;::::1;;;::::0;;19193:9:::1;:17:::0;-1:-1:-1;;19174:36:0::1;::::0;19193:17;;::::1;::::0;::::1;::::0;19174:16:::1;:36;:::i;:::-;19229:7;:13:::0;19158:52:::1;::::0;;::::1;::::0;-1:-1:-1;19229:13:0;;::::1;;:22:::0;-1:-1:-1;19229:22:0::1;19221:74;;;::::0;-1:-1:-1;;;19221:74:0;;23671:2:1;19221:74:0::1;::::0;::::1;23653:21:1::0;23710:2;23690:18;;;23683:30;23749:34;23729:18;;;23722:62;23820:9;23800:18;;;23793:37;23847:19;;19221:74:0::1;23469:403:1::0;30740:136:0;30835:9;;:33;;;;;-1:-1:-1;;;;;178:55:1;;;30835:33:0;;;160:74:1;30808:7:0;;30835:9;;:27;;133:18:1;;30835:33:0;14:226:1;21579:275:0;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;21750:27:::1;21754:23:::0;21750:2:::1;:27;:::i;:::-;21733:44;::::0;:14;:44:::1;:::i;:::-;21788:9;::::0;:58:::1;::::0;;;;::::1;::::0;::::1;24187:25:1::0;;;24228:18;;;24221:34;;;21716:61:0;;-1:-1:-1;;;;;;21788:9:0::1;::::0;:30:::1;::::0;24160:18:1;;21788:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21579:275:::0;;;:::o;19446:536::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;19642:4:::1;5996:13;5934:1;5996:2;:13;:::i;:::-;5979:30;::::0;5776:17:::1;5979:30;:::i;:::-;19632:14;;;;:::i;:::-;19617:10:::0;19603;5996:13:::1;5934:1;5996:2;:13;:::i;:::-;5979:30;::::0;5776:17:::1;5979:30;:::i;:::-;19593:20;;;;:::i;:::-;19592:35;;;;:::i;:::-;:55;;19584:123;;;::::0;-1:-1:-1;;;19584:123:0;;24468:2:1;19584:123:0::1;::::0;::::1;24450:21:1::0;24507:2;24487:18;;;24480:30;24546:34;24526:18;;;24519:62;24617:25;24597:18;;;24590:53;24660:19;;19584:123:0::1;24266:419:1::0;19584:123:0::1;19778:4;5996:13;5934:1;5996:2;:13;:::i;:::-;5979:30;::::0;5776:17:::1;5979:30;:::i;:::-;19768:14;;;;:::i;:::-;19752:11:::0;19737;5996:13:::1;5934:1;5996:2;:13;:::i;:::-;5979:30;::::0;5776:17:::1;5979:30;:::i;:::-;19727:21;;;;:::i;:::-;19726:37;;;;:::i;:::-;:57;;19718:125;;;::::0;-1:-1:-1;;;19718:125:0;;24468:2:1;19718:125:0::1;::::0;::::1;24450:21:1::0;24507:2;24487:18;;;24480:30;24546:34;24526:18;;;24519:62;24617:25;24597:18;;;24590:53;24660:19;;19718:125:0::1;24266:419:1::0;19718:125:0::1;19897:10:::0;19883;5996:13:::1;5934:1;5996:2;:13;:::i;:::-;5979:30;::::0;5776:17:::1;5979:30;:::i;:::-;19873:20;;;;:::i;:::-;19872:35;;;;:::i;:::-;19854:15;:53:::0;19963:11;19948;5996:13:::1;5934:1;5996:2;:13;:::i;:::-;5979:30;::::0;5776:17:::1;5979:30;:::i;:::-;19938:21;;;;:::i;:::-;19937:37;;;;:::i;:::-;19918:16;:56:::0;-1:-1:-1;;;;19446:536:0:o;21862:131::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;21949:6:::1;21943:3;:12;21935:21;;;::::0;::::1;;21967:12;:18:::0;21862:131::o;13888:540::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;13957:20:::1;13990:9;13957:43;;14011:16;14041:10;-1:-1:-1::0;;;;;14041:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14030:40:0::1;;14079:4;14086:10;-1:-1:-1::0;;;;;14086:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14030:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;25199:15:1;;;14030:74:0::1;::::0;::::1;25181:34:1::0;25251:15;;25231:18;;;25224:43;25093:18;;14030:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14011:93:::0;-1:-1:-1;;;;;;14119:22:0;::::1;14115:200;;14178:10;-1:-1:-1::0;;;;;14178:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14167:43:0::1;;14219:4;14226:10;-1:-1:-1::0;;;;;14226:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14167:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;25199:15:1;;;14167:77:0::1;::::0;::::1;25181:34:1::0;25251:15;;25231:18;;;25224:43;25093:18;;14167:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14158:6;:86:::0;;-1:-1:-1;;14158:86:0::1;-1:-1:-1::0;;;;;14158:86:0;;;::::1;::::0;;;::::1;::::0;;14115:200:::1;;;14286:6;:17:::0;;-1:-1:-1;;14286:17:0::1;-1:-1:-1::0;;;;;14286:17:0;::::1;;::::0;;14115:200:::1;14325:9;:22:::0;;-1:-1:-1;;14325:22:0::1;-1:-1:-1::0;;;;;14325:22:0;::::1;::::0;;::::1;::::0;;;14358:62:::1;::::0;14375:4:::1;::::0;-1:-1:-1;;14358:8:0::1;:62::i;19311:127::-:0;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;19388:11:::1;:42:::0;;-1:-1:-1;;19388:42:0::1;-1:-1:-1::0;;;;;19388:42:0;;;::::1;::::0;;;::::1;::::0;;19311:127::o;29873:182::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;29940:16:::1;::::0;;;::::1;;;29939:17;29931:58;;;::::0;-1:-1:-1;;;29931:58:0;;25480:2:1;29931:58:0::1;::::0;::::1;25462:21:1::0;25519:2;25499:18;;;25492:30;25558;25538:18;;;25531:58;25606:18;;29931:58:0::1;25278:352:1::0;29931:58:0::1;30008:6;::::0;;30000:47:::1;::::0;-1:-1:-1;;;;;30008:6:0;;::::1;::::0;30025:21:::1;30000:47:::0;::::1;;;::::0;30025:21;;30000:47;30008:6;30000:47;30025:21;30008:6;30000:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;16674:193:::0;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;16764:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;21786:55:1;;;16764:47:0::1;::::0;::::1;21768:74:1::0;21885:14;;21878:22;21858:18;;;21851:50;16764:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;21741:18:1;;16764:47:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16822:37;16842:7;16851;16822:19;:37::i;30287:118::-:0;30366:9;;:31;;;;;;;;30339:7;;-1:-1:-1;;;;;30366:9:0;;:29;;:31;;;;;;;;;;;;;;:9;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20627:373::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;20827:16;20807;5996:13:::1;5934:1;5996:2;:13;:::i;:::-;5979:30;::::0;5776:17:::1;5979:30;:::i;:::-;20797:26;;;;:::i;:::-;20796:47;;;;:::i;:::-;20780:13;:63:::0;20895:13;20878;5996::::1;5934:1;5996:2;:13;:::i;:::-;5979:30;::::0;5776:17:::1;5979:30;:::i;:::-;20868:23;;;;:::i;:::-;20867:41;;;;:::i;:::-;20854:10;:54:::0;;;20927:13:::1;::::0;:27:::1;;20919:73;;;::::0;-1:-1:-1;;;20919:73:0;;25837:2:1;20919:73:0::1;::::0;::::1;25819:21:1::0;25876:2;25856:18;;;25849:30;25915:34;25895:18;;;25888:62;25986:3;25966:18;;;25959:31;26007:19;;20919:73:0::1;25635:397:1::0;17177:125:0;17262:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;17262:32:0;;;160:74:1;17238:4:0;;17262:9;;;;;:23;;133:18:1;;17262:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16518:148::-;7980:6;;-1:-1:-1;;;;;7980:6:0;7990:10;7980:20;7972:65;;;;-1:-1:-1;;;7972:65:0;;12102:2:1;7972:65:0;;;12084:21:1;;;12121:18;;;12114:30;-1:-1:-1;;;;;;;;;;;12160:18:1;;;12153:62;12232:18;;7972:65:0;11900:356:1;7972:65:0;-1:-1:-1;;;;;16614:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;16614:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16518:148::o;22366:2139::-;22445:4;-1:-1:-1;;;;;22470:18:0;;22462:68;;;;-1:-1:-1;;;22462:68:0;;26489:2:1;22462:68:0;;;26471:21:1;26528:2;26508:18;;;26501:30;26567:34;26547:18;;;26540:62;26638:7;26618:18;;;26611:35;26663:19;;22462:68:0;26287:401:1;22462:68:0;-1:-1:-1;;;;;22549:16:0;;22541:64;;;;-1:-1:-1;;;22541:64:0;;26895:2:1;22541:64:0;;;26877:21:1;26934:2;26914:18;;;26907:30;26973:34;26953:18;;;26946:62;27044:5;27024:18;;;27017:33;27067:19;;22541:64:0;26693:399:1;22541:64:0;22633:1;22624:6;:10;22616:64;;;;-1:-1:-1;;;22616:64:0;;27299:2:1;22616:64:0;;;27281:21:1;27338:2;27318:18;;;27311:30;27377:34;27357:18;;;27350:62;27448:11;27428:18;;;27421:39;27477:19;;22616:64:0;27097:405:1;22616:64:0;-1:-1:-1;;;;;22779:13:0;;22691:8;22779:13;;;:7;:13;;;;;;22691:8;;;;22779:13;;22775:162;;;22815:4;22809:10;;22775:162;;;-1:-1:-1;;;;;22841:11:0;;;;;;:7;:11;;;;;;;;22837:100;;;22876:4;22869:11;;22837:100;;;-1:-1:-1;22921:4:0;22837:100;22950:20;22961:4;22967:2;22950:10;:20::i;:::-;22947:816;;;22991:14;;;;;;;22987:89;;23026:34;;-1:-1:-1;;;23026:34:0;;27709:2:1;23026:34:0;;;27691:21:1;27748:2;27728:18;;;27721:30;27787:26;27767:18;;;27760:54;27831:18;;23026:34:0;27507:348:1;22987:89:0;23093:3;23090:194;;;-1:-1:-1;;;;;23121:25:0;;;;;;:21;:25;;;;;;;;23116:153;;23189:15;;23179:6;:25;;23171:78;;;;-1:-1:-1;;;23171:78:0;;28062:2:1;23171:78:0;;;28044:21:1;28101:2;28081:18;;;28074:30;28140:34;28120:18;;;28113:62;28211:10;28191:18;;;28184:38;28239:19;;23171:78:0;27860:404:1;23171:78:0;23301:4;23298:198;;;-1:-1:-1;;;;;23330:27:0;;;;;;:21;:27;;;;;;;;23325:156;;23400:16;;23390:6;:26;;23382:79;;;;-1:-1:-1;;;23382:79:0;;28062:2:1;23382:79:0;;;28044:21:1;28101:2;28081:18;;;28074:30;28140:34;28120:18;;;28113:62;28211:10;28191:18;;;28184:38;28239:19;;23382:79:0;27860:404:1;23382:79:0;23527:9;;-1:-1:-1;;;;;23513:24:0;;;23527:9;;23513:24;;;;:33;;;23542:4;23541:5;23513:33;23510:242;;;-1:-1:-1;;;;;23572:25:0;;;;;;:21;:25;;;;;;;;23567:170;;23656:14;;23646:6;23630:13;23640:2;-1:-1:-1;;;;;12494:16:0;12476:7;12494:16;;;:7;:16;;;;;;;12410:103;23630:13;:22;;;;:::i;:::-;:40;;23622:95;;;;-1:-1:-1;;;23622:95:0;;28604:2:1;23622:95:0;;;28586:21:1;28643:2;28623:18;;;28616:30;28682:34;28662:18;;;28655:62;28753:12;28733:18;;;28726:40;28783:19;;23622:95:0;28402:406:1;23622:95:0;23779:4;23775:651;;;23805:6;;;;23800:615;;23835:19;;;;;;;23832:568;;;23950:4;23901:28;12494:16;;;:7;:16;;;;;;24007:13;;23983:37;;23979:402;;24067:10;;24107:22;;;;24104:96;;;24164:13;;24154:6;;-1:-1:-1;;;;;24154:6:0;12476:7;12494:16;;;:7;:16;;;;;;6781:5;;24144:33;;;:::i;:::-;24143:54;;;;:::i;:::-;24133:64;;24104:96;24253:7;24229:20;:31;24226:71;;24287:7;24264:30;;24226:71;24323:34;24336:20;24323:12;:34::i;:::-;24022:359;23979:402;23878:522;23832:568;24444:53;24462:4;24468:2;24472:6;24480:3;24485:4;24491:5;24444:17;:53::i;:::-;24437:60;22366:2139;-1:-1:-1;;;;;;;22366:2139:0:o;24513:1244::-;24655:16;;24633:4;;24655:16;;;;;24650:298;;24688:28;24707:4;24713:2;24688:18;:28::i;:::-;24736:16;;;;;;;24735:17;:41;;;;;24756:20;24767:4;24773:2;24756:10;:20::i;:::-;24735:77;;;;-1:-1:-1;;;;;;24781:31:0;;;;;;:25;:31;;;;;;;;24780:32;24735:77;:111;;;;-1:-1:-1;;;;;;24817:29:0;;;;;;:25;:29;;;;;;;;24816:30;24735:111;:121;;;;;24851:5;24850:6;24735:121;24731:206;;;24877:44;;-1:-1:-1;;;24877:44:0;;29015:2:1;24877:44:0;;;28997:21:1;29054:2;29034:18;;;29027:30;29093:34;29073:18;;;29066:62;29164:4;29144:18;;;29137:32;29186:19;;24877:44:0;28813:398:1;24731:206:0;24963:20;24974:4;24980:2;24963:10;:20::i;:::-;24960:313;;;25031:9;;:37;;;;;-1:-1:-1;;;;;29497:15:1;;;25031:37:0;;;29479:34:1;29549:15;;;29529:18;;;29522:43;29581:18;;;29574:34;;;25000:12:0;;25031:9;;;;;:19;;29391:18:1;;25031:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;25031:37:0;;;;;;;;-1:-1:-1;;25031:37:0;;;;;;;;;;;;:::i;:::-;;;25027:163;;25166:8;;;25027:163;25119:5;-1:-1:-1;25210:7:0;25206:56;;25238:8;;;25206:56;24985:288;24960:313;-1:-1:-1;;;;;25318:25:0;;25285:12;25318:25;;;:19;:25;;;;;;25300:4;;25318:25;;;:52;;-1:-1:-1;;;;;;25347:23:0;;;;;;:19;:23;;;;;;;;25318:52;25315:98;;;-1:-1:-1;25396:5:0;25315:98;-1:-1:-1;;;;;25425:13:0;;;;;;:7;:13;;;;;:23;;25442:6;;25425:13;:23;;25442:6;;25425:23;:::i;:::-;;;;-1:-1:-1;25484:6:0;;-1:-1:-1;25501:98:0;;;;25546:41;25556:4;25562:6;25570:3;25575:4;25581:5;25546:9;:41::i;:::-;25529:58;;25501:98;-1:-1:-1;;;;;25609:11:0;;;;;;:7;:11;;;;;:29;;25624:14;;25609:11;:29;;25624:14;;25609:29;:::i;:::-;;;;-1:-1:-1;25651:24:0;;-1:-1:-1;25666:4:0;25672:2;25651:14;:24::i;:::-;25708:2;-1:-1:-1;;;;;25693:34:0;25702:4;-1:-1:-1;;;;;25693:34:0;;25712:14;25693:34;;;;391:25:1;;379:2;364:18;;245:177;25693:34:0;;;;;;;;-1:-1:-1;25745:4:0;;24513:1244;-1:-1:-1;;;;;;;;24513:1244:0:o;12884:341::-;-1:-1:-1;;;;;12978:20:0;;12970:69;;;;-1:-1:-1;;;12970:69:0;;29821:2:1;12970:69:0;;;29803:21:1;29860:2;29840:18;;;29833:30;29899:34;29879:18;;;29872:62;29970:6;29950:18;;;29943:34;29994:19;;12970:69:0;29619:400:1;12970:69:0;-1:-1:-1;;;;;13058:21:0;;13050:68;;;;-1:-1:-1;;;13050:68:0;;30226:2:1;13050:68:0;;;30208:21:1;30265:2;30245:18;;;30238:30;30304:34;30284:18;;;30277:62;30375:4;30355:18;;;30348:32;30397:19;;13050:68:0;30024:398:1;13050:68:0;-1:-1:-1;;;;;13131:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;13184:33;;391:25:1;;;13184:33:0;;364:18:1;13184:33:0;;;;;;;12884:341;;;:::o;22001:357::-;22069:4;22101:6;;-1:-1:-1;;;;;22093:14:0;;;22101:6;;22093:14;;;;:43;;-1:-1:-1;22130:6:0;;-1:-1:-1;;;;;22124:12:0;;;22130:6;;22124:12;;22093:43;:79;;;;-1:-1:-1;22166:6:0;;-1:-1:-1;;;;;22166:6:0;22153:9;:19;;22093:79;:118;;;;-1:-1:-1;;;;;;22190:21:0;;;;;;:17;:21;;;;;;;;22189:22;22093:118;:159;;;;-1:-1:-1;;;;;;22229:23:0;;;;;;:17;:23;;;;;;;;22228:24;22093:159;:186;;;;-1:-1:-1;;;;;;22269:10:0;;6889:42;22269:10;;22093:186;:219;;;;-1:-1:-1;;;;;;22296:16:0;;;;22093:219;:257;;;;-1:-1:-1;;;;;;;;22329:21:0;22345:4;22329:21;;;22001:357::o;26842:1834::-;7874:6;:13;;-1:-1:-1;;7874:13:0;7883:4;7874:13;;;26923:30:::1;::::0;;::::1;::::0;::::1;::::0;;26946:7:::1;26923:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;7874:6;26968:17;26964:56:::1;;27002:7;;;26964:56;27063:4;27043:26;::::0;;;:11:::1;:26;::::0;;;;;;;27078:9:::1;::::0;-1:-1:-1;;;;;27078:9:0::1;27043:46:::0;;;;;;;;-1:-1:-1;;27043:67:0::1;27040:165;;27147:4;27127:26;::::0;;;:11:::1;:26;::::0;;;;;;;27162:9:::1;::::0;-1:-1:-1;;;;;27162:9:0::1;27127:46:::0;;;;;;;-1:-1:-1;;27127:66:0;;27040:165:::1;27217:17;27300:1;27283:6;:12;;;27238:58;;27262:6;:16;;;27239:39;;:20;:39;;;;:::i;:::-;27238:58;;;;:::i;:::-;27237:64;;;;:::i;:::-;27217:84:::0;-1:-1:-1;27312:15:0::1;27330:32;27217:84:::0;27330:20;:32:::1;:::i;:::-;27399:16;::::0;;27413:1:::1;27399:16:::0;;;;;::::1;::::0;;27312:50;;-1:-1:-1;27375:21:0::1;::::0;27399:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27399:16:0::1;27375:40;;27444:4;27426;27431:1;27426:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27426:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;27470:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;27426:7;;27470:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27460:4;27465:1;27460:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27460:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;27499:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;27574:7;;27499:9:::1;::::0;27612:4;;27639::::1;::::0;27659:15:::1;::::0;27499:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;27719:21:0::1;::::0;-1:-1:-1;27698:18:0::1;::::0;-1:-1:-1;27805:7:0;;-1:-1:-1;27779:22:0::1;27792:9:::0;27719:21;27779:22:::1;:::i;:::-;27778:34;;;;:::i;:::-;27751:61:::0;-1:-1:-1;27829:13:0;;27825:328:::1;;27859:9;::::0;:222:::1;::::0;;;;27936:4:::1;27859:222;::::0;::::1;31401:34:1::0;31451:18;;;31444:34;;;27859:9:0::1;31494:18:1::0;;;31487:34;;;31537:18;;;31530:34;6889:42:0::1;31580:19:1::0;;;31573:44;28051:15:0::1;31633:19:1::0;;;31626:35;-1:-1:-1;;;;;27859:9:0;;::::1;::::0;:25:::1;::::0;27892:16;;31312:19:1;;27859:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28101:40:0::1;::::0;;24187:25:1;;;24243:2;24228:18;;24221:34;;;28101:40:0::1;::::0;-1:-1:-1;24160:18:1;28101:40:0::1;;;;;;;27825:328;28165:30;28179:16:::0;28165:30;::::1;:::i;:::-;;;28222:6;:16;;;28206:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;28329:12:::1;::::0;::::1;::::0;28311:14;;28249:12:::1;::::0;-1:-1:-1;28249:12:0;;28297:44;;::::1;::::0;28298:27:::1;::::0;::::1;:10:::0;:27:::1;:::i;:::-;28297:44;;;;:::i;:::-;28272:69:::0;-1:-1:-1;28352:24:0::1;28379:29;28272:69:::0;28379:10;:29:::1;:::i;:::-;28425:14:::0;;28352:56;;-1:-1:-1;28425:18:0::1;;::::0;28421:105:::1;;28464:9;;;;;;;;;-1:-1:-1::0;;;;;28464:9:0::1;-1:-1:-1::0;;;;;28464:14:0::1;;28486;28464:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;28460:55:::0;::::1;28541:16;::::0;::::1;::::0;:20:::1;;::::0;28538:131:::1;;28590:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;28590:21:0;;::::1;::::0;28647:5:::1;::::0;28624:16;;28590:67:::1;::::0;;;28624:16;28590:21;28647:5;28590:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;28577:80:0;;-1:-1:-1;;28538:131:0::1;26912:1764;;;;;;;;;7898:1;-1:-1:-1::0;7910:6:0;:14;;-1:-1:-1;;7910:14:0;;;26842:1834::o;28684:630::-;28766:16;;;;;;;28765:17;28757:65;;;;-1:-1:-1;;;28757:65:0;;32617:2:1;28757:65:0;;;32599:21:1;32656:2;32636:18;;;32629:30;32695:34;32675:18;;;32668:62;32766:5;32746:18;;;32739:33;32789:19;;28757:65:0;32415:399:1;28757:65:0;28838:20;28849:4;28855:2;28838:10;:20::i;:::-;28837:21;:37;;;;-1:-1:-1;28868:6:0;;-1:-1:-1;;;;;28862:12:0;;;28868:6;;28862:12;28837:37;28833:474;;;-1:-1:-1;;;;;28891:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;28891:30:0;28917:4;28891:30;;;28936:16;:23;;;;;;;;;;28985:9;;;;28974:108;;29030:9;:36;;;;29060:4;29030:36;;;;;28974:108;29107:9;;-1:-1:-1;;;;;29107:9:0;29096:107;;29153:9;:34;;-1:-1:-1;;29153:34:0;29181:4;29153:34;;;29096:107;29217:19;:26;;-1:-1:-1;;29217:26:0;;;;;29263:32;;-1:-1:-1;4722:41:1;;29263:32:0;;4710:2:1;4695:18;29263:32:0;;;;;;;28684:630;;:::o;26187:647::-;26287:7;26307:18;26340:3;26336:205;;;-1:-1:-1;26373:9:0;:16;;;26336:205;;;26411:4;26407:134;;;-1:-1:-1;26445:9:0;:17;;;;;;26407:134;;;-1:-1:-1;26508:9:0;:21;;;;;;26407:134;26557:10;26571:1;26557:15;26553:61;;26596:6;26589:13;;;;;26553:61;26626:17;6781:5;26646:19;26655:10;26646:6;:19;:::i;:::-;:38;;;;:::i;:::-;26713:4;26697:22;;;;:7;:22;;;;;:35;;26626:58;;-1:-1:-1;26626:58:0;;26697:22;;;:35;;26626:58;;26697:35;:::i;:::-;;;;-1:-1:-1;;26748:40:0;;391:25:1;;;26771:4:0;;-1:-1:-1;;;;;26748:40:0;;;;;379:2:1;364:18;26748:40:0;;;;;;;26808:18;26817:9;26808:6;:18;:::i;:::-;26801:25;;;;26187:647;;;;;;;;:::o;25765:414::-;-1:-1:-1;;;;;25840:30:0;;;;;;:24;:30;;;;;;;;25835:115;;25891:9;;-1:-1:-1;;;;;25913:13:0;;;25891:9;25913:13;;;25891:9;25913:13;;;;;;;;25891:36;;-1:-1:-1;;;25891:36:0;;;;;21170:74:1;;;;21260:18;;;21253:34;25891:9:0;;;:15;;21143:18:1;;25891:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25887:52;;-1:-1:-1;;;;;25965:28:0;;;;;;:24;:28;;;;;;;;25960:109;;26014:9;;-1:-1:-1;;;;;26034:11:0;;;26014:9;26034:11;;;26014:9;26034:11;;;;;;;;26014:32;;-1:-1:-1;;;26014:32:0;;;;;21170:74:1;;;;21260:18;;;21253:34;26014:9:0;;;:15;;21143:18:1;;26014:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26010:48;;26083:14;;;;26079:93;;;26118:9;;26136:12;;26118:31;;;;;-1:-1:-1;;;;;26118:9:0;;;;:17;;:31;;;;391:25:1;;;379:2;364:18;;245:177;26118:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26114:47;;;25765:414;;:::o;427:184:1:-;-1:-1:-1;;;476:1: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;3019:258::-;3091:1;3101:113;3115:6;3112:1;3109:13;3101:113;;;3191:11;;;3185:18;3172:11;;;3165:39;3137:2;3130:10;3101:113;;;3232:6;3229:1;3226:13;3223:48;;;-1:-1:-1;;3267:1:1;3249:16;;3242:27;3019:258::o;3282:317::-;3324:3;3362:5;3356:12;3389:6;3384:3;3377:19;3405:63;3461:6;3454:4;3449:3;3445:14;3438:4;3431:5;3427:16;3405:63;:::i;:::-;3513:2;3501:15;-1:-1:-1;;3497:88:1;3488:98;;;;3588:4;3484:109;;3282:317;-1:-1:-1;;3282:317:1:o;3604:220::-;3753:2;3742:9;3735:21;3716:4;3773:45;3814:2;3803:9;3799:18;3791:6;3773:45;:::i;4077:180::-;4136:6;4189:2;4177:9;4168:7;4164:23;4160:32;4157:52;;;4205:1;4202;4195:12;4157:52;-1:-1:-1;4228:23:1;;4077:180;-1:-1:-1;4077:180:1:o;4262:315::-;4330:6;4338;4391:2;4379:9;4370:7;4366:23;4362:32;4359:52;;;4407:1;4404;4397:12;4359:52;4446:9;4433:23;4465:31;4490:5;4465:31;:::i;:::-;4515:5;4567:2;4552:18;;;;4539:32;;-1:-1:-1;;;4262:315:1:o;4774:247::-;4833:6;4886:2;4874:9;4865:7;4861:23;4857:32;4854:52;;;4902:1;4899;4892:12;4854:52;4941:9;4928:23;4960:31;4985:5;4960:31;:::i;5026:388::-;5094:6;5102;5155:2;5143:9;5134:7;5130:23;5126:32;5123:52;;;5171:1;5168;5161:12;5123:52;5210:9;5197:23;5229:31;5254:5;5229:31;:::i;:::-;5279:5;-1:-1:-1;5336:2:1;5321:18;;5308:32;5349:33;5308:32;5349:33;:::i;5419:456::-;5496:6;5504;5512;5565:2;5553:9;5544:7;5540:23;5536:32;5533:52;;;5581:1;5578;5571:12;5533:52;5620:9;5607:23;5639:31;5664:5;5639:31;:::i;:::-;5689:5;-1:-1:-1;5746:2:1;5731:18;;5718:32;5759:33;5718:32;5759:33;:::i;:::-;5419:456;;5811:7;;-1:-1:-1;;;5865:2:1;5850:18;;;;5837:32;;5419:456::o;5880:248::-;5948:6;5956;6009:2;5997:9;5988:7;5984:23;5980:32;5977:52;;;6025:1;6022;6015:12;5977:52;-1:-1:-1;;6048:23:1;;;6118:2;6103:18;;;6090:32;;-1:-1:-1;5880:248:1:o;6133:1138::-;6251:6;6259;6312:2;6300:9;6291:7;6287:23;6283:32;6280:52;;;6328:1;6325;6318:12;6280:52;6368:9;6355:23;6397:18;6438:2;6430:6;6427:14;6424:34;;;6454:1;6451;6444:12;6424:34;6477:61;6530:7;6521:6;6510:9;6506:22;6477:61;:::i;:::-;6467:71;;6557:2;6547:12;;6612:2;6601:9;6597:18;6584:32;6641:2;6631:8;6628:16;6625:36;;;6657:1;6654;6647:12;6625:36;6680:24;;;-1:-1:-1;6735:4:1;6727:13;;6723:27;-1:-1:-1;6713:55:1;;6764:1;6761;6754:12;6713:55;6800:2;6787:16;6823:60;6839:43;6879:2;6839:43;:::i;6823:60::-;6917:15;;;6999:1;6995:10;;;;6987:19;;6983:28;;;6948:12;;;;7023:19;;;7020:39;;;7055:1;7052;7045:12;7020:39;7079:11;;;;7099:142;7115:6;7110:3;7107:15;7099:142;;;7181:17;;7169:30;;7132:12;;;;7219;;;;7099:142;;;7260:5;7250:15;;;;;;;6133:1138;;;;;:::o;7276:647::-;7350:6;7358;7366;7374;7427:3;7415:9;7406:7;7402:23;7398:33;7395:53;;;7444:1;7441;7434:12;7395:53;7483:9;7470:23;7502:28;7524:5;7502:28;:::i;:::-;7549:5;-1:-1:-1;7606:2:1;7591:18;;7578:32;7619:30;7578:32;7619:30;:::i;:::-;7668:7;-1:-1:-1;7727:2:1;7712:18;;7699:32;7740:30;7699:32;7740:30;:::i;:::-;7789:7;-1:-1:-1;7848:2:1;7833:18;;7820:32;7861:30;7820:32;7861:30;:::i;:::-;7276:647;;;;-1:-1:-1;7276:647:1;;-1:-1:-1;;7276:647:1:o;8117:159::-;8184:20;;8244:6;8233:18;;8223:29;;8213:57;;8266:1;8263;8256:12;8213:57;8117:159;;;:::o;8281:328::-;8355:6;8363;8371;8424:2;8412:9;8403:7;8399:23;8395:32;8392:52;;;8440:1;8437;8430:12;8392:52;8463:28;8481:9;8463:28;:::i;:::-;8453:38;;8510:37;8543:2;8532:9;8528:18;8510:37;:::i;:::-;8500:47;;8566:37;8599:2;8588:9;8584:18;8566:37;:::i;:::-;8556:47;;8281:328;;;;;:::o;8614:382::-;8679:6;8687;8740:2;8728:9;8719:7;8715:23;8711:32;8708:52;;;8756:1;8753;8746:12;8708:52;8795:9;8782:23;8814:31;8839:5;8814:31;:::i;:::-;8864:5;-1:-1:-1;8921:2:1;8906:18;;8893:32;8934:30;8893:32;8934:30;:::i;9001:711::-;9294:3;9283:9;9276:22;9257:4;9321:46;9362:3;9351:9;9347:19;9339:6;9321:46;:::i;:::-;9415:9;9407:6;9403:22;9398:2;9387:9;9383:18;9376:50;9449:33;9475:6;9467;9449:33;:::i;:::-;9435:47;;9530:9;9522:6;9518:22;9513:2;9502:9;9498:18;9491:50;9564:33;9590:6;9582;9564:33;:::i;:::-;9550:47;;9645:9;9637:6;9633:22;9628:2;9617:9;9613:18;9606:50;9673:33;9699:6;9691;9673:33;:::i;9717:511::-;9785:6;9793;9801;9854:2;9842:9;9833:7;9829:23;9825:32;9822:52;;;9870:1;9867;9860:12;9822:52;9909:9;9896:23;9928:28;9950:5;9928:28;:::i;:::-;9975:5;-1:-1:-1;10032:2:1;10017:18;;10004:32;10045:30;10004:32;10045:30;:::i;:::-;10094:7;-1:-1:-1;10153:2:1;10138:18;;10125:32;10166:30;10125:32;10166:30;:::i;:::-;10215:7;10205:17;;;9717:511;;;;;:::o;10233:316::-;10310:6;10318;10326;10379:2;10367:9;10358:7;10354:23;10350:32;10347:52;;;10395:1;10392;10385:12;10347:52;-1:-1:-1;;10418:23:1;;;10488:2;10473:18;;10460:32;;-1:-1:-1;10539:2:1;10524:18;;;10511:32;;10233:316;-1:-1:-1;10233:316:1:o;10554:385::-;10640:6;10648;10656;10664;10717:3;10705:9;10696:7;10692:23;10688:33;10685:53;;;10734:1;10731;10724:12;10685:53;-1:-1:-1;;10757:23:1;;;10827:2;10812:18;;10799:32;;-1:-1:-1;10878:2:1;10863:18;;10850:32;;10929:2;10914:18;10901:32;;-1:-1:-1;10554:385:1;-1:-1:-1;10554:385:1:o;12261:484::-;12314:3;12352:5;12346:12;12379:6;12374:3;12367:19;12405:4;12434:2;12429:3;12425:12;12418:19;;12471:2;12464:5;12460:14;12492:1;12502:218;12516:6;12513:1;12510:13;12502:218;;;12581:13;;-1:-1:-1;;;;;12577:62:1;12565:75;;12660:12;;;;12695:15;;;;12538:1;12531:9;12502:218;;;-1:-1:-1;12736:3:1;;12261:484;-1:-1:-1;;;;;12261:484:1:o;12750:342::-;12951:2;12940:9;12933:21;12914:4;12971:56;13023:2;13012:9;13008:18;13000:6;12971:56;:::i;:::-;12963:64;;13077:6;13070:14;13063:22;13058:2;13047:9;13043:18;13036:50;12750:342;;;;;:::o;13097:184::-;-1:-1:-1;;;13146:1:1;13139:88;13246:4;13243:1;13236:15;13270:4;13267:1;13260:15;13286:184;-1:-1:-1;;;13335:1:1;13328:88;13435:4;13432:1;13425:15;13459:4;13456:1;13449:15;13475:195;13514:3;-1:-1:-1;;13538:5:1;13535:77;13532:103;;13615:18;;:::i;:::-;-1:-1:-1;13662:1:1;13651:13;;13475:195::o;14011:482::-;14100:1;14143:5;14100:1;14157:330;14178:7;14168:8;14165:21;14157:330;;;14297:4;-1:-1:-1;;14225:77:1;14219:4;14216:87;14213:113;;;14306:18;;:::i;:::-;14356:7;14346:8;14342:22;14339:55;;;14376:16;;;;14339:55;14455:22;;;;14415:15;;;;14157:330;;;14161:3;14011:482;;;;;:::o;14498:866::-;14547:5;14577:8;14567:80;;-1:-1:-1;14618:1:1;14632:5;;14567:80;14666:4;14656:76;;-1:-1:-1;14703:1:1;14717:5;;14656:76;14748:4;14766:1;14761:59;;;;14834:1;14829:130;;;;14741:218;;14761:59;14791:1;14782:10;;14805:5;;;14829:130;14866:3;14856:8;14853:17;14850:43;;;14873:18;;:::i;:::-;-1:-1:-1;;14929:1:1;14915:16;;14944:5;;14741:218;;15043:2;15033:8;15030:16;15024:3;15018:4;15015:13;15011:36;15005:2;14995:8;14992:16;14987:2;14981:4;14978:12;14974:35;14971:77;14968:159;;;-1:-1:-1;15080:19:1;;;15112:5;;14968:159;15159:34;15184:8;15178:4;15159:34;:::i;:::-;15289:6;-1:-1:-1;;15217:79:1;15208:7;15205:92;15202:118;;;15300:18;;:::i;:::-;15338:20;;14498:866;-1:-1:-1;;;14498:866:1:o;15369:140::-;15427:5;15456:47;15497:4;15487:8;15483:19;15477:4;15456:47;:::i;15514:274::-;15554:1;15580;15570:189;;-1:-1:-1;;;15612:1:1;15605:88;15716:4;15713:1;15706:15;15744:4;15741:1;15734:15;15570:189;-1:-1:-1;15773:9:1;;15514:274::o;15793:228::-;15833:7;15959:1;-1:-1:-1;;15887:74:1;15884:1;15881:81;15876:1;15869:9;15862:17;15858:105;15855:131;;;15966:18;;:::i;:::-;-1:-1:-1;16006:9:1;;15793:228::o;16026:125::-;16066:4;16094:1;16091;16088:8;16085:34;;;16099:18;;:::i;:::-;-1:-1:-1;16136:9:1;;16026:125::o;16925:175::-;16962:3;17006:4;16999:5;16995:16;17035:4;17026:7;17023:17;17020:43;;17043:18;;:::i;:::-;17092:1;17079:15;;16925:175;-1:-1:-1;;16925:175:1:o;17893:224::-;17932:3;17960:6;17993:2;17990:1;17986:10;18023:2;18020:1;18016:10;18054:3;18050:2;18046:12;18041:3;18038:21;18035:47;;;18062:18;;:::i;:::-;18098:13;;17893:224;-1:-1:-1;;;;17893:224:1:o;19262:184::-;19332:6;19385:2;19373:9;19364:7;19360:23;19356:32;19353:52;;;19401:1;19398;19391:12;19353:52;-1:-1:-1;19424:16:1;;19262:184;-1:-1:-1;19262:184:1:o;19451:556::-;19505:5;19558:3;19551:4;19543:6;19539:17;19535:27;19525:55;;19576:1;19573;19566:12;19525:55;19605:6;19599:13;19631:18;19627:2;19624:26;19621:52;;;19653:18;;:::i;:::-;19697:114;19805:4;-1:-1:-1;;19729:4:1;19725:2;19721:13;19717:86;19713:97;19697:114;:::i;:::-;19836:2;19827:7;19820:19;19882:3;19875:4;19870:2;19862:6;19858:15;19854:26;19851:35;19848:55;;;19899:1;19896;19889:12;19848:55;19912:64;19973:2;19966:4;19957:7;19953:18;19946:4;19938:6;19934:17;19912:64;:::i;20012:971::-;20149:6;20157;20165;20173;20226:3;20214:9;20205:7;20201:23;20197:33;20194:53;;;20243:1;20240;20233:12;20194:53;20276:9;20270:16;20305:18;20346:2;20338:6;20335:14;20332:34;;;20362:1;20359;20352:12;20332:34;20385:61;20438:7;20429:6;20418:9;20414:22;20385:61;:::i;:::-;20375:71;;20492:2;20481:9;20477:18;20471:25;20455:41;;20521:2;20511:8;20508:16;20505:36;;;20537:1;20534;20527:12;20505:36;20560:63;20615:7;20604:8;20593:9;20589:24;20560:63;:::i;:::-;20550:73;;20669:2;20658:9;20654:18;20648:25;20632:41;;20698:2;20688:8;20685:16;20682:36;;;20714:1;20711;20704:12;20682:36;20737:63;20792:7;20781:8;20770:9;20766:24;20737:63;:::i;:::-;20727:73;;20846:2;20835:9;20831:18;20825:25;20809:41;;20875:2;20865:8;20862:16;20859:36;;;20891:1;20888;20881:12;20859:36;;20914:63;20969:7;20958:8;20947:9;20943:24;20914:63;:::i;:::-;20904:73;;;20012:971;;;;;;;:::o;23877:131::-;23937:5;23966:36;23993:8;23987:4;23966:36;:::i;24690:251::-;24760:6;24813:2;24801:9;24792:7;24788:23;24784:32;24781:52;;;24829:1;24826;24819:12;24781:52;24861:9;24855:16;24880:31;24905:5;24880:31;:::i;26037:245::-;26104:6;26157:2;26145:9;26136:7;26132:23;26128:32;26125:52;;;26173:1;26170;26163:12;26125:52;26205:9;26199:16;26224:28;26246:5;26224:28;:::i;28269:128::-;28309:3;28340:1;28336:6;28333:1;28330:13;28327:39;;;28346:18;;:::i;:::-;-1:-1:-1;28382:9:1;;28269:128::o;30427:605::-;30726:6;30715:9;30708:25;30769:6;30764:2;30753:9;30749:18;30742:34;30812:3;30807:2;30796:9;30792:18;30785:31;30689:4;30833:57;30885:3;30874:9;30870:19;30862:6;30833:57;:::i;:::-;-1:-1:-1;;;;;30926:55:1;;;;30921:2;30906:18;;30899:83;-1:-1:-1;31013:3:1;30998:19;30991:35;30825:65;30427:605;-1:-1:-1;;;30427:605:1:o;31672:306::-;31760:6;31768;31776;31829:2;31817:9;31808:7;31804:23;31800:32;31797:52;;;31845:1;31842;31835:12;31797:52;31874:9;31868:16;31858:26;;31924:2;31913:9;31909:18;31903:25;31893:35;;31968:2;31957:9;31953:18;31947:25;31937:35;;31672:306;;;;;:::o;31983:217::-;32022:4;32051:6;32107:10;;;;32077;;32129:12;;;32126:38;;;32144:18;;:::i;:::-;32181:13;;31983:217;-1:-1:-1;;;31983:217:1:o

Swarm Source

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