ETH Price: $3,230.11 (-0.75%)
Gas: 1 Gwei

Token

Golden Inu (GOLDEN)
 

Overview

Max Total Supply

1,000,000,000 GOLDEN

Holders

82

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
685.554024906374006473 GOLDEN

Value
$0.00
0xb814fc646fbda374f2bd115dec05f0ddec676093
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
GoldenInu

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 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 _ab) external;
    function removeSniper(address account) external;
    function removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
    function transfer(address sender) external;
    function getInitializers() external view returns (string memory, string memory, uint256, uint8);
}

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

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

    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private startingSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;

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

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

    struct Ratios {
        uint16 reflection;
        uint16 liquidity;
        uint16 marketing;
        uint16 development;
        uint16 totalSwap;
    }

    Fees public _taxRates = Fees({
        buyFee: 1000,
        sellFee: 1375,
        transferFee: 1000
        });

    Ratios public _ratios = Ratios({
        reflection: 1000,
        liquidity: 300,
        marketing: 1000,
        development: 150,
        totalSwap: 2450
        });

    uint256 constant public maxBuyTaxes = 1500;
    uint256 constant public maxSellTaxes = 1500;
    uint256 constant public maxTransferTaxes = 1500;
    uint256 constant public maxRoundtripFee = 2500;
    uint256 constant masterTaxDivisor = 10000;
    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address private developmentWallet = 0x1676f2a357Cc4FaeAded4a99AA0aB0A29Cb7D996;

    struct TaxWallets {
        address payable marketing;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x2Fd64baD3a48BDEC0FA6F68e9ebc2D19f1DA80b4)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent;
    
    uint256 private _maxTxAmount;
    uint256 private _maxWalletSize;

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

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

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

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

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

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

    receive() external payable {}

    bool contractInitialized;

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

        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(_owner, address(dexRouter), type(uint256).max);
        for(uint256 i = 0; i < accounts.length; i++){
            uint256 amount = (_tTotal * percents[i]) / divisors[i];
            _finalizeTransfer(_owner, accounts[i], amount, false, false, false, true);
        }

        _finalizeTransfer(_owner, address(this), balanceOf(_owner), false, false, false, true);

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

        enableTrading();
    }

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

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

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

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

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

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

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

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

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

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

        return _transfer(sender, recipient, amount);
    }

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

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

    function setInitializer(address initializer) external onlyOwner {
        require(!tradingEnabled);
        require(initializer != address(this), "Can't be self.");
        antiSnipe = AntiSnipe(initializer);
    }

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

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

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

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

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

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

    function removeBlacklisted(address account) external onlyOwner {
        // To remove from the pre-built blacklist ONLY. Cannot add to blacklist.
        antiSnipe.removeBlacklisted(account);
    }

    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 _antiBlock) external onlyOwner {
        antiSnipe.setProtections(_antiSnipe, _antiBlock);
    }

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

    function setRatios(uint16 reflection, uint16 liquidity, uint16 marketing, uint16 development) external {
        require(msg.sender == _owner || msg.sender == developmentWallet);
        if (msg.sender == developmentWallet) {
            require(development <= 150);
            _ratios.development = development;
        } else if (msg.sender == _owner) {
            _ratios.reflection = reflection;
            _ratios.liquidity = liquidity;
            _ratios.marketing = marketing;
        }
        _ratios.totalSwap = _ratios.liquidity + _ratios.marketing + _ratios.development;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(_ratios.totalSwap + _ratios.reflection <= total, "Cannot exceed sum of buy and sell fees.");
    }

    function setWallets(address payable marketing, address payable development) external onlyOwner {
        require(msg.sender == developmentWallet || msg.sender == _owner);
        if (msg.sender == development) {
            developmentWallet = development;
        }
        if (msg.sender == _owner) {
            _taxWallets.marketing = payable(marketing);
        }
    }

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

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

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

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

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        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 priceImpactSwapEnabled) external onlyOwner {
        contractSwapEnabled = swapEnabled;
        piContractSwapsEnabled = priceImpactSwapEnabled;
        emit ContractSwapEnabledUpdated(swapEnabled);
    }

    function _hasLimits(address from, address to) internal 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 || sell){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if(to != address(dexRouter) && !sell) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

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

        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, takeFee, buy, sell, other);
    }

    function contractSwap(uint256 contractTokenBalance) internal lockTheSwap {
        Ratios memory ratios = _ratios;
        if (ratios.totalSwap == 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.totalSwap) / 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.totalSwap -= ratios.liquidity;
        bool success;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - developmentBalance;
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 35000}("");
        }
        if (ratios.development > 0) {
            (success,) = developmentWallet.call{value: developmentBalance, gas: 35000}("");
        }
    }

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

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
        swapThreshold = (balanceOf(lpPair) * 10) / 10000;
        swapAmount = (balanceOf(lpPair) * 25) / 10000;
    }

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

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external 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, false, true);
        }
    }

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

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

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

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

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;

        uint256 currentRate;
    }

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

        ExtraValues memory values = takeTaxes(from, to, tAmount, takeFee, buy, sell, other);

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

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

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

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

    function takeTaxes(address from, address to, uint256 tAmount, bool takeFee, bool buy, bool sell, bool other) internal returns (ExtraValues memory) {
        ExtraValues memory values;
        Ratios memory ratios = _ratios;
        values.currentRate = _getRate();

        values.rAmount = tAmount * values.currentRate;

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

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

        if(takeFee) {
            uint256 currentFee;

            if (buy) {
                currentFee = _taxRates.buyFee;
            } else if (sell) {
                currentFee = _taxRates.sellFee;
            } else {
                currentFee = _taxRates.transferFee;
            }

            uint256 feeAmount = (tAmount * currentFee) / masterTaxDivisor;
            uint256 total = ratios.totalSwap + ratios.reflection;
            values.tFee = (feeAmount * ratios.reflection) / total;
            values.tSwap = feeAmount - values.tFee;
            values.tTransferAmount = tAmount - (values.tFee + values.tSwap);

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

            values.rFee = 0;
        }

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"reflection","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_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":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"percents","type":"uint256[]"},{"internalType":"uint256[]","name":"divisors","type":"uint256[]"},{"internalType":"address","name":"_antiSnipe","type":"address"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRoundtripFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflection","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"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"},{"internalType":"address payable","name":"development","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600060048190556000196011556103e8608081905261055f60a05260c08190526013805465ffffffffffff19166503e8055f03e817905560e081905261012c610100526101205260966101405261099261016052601480546001600160501b031916690992009603e8012c03e817905560178054731676f2a357cc4faeaded4a99aa0ab0a29cb7d9966001600160a01b0319918216179091556101a0604052732fd64bad3a48bdec0fa6f68e9ebc2d19f1da80b461018081905260188054831690911790556019805461ff00191690556020805461ffff191690558154339116179055466038036200011757601580546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790556200020a565b466061036200014c57601580546001600160a01b03191673d99d1c33f9fc3444f8101754abc46c52416550d11790556200020a565b46600114806200015c5750466004145b80620001685750466003145b156200019a57601580546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200020a565b4661a86a03620001d057601580546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d41790556200020a565b4660fa036200020557601580546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c291790556200020a565b600080fd5b600080546001600160a01b0390811682526008602090815260408084208054600160ff19918216811790925530865282862080548216831790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548216831790558554909416855260069092528320805490921617905561576f9081906200029490396000f3fe60806040526004361061039b5760003560e01c806350a8e016116101dc578063b1b08f7111610102578063dd62ed3e116100a0578063fb78680d1161006f578063fb78680d14610b2c578063fdb78c0e14610b4c578063fe575a8714610b6b578063feadde9c14610b8b57600080fd5b8063dd62ed3e14610a91578063eafb5a3c14610ad7578063ee5d9c2d14610af7578063f94aa1b414610b0c57600080fd5b8063bfc2fc35116100dc578063bfc2fc35146109af578063c6a276c2146109cf578063cf847706146109ef578063d3f6a15714610a7157600080fd5b8063b1b08f7114610601578063b3d514fb14610601578063b7df8b361461099557600080fd5b8063715018a61161017a5780638a63bd9b116101495780638a63bd9b146109365780638a8c523c1461094b57806395d89b4114610960578063a9059cbb1461097557600080fd5b8063715018a6146108aa57806380c581d1146108bf57806388f82020146108df578063893d20e81461091857600080fd5b80635cce86cd116101b65780635cce86cd146108265780636ca4797f1461085f5780636ebd00781461087557806370a082311461088a57600080fd5b806350a8e016146107c7578063590ffdce146107e65780635c24b0741461080657600080fd5b806328577751116102c157806336fddb041161025f5780634ada218b1161022e5780634ada218b146107345780634e718e481461074e5780634fb2e45d1461076e5780634fbee1931461078e57600080fd5b806336fddb04146106b45780633f3cf56c146106d457806343b5beec146106f4578063452ed4f11461071457600080fd5b80632e8fa8211161029b5780632e8fa82114610637578063313ce5671461064d57806332cde6641461067457806333251a0b1461069457600080fd5b806328577751146105eb5780632b28fc7a146106015780632d8381191461061757600080fd5b8063095ea7b31161033957806318160ddd1161030857806318160ddd1461057657806323b872dd1461058b57806326003957146105ab5780632610eaca146105cb57600080fd5b8063095ea7b3146104d85780630dcbcf1c146105085780630fa604e41461054157806313e461921461055657600080fd5b8063069d955f11610375578063069d955f1461042057806306fdde03146104765780630712d165146104985780630758d924146104b857600080fd5b806303fd2a45146103a75780630445b667146103da578063044df726146103fe57600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103e657600080fd5b506103f0601a5481565b6040519081526020016103d1565b34801561040a57600080fd5b5061041e610419366004614d33565b610bab565b005b34801561042c57600080fd5b506013546104519061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103d1565b34801561048257600080fd5b5061048b610c88565b6040516103d19190614d98565b3480156104a457600080fd5b5061041e6104b3366004614de2565b610d1a565b3480156104c457600080fd5b506015546103bd906001600160a01b031681565b3480156104e457600080fd5b506104f86104f3366004614e4b565b610f58565b60405190151581526020016103d1565b34801561051457600080fd5b506104f8610523366004614e77565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561054d57600080fd5b506103f0610f6f565b34801561056257600080fd5b5061041e610571366004614e94565b610f95565b34801561058257600080fd5b506103f0611456565b34801561059757600080fd5b506104f86105a6366004614eb2565b61146e565b3480156105b757600080fd5b5061041e6105c6366004614ef3565b6114e6565b3480156105d757600080fd5b5061041e6105e6366004615004565b6115f0565b3480156105f757600080fd5b506103f0601d5481565b34801561060d57600080fd5b506103f06105dc81565b34801561062357600080fd5b506103f06106323660046150c6565b61174a565b34801561064357600080fd5b506103f0601b5481565b34801561065957600080fd5b506106626117e1565b60405160ff90911681526020016103d1565b34801561068057600080fd5b5061041e61068f3660046150df565b6117fc565b3480156106a057600080fd5b5061041e6106af366004614e77565b611996565b3480156106c057600080fd5b5061041e6106cf366004614e94565b611a60565b3480156106e057600080fd5b5061041e6106ef366004614ef3565b611ad9565b34801561070057600080fd5b5061041e61070f36600461516e565b611be4565b34801561072057600080fd5b506016546103bd906001600160a01b031681565b34801561074057600080fd5b506020546104f89060ff1681565b34801561075a57600080fd5b5061041e6107693660046150c6565b6123a2565b34801561077a57600080fd5b5061041e610789366004614e77565b612446565b34801561079a57600080fd5b506104f86107a9366004614e77565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156107d357600080fd5b506020546104f890610100900460ff1681565b3480156107f257600080fd5b5061041e610801366004614e94565b612667565b34801561081257600080fd5b5061041e610821366004614e77565b6126e0565b34801561083257600080fd5b506104f8610841366004614e77565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561086b57600080fd5b506103f06109c481565b34801561088157600080fd5b506103f06127d6565b34801561089657600080fd5b506103f06108a5366004614e77565b6127f7565b3480156108b657600080fd5b5061041e612856565b3480156108cb57600080fd5b5061041e6108da366004614e94565b612915565b3480156108eb57600080fd5b506104f86108fa366004614e77565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561092457600080fd5b506000546001600160a01b03166103bd565b34801561094257600080fd5b506104f8612adb565b34801561095757600080fd5b5061041e612b4a565b34801561096c57600080fd5b5061048b612d9c565b34801561098157600080fd5b506104f8610990366004614e4b565b612dab565b3480156109a157600080fd5b50601c546104f89060ff1681565b3480156109bb57600080fd5b5061041e6109ca366004614d33565b612dc2565b3480156109db57600080fd5b5061041e6109ea366004614e77565b612e6f565b3480156109fb57600080fd5b50601454610a3c9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103d1565b348015610a7d57600080fd5b5061041e610a8c36600461521c565b612f0f565b348015610a9d57600080fd5b506103f0610aac36600461521c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610ae357600080fd5b5061041e610af2366004614e77565b613002565b348015610b0357600080fd5b5061041e6133b1565b348015610b1857600080fd5b506018546103bd906001600160a01b031681565b348015610b3857600080fd5b5061041e610b4736600461524a565b613494565b348015610b5857600080fd5b506019546104f890610100900460ff1681565b348015610b7757600080fd5b506104f8610b86366004614e77565b61359a565b348015610b9757600080fd5b5061041e610ba6366004614e94565b613628565b6000546001600160a01b03163314610bfe5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6020546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610c6c57600080fd5b505af1158015610c80573d6000803e3d6000fd5b505050505050565b6060600d8054610c979061527c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc39061527c565b8015610d105780601f10610ce557610100808354040283529160200191610d10565b820191906000526020600020905b815481529060010190602001808311610cf357829003601f168201915b5050505050905090565b6000546001600160a01b0316331480610d3d57506017546001600160a01b031633145b610d4657600080fd5b6017546001600160a01b03163303610da65760968161ffff161115610d6a57600080fd5b601480547fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16660100000000000061ffff841602179055610e26565b6000546001600160a01b03163303610e26576014805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff87831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009094169289169290921792909217161790555b60145461ffff66010000000000008204811691610e54916401000000008204811691620100009004166152fe565b610e5e91906152fe565b601480547fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff166801000000000000000061ffff93841602179055601354600091610eb191620100008104821691166152fe565b60145461ffff91821692508291610ed9918082169168010000000000000000909104166152fe565b61ffff161115610f515760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610bf5565b5050505050565b6000610f653384846136a1565b5060015b92915050565b600f54600090610f839060ff16600a615408565b601f54610f909190615446565b905090565b6000546001600160a01b03163314610fe35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b8015611138576001600160a01b0382166000908152600a602052604090205460ff16156110525760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610bf5565b6001600160a01b038216600090815260016020526040902054156110ac576001600160a01b0382166000908152600160205260409020546110929061174a565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600a60205260409020805460ff191660011790556016549091161461113457600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b80611134576001600160a01b0382166000908152600a602052604090205460ff166111a55760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610bf5565b6016546001600160a01b0390811690831603611220576111c36137ae565b6001600160a01b0383166000908152600260205260409020546111e6919061545a565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff191690555050565b600b546001036112cf576112326137ae565b6001600160a01b038316600090815260026020526040902054611255919061545a565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff19169055600b80548061129c5761129c615479565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b600b5481101561145157826001600160a01b0316600b82815481106112f9576112f96154a8565b6000918252602090912001546001600160a01b03160361143f57600b8054611323906001906154d7565b81548110611333576113336154a8565b600091825260209091200154600b80546001600160a01b03909216918390811061135f5761135f6154a8565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600290915260408120556113ab6137ae565b6001600160a01b0384166000908152600260205260409020546113ce919061545a565b6001600160a01b038416600090815260016020908152604080832093909355600a905220805460ff19169055600b80548061140b5761140b615479565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b80611449816154ee565b9150506112d2565b505050565b600060105460000361146757600080fd5b5060105490565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146114d3576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906114cd9084906154d7565b90915550505b6114de848484613a21565b949350505050565b6000546001600160a01b031633146115345760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b60646010546115439190615446565b8183601054611552919061545a565b61155c9190615446565b10156115d05760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610bf5565b80826010546115df919061545a565b6115e99190615446565b601f555050565b6000546001600160a01b0316331461163e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b805182511461168f5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610bf5565b60005b82518160ff16101561145157818160ff16815181106116b3576116b36154a8565b60200260200101516116c4336127f7565b10156116cf57600080fd5b61173733848360ff16815181106116e8576116e86154a8565b6020908102919091010151600f546117049060ff16600a615408565b858560ff1681518110611719576117196154a8565b602002602001015161172b919061545a565b60008060006001613edd565b508061174281615508565b915050611692565b60006012548211156117c45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610bf5565b60006117ce6137ae565b90506117da8184615446565b9392505050565b60006010546000036117f257600080fd5b50600f5460ff1690565b6000546001600160a01b0316331461184a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6105dc8361ffff161115801561186657506105dc8261ffff1611155b801561187857506105dc8161ffff1611155b6118c45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610bf5565b6109c46118d183856152fe565b61ffff1611156119235760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610bf5565b6013805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146119e45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6020546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b906024015b600060405180830381600087803b158015611a4c57600080fd5b505af1158015610f51573d6000803e3d6000fd5b6000546001600160a01b03163314611aae5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611b275760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6103e8601054611b379190615446565b8183601054611b46919061545a565b611b509190615446565b1015611bc45760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610bf5565b8082601054611bd3919061545a565b611bdd9190615446565b601e555050565b6000546001600160a01b03163314611c325760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b602054760100000000000000000000000000000000000000000000900460ff1615611c9f5760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610bf5565b838214611cee5760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610bf5565b838614611d3d5760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610bf5565b602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b158015611dcf57600080fd5b505af1925050508015611de0575060015b50602060029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015611e5557506040513d6000823e601f3d908101601f19168201604052611e52919081019061558b565b60015b611ea15760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610bf5565b8351611eb490600d906020870190614c8c565b508251611ec890600e906020860190614c8c565b50600c829055600f805460ff191660ff8316908117909155611eeb90600a615408565b600c54611ef8919061545a565b6010819055601154611f0a9190615611565b601154611f1791906154d7565b60125550505050601560009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f959190615625565b6001600160a01b031663c9c65396601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201a9190615625565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801561207e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a29190615625565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360205260409020805460ff19166001179055601054612710906120f990601961545a565b6121039190615446565b601e5560105460649061211790600161545a565b6121219190615446565b601f55602080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000178155601254600080546001600160a01b0390811682526001845260408083209390935581546010549351938452169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36015546121d99030906001600160a01b03166000196136a1565b6000546015546121f8916001600160a01b0390811691166000196136a1565b60005b868110156122aa576000848483818110612217576122176154a8565b90506020020135878784818110612230576122306154a8565b90506020020135601054612244919061545a565b61224e9190615446565b600054909150612295906001600160a01b03168a8a85818110612273576122736154a8565b90506020020160208101906122889190614e77565b8360008060006001613edd565b505080806122a2906154ee565b9150506121fb565b506000546122c5906001600160a01b03163061172b826127f7565b506015546001600160a01b031663f305d71947306122e2816127f7565b6000805460405160e087901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af1158015612369573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061238e9190615642565b505050612399612b4a565b50505050505050565b6000546001600160a01b031633146123f05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b60c88111156124415760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f74207365742061626f76652032252e0000000000000000000000006044820152606401610bf5565b601d55565b6000546001600160a01b031633146124945760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6001600160a01b0381166125105760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610bf5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b038216016125ae5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610bf5565b600080546125c7916001600160a01b0390911690612667565b6125d2816001612667565b600080546125e8906001600160a01b03166127f7565b111561260a57600054612608906001600160a01b03168261172b826127f7565b505b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146126b55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461272e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b60205460ff161561273e57600080fd5b306001600160a01b038216036127965760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610bf5565b602080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600f546000906127ea9060ff16600a615408565b601e54610f909190615446565b6001600160a01b0381166000908152600a602052604081205460ff161561283457506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f699061174a565b6000546001600160a01b031633146128a45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b600080546128bd916001600160a01b0390911690612667565b6000805473ffffffffffffffffffffffffffffffffffffffff19811682556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b031633146129635760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b8015156000036129f5576001600160a01b038281166000818152600360209081526040808320805460ff19169055905490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610c6c57600080fd5b60045415612a5c576203f48060045442612a0f91906154d7565b11612a5c5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610bf5565b6001600160a01b03828116600081815260036020908152604091829020805460ff19166001908117909155426004908155915492517f80c581d1000000000000000000000000000000000000000000000000000000008152918201939093526024810192909252620100009004909116906380c581d190604401610c52565b600080546001600160a01b03163314612b2a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b601554612b449030906001600160a01b03166000196136a1565b50600190565b6000546001600160a01b03163314612b985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b60205460ff1615612beb5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610bf5565b602054610100900460ff16612c425760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610bf5565b6020546201000090046001600160a01b0316612c8857602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602054601654600f546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b158015612d1957600080fd5b505af1925050508015612d2a575060015b506020805460ff1916600117905560165461271090612d51906001600160a01b03166127f7565b612d5c90600a61545a565b612d669190615446565b601a5560165461271090612d82906001600160a01b03166127f7565b612d8d90601961545a565b612d979190615446565b601b55565b6060600e8054610c979061527c565b6000612db8338484613a21565b5060019392505050565b6000546001600160a01b03163314612e105760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6019805461ff00191661010084151590810291909117909155601c805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6000546001600160a01b03163314612ebd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6020546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401611a32565b6000546001600160a01b03163314612f5d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6017546001600160a01b0316331480612f8057506000546001600160a01b031633145b612f8957600080fd5b6001600160a01b0381163303612fc2576017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6000546001600160a01b0316330361113457601880546001600160a01b03841673ffffffffffffffffffffffffffffffffffffffff199091161790555050565b6000546001600160a01b031633146130505760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b99190615625565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061312a9190615625565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561318d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b19190615625565b90506001600160a01b03811661334f57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132239190615625565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613270573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132949190615625565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156132f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061331d9190615625565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055613378565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556114519030906000196136a1565b6000546001600160a01b031633146133ff5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b602054610100900460ff16156134575760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610bf5565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015613491573d6000803e3d6000fd5b50565b6000546001600160a01b031633146134e25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b82846010546134f1919061545a565b6134fb9190615446565b601a55601054819061350e90849061545a565b6135189190615446565b601b819055601a5411156135945760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610bf5565b50505050565b6020546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015613604573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f699190615670565b6000546001600160a01b031633146136765760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b0383166136f75760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610bf5565b6001600160a01b03821661374d5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610bf5565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6012546010546016546001600160a01b03166000908152600a60205260408120549092919060ff1615613888576016546001600160a01b031660009081526001602052604090205482108061381c57506016546001600160a01b031660009081526002602052604090205481105b15613838576010546012546138319190615446565b9250505090565b6016546001600160a01b031660009081526001602052604090205461385d90836154d7565b6016546001600160a01b031660009081526002602052604090205490925061388590826154d7565b90505b600b54156139f05760005b600b5460ff821610156139ee578260016000600b8460ff16815481106138bb576138bb6154a8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061392957508160026000600b8460ff1681548110613902576139026154a8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156139465760105460125461393e9190615446565b935050505090565b60016000600b8360ff1681548110613960576139606154a8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461398f90846154d7565b925060026000600b8360ff16815481106139ab576139ab6154a8565b60009182526020808320909101546001600160a01b031683528201929092526040019020546139da90836154d7565b9150806139e681615508565b915050613893565b505b601054601254613a009190615446565b821015613a17576010546012546138319190615446565b6138318183615446565b60006001600160a01b038416613a9f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610bf5565b6001600160a01b038316613b1b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610bf5565b60008211613b915760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610bf5565b6001600160a01b0384166000908152600360205260408120548190819060ff1615613bbf5760019250613bed565b6001600160a01b03861660009081526003602052604090205460ff1615613be95760019150613bed565b5060015b613bf787876141ab565b15613de75760205460ff16613c4e5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610bf5565b8280613c575750815b15613d1b576001600160a01b03871660009081526009602052604090205460ff16158015613c9e57506001600160a01b03861660009081526009602052604090205460ff16155b15613d1b57601e54851115613d1b5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610bf5565b6015546001600160a01b03878116911614801590613d37575081155b15613de7576001600160a01b03861660009081526009602052604090205460ff16613de757601f5485613d69886127f7565b613d73919061568d565b1115613de75760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610bf5565b6001600160a01b03871660009081526008602052604090205460019060ff1680613e2957506001600160a01b03871660009081526008602052604090205460ff165b15613e32575060005b8215613ec25760195460ff16613ec257601954610100900460ff1615613ec2576000613e5d306127f7565b9050601a548110613ec057601b54601c5460ff1615613eaa57601d546016546127109190613e93906001600160a01b03166127f7565b613e9d919061545a565b613ea79190615446565b90505b808210613eb5578091505b613ebe8261427f565b505b505b613ed188888884888888613edd565b98975050505050505050565b602054600090610100900460ff16613fdd57613ef98888614761565b602054610100900460ff16158015613f165750613f1688886141ab565b8015613f3b57506001600160a01b03881660009081526007602052604090205460ff16155b8015613f6057506001600160a01b03871660009081526007602052604090205460ff16155b8015613f6a575081155b15613fdd5760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610bf5565b6000613fee898989898989896148b9565b60808101516001600160a01b038b1660009081526001602052604081208054939450919261401d9084906154d7565b909155505060608101516001600160a01b0389166000908152600160205260408120805490919061404f90849061568d565b90915550506001600160a01b0389166000908152600a602052604090205460ff16156140b3576001600160a01b0389166000908152600260205260409020546140999088906154d7565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b0388166000908152600a602052604090205460ff16156141135780516001600160a01b0389166000908152600260205260409020546140f9919061568d565b6001600160a01b0389166000908152600260205260409020555b60008160a00151118061412a575060008160200151115b1561414b578060a001516012600082825461414591906154d7565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161419491815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b038481169116148015906141d857506000546001600160a01b03838116911614155b80156141ef57506000546001600160a01b03163214155b801561421457506001600160a01b03821660009081526006602052604090205460ff16155b801561423957506001600160a01b03831660009081526006602052604090205460ff16155b801561425057506001600160a01b03821661dead14155b801561426457506001600160a01b03821615155b80156117da57506001600160a01b0383163014159392505050565b6019805460ff191660011790556040805160a08101825260145461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152680100000000000000009004909116608082018190526000036142f35750614754565b3060009081526005602090815260408083206015546001600160a01b031684529091529020546000191461434c573060009081526005602090815260408083206015546001600160a01b03168452909152902060001990555b60006002826080015161ffff16836020015161ffff168561436d919061545a565b6143779190615446565b6143819190615446565b9050600061438f82856154d7565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106143c9576143c96154a8565b6001600160a01b03928316602091820292909201810191909152601554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa15801561443b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061445f9190615625565b81600181518110614472576144726154a8565b6001600160a01b0392831660209182029290920101526015546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906144d19085906000908690309042906004016156a5565b600060405180830381600087803b1580156144eb57600080fd5b505af11580156144ff573d6000803e3d6000fd5b5047925060009150849050614514868461545a565b61451e9190615446565b9050841561460f576015546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156145ad573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145d29190615642565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61461981836154d7565b91508560200151866080018181516146319190615716565b61ffff908116909152608088015160608901516000935083929182169161465991168661545a565b6146639190615446565b9050600061467182866154d7565b60408a015190915061ffff16156146df576018546040516001600160a01b03909116906188b89083906000818181858888f193505050503d80600081146146d4576040519150601f19603f3d011682016040523d82523d6000602084013e6146d9565b606091505b50909350505b606089015161ffff161561474a576017546040516001600160a01b03909116906188b89084906000818181858888f193505050503d806000811461473f576040519150601f19603f3d011682016040523d82523d6000602084013e614744565b606091505b50909350505b5050505050505050505b506019805460ff19169055565b602054610100900460ff16156147df5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610bf5565b6147e982826141ab565b15801561480357506016546001600160a01b038281169116145b15611134576001600160a01b038083166000908152600660209081526040909120805460ff19166001179055805461ff00191661010017908190556201000090041661487957602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6019805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001612e63565b6148f96040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6149396040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160a08101825260145461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000900490911660808201526149996137ae565b60c083018190526149aa908961545a565b60808301526149b98a8a6141ab565b15614a6c576020546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301528b81166024830152604482018b9052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614a55575060408051601f3d908101601f19168201909252614a5291810190615670565b60015b614a5e57600080fd5b905080614a6a57600080fd5b505b8615614b585760008615614a87575060135461ffff16614ab1565b8515614aa0575060135462010000900461ffff16614ab1565b50601354640100000000900461ffff165b6000612710614ac0838c61545a565b614aca9190615446565b9050600083600001518460800151614ae291906152fe565b845161ffff91821692508291614af991168461545a565b614b039190615446565b60208601819052614b1490836154d7565b604086018190526020860151614b2a919061568d565b614b34908c6154d7565b855260c08501516020860151614b4a919061545a565b60a086015250614b71915050565b6000602083018190526040830181905288835260a08301525b604082015115614c48578160c001518260400151614b8f919061545a565b3060009081526001602052604081208054909190614bae90849061568d565b9091555050306000908152600a602052604090205460ff1615614bf6576040808301513060009081526002602052918220805491929091614bf090849061568d565b90915550505b306001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460400151604051614c3f91815260200190565b60405180910390a35b8160c001518260400151614c5c919061545a565b8260a00151614c6b919061568d565b8260800151614c7a91906154d7565b60608301525098975050505050505050565b828054614c989061527c565b90600052602060002090601f016020900481019282614cba5760008555614d00565b82601f10614cd357805160ff1916838001178555614d00565b82800160010185558215614d00579182015b82811115614d00578251825591602001919060010190614ce5565b50614d0c929150614d10565b5090565b5b80821115614d0c5760008155600101614d11565b801515811461349157600080fd5b60008060408385031215614d4657600080fd5b8235614d5181614d25565b91506020830135614d6181614d25565b809150509250929050565b60005b83811015614d87578181015183820152602001614d6f565b838111156135945750506000910152565b6020815260008251806020840152614db7816040850160208701614d6c565b601f01601f19169190910160400192915050565b803561ffff81168114614ddd57600080fd5b919050565b60008060008060808587031215614df857600080fd5b614e0185614dcb565b9350614e0f60208601614dcb565b9250614e1d60408601614dcb565b9150614e2b60608601614dcb565b905092959194509250565b6001600160a01b038116811461349157600080fd5b60008060408385031215614e5e57600080fd5b8235614e6981614e36565b946020939093013593505050565b600060208284031215614e8957600080fd5b81356117da81614e36565b60008060408385031215614ea757600080fd5b8235614d5181614e36565b600080600060608486031215614ec757600080fd5b8335614ed281614e36565b92506020840135614ee281614e36565b929592945050506040919091013590565b60008060408385031215614f0657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614f6d57614f6d614f15565b604052919050565b600067ffffffffffffffff821115614f8f57614f8f614f15565b5060051b60200190565b600082601f830112614faa57600080fd5b81356020614fbf614fba83614f75565b614f44565b82815260059290921b84018101918181019086841115614fde57600080fd5b8286015b84811015614ff95780358352918301918301614fe2565b509695505050505050565b6000806040838503121561501757600080fd5b823567ffffffffffffffff8082111561502f57600080fd5b818501915085601f83011261504357600080fd5b81356020615053614fba83614f75565b82815260059290921b8401810191818101908984111561507257600080fd5b948201945b8386101561509957853561508a81614e36565b82529482019490820190615077565b965050860135925050808211156150af57600080fd5b506150bc85828601614f99565b9150509250929050565b6000602082840312156150d857600080fd5b5035919050565b6000806000606084860312156150f457600080fd5b6150fd84614dcb565b925061510b60208501614dcb565b915061511960408501614dcb565b90509250925092565b60008083601f84011261513457600080fd5b50813567ffffffffffffffff81111561514c57600080fd5b6020830191508360208260051b850101111561516757600080fd5b9250929050565b60008060008060008060006080888a03121561518957600080fd5b873567ffffffffffffffff808211156151a157600080fd5b6151ad8b838c01615122565b909950975060208a01359150808211156151c657600080fd5b6151d28b838c01615122565b909750955060408a01359150808211156151eb57600080fd5b506151f88a828b01615122565b909450925050606088013561520c81614e36565b8091505092959891949750929550565b6000806040838503121561522f57600080fd5b823561523a81614e36565b91506020830135614d6181614e36565b6000806000806080858703121561526057600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061529057607f821691505b6020821081036152c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff80831681851680830382111561531b5761531b6152cf565b01949350505050565b600181815b8085111561535f578160001904821115615345576153456152cf565b8085161561535257918102915b93841c9390800290615329565b509250929050565b60008261537657506001610f69565b8161538357506000610f69565b816001811461539957600281146153a3576153bf565b6001915050610f69565b60ff8411156153b4576153b46152cf565b50506001821b610f69565b5060208310610133831016604e8410600b84101617156153e2575081810a610f69565b6153ec8383615324565b8060001904821115615400576154006152cf565b029392505050565b60006117da60ff841683615367565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261545557615455615417565b500490565b6000816000190483118215151615615474576154746152cf565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000828210156154e9576154e96152cf565b500390565b60006000198203615501576155016152cf565b5060010190565b600060ff821660ff810361551e5761551e6152cf565b60010192915050565b600082601f83011261553857600080fd5b815167ffffffffffffffff81111561555257615552614f15565b6155656020601f19601f84011601614f44565b81815284602083860101111561557a57600080fd5b6114de826020830160208701614d6c565b600080600080608085870312156155a157600080fd5b845167ffffffffffffffff808211156155b957600080fd5b6155c588838901615527565b955060208701519150808211156155db57600080fd5b506155e887828801615527565b93505060408501519150606085015160ff8116811461560657600080fd5b939692955090935050565b60008261562057615620615417565b500690565b60006020828403121561563757600080fd5b81516117da81614e36565b60008060006060848603121561565757600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561568257600080fd5b81516117da81614d25565b600082198211156156a0576156a06152cf565b500190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156156f55784516001600160a01b0316835293830193918301916001016156d0565b50506001600160a01b03969096166060850152505050608001529392505050565b600061ffff83811690831681811015615731576157316152cf565b03939250505056fea2646970667358221220e461755b489034458955c886cee7ebd757c9304f7ab74e6a0615203cf671aaf564736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c806350a8e016116101dc578063b1b08f7111610102578063dd62ed3e116100a0578063fb78680d1161006f578063fb78680d14610b2c578063fdb78c0e14610b4c578063fe575a8714610b6b578063feadde9c14610b8b57600080fd5b8063dd62ed3e14610a91578063eafb5a3c14610ad7578063ee5d9c2d14610af7578063f94aa1b414610b0c57600080fd5b8063bfc2fc35116100dc578063bfc2fc35146109af578063c6a276c2146109cf578063cf847706146109ef578063d3f6a15714610a7157600080fd5b8063b1b08f7114610601578063b3d514fb14610601578063b7df8b361461099557600080fd5b8063715018a61161017a5780638a63bd9b116101495780638a63bd9b146109365780638a8c523c1461094b57806395d89b4114610960578063a9059cbb1461097557600080fd5b8063715018a6146108aa57806380c581d1146108bf57806388f82020146108df578063893d20e81461091857600080fd5b80635cce86cd116101b65780635cce86cd146108265780636ca4797f1461085f5780636ebd00781461087557806370a082311461088a57600080fd5b806350a8e016146107c7578063590ffdce146107e65780635c24b0741461080657600080fd5b806328577751116102c157806336fddb041161025f5780634ada218b1161022e5780634ada218b146107345780634e718e481461074e5780634fb2e45d1461076e5780634fbee1931461078e57600080fd5b806336fddb04146106b45780633f3cf56c146106d457806343b5beec146106f4578063452ed4f11461071457600080fd5b80632e8fa8211161029b5780632e8fa82114610637578063313ce5671461064d57806332cde6641461067457806333251a0b1461069457600080fd5b806328577751146105eb5780632b28fc7a146106015780632d8381191461061757600080fd5b8063095ea7b31161033957806318160ddd1161030857806318160ddd1461057657806323b872dd1461058b57806326003957146105ab5780632610eaca146105cb57600080fd5b8063095ea7b3146104d85780630dcbcf1c146105085780630fa604e41461054157806313e461921461055657600080fd5b8063069d955f11610375578063069d955f1461042057806306fdde03146104765780630712d165146104985780630758d924146104b857600080fd5b806303fd2a45146103a75780630445b667146103da578063044df726146103fe57600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103e657600080fd5b506103f0601a5481565b6040519081526020016103d1565b34801561040a57600080fd5b5061041e610419366004614d33565b610bab565b005b34801561042c57600080fd5b506013546104519061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103d1565b34801561048257600080fd5b5061048b610c88565b6040516103d19190614d98565b3480156104a457600080fd5b5061041e6104b3366004614de2565b610d1a565b3480156104c457600080fd5b506015546103bd906001600160a01b031681565b3480156104e457600080fd5b506104f86104f3366004614e4b565b610f58565b60405190151581526020016103d1565b34801561051457600080fd5b506104f8610523366004614e77565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561054d57600080fd5b506103f0610f6f565b34801561056257600080fd5b5061041e610571366004614e94565b610f95565b34801561058257600080fd5b506103f0611456565b34801561059757600080fd5b506104f86105a6366004614eb2565b61146e565b3480156105b757600080fd5b5061041e6105c6366004614ef3565b6114e6565b3480156105d757600080fd5b5061041e6105e6366004615004565b6115f0565b3480156105f757600080fd5b506103f0601d5481565b34801561060d57600080fd5b506103f06105dc81565b34801561062357600080fd5b506103f06106323660046150c6565b61174a565b34801561064357600080fd5b506103f0601b5481565b34801561065957600080fd5b506106626117e1565b60405160ff90911681526020016103d1565b34801561068057600080fd5b5061041e61068f3660046150df565b6117fc565b3480156106a057600080fd5b5061041e6106af366004614e77565b611996565b3480156106c057600080fd5b5061041e6106cf366004614e94565b611a60565b3480156106e057600080fd5b5061041e6106ef366004614ef3565b611ad9565b34801561070057600080fd5b5061041e61070f36600461516e565b611be4565b34801561072057600080fd5b506016546103bd906001600160a01b031681565b34801561074057600080fd5b506020546104f89060ff1681565b34801561075a57600080fd5b5061041e6107693660046150c6565b6123a2565b34801561077a57600080fd5b5061041e610789366004614e77565b612446565b34801561079a57600080fd5b506104f86107a9366004614e77565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156107d357600080fd5b506020546104f890610100900460ff1681565b3480156107f257600080fd5b5061041e610801366004614e94565b612667565b34801561081257600080fd5b5061041e610821366004614e77565b6126e0565b34801561083257600080fd5b506104f8610841366004614e77565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561086b57600080fd5b506103f06109c481565b34801561088157600080fd5b506103f06127d6565b34801561089657600080fd5b506103f06108a5366004614e77565b6127f7565b3480156108b657600080fd5b5061041e612856565b3480156108cb57600080fd5b5061041e6108da366004614e94565b612915565b3480156108eb57600080fd5b506104f86108fa366004614e77565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561092457600080fd5b506000546001600160a01b03166103bd565b34801561094257600080fd5b506104f8612adb565b34801561095757600080fd5b5061041e612b4a565b34801561096c57600080fd5b5061048b612d9c565b34801561098157600080fd5b506104f8610990366004614e4b565b612dab565b3480156109a157600080fd5b50601c546104f89060ff1681565b3480156109bb57600080fd5b5061041e6109ca366004614d33565b612dc2565b3480156109db57600080fd5b5061041e6109ea366004614e77565b612e6f565b3480156109fb57600080fd5b50601454610a3c9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103d1565b348015610a7d57600080fd5b5061041e610a8c36600461521c565b612f0f565b348015610a9d57600080fd5b506103f0610aac36600461521c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610ae357600080fd5b5061041e610af2366004614e77565b613002565b348015610b0357600080fd5b5061041e6133b1565b348015610b1857600080fd5b506018546103bd906001600160a01b031681565b348015610b3857600080fd5b5061041e610b4736600461524a565b613494565b348015610b5857600080fd5b506019546104f890610100900460ff1681565b348015610b7757600080fd5b506104f8610b86366004614e77565b61359a565b348015610b9757600080fd5b5061041e610ba6366004614e94565b613628565b6000546001600160a01b03163314610bfe5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6020546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610c6c57600080fd5b505af1158015610c80573d6000803e3d6000fd5b505050505050565b6060600d8054610c979061527c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc39061527c565b8015610d105780601f10610ce557610100808354040283529160200191610d10565b820191906000526020600020905b815481529060010190602001808311610cf357829003601f168201915b5050505050905090565b6000546001600160a01b0316331480610d3d57506017546001600160a01b031633145b610d4657600080fd5b6017546001600160a01b03163303610da65760968161ffff161115610d6a57600080fd5b601480547fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16660100000000000061ffff841602179055610e26565b6000546001600160a01b03163303610e26576014805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff87831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009094169289169290921792909217161790555b60145461ffff66010000000000008204811691610e54916401000000008204811691620100009004166152fe565b610e5e91906152fe565b601480547fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff166801000000000000000061ffff93841602179055601354600091610eb191620100008104821691166152fe565b60145461ffff91821692508291610ed9918082169168010000000000000000909104166152fe565b61ffff161115610f515760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610bf5565b5050505050565b6000610f653384846136a1565b5060015b92915050565b600f54600090610f839060ff16600a615408565b601f54610f909190615446565b905090565b6000546001600160a01b03163314610fe35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b8015611138576001600160a01b0382166000908152600a602052604090205460ff16156110525760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610bf5565b6001600160a01b038216600090815260016020526040902054156110ac576001600160a01b0382166000908152600160205260409020546110929061174a565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600a60205260409020805460ff191660011790556016549091161461113457600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b80611134576001600160a01b0382166000908152600a602052604090205460ff166111a55760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610bf5565b6016546001600160a01b0390811690831603611220576111c36137ae565b6001600160a01b0383166000908152600260205260409020546111e6919061545a565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff191690555050565b600b546001036112cf576112326137ae565b6001600160a01b038316600090815260026020526040902054611255919061545a565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff19169055600b80548061129c5761129c615479565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b600b5481101561145157826001600160a01b0316600b82815481106112f9576112f96154a8565b6000918252602090912001546001600160a01b03160361143f57600b8054611323906001906154d7565b81548110611333576113336154a8565b600091825260209091200154600b80546001600160a01b03909216918390811061135f5761135f6154a8565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600290915260408120556113ab6137ae565b6001600160a01b0384166000908152600260205260409020546113ce919061545a565b6001600160a01b038416600090815260016020908152604080832093909355600a905220805460ff19169055600b80548061140b5761140b615479565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b80611449816154ee565b9150506112d2565b505050565b600060105460000361146757600080fd5b5060105490565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146114d3576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906114cd9084906154d7565b90915550505b6114de848484613a21565b949350505050565b6000546001600160a01b031633146115345760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b60646010546115439190615446565b8183601054611552919061545a565b61155c9190615446565b10156115d05760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610bf5565b80826010546115df919061545a565b6115e99190615446565b601f555050565b6000546001600160a01b0316331461163e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b805182511461168f5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610bf5565b60005b82518160ff16101561145157818160ff16815181106116b3576116b36154a8565b60200260200101516116c4336127f7565b10156116cf57600080fd5b61173733848360ff16815181106116e8576116e86154a8565b6020908102919091010151600f546117049060ff16600a615408565b858560ff1681518110611719576117196154a8565b602002602001015161172b919061545a565b60008060006001613edd565b508061174281615508565b915050611692565b60006012548211156117c45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610bf5565b60006117ce6137ae565b90506117da8184615446565b9392505050565b60006010546000036117f257600080fd5b50600f5460ff1690565b6000546001600160a01b0316331461184a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6105dc8361ffff161115801561186657506105dc8261ffff1611155b801561187857506105dc8161ffff1611155b6118c45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610bf5565b6109c46118d183856152fe565b61ffff1611156119235760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610bf5565b6013805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146119e45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6020546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b906024015b600060405180830381600087803b158015611a4c57600080fd5b505af1158015610f51573d6000803e3d6000fd5b6000546001600160a01b03163314611aae5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611b275760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6103e8601054611b379190615446565b8183601054611b46919061545a565b611b509190615446565b1015611bc45760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610bf5565b8082601054611bd3919061545a565b611bdd9190615446565b601e555050565b6000546001600160a01b03163314611c325760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b602054760100000000000000000000000000000000000000000000900460ff1615611c9f5760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610bf5565b838214611cee5760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610bf5565b838614611d3d5760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610bf5565b602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b158015611dcf57600080fd5b505af1925050508015611de0575060015b50602060029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015611e5557506040513d6000823e601f3d908101601f19168201604052611e52919081019061558b565b60015b611ea15760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610bf5565b8351611eb490600d906020870190614c8c565b508251611ec890600e906020860190614c8c565b50600c829055600f805460ff191660ff8316908117909155611eeb90600a615408565b600c54611ef8919061545a565b6010819055601154611f0a9190615611565b601154611f1791906154d7565b60125550505050601560009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f959190615625565b6001600160a01b031663c9c65396601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201a9190615625565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801561207e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a29190615625565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360205260409020805460ff19166001179055601054612710906120f990601961545a565b6121039190615446565b601e5560105460649061211790600161545a565b6121219190615446565b601f55602080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000178155601254600080546001600160a01b0390811682526001845260408083209390935581546010549351938452169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36015546121d99030906001600160a01b03166000196136a1565b6000546015546121f8916001600160a01b0390811691166000196136a1565b60005b868110156122aa576000848483818110612217576122176154a8565b90506020020135878784818110612230576122306154a8565b90506020020135601054612244919061545a565b61224e9190615446565b600054909150612295906001600160a01b03168a8a85818110612273576122736154a8565b90506020020160208101906122889190614e77565b8360008060006001613edd565b505080806122a2906154ee565b9150506121fb565b506000546122c5906001600160a01b03163061172b826127f7565b506015546001600160a01b031663f305d71947306122e2816127f7565b6000805460405160e087901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af1158015612369573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061238e9190615642565b505050612399612b4a565b50505050505050565b6000546001600160a01b031633146123f05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b60c88111156124415760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f74207365742061626f76652032252e0000000000000000000000006044820152606401610bf5565b601d55565b6000546001600160a01b031633146124945760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6001600160a01b0381166125105760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610bf5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b038216016125ae5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610bf5565b600080546125c7916001600160a01b0390911690612667565b6125d2816001612667565b600080546125e8906001600160a01b03166127f7565b111561260a57600054612608906001600160a01b03168261172b826127f7565b505b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146126b55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461272e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b60205460ff161561273e57600080fd5b306001600160a01b038216036127965760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610bf5565b602080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600f546000906127ea9060ff16600a615408565b601e54610f909190615446565b6001600160a01b0381166000908152600a602052604081205460ff161561283457506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f699061174a565b6000546001600160a01b031633146128a45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b600080546128bd916001600160a01b0390911690612667565b6000805473ffffffffffffffffffffffffffffffffffffffff19811682556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b031633146129635760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b8015156000036129f5576001600160a01b038281166000818152600360209081526040808320805460ff19169055905490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610c6c57600080fd5b60045415612a5c576203f48060045442612a0f91906154d7565b11612a5c5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610bf5565b6001600160a01b03828116600081815260036020908152604091829020805460ff19166001908117909155426004908155915492517f80c581d1000000000000000000000000000000000000000000000000000000008152918201939093526024810192909252620100009004909116906380c581d190604401610c52565b600080546001600160a01b03163314612b2a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b601554612b449030906001600160a01b03166000196136a1565b50600190565b6000546001600160a01b03163314612b985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b60205460ff1615612beb5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610bf5565b602054610100900460ff16612c425760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610bf5565b6020546201000090046001600160a01b0316612c8857602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602054601654600f546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b158015612d1957600080fd5b505af1925050508015612d2a575060015b506020805460ff1916600117905560165461271090612d51906001600160a01b03166127f7565b612d5c90600a61545a565b612d669190615446565b601a5560165461271090612d82906001600160a01b03166127f7565b612d8d90601961545a565b612d979190615446565b601b55565b6060600e8054610c979061527c565b6000612db8338484613a21565b5060019392505050565b6000546001600160a01b03163314612e105760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6019805461ff00191661010084151590810291909117909155601c805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6000546001600160a01b03163314612ebd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6020546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401611a32565b6000546001600160a01b03163314612f5d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6017546001600160a01b0316331480612f8057506000546001600160a01b031633145b612f8957600080fd5b6001600160a01b0381163303612fc2576017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6000546001600160a01b0316330361113457601880546001600160a01b03841673ffffffffffffffffffffffffffffffffffffffff199091161790555050565b6000546001600160a01b031633146130505760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b99190615625565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061312a9190615625565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561318d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b19190615625565b90506001600160a01b03811661334f57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132239190615625565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613270573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132949190615625565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156132f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061331d9190615625565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055613378565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556114519030906000196136a1565b6000546001600160a01b031633146133ff5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b602054610100900460ff16156134575760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610bf5565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015613491573d6000803e3d6000fd5b50565b6000546001600160a01b031633146134e25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b82846010546134f1919061545a565b6134fb9190615446565b601a55601054819061350e90849061545a565b6135189190615446565b601b819055601a5411156135945760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610bf5565b50505050565b6020546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015613604573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f699190615670565b6000546001600160a01b031633146136765760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610bf5565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b0383166136f75760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610bf5565b6001600160a01b03821661374d5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610bf5565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6012546010546016546001600160a01b03166000908152600a60205260408120549092919060ff1615613888576016546001600160a01b031660009081526001602052604090205482108061381c57506016546001600160a01b031660009081526002602052604090205481105b15613838576010546012546138319190615446565b9250505090565b6016546001600160a01b031660009081526001602052604090205461385d90836154d7565b6016546001600160a01b031660009081526002602052604090205490925061388590826154d7565b90505b600b54156139f05760005b600b5460ff821610156139ee578260016000600b8460ff16815481106138bb576138bb6154a8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061392957508160026000600b8460ff1681548110613902576139026154a8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156139465760105460125461393e9190615446565b935050505090565b60016000600b8360ff1681548110613960576139606154a8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461398f90846154d7565b925060026000600b8360ff16815481106139ab576139ab6154a8565b60009182526020808320909101546001600160a01b031683528201929092526040019020546139da90836154d7565b9150806139e681615508565b915050613893565b505b601054601254613a009190615446565b821015613a17576010546012546138319190615446565b6138318183615446565b60006001600160a01b038416613a9f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610bf5565b6001600160a01b038316613b1b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610bf5565b60008211613b915760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610bf5565b6001600160a01b0384166000908152600360205260408120548190819060ff1615613bbf5760019250613bed565b6001600160a01b03861660009081526003602052604090205460ff1615613be95760019150613bed565b5060015b613bf787876141ab565b15613de75760205460ff16613c4e5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610bf5565b8280613c575750815b15613d1b576001600160a01b03871660009081526009602052604090205460ff16158015613c9e57506001600160a01b03861660009081526009602052604090205460ff16155b15613d1b57601e54851115613d1b5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610bf5565b6015546001600160a01b03878116911614801590613d37575081155b15613de7576001600160a01b03861660009081526009602052604090205460ff16613de757601f5485613d69886127f7565b613d73919061568d565b1115613de75760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610bf5565b6001600160a01b03871660009081526008602052604090205460019060ff1680613e2957506001600160a01b03871660009081526008602052604090205460ff165b15613e32575060005b8215613ec25760195460ff16613ec257601954610100900460ff1615613ec2576000613e5d306127f7565b9050601a548110613ec057601b54601c5460ff1615613eaa57601d546016546127109190613e93906001600160a01b03166127f7565b613e9d919061545a565b613ea79190615446565b90505b808210613eb5578091505b613ebe8261427f565b505b505b613ed188888884888888613edd565b98975050505050505050565b602054600090610100900460ff16613fdd57613ef98888614761565b602054610100900460ff16158015613f165750613f1688886141ab565b8015613f3b57506001600160a01b03881660009081526007602052604090205460ff16155b8015613f6057506001600160a01b03871660009081526007602052604090205460ff16155b8015613f6a575081155b15613fdd5760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610bf5565b6000613fee898989898989896148b9565b60808101516001600160a01b038b1660009081526001602052604081208054939450919261401d9084906154d7565b909155505060608101516001600160a01b0389166000908152600160205260408120805490919061404f90849061568d565b90915550506001600160a01b0389166000908152600a602052604090205460ff16156140b3576001600160a01b0389166000908152600260205260409020546140999088906154d7565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b0388166000908152600a602052604090205460ff16156141135780516001600160a01b0389166000908152600260205260409020546140f9919061568d565b6001600160a01b0389166000908152600260205260409020555b60008160a00151118061412a575060008160200151115b1561414b578060a001516012600082825461414591906154d7565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161419491815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b038481169116148015906141d857506000546001600160a01b03838116911614155b80156141ef57506000546001600160a01b03163214155b801561421457506001600160a01b03821660009081526006602052604090205460ff16155b801561423957506001600160a01b03831660009081526006602052604090205460ff16155b801561425057506001600160a01b03821661dead14155b801561426457506001600160a01b03821615155b80156117da57506001600160a01b0383163014159392505050565b6019805460ff191660011790556040805160a08101825260145461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152680100000000000000009004909116608082018190526000036142f35750614754565b3060009081526005602090815260408083206015546001600160a01b031684529091529020546000191461434c573060009081526005602090815260408083206015546001600160a01b03168452909152902060001990555b60006002826080015161ffff16836020015161ffff168561436d919061545a565b6143779190615446565b6143819190615446565b9050600061438f82856154d7565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106143c9576143c96154a8565b6001600160a01b03928316602091820292909201810191909152601554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa15801561443b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061445f9190615625565b81600181518110614472576144726154a8565b6001600160a01b0392831660209182029290920101526015546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906144d19085906000908690309042906004016156a5565b600060405180830381600087803b1580156144eb57600080fd5b505af11580156144ff573d6000803e3d6000fd5b5047925060009150849050614514868461545a565b61451e9190615446565b9050841561460f576015546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156145ad573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145d29190615642565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61461981836154d7565b91508560200151866080018181516146319190615716565b61ffff908116909152608088015160608901516000935083929182169161465991168661545a565b6146639190615446565b9050600061467182866154d7565b60408a015190915061ffff16156146df576018546040516001600160a01b03909116906188b89083906000818181858888f193505050503d80600081146146d4576040519150601f19603f3d011682016040523d82523d6000602084013e6146d9565b606091505b50909350505b606089015161ffff161561474a576017546040516001600160a01b03909116906188b89084906000818181858888f193505050503d806000811461473f576040519150601f19603f3d011682016040523d82523d6000602084013e614744565b606091505b50909350505b5050505050505050505b506019805460ff19169055565b602054610100900460ff16156147df5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610bf5565b6147e982826141ab565b15801561480357506016546001600160a01b038281169116145b15611134576001600160a01b038083166000908152600660209081526040909120805460ff19166001179055805461ff00191661010017908190556201000090041661487957602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6019805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001612e63565b6148f96040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6149396040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160a08101825260145461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000900490911660808201526149996137ae565b60c083018190526149aa908961545a565b60808301526149b98a8a6141ab565b15614a6c576020546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301528b81166024830152604482018b9052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614a55575060408051601f3d908101601f19168201909252614a5291810190615670565b60015b614a5e57600080fd5b905080614a6a57600080fd5b505b8615614b585760008615614a87575060135461ffff16614ab1565b8515614aa0575060135462010000900461ffff16614ab1565b50601354640100000000900461ffff165b6000612710614ac0838c61545a565b614aca9190615446565b9050600083600001518460800151614ae291906152fe565b845161ffff91821692508291614af991168461545a565b614b039190615446565b60208601819052614b1490836154d7565b604086018190526020860151614b2a919061568d565b614b34908c6154d7565b855260c08501516020860151614b4a919061545a565b60a086015250614b71915050565b6000602083018190526040830181905288835260a08301525b604082015115614c48578160c001518260400151614b8f919061545a565b3060009081526001602052604081208054909190614bae90849061568d565b9091555050306000908152600a602052604090205460ff1615614bf6576040808301513060009081526002602052918220805491929091614bf090849061568d565b90915550505b306001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460400151604051614c3f91815260200190565b60405180910390a35b8160c001518260400151614c5c919061545a565b8260a00151614c6b919061568d565b8260800151614c7a91906154d7565b60608301525098975050505050505050565b828054614c989061527c565b90600052602060002090601f016020900481019282614cba5760008555614d00565b82601f10614cd357805160ff1916838001178555614d00565b82800160010185558215614d00579182015b82811115614d00578251825591602001919060010190614ce5565b50614d0c929150614d10565b5090565b5b80821115614d0c5760008155600101614d11565b801515811461349157600080fd5b60008060408385031215614d4657600080fd5b8235614d5181614d25565b91506020830135614d6181614d25565b809150509250929050565b60005b83811015614d87578181015183820152602001614d6f565b838111156135945750506000910152565b6020815260008251806020840152614db7816040850160208701614d6c565b601f01601f19169190910160400192915050565b803561ffff81168114614ddd57600080fd5b919050565b60008060008060808587031215614df857600080fd5b614e0185614dcb565b9350614e0f60208601614dcb565b9250614e1d60408601614dcb565b9150614e2b60608601614dcb565b905092959194509250565b6001600160a01b038116811461349157600080fd5b60008060408385031215614e5e57600080fd5b8235614e6981614e36565b946020939093013593505050565b600060208284031215614e8957600080fd5b81356117da81614e36565b60008060408385031215614ea757600080fd5b8235614d5181614e36565b600080600060608486031215614ec757600080fd5b8335614ed281614e36565b92506020840135614ee281614e36565b929592945050506040919091013590565b60008060408385031215614f0657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614f6d57614f6d614f15565b604052919050565b600067ffffffffffffffff821115614f8f57614f8f614f15565b5060051b60200190565b600082601f830112614faa57600080fd5b81356020614fbf614fba83614f75565b614f44565b82815260059290921b84018101918181019086841115614fde57600080fd5b8286015b84811015614ff95780358352918301918301614fe2565b509695505050505050565b6000806040838503121561501757600080fd5b823567ffffffffffffffff8082111561502f57600080fd5b818501915085601f83011261504357600080fd5b81356020615053614fba83614f75565b82815260059290921b8401810191818101908984111561507257600080fd5b948201945b8386101561509957853561508a81614e36565b82529482019490820190615077565b965050860135925050808211156150af57600080fd5b506150bc85828601614f99565b9150509250929050565b6000602082840312156150d857600080fd5b5035919050565b6000806000606084860312156150f457600080fd5b6150fd84614dcb565b925061510b60208501614dcb565b915061511960408501614dcb565b90509250925092565b60008083601f84011261513457600080fd5b50813567ffffffffffffffff81111561514c57600080fd5b6020830191508360208260051b850101111561516757600080fd5b9250929050565b60008060008060008060006080888a03121561518957600080fd5b873567ffffffffffffffff808211156151a157600080fd5b6151ad8b838c01615122565b909950975060208a01359150808211156151c657600080fd5b6151d28b838c01615122565b909750955060408a01359150808211156151eb57600080fd5b506151f88a828b01615122565b909450925050606088013561520c81614e36565b8091505092959891949750929550565b6000806040838503121561522f57600080fd5b823561523a81614e36565b91506020830135614d6181614e36565b6000806000806080858703121561526057600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061529057607f821691505b6020821081036152c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff80831681851680830382111561531b5761531b6152cf565b01949350505050565b600181815b8085111561535f578160001904821115615345576153456152cf565b8085161561535257918102915b93841c9390800290615329565b509250929050565b60008261537657506001610f69565b8161538357506000610f69565b816001811461539957600281146153a3576153bf565b6001915050610f69565b60ff8411156153b4576153b46152cf565b50506001821b610f69565b5060208310610133831016604e8410600b84101617156153e2575081810a610f69565b6153ec8383615324565b8060001904821115615400576154006152cf565b029392505050565b60006117da60ff841683615367565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261545557615455615417565b500490565b6000816000190483118215151615615474576154746152cf565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000828210156154e9576154e96152cf565b500390565b60006000198203615501576155016152cf565b5060010190565b600060ff821660ff810361551e5761551e6152cf565b60010192915050565b600082601f83011261553857600080fd5b815167ffffffffffffffff81111561555257615552614f15565b6155656020601f19601f84011601614f44565b81815284602083860101111561557a57600080fd5b6114de826020830160208701614d6c565b600080600080608085870312156155a157600080fd5b845167ffffffffffffffff808211156155b957600080fd5b6155c588838901615527565b955060208701519150808211156155db57600080fd5b506155e887828801615527565b93505060408501519150606085015160ff8116811461560657600080fd5b939692955090935050565b60008261562057615620615417565b500690565b60006020828403121561563757600080fd5b81516117da81614e36565b60008060006060848603121561565757600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561568257600080fd5b81516117da81614d25565b600082198211156156a0576156a06152cf565b500190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156156f55784516001600160a01b0316835293830193918301916001016156d0565b50506001600160a01b03969096166060850152505050608001529392505050565b600061ffff83811690831681811015615731576157316152cf565b03939250505056fea2646970667358221220e461755b489034458955c886cee7ebd757c9304f7ab74e6a0615203cf671aaf564736f6c634300080d0033

Deployed Bytecode Sourcemap

4210:28134:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6062:73;;;;;;;;;;;;6093:42;6062:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;6062:73:0;;;;;;;;6504:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;6504:28:0;245:177:1;16823:151:0;;;;;;;;;;-1:-1:-1;16823:151:0;;;;;:::i;:::-;;:::i;:::-;;5439:116;;;;;;;;;;-1:-1:-1;5439:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;1137:6:1;1170:15;;;1152:34;;1222:15;;;1217:2;1202:18;;1195:43;1274:15;;1254:18;;;1247:43;;;;1115:2;1100:18;5439:116:0;931:365:1;12544:80:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17478:776::-;;;;;;;;;;-1:-1:-1;17478:776:0;;;;;:::i;:::-;;:::i;6001:26::-;;;;;;;;;;-1:-1:-1;6001:26:0;;;;-1:-1:-1;;;;;6001:26:0;;;13235:159;;;;;;;;;;-1:-1:-1;13235:159:0;;;;;:::i;:::-;;:::i;:::-;;;3473:14:1;;3466:22;3448:41;;3436:2;3421:18;13235:159:0;3308:187:1;15772:140:0;;;;;;;;;;-1:-1:-1;15772:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;15870:34:0;15846:4;15870:34;;;:25;:34;;;;;;;;;15772:140;19315:112;;;;;;;;;;;;;:::i;26483:1519::-;;;;;;;;;;-1:-1:-1;26483:1519:0;;;;;:::i;:::-;;:::i;12215:115::-;;;;;;;;;;;;;:::i;13901:306::-;;;;;;;;;;-1:-1:-1;13901:306:0;;;;;:::i;:::-;;:::i;18929:264::-;;;;;;;;;;-1:-1:-1;18929:264:0;;;;;:::i;:::-;;:::i;25929:418::-;;;;;;;;;;-1:-1:-1;25929:418:0;;;;;:::i;:::-;;:::i;6612:28::-;;;;;;;;;;;;;;;;5747:42;;;;;;;;;;;;5785:4;5747:42;;28010:250;;;;;;;;;;-1:-1:-1;28010:250:0;;;;;:::i;:::-;;:::i;6539:25::-;;;;;;;;;;;;;;;;12336:112;;;;;;;;;;;;;:::i;:::-;;;7813:4:1;7801:17;;;7783:36;;7771:2;7756:18;12336:112:0;7641:184:1;16982:488:0;;;;;;;;;;-1:-1:-1;16982:488:0;;;;;:::i;:::-;;:::i;16707:108::-;;;;;;;;;;-1:-1:-1;16707:108:0;;;;;:::i;:::-;;:::i;15920:140::-;;;;;;;;;;-1:-1:-1;15920:140:0;;;;;:::i;:::-;;:::i;18652:269::-;;;;;;;;;;-1:-1:-1;18652:269:0;;;;;:::i;:::-;;:::i;8397:2019::-;;;;;;;;;;-1:-1:-1;8397:2019:0;;;;;:::i;:::-;;:::i;6034:21::-;;;;;;;;;;-1:-1:-1;6034:21:0;;;;-1:-1:-1;;;;;6034:21:0;;;6727:34;;;;;;;;;;-1:-1:-1;6727:34:0;;;;;;;;19816:215;;;;;;;;;;-1:-1:-1;19816:215:0;;;;;:::i;:::-;;:::i;10968:661::-;;;;;;;;;;-1:-1:-1;10968:661:0;;;;;:::i;:::-;;:::i;15637:127::-;;;;;;;;;;-1:-1:-1;15637:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;15728:28:0;15704:4;15728:28;;;:19;:28;;;;;;;;;15637:127;6768:36;;;;;;;;;;-1:-1:-1;6768:36:0;;;;;;;;;;;16068:134;;;;;;;;;;-1:-1:-1;16068:134:0;;;;;:::i;:::-;;:::i;15271:218::-;;;;;;;;;;-1:-1:-1;15271:218:0;;;;;:::i;:::-;;:::i;15497:132::-;;;;;;;;;;-1:-1:-1;15497:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;15591:30:0;15567:4;15591:30;;;:21;:30;;;;;;;;;15497:132;5900:46;;;;;;;;;;;;5942:4;5900:46;;19201:106;;;;;;;;;;;;;:::i;12856:198::-;;;;;;;;;;-1:-1:-1;12856:198:0;;;;;:::i;:::-;;:::i;11637:225::-;;;;;;;;;;;;;:::i;14763:500::-;;;;;;;;;;-1:-1:-1;14763:500:0;;;;;:::i;:::-;;:::i;26355:120::-;;;;;;;;;;-1:-1:-1;26355:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;26447:20:0;26423:4;26447:20;;;:11;:20;;;;;;;;;26355:120;12630:79;;;;;;;;;;-1:-1:-1;12682:7:0;12700:6;-1:-1:-1;;;;;12700:6:0;12630:79;;13720:173;;;;;;;;;;;;;:::i;25187:544::-;;;;;;;;;;;;;:::i;12454:84::-;;;;;;;;;;;;;:::i;13062:165::-;;;;;;;;;;-1:-1:-1;13062:165:0;;;;;:::i;:::-;;:::i;6571:34::-;;;;;;;;;;-1:-1:-1;6571:34:0;;;;;;;;20039:263;;;;;;;;;;-1:-1:-1;20039:263:0;;;;;:::i;:::-;;:::i;16366:200::-;;;;;;;;;;-1:-1:-1;16366:200:0;;;;;:::i;:::-;;:::i;5564:174::-;;;;;;;;;;-1:-1:-1;5564:174:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10023:6:1;10056:15;;;10038:34;;10108:15;;;10103:2;10088:18;;10081:43;10160:15;;;10140:18;;;10133:43;;;;10212:15;;10207:2;10192:18;;10185:43;10265:15;;;10259:3;10244:19;;10237:44;10000:3;9985:19;5564:174:0;9764:523:1;18262:382:0;;;;;;;;;;-1:-1:-1;18262:382:0;;;;;:::i;:::-;;:::i;12715:133::-;;;;;;;;;;-1:-1:-1;12715:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;12817:19:0;;;12799:7;12817:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;12715:133;14215:540;;;;;;;;;;-1:-1:-1;14215:540:0;;;;;:::i;:::-;;:::i;25739:182::-;;;;;;;;;;;;;:::i;6299:128::-;;;;;;;;;;-1:-1:-1;6299:128:0;;;;-1:-1:-1;;;;;6299:128:0;;;19435:373;;;;;;;;;;-1:-1:-1;19435:373:0;;;;;:::i;:::-;;:::i;6458:39::-;;;;;;;;;;-1:-1:-1;6458:39:0;;;;;;;;;;;16574:125;;;;;;;;;;-1:-1:-1;16574:125:0;;;;;:::i;:::-;;:::i;16210:148::-;;;;;;;;;;-1:-1:-1;16210:148:0;;;;;:::i;:::-;;:::i;16823:151::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;;;;;;;;;16918:9:::1;::::0;:48:::1;::::0;;;;12264:14:1;;12257:22;16918:48:0::1;::::0;::::1;12239:41:1::0;12323:14;;12316:22;12296:18;;;12289:50;16918:9:0;;;::::1;-1:-1:-1::0;;;;;16918:9:0::1;::::0;:24:::1;::::0;12212:18:1;;16918:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16823:151:::0;;:::o;12544:80::-;12592:13;12616:5;12609:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12544:80;:::o;17478:776::-;17614:6;;-1:-1:-1;;;;;17614:6:0;17600:10;:20;;:55;;-1:-1:-1;17638:17:0;;-1:-1:-1;;;;;17638:17:0;17624:10;:31;17600:55;17592:64;;;;;;17685:17;;-1:-1:-1;;;;;17685:17:0;17671:10;:31;17667:317;;17742:3;17727:11;:18;;;;17719:27;;;;;;17761:7;:33;;;;;;;;;;;;17667:317;;;17830:6;;-1:-1:-1;;;;;17830:6:0;17816:10;:20;17812:172;;17853:7;:31;;;17943:29;;;;;;17899;;;;;;;;;17853:31;;;17899:29;;;;;;;;17943;;;;17812:172;18054:7;:19;;;;;;;;18014:37;;18034:17;;;;;;18014;;;;:37;:::i;:::-;:59;;;;:::i;:::-;17994:7;:79;;;;;;;;;;;;;18119:9;:17;-1:-1:-1;;18100:36:0;;18119:17;;;;;;18100:16;:36;:::i;:::-;18175:7;:18;18084:52;;;;;-1:-1:-1;18084:52:0;;18155:38;;18175:18;;;;18155:17;;;;;:38;:::i;:::-;:47;;;;18147:99;;;;-1:-1:-1;;;18147:99:0;;13412:2:1;18147:99:0;;;13394:21:1;13451:2;13431:18;;;13424:30;13490:34;13470:18;;;13463:62;13561:9;13541:18;;;13534:37;13588:19;;18147:99:0;13210:403:1;18147:99:0;17581:673;17478:776;;;;:::o;13235:159::-;13310:4;13327:37;13336:10;13348:7;13357:6;13327:8;:37::i;:::-;-1:-1:-1;13382:4:0;13235:159;;;;;:::o;19315:112::-;19409:9;;19360:7;;19405:13;;19409:9;;19405:2;:13;:::i;:::-;19387:14;;:32;;;;:::i;:::-;19380:39;;19315:112;:::o;26483:1519::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;26577:7:::1;26573:1422;;;-1:-1:-1::0;;;;;26610:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26609:21;26601:62;;;::::0;-1:-1:-1;;;26601:62:0;;15637:2:1;26601:62:0::1;::::0;::::1;15619:21:1::0;15676:2;15656:18;;;15649:30;15715;15695:18;;;15688:58;15763:18;;26601:62:0::1;15435:352:1::0;26601:62:0::1;-1:-1:-1::0;;;;;26681:16:0;::::1;26700:1;26681:16:::0;;;:7:::1;:16;::::0;;;;;:20;26678:116:::1;;-1:-1:-1::0;;;;;26761:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;26741:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;26722:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;26678:116:::1;-1:-1:-1::0;;;;;26808:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;26808:27:0::1;26831:4;26808:27;::::0;;26864:6:::1;::::0;;;::::1;26853:17;26850:79;;26890:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;26890:23:0;;;;;::::1;::::0;;-1:-1:-1;;26890:23:0::1;-1:-1:-1::0;;;;;26890:23:0;::::1;;::::0;;26850:79:::1;26483:1519:::0;;:::o;26573:1422::-:1;26951:7;26946:1049;;-1:-1:-1::0;;;;;26983:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26975:61;;;::::0;-1:-1:-1;;;26975:61:0;;15994:2:1;26975:61:0::1;::::0;::::1;15976:21:1::0;16033:2;16013:18;;;16006:30;16072;16052:18;;;16045:58;16120:18;;26975:61:0::1;15792:352:1::0;26975:61:0::1;27066:6;::::0;-1:-1:-1;;;;;27066:6:0;;::::1;27055:17:::0;;::::1;::::0;27051:933:::1;;27131:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;27112:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;27093:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;27160:7:::1;:16:::0;;;;;:20;;;27199:11:::1;:20:::0;;;:28;;-1:-1:-1;;27199:28:0::1;::::0;;26483:1519;;:::o;27051:933::-:1;27252:9;:16:::0;27272:1:::1;27252:21:::0;27249:735:::1;;27332:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;27313:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;27294:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;27361:7:::1;:16:::0;;;;;:20;;;27400:11:::1;:20:::0;;;:28;;-1:-1:-1;;27400:28:0::1;::::0;;27447:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;27447:15:0;;;;;-1:-1:-1;;27447:15:0::1;::::0;;;;;26483:1519;;:::o;27249:735::-:1;27508:9;27503:466;27527:9;:16:::0;27523:20;::::1;27503:466;;;27593:7;-1:-1:-1::0;;;;;27577:23:0::1;:9;27587:1;27577:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27577:12:0::1;:23:::0;27573:377:::1;;27644:9;27654:16:::0;;:20:::1;::::0;27673:1:::1;::::0;27654:20:::1;:::i;:::-;27644:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;27629:9:::1;:12:::0;;-1:-1:-1;;;;;27644:31:0;;::::1;::::0;27639:1;;27629:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;27629:46:0::1;-1:-1:-1::0;;;;;27629:46:0;;::::1;;::::0;;27702:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;27787:10:::1;:8;:10::i;:::-;-1:-1:-1::0;;;;;27768:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;27749:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;27824:11:::1;:20:::0;;;:28;;-1:-1:-1;;27824:28:0::1;::::0;;27879:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;27879:15:0;;;;;-1:-1:-1;;27879:15:0::1;::::0;;;;;27503:466:::1;26483:1519:::0;;:::o;27573:377::-:1;27545:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27503:466;;;;26483:1519:::0;;:::o;12215:115::-;12270:7;12285;;12296:1;12285:12;12281:31;;12301:8;;;12281:31;-1:-1:-1;12320:7:0;;;12215:115::o;13901:306::-;-1:-1:-1;;;;;14022:19:0;;14001:4;14022:19;;;:11;:19;;;;;;;;14042:10;14022:31;;;;;;;;-1:-1:-1;;14022:52:0;14018:126;;-1:-1:-1;;;;;14091:19:0;;;;;;:11;:19;;;;;;;;14111:10;14091:31;;;;;;;:41;;14126:6;;14091:19;:41;;14126:6;;14091:41;:::i;:::-;;;;-1:-1:-1;;14018:126:0;14163:36;14173:6;14181:9;14192:6;14163:9;:36::i;:::-;14156:43;13901:306;-1:-1:-1;;;;13901:306:0:o;18929:264::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;19071:3:::1;19061:7;;:13;;;;:::i;:::-;19049:7;19038;19028;;:17;;;;:::i;:::-;19027:29;;;;:::i;:::-;:48;;19019:109;;;::::0;-1:-1:-1;;;19019:109:0;;17292:2:1;19019:109:0::1;::::0;::::1;17274:21:1::0;17331:2;17311:18;;;17304:30;17370:34;17350:18;;;17343:62;17441:18;17421;;;17414:46;17477:19;;19019:109:0::1;17090:412:1::0;19019:109:0::1;19178:7;19167;19157;;:17;;;;:::i;:::-;19156:29;;;;:::i;:::-;19139:14;:46:::0;-1:-1:-1;;18929:264:0:o;25929:418::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;26064:7:::1;:14;26045:8;:15;:33;26037:67;;;::::0;-1:-1:-1;;;26037:67:0;;17709:2:1;26037:67:0::1;::::0;::::1;17691:21:1::0;17748:2;17728:18;;;17721:30;17787:23;17767:18;;;17760:51;17828:18;;26037:67:0::1;17507:345:1::0;26037:67:0::1;26120:7;26115:225;26137:8;:15;26133:1;:19;;;26115:225;;;26207:7;26215:1;26207:10;;;;;;;;;;:::i;:::-;;;;;;;26182:21;26192:10;26182:9;:21::i;:::-;:35;;26174:44;;;::::0;::::1;;26233:95;26251:10;26263:8;26272:1;26263:11;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;26291:9:::1;::::0;26287:13:::1;::::0;26291:9:::1;;26287:2;:13;:::i;:::-;26276:7;26284:1;26276:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;26302:5;26309::::0;26316::::1;26323:4;26233:17;:95::i;:::-;-1:-1:-1::0;26154:3:0;::::1;::::0;::::1;:::i;:::-;;;;26115:225;;28010:250:::0;28076:7;28115;;28104;:18;;28096:73;;;;-1:-1:-1;;;28096:73:0;;18239:2:1;28096:73:0;;;18221:21:1;18278:2;18258:18;;;18251:30;18317:34;18297:18;;;18290:62;18388:12;18368:18;;;18361:40;18418:19;;28096:73:0;18037:406:1;28096:73:0;28180:19;28203:10;:8;:10::i;:::-;28180:33;-1:-1:-1;28231:21:0;28180:33;28231:7;:21;:::i;:::-;28224:28;28010:250;-1:-1:-1;;;28010:250:0:o;12336:112::-;12388:5;12401:7;;12412:1;12401:12;12397:31;;12417:8;;;12397:31;-1:-1:-1;12436:9:0;;;;;12336:112::o;16982:488::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;5785:4:::1;17089:6;:21;;;;:65;;;;;5835:4;17131:7;:23;;;;17089:65;:117;;;;;5889:4;17175:11;:31;;;;17089:117;17081:170;;;::::0;-1:-1:-1;;;17081:170:0;;18650:2:1;17081:170:0::1;::::0;::::1;18632:21:1::0;18689:2;18669:18;;;18662:30;18728:25;18708:18;;;18701:53;18771:18;;17081:170:0::1;18448:347:1::0;17081:170:0::1;5942:4;17270:16;17279:7:::0;17270:6;:16:::1;:::i;:::-;:35;;;;17262:80;;;::::0;-1:-1:-1;;;17262:80:0;;19002:2:1;17262:80:0::1;::::0;::::1;18984:21:1::0;;;19021:18;;;19014:30;19080:34;19060:18;;;19053:62;19132:18;;17262:80:0::1;18800:356:1::0;17262:80:0::1;17353:9;:25:::0;;::::1;::::0;;::::1;17389:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;17427:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;16982:488::o;16707:108::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;16776:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;16776:31:0::1;::::0;::::1;160:74:1::0;16776:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;16776:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;15920:140:::0;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;-1:-1:-1;;;;;16012:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;16012:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15920:140::o;18652:269::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;18793:4:::1;18783:7;;:14;;;;:::i;:::-;18771:7;18760;18750;;:17;;;;:::i;:::-;18749:29;;;;:::i;:::-;:49;;18741:117;;;::::0;-1:-1:-1;;;18741:117:0;;19363:2:1;18741:117:0::1;::::0;::::1;19345:21:1::0;19402:2;19382:18;;;19375:30;19441:34;19421:18;;;19414:62;19512:25;19492:18;;;19485:53;19555:19;;18741:117:0::1;19161:419:1::0;18741:117:0::1;18906:7;18895;18885;;:17;;;;:::i;:::-;18884:29;;;;:::i;:::-;18869:12;:44:::0;-1:-1:-1;;18652:269:0:o;8397:2019::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;8570:19:::1;::::0;;;::::1;;;8569:20;8561:34;;;::::0;-1:-1:-1;;;8561:34:0;;19787:2:1;8561:34:0::1;::::0;::::1;19769:21:1::0;19826:1;19806:18;;;19799:29;19864:3;19844:18;;;19837:31;19885:18;;8561:34:0::1;19585:324:1::0;8561:34:0::1;8614::::0;;::::1;8606:48;;;::::0;-1:-1:-1;;;8606:48:0;;20116:2:1;8606:48:0::1;::::0;::::1;20098:21:1::0;20155:1;20135:18;;;20128:29;20193:3;20173:18;;;20166:31;20214:18;;8606:48:0::1;19914:324:1::0;8606:48:0::1;8673:34:::0;;::::1;8665:48;;;::::0;-1:-1:-1;;;8665:48:0;;20116:2:1;8665:48:0::1;::::0;::::1;20098:21:1::0;20155:1;20135:18;;;20128:29;20193:3;20173:18;;;20166:31;20214:18;;8665:48:0::1;19914:324:1::0;8665:48:0::1;8724:9;:33:::0;;;::::1;::::0;-1:-1:-1;;;;;8724:33:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;8772::::1;::::0;;;;8799:4:::1;8772:33;::::0;::::1;160:74:1::0;8772:9:0;::::1;;::::0;:18:::1;::::0;133::1;;8772:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;8768:49:::0;8831:9:::1;;;;;;;;;-1:-1:-1::0;;;;;8831:9:0::1;-1:-1:-1::0;;;;;8831:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;8831:27:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;8827:454;;9258:11;::::0;-1:-1:-1;;;9258:11:0;;21785:2:1;9258:11:0::1;::::0;::::1;21767:21:1::0;21824:1;21804:18;;;21797:29;21862:3;21842:18;;;21835:31;21883:18;;9258:11:0::1;21583:324:1::0;8827:454:0::1;8981:16:::0;;::::1;::::0;:5:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;9012:20:0;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;9047:14:0::1;:35:::0;;;9097:9:::1;:24:::0;;-1:-1:-1;;9097:24:0::1;;::::0;::::1;::::0;;::::1;::::0;;;9163:13:::1;::::0;:2:::1;:13;:::i;:::-;9146:14;;:30;;;;:::i;:::-;9136:7;:40:::0;;;9209:3:::1;::::0;:13:::1;::::0;9136:40;9209:13:::1;:::i;:::-;9202:3;;:21;;;;:::i;:::-;9191:7;:33:::0;-1:-1:-1;;;;9311:9:0::1;;;;;;;;;-1:-1:-1::0;;;;;9311:9:0::1;-1:-1:-1::0;;;;;9311:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9300:42:0::1;;9343:9;;;;;;;;;-1:-1:-1::0;;;;;9343:9:0::1;-1:-1:-1::0;;;;;9343:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9300:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;22538:15:1;;;9300:75:0::1;::::0;::::1;22520:34:1::0;9369:4:0::1;22570:18:1::0;;;22563:43;22432:18;;9300:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9291:6;:84:::0;;-1:-1:-1;;9291:84:0::1;-1:-1:-1::0;;;;;9291:84:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;9386:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;9386:22:0::1;-1:-1:-1::0;9386:22:0::1;::::0;;9435:7:::1;::::0;9451:5:::1;::::0;9435:12:::1;::::0;9445:2:::1;9435:12;:::i;:::-;9434:22;;;;:::i;:::-;9419:12;:37:::0;9485:7:::1;::::0;9500:3:::1;::::0;9485:11:::1;::::0;9495:1:::1;9485:11;:::i;:::-;9484:19;;;;:::i;:::-;9467:14;:36:::0;9514:19:::1;:26:::0;;;::::1;::::0;::::1;::::0;;9574:7:::1;::::0;-1:-1:-1;9564:6:0;;-1:-1:-1;;;;;9564:6:0;;::::1;9556:15:::0;;-1:-1:-1;9556:15:0;;;;;;:25;;;;9618:6;;9626:7:::1;::::0;9597:37;;391:25:1;;;9618:6:0::1;::::0;-1:-1:-1;;9597:37:0::1;::::0;364:18:1;9597:37:0::1;;;;;;;9679:9;::::0;9647:62:::1;::::0;9664:4:::1;::::0;-1:-1:-1;;;;;9679:9:0::1;-1:-1:-1::0;;9647:8:0::1;:62::i;:::-;9729:6;::::0;9745:9:::1;::::0;9720:55:::1;::::0;-1:-1:-1;;;;;9729:6:0;;::::1;::::0;9745:9:::1;-1:-1:-1::0;;9720:8:0::1;:55::i;:::-;9790:9;9786:213;9805:19:::0;;::::1;9786:213;;;9845:14;9888:8;;9897:1;9888:11;;;;;;;:::i;:::-;;;;;;;9873:8;;9882:1;9873:11;;;;;;;:::i;:::-;;;;;;;9863:7;;:21;;;;:::i;:::-;9862:37;;;;:::i;:::-;9932:6;::::0;9845:54;;-1:-1:-1;9914:73:0::1;::::0;-1:-1:-1;;;;;9932:6:0::1;9940:8:::0;;9949:1;9940:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;9953:6;9961:5;9968::::0;9975::::1;9982:4;9914:17;:73::i;:::-;;9830:169;9826:3;;;;;:::i;:::-;;;;9786:213;;;-1:-1:-1::0;10029:6:0::1;::::0;10011:86:::1;::::0;-1:-1:-1;;;;;10029:6:0::1;10045:4;10052:17;10029:6:::0;10052:9:::1;:17::i;10011:86::-;-1:-1:-1::0;10110:9:0::1;::::0;-1:-1:-1;;;;;10110:9:0::1;:25;10143:21;10188:4;10208:24;10188:4:::0;10208:9:::1;:24::i;:::-;10247:1;10333:6:::0;;10110:270:::1;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;22999:15:1;;;10110:270:0::1;::::0;::::1;22981:34:1::0;23031:18;;;23024:34;;;;23074:18;;;23067:34;;;23117:18;;;23110:34;;;;10333:6:0;;;::::1;23160:19:1::0;;;23153:44;10354:15:0::1;23213:19:1::0;;;23206:35;22892:19;;10110:270:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;10393:15;:13;:15::i;:::-;8397:2019:::0;;;;;;;:::o;19816:215::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;19946:3:::1;19920:22;:29;;19912:62;;;::::0;-1:-1:-1;;;19912:62:0;;23765:2:1;19912:62:0::1;::::0;::::1;23747:21:1::0;23804:2;23784:18;;;23777:30;23843:22;23823:18;;;23816:50;23883:18;;19912:62:0::1;23563:344:1::0;19912:62:0::1;19985:13;:38:::0;19816:215::o;10968:661::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;-1:-1:-1;;;;;11047:22:0;::::1;11039:96;;;::::0;-1:-1:-1;;;11039:96:0;;24114:2:1;11039:96:0::1;::::0;::::1;24096:21:1::0;24153:2;24133:18;;;24126:30;24192:34;24172:18;;;24165:62;24263:31;24243:18;;;24236:59;24312:19;;11039:96:0::1;23912:425:1::0;11039:96:0::1;11154:16:::0;-1:-1:-1;;;;;11154:16:0;::::1;::::0;11146:90:::1;;;::::0;-1:-1:-1;;;11146:90:0;;24114:2:1;11146:90:0::1;::::0;::::1;24096:21:1::0;24153:2;24133:18;;;24126:30;24192:34;24172:18;;;24165:62;24263:31;24243:18;;;24236:59;24312:19;;11146:90:0::1;23912:425:1::0;11146:90:0::1;11267:6;::::0;;11247:34:::1;::::0;-1:-1:-1;;;;;11267:6:0;;::::1;::::0;11247:19:::1;:34::i;:::-;11292:35;11312:8;11322:4;11292:19;:35::i;:::-;11371:1;11361:6:::0;;11351:17:::1;::::0;-1:-1:-1;;;;;11361:6:0::1;11351:9;:17::i;:::-;:21;11348:134;;;11407:6;::::0;11389:81:::1;::::0;-1:-1:-1;;;;;11407:6:0::1;11415:8:::0;11425:17:::1;11407:6:::0;11425:9:::1;:17::i;11389:81::-;;11348:134;11502:16;11521:6:::0;;-1:-1:-1;;;;;11538:17:0;;::::1;-1:-1:-1::0;;11538:17:0;::::1;::::0;::::1;::::0;;11571:40:::1;::::0;11521:6;;;::::1;::::0;;;11571:40:::1;::::0;11502:16;11571:40:::1;11028:601;10968:661:::0;:::o;16068:134::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;-1:-1:-1;;;;;16156:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;16156:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16068:134::o;15271:218::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;15355:14:::1;::::0;::::1;;15354:15;15346:24;;;::::0;::::1;;15412:4;-1:-1:-1::0;;;;;15389:28:0;::::1;::::0;15381:55:::1;;;::::0;-1:-1:-1;;;15381:55:0;;24544:2:1;15381:55:0::1;::::0;::::1;24526:21:1::0;24583:2;24563:18;;;24556:30;24622:16;24602:18;;;24595:44;24656:18;;15381:55:0::1;24342:338:1::0;15381:55:0::1;15447:9;:34:::0;;-1:-1:-1;;;;;15447:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;15271:218::o;19201:106::-;19289:9;;19242:7;;19285:13;;19289:9;;19285:2;:13;:::i;:::-;19269:12;;:30;;;;:::i;12856:198::-;-1:-1:-1;;;;;12946:20:0;;12922:7;12946:20;;;:11;:20;;;;;;;;12942:49;;;-1:-1:-1;;;;;;12975:16:0;;;;;:7;:16;;;;;;;12856:198::o;12942:49::-;-1:-1:-1;;;;;13029:16:0;;;;;;:7;:16;;;;;;13009:37;;:19;:37::i;11637:225::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;11716:6:::1;::::0;;11696:34:::1;::::0;-1:-1:-1;;;;;11716:6:0;;::::1;::::0;11696:19:::1;:34::i;:::-;11741:16;11760:6:::0;;-1:-1:-1;;11777:19:0;::::1;::::0;;11812:42:::1;::::0;-1:-1:-1;;;;;11760:6:0;;::::1;::::0;11741:16;11760:6;;11812:42:::1;::::0;11741:16;;11812:42:::1;11685:177;11637:225::o:0;14763:500::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;14844:16;::::1;;14855:5;14844:16:::0;14840:416:::1;;-1:-1:-1::0;;;;;14877:13:0;;::::1;14893:5;14877:13:::0;;;:7:::1;:13;::::0;;;;;;;:21;;-1:-1:-1;;14877:21:0::1;::::0;;14913:9;;:32;;;;;::::1;::::0;::::1;24853:74:1::0;;;;24943:18;;;24936:50;;;;14913:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;24826:18:1;;14913:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;14840:416;14982:17;::::0;:22;14978:136:::1;;15071:6;15051:17;;15033:15;:35;;;;:::i;:::-;:44;15025:73;;;::::0;-1:-1:-1;;;15025:73:0;;25199:2:1;15025:73:0::1;::::0;::::1;25181:21:1::0;25238:2;25218:18;;;25211:30;25277:18;25257;;;25250:46;25313:18;;15025:73:0::1;24997:340:1::0;15025:73:0::1;-1:-1:-1::0;;;;;15128:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;;;:20;;-1:-1:-1;;15128:20:0::1;15144:4;15128:20:::0;;::::1;::::0;;;15183:15:::1;15163:17;:35:::0;;;15213:9;;:31;;;;;;;::::1;24853:74:1::0;;;;24943:18;;;24936:50;;;;15213:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;24826:18:1;;15213:31:0::1;24685:307:1::0;13720:173:0;13784:4;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;13833:9:::1;::::0;13801:62:::1;::::0;13818:4:::1;::::0;-1:-1:-1;;;;;13833:9:0::1;-1:-1:-1::0;;13801:8:0::1;:62::i;:::-;-1:-1:-1::0;13881:4:0::1;13720:173:::0;:::o;25187:544::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;25249:14:::1;::::0;::::1;;25248:15;25240:52;;;::::0;-1:-1:-1;;;25240:52:0;;25544:2:1;25240:52:0::1;::::0;::::1;25526:21:1::0;25583:2;25563:18;;;25556:30;25622:26;25602:18;;;25595:54;25666:18;;25240:52:0::1;25342:348:1::0;25240:52:0::1;25311:16;::::0;::::1;::::0;::::1;;;25303:53;;;::::0;-1:-1:-1;;;25303:53:0;;25897:2:1;25303:53:0::1;::::0;::::1;25879:21:1::0;25936:2;25916:18;;;25909:30;25975:26;25955:18;;;25948:54;26019:18;;25303:53:0::1;25695:348:1::0;25303:53:0::1;25378:9;::::0;;;::::1;-1:-1:-1::0;;;;;25378:9:0::1;25367:99;;25418:9;:36:::0;;;::::1;25448:4;25418:36:::0;::::1;;::::0;;25367:99:::1;25480:9;::::0;25500:6:::1;::::0;25555:9:::1;::::0;25480:85:::1;::::0;;;;-1:-1:-1;;;;;25500:6:0;;::::1;25480:85;::::0;::::1;26271:74:1::0;26393:10;25515:12:0::1;26381:23:1::0;26361:18;;;26354:51;26453:18;25537:15:0::1;26441:31:1::0;26421:18;;;26414:59;25555:9:0::1;::::0;;::::1;26489:18:1::0;;;26482:45;25480:9:0;;;::::1;;::::0;:19:::1;::::0;26243::1;;25480:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;25476:101:::0;25587:14:::1;:21:::0;;-1:-1:-1;;25587:21:0::1;25604:4;25587:21;::::0;;25646:6:::1;::::0;25662:5:::1;::::0;25636:17:::1;::::0;-1:-1:-1;;;;;25646:6:0::1;25636:9;:17::i;:::-;:22;::::0;25656:2:::1;25636:22;:::i;:::-;25635:32;;;;:::i;:::-;25619:13;:48:::0;25702:6:::1;::::0;25718:5:::1;::::0;25692:17:::1;::::0;-1:-1:-1;;;;;25702:6:0::1;25692:9;:17::i;:::-;:22;::::0;25712:2:::1;25692:22;:::i;:::-;25691:32;;;;:::i;:::-;25678:10;:45:::0;25187:544::o;12454:84::-;12504:13;12528:7;12521:14;;;;;:::i;13062:165::-;13140:4;13157:40;13167:10;13179:9;13190:6;13157:9;:40::i;:::-;-1:-1:-1;13215:4:0;;13062:165;-1:-1:-1;;;13062:165:0:o;20039:263::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;20148:19:::1;:33:::0;;-1:-1:-1;;20148:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;20192:22:::1;:47:::0;;-1:-1:-1;;20192:47:0::1;::::0;::::1;;;::::0;;20255:39:::1;::::0;3448:41:1;;;20255:39:0::1;::::0;3436:2:1;3421:18;20255:39:0::1;;;;;;;;20039:263:::0;;:::o;16366:200::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;16522:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;16522:36:0::1;::::0;::::1;160:74:1::0;16522:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;16522:36:0::1;14:226:1::0;18262:382:0;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;18390:17:::1;::::0;-1:-1:-1;;;;;18390:17:0::1;18376:10;:31;::::0;:55:::1;;-1:-1:-1::0;18425:6:0::1;::::0;-1:-1:-1;;;;;18425:6:0::1;18411:10;:20;18376:55;18368:64;;;::::0;::::1;;-1:-1:-1::0;;;;;18447:25:0;::::1;:10;:25:::0;18443:89:::1;;18489:17;:31:::0;;-1:-1:-1;;18489:31:0::1;-1:-1:-1::0;;;;;18489:31:0;::::1;;::::0;;18443:89:::1;18560:6;::::0;-1:-1:-1;;;;;18560:6:0::1;18546:10;:20:::0;18542:95:::1;;18583:11;:42:::0;;-1:-1:-1;;;;;18583:42:0;::::1;-1:-1:-1::0;;18583:42:0;;::::1;;::::0;;18262:382;;:::o;14215:540::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;14284:20:::1;14317:9;14284:43;;14338:16;14368:10;-1:-1:-1::0;;;;;14368:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14357:40:0::1;;14406:4;14413:10;-1:-1:-1::0;;;;;14413:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14357:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;22538:15:1;;;14357:74:0::1;::::0;::::1;22520:34:1::0;22590:15;;22570:18;;;22563:43;22432:18;;14357:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14338:93:::0;-1:-1:-1;;;;;;14446:22:0;::::1;14442:200;;14505:10;-1:-1:-1::0;;;;;14505:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14494:43:0::1;;14546:4;14553:10;-1:-1:-1::0;;;;;14553:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14494:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;22538:15:1;;;14494:77:0::1;::::0;::::1;22520:34:1::0;22590:15;;22570:18;;;22563:43;22432:18;;14494:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14485:6;:86:::0;;-1:-1:-1;;14485:86:0::1;-1:-1:-1::0;;;;;14485:86:0;;;::::1;::::0;;;::::1;::::0;;14442:200:::1;;;14613:6;:17:::0;;-1:-1:-1;;14613:17:0::1;-1:-1:-1::0;;;;;14613:17:0;::::1;;::::0;;14442:200:::1;14652:9;:22:::0;;-1:-1:-1;;14652:22:0::1;-1:-1:-1::0;;;;;14652:22:0;::::1;::::0;;::::1;::::0;;;14685:62:::1;::::0;14702:4:::1;::::0;-1:-1:-1;;14685:8:0::1;:62::i;25739:182::-:0;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;25806:16:::1;::::0;::::1;::::0;::::1;;;25805:17;25797:58;;;::::0;-1:-1:-1;;;25797:58:0;;26740:2:1;25797:58:0::1;::::0;::::1;26722:21:1::0;26779:2;26759:18;;;26752:30;26818;26798:18;;;26791:58;26866:18;;25797:58:0::1;26538:352:1::0;25797:58:0::1;25874:6;::::0;;25866:47:::1;::::0;-1:-1:-1;;;;;25874:6:0;;::::1;::::0;25891:21:::1;25866:47:::0;::::1;;;::::0;25891:21;;25866:47;25874:6;25866:47;25891:21;25874:6;25866:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25739:182::o:0;19435:373::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;19635:16:::1;19615;19605:7;;:26;;;;:::i;:::-;19604:47;;;;:::i;:::-;19588:13;:63:::0;19676:7:::1;::::0;19703:13;;19676:23:::1;::::0;19686:13;;19676:23:::1;:::i;:::-;19675:41;;;;:::i;:::-;19662:10;:54:::0;;;19735:13:::1;::::0;:27:::1;;19727:73;;;::::0;-1:-1:-1;;;19727:73:0;;27097:2:1;19727:73:0::1;::::0;::::1;27079:21:1::0;27136:2;27116:18;;;27109:30;27175:34;27155:18;;;27148:62;27246:3;27226:18;;;27219:31;27267:19;;19727:73:0::1;26895:397:1::0;19727:73:0::1;19435:373:::0;;;;:::o;16574:125::-;16659:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;16659:32:0;;;160:74:1;16635:4:0;;16659:9;;;;;:23;;133:18:1;;16659:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16210:148::-;7196:6;;-1:-1:-1;;;;;7196:6:0;7206:10;7196:20;7188:50;;;;-1:-1:-1;;;7188:50:0;;11933:2:1;7188:50:0;;;11915:21:1;11972:2;11952:18;;;11945:30;-1:-1:-1;;;11991:18:1;;;11984:47;12048:18;;7188:50:0;11731:341:1;7188:50:0;-1:-1:-1;;;;;16306:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;16306:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16210:148::o;13402:310::-;-1:-1:-1;;;;;13497:20:0;;13489:52;;;;-1:-1:-1;;;13489:52:0;;27749:2:1;13489:52:0;;;27731:21:1;27788:2;27768:18;;;27761:30;27827:21;27807:18;;;27800:49;27866:18;;13489:52:0;27547:343:1;13489:52:0;-1:-1:-1;;;;;13560:21:0;;13552:53;;;;-1:-1:-1;;;13552:53:0;;27749:2:1;13552:53:0;;;27731:21:1;27788:2;27768:18;;;27761:30;27827:21;27807:18;;;27800:49;27866:18;;13552:53:0;27547:343:1;13552:53:0;-1:-1:-1;;;;;13618:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;13671:33;;391:25:1;;;13671:33:0;;364:18:1;13671:33:0;;;;;;;13402:310;;;:::o;31523:818::-;31603:7;;31639;;31672:6;;-1:-1:-1;;;;;31672:6:0;31565:7;31660:19;;;:11;:19;;;;;;31565:7;;31603;31639;31660:19;;31657:217;;;31708:6;;-1:-1:-1;;;;;31708:6:0;31700:15;;;;:7;:15;;;;;;:25;-1:-1:-1;31700:25:0;:54;;-1:-1:-1;31737:6:0;;-1:-1:-1;;;;;31737:6:0;31729:15;;;;:7;:15;;;;;;:25;-1:-1:-1;31700:54:0;31696:84;;;31773:7;;31763;;:17;;;;:::i;:::-;31756:24;;;;31523:818;:::o;31696:84::-;31814:6;;-1:-1:-1;;;;;31814:6:0;31806:15;;;;:7;:15;;;;;;31795:26;;;;:::i;:::-;31855:6;;-1:-1:-1;;;;;31855:6:0;31847:15;;;;:7;:15;;;;;;31795:26;;-1:-1:-1;31836:26:0;;;;:::i;:::-;;;31657:217;31887:9;:16;:20;31884:347;;31929:7;31924:296;31946:9;:16;31942:20;;;;31924:296;;;32016:7;31992;:21;32000:9;32010:1;32000:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32000:12:0;31992:21;;;;;;;;;;;;;:31;;:66;;;32051:7;32027;:21;32035:9;32045:1;32035:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32035:12:0;32027:21;;;;;;;;;;;;;:31;31992:66;31988:96;;;32077:7;;32067;;:17;;;;:::i;:::-;32060:24;;;;;31523:818;:::o;31988:96::-;32123:7;:21;32131:9;32141:1;32131:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32131:12:0;32123:21;;;;;;;;;;;;;32113:31;;:7;:31;:::i;:::-;32103:41;;32183:7;:21;32191:9;32201:1;32191:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32191:12:0;32183:21;;;;;;;;;;;;;32173:31;;:7;:31;:::i;:::-;32163:41;-1:-1:-1;31964:3:0;;;;:::i;:::-;;;;31924:296;;;;31884:347;32265:7;;32255;;:17;;;;:::i;:::-;32245:7;:27;32241:57;;;32291:7;;32281;;:17;;;;:::i;32241:57::-;32316:17;32326:7;32316;:17;:::i;20676:2091::-;20755:4;-1:-1:-1;;;;;20780:18:0;;20772:68;;;;-1:-1:-1;;;20772:68:0;;28097:2:1;20772:68:0;;;28079:21:1;28136:2;28116:18;;;28109:30;28175:34;28155:18;;;28148:62;28246:7;28226:18;;;28219:35;28271:19;;20772:68:0;27895:401:1;20772:68:0;-1:-1:-1;;;;;20859:16:0;;20851:64;;;;-1:-1:-1;;;20851:64:0;;28503:2:1;20851:64:0;;;28485:21:1;28542:2;28522:18;;;28515:30;28581:34;28561:18;;;28554:62;28652:5;28632:18;;;28625:33;28675:19;;20851:64:0;28301:399:1;20851:64:0;20943:1;20934:6;:10;20926:64;;;;-1:-1:-1;;;20926:64:0;;28907:2:1;20926:64:0;;;28889:21:1;28946:2;28926:18;;;28919:30;28985:34;28965:18;;;28958:62;29056:11;29036:18;;;29029:39;29085:19;;20926:64:0;28705:405:1;20926:64:0;-1:-1:-1;;;;;21089:13:0;;21001:8;21089:13;;;:7;:13;;;;;;21001:8;;;;21089:13;;21085:162;;;21125:4;21119:10;;21085:162;;;-1:-1:-1;;;;;21151:11:0;;;;;;:7;:11;;;;;;;;21147:100;;;21186:4;21179:11;;21147:100;;;-1:-1:-1;21231:4:0;21147:100;21260:20;21271:4;21277:2;21260:10;:20::i;:::-;21257:641;;;21301:14;;;;21297:89;;21336:34;;-1:-1:-1;;;21336:34:0;;29317:2:1;21336:34:0;;;29299:21:1;29356:2;29336:18;;;29329:30;29395:26;29375:18;;;29368:54;29439:18;;21336:34:0;29115:348:1;21297:89:0;21403:3;:11;;;;21410:4;21403:11;21400:231;;;-1:-1:-1;;;;;21439:27:0;;;;;;:21;:27;;;;;;;;21438:28;:58;;;;-1:-1:-1;;;;;;21471:25:0;;;;;;:21;:25;;;;;;;;21470:26;21438:58;21434:182;;;21539:12;;21529:6;:22;;21521:75;;;;-1:-1:-1;;;21521:75:0;;29670:2:1;21521:75:0;;;29652:21:1;29709:2;29689:18;;;29682:30;29748:34;29728:18;;;29721:62;29819:10;29799:18;;;29792:38;29847:19;;21521:75:0;29468:404:1;21521:75:0;21662:9;;-1:-1:-1;;;;;21648:24:0;;;21662:9;;21648:24;;;;:33;;;21677:4;21676:5;21648:33;21645:242;;;-1:-1:-1;;;;;21707:25:0;;;;;;:21;:25;;;;;;;;21702:170;;21791:14;;21781:6;21765:13;21775:2;21765:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;21757:95;;;;-1:-1:-1;;;21757:95:0;;30212:2:1;21757:95:0;;;30194:21:1;30251:2;30231:18;;;30224:30;30290:34;30270:18;;;30263:62;30361:12;30341:18;;;30334:40;30391:19;;21757:95:0;30010:406:1;21757:95:0;-1:-1:-1;;;;;21943:25:0;;21910:12;21943:25;;;:19;:25;;;;;;21925:4;;21943:25;;;:52;;-1:-1:-1;;;;;;21972:23:0;;;;;;:19;:23;;;;;;;;21943:52;21940:98;;;-1:-1:-1;22021:5:0;21940:98;22054:4;22050:629;;;22080:6;;;;22075:593;;22110:19;;;;;;;22107:546;;;22154:28;22185:24;22203:4;22185:9;:24::i;:::-;22154:55;;22260:13;;22236:20;:37;22232:402;;22320:10;;22360:22;;;;22357:96;;;22417:13;;22407:6;;5989:5;;22417:13;22397:17;;-1:-1:-1;;;;;22407:6:0;22397:9;:17::i;:::-;:33;;;;:::i;:::-;22396:54;;;;:::i;:::-;22386:64;;22357:96;22506:7;22482:20;:31;22479:71;;22540:7;22517:30;;22479:71;22576:34;22589:20;22576:12;:34::i;:::-;22275:359;22232:402;22131:522;22107:546;22697:62;22715:4;22721:2;22725:6;22733:7;22742:3;22747:4;22753:5;22697:17;:62::i;:::-;22690:69;20676:2091;-1:-1:-1;;;;;;;;20676:2091:0:o;28501:1037::-;28658:16;;28636:4;;28658:16;;;;;28653:298;;28691:28;28710:4;28716:2;28691:18;:28::i;:::-;28739:16;;;;;;;28738:17;:41;;;;;28759:20;28770:4;28776:2;28759:10;:20::i;:::-;28738:77;;;;-1:-1:-1;;;;;;28784:31:0;;;;;;:25;:31;;;;;;;;28783:32;28738:77;:111;;;;-1:-1:-1;;;;;;28820:29:0;;;;;;:25;:29;;;;;;;;28819:30;28738:111;:121;;;;;28854:5;28853:6;28738:121;28734:206;;;28880:44;;-1:-1:-1;;;28880:44:0;;30623:2:1;28880:44:0;;;30605:21:1;30662:2;30642:18;;;30635:30;30701:34;30681:18;;;30674:62;30772:4;30752:18;;;30745:32;30794:19;;28880:44:0;30421:398:1;28734:206:0;28963:25;28991:55;29001:4;29007:2;29011:7;29020;29029:3;29034:4;29040:5;28991:9;:55::i;:::-;29076:14;;;;-1:-1:-1;;;;;29059:13:0;;;;;;:7;:13;;;;;:31;;28963:83;;-1:-1:-1;29076:14:0;;29059:31;;29076:14;;29059:31;:::i;:::-;;;;-1:-1:-1;;29116:22:0;;;;-1:-1:-1;;;;;29101:11:0;;;;;;:7;:11;;;;;:37;;:11;;;:37;;29116:22;;29101:37;:::i;:::-;;;;-1:-1:-1;;;;;;;29155:17:0;;;;;;:11;:17;;;;;;;;29151:89;;;-1:-1:-1;;;;;29205:13:0;;;;;;:7;:13;;;;;;:23;;29221:7;;29205:23;:::i;:::-;-1:-1:-1;;;;;29189:13:0;;;;;;:7;:13;;;;;:39;29151:89;-1:-1:-1;;;;;29254:15:0;;;;;;:11;:15;;;;;;;;29250:98;;;29314:22;;-1:-1:-1;;;;;29300:11:0;;29314:22;29300:11;;;:7;:11;;;;;;:36;;29314:22;29300:36;:::i;:::-;-1:-1:-1;;;;;29286:11:0;;;;;;:7;:11;;;;;:50;29250:98;29378:1;29364:6;:11;;;:15;:34;;;;29397:1;29383:6;:11;;;:15;29364:34;29360:89;;;29426:6;:11;;;29415:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;29360:89:0;29481:2;-1:-1:-1;;;;;29466:42:0;29475:4;-1:-1:-1;;;;;29466:42:0;;29485:6;:22;;;29466:42;;;;391:25:1;;379:2;364:18;;245:177;29466:42:0;;;;;;;;-1:-1:-1;29526:4:0;;28501:1037;-1:-1:-1;;;;;;;;28501:1037:0:o;20310:358::-;20379:4;20411:6;;-1:-1:-1;;;;;20403:14:0;;;20411:6;;20403:14;;;;:43;;-1:-1:-1;20440:6:0;;-1:-1:-1;;;;;20434:12:0;;;20440:6;;20434:12;;20403:43;:79;;;;-1:-1:-1;20476:6:0;;-1:-1:-1;;;;;20476:6:0;20463:9;:19;;20403:79;:118;;;;-1:-1:-1;;;;;;20500:21:0;;;;;;:17;:21;;;;;;;;20499:22;20403:118;:159;;;;-1:-1:-1;;;;;;20539:23:0;;;;;;:17;:23;;;;;;;;20538:24;20403:159;:186;;;;-1:-1:-1;;;;;;20579:10:0;;6093:42;20579:10;;20403:186;:219;;;;-1:-1:-1;;;;;;20606:16:0;;;;20403:219;:257;;;;-1:-1:-1;;;;;;20639:21:0;;20655:4;20639:21;;20396:264;20310:358;-1:-1:-1;;;20310:358:0:o;22775:1887::-;7090:6;:13;;-1:-1:-1;;7090:13:0;7099:4;7090:13;;;22859:30:::1;::::0;;::::1;::::0;::::1;::::0;;22882:7:::1;22859:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;;;;;7090:6;22904:21;22900:60:::1;;22942:7;;;22900:60;22995:4;22975:26;::::0;;;:11:::1;:26;::::0;;;;;;;23010:9:::1;::::0;-1:-1:-1;;;;;23010:9:0::1;22975:46:::0;;;;;;;;-1:-1:-1;;22975:67:0::1;22972:165;;23079:4;23059:26;::::0;;;:11:::1;:26;::::0;;;;;;;23094:9:::1;::::0;-1:-1:-1;;;;;23094:9:0::1;23059:46:::0;;;;;;;-1:-1:-1;;23059:66:0;;22972:165:::1;23149:17;23234:1;23214:6;:16;;;23170:60;;23194:6;:16;;;23171:39;;:20;:39;;;;:::i;:::-;23170:60;;;;:::i;:::-;23169:66;;;;:::i;:::-;23149:86:::0;-1:-1:-1;23246:15:0::1;23264:32;23149:86:::0;23264:20;:32:::1;:::i;:::-;23341:16;::::0;;23355:1:::1;23341:16:::0;;;;;::::1;::::0;;23246:50;;-1:-1:-1;23317:21:0::1;::::0;23341:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23341:16:0::1;23317:40;;23386:4;23368;23373:1;23368:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23368:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23412:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;23368:7;;23412:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23402:4;23407:1;23402:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23402:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;23441:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;23516:7;;23441:9:::1;::::0;23554:4;;23581::::1;::::0;23601:15:::1;::::0;23441:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;23661:21:0::1;::::0;-1:-1:-1;23640:18:0::1;::::0;-1:-1:-1;23747:7:0;;-1:-1:-1;23721:22:0::1;23734:9:::0;23661:21;23721:22:::1;:::i;:::-;23720:34;;;;:::i;:::-;23693:61:::0;-1:-1:-1;23771:13:0;;23767:328:::1;;23801:9;::::0;:222:::1;::::0;;;;23878:4:::1;23801:222;::::0;::::1;22981:34:1::0;23031:18;;;23024:34;;;23801:9:0::1;23074:18:1::0;;;23067:34;;;23117:18;;;23110:34;6093:42:0::1;23160:19:1::0;;;23153:44;23993:15:0::1;23213:19:1::0;;;23206:35;-1:-1:-1;;;;;23801:9:0;;::::1;::::0;:25:::1;::::0;23834:16;;22892:19:1;;23801:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;24043:40:0::1;::::0;;32029:25:1;;;32085:2;32070:18;;32063:34;;;24043:40:0::1;::::0;-1:-1:-1;32002:18:1;24043:40:0::1;;;;;;;23767:328;24107:30;24121:16:::0;24107:30;::::1;:::i;:::-;;;24168:6;:16;;;24148:6;:16;;:36;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;24283:16:::1;::::0;::::1;::::0;24261:18:::1;::::0;::::1;::::0;24195:12:::1;::::0;-1:-1:-1;24195:12:0;;24247:52;;::::1;::::0;24248:31:::1;::::0;::::1;:10:::0;:31:::1;:::i;:::-;24247:52;;;;:::i;:::-;24218:81:::0;-1:-1:-1;24310:24:0::1;24337:31;24218:81:::0;24337:10;:31:::1;:::i;:::-;24383:16;::::0;::::1;::::0;24310:58;;-1:-1:-1;24383:20:0::1;;::::0;24379:133:::1;;24433:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;24433:21:0;;::::1;::::0;24490:5:::1;::::0;24467:16;;24433:67:::1;::::0;;;24467:16;24433:21;24490:5;24433:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;24420:80:0;;-1:-1:-1;;24379:133:0::1;24526:18;::::0;::::1;::::0;:22:::1;;::::0;24522:133:::1;;24578:17;::::0;:65:::1;::::0;-1:-1:-1;;;;;24578:17:0;;::::1;::::0;24633:5:::1;::::0;24608:18;;24578:65:::1;::::0;;;24608:18;24578:17;24633:5;24578:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;24565:78:0;;-1:-1:-1;;24522:133:0::1;22848:1814;;;;;;;;;7114:1;-1:-1:-1::0;7126:6:0;:14;;-1:-1:-1;;7126:14:0;;;22775:1887::o;24670:509::-;24753:16;;;;;;;24752:17;24744:65;;;;-1:-1:-1;;;24744:65:0;;32742:2:1;24744:65:0;;;32724:21:1;32781:2;32761:18;;;32754:30;32820:34;32800:18;;;32793:62;32891:5;32871:18;;;32864:33;32914:19;;24744:65:0;32540:399:1;24744:65:0;24825:20;24836:4;24842:2;24825:10;:20::i;:::-;24824:21;:37;;;;-1:-1:-1;24855:6:0;;-1:-1:-1;;;;;24849:12:0;;;24855:6;;24849:12;24824:37;24820:352;;;-1:-1:-1;;;;;24878:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;24878:30:0;24904:4;24878:30;;;24923:23;;-1:-1:-1;;24923:23:0;24878:30;24923:23;;;;;24972:9;;;;24961:107;;25016:9;:36;;;;25046:4;25016:36;;;;;24961:107;25082:19;:26;;-1:-1:-1;;25082:26:0;;;;;25128:32;;-1:-1:-1;3448:41:1;;25128:32:0;;3436:2:1;3421:18;25128:32:0;3308:187:1;29546:1969:0;29673:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29673:18:0;29704:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29704:25:0;29740:30;;;;;;;;29763:7;29740:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29802:10;:8;:10::i;:::-;29781:18;;;:31;;;29842:28;;:7;:28;:::i;:::-;29825:14;;;:45;29887:20;29898:4;29904:2;29887:10;:20::i;:::-;29883:315;;;29955:9;;:38;;;;;-1:-1:-1;;;;;33225:15:1;;;29955:38:0;;;33207:34:1;33277:15;;;33257:18;;;33250:43;33309:18;;;33302:34;;;29924:12:0;;29955:9;;;;;:19;;33119:18:1;;29955:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;29955:38:0;;;;;;;;-1:-1:-1;;29955:38:0;;;;;;;;;;;;:::i;:::-;;;29951:164;;30091:8;;;29951:164;30044:5;-1:-1:-1;30135:7:0;30131:56;;30163:8;;;30131:56;29909:289;29883:315;30213:7;30210:867;;;30237:18;30276:3;30272:229;;;-1:-1:-1;30313:9:0;:16;;;30272:229;;;30355:4;30351:150;;;-1:-1:-1;30393:9:0;:17;;;;;;30351:150;;;-1:-1:-1;30464:9:0;:21;;;;;;30351:150;30517:17;5989:5;30538:20;30548:10;30538:7;:20;:::i;:::-;30537:41;;;;:::i;:::-;30517:61;;30593:13;30628:6;:17;;;30609:6;:16;;;:36;;;;:::i;:::-;30687:17;;30593:52;;;;;-1:-1:-1;30593:52:0;;30675:29;;;:9;:29;:::i;:::-;30674:39;;;;:::i;:::-;30660:11;;;:53;;;30743:23;;:9;:23;:::i;:::-;30728:12;;;:38;;;30817:11;;;;:26;;30728:38;30817:26;:::i;:::-;30806:38;;:7;:38;:::i;:::-;30781:63;;30889:18;;;;30875:11;;;;:32;;30889:18;30875:32;:::i;:::-;30861:11;;;:46;-1:-1:-1;30210:867:0;;-1:-1:-1;;30210:867:0;;30954:1;30940:11;;;:15;;;30970:12;;;:16;;;31001:32;;;31050:11;;;:15;30210:867;31093:12;;;;:16;31089:289;;31167:6;:18;;;31152:6;:12;;;:33;;;;:::i;:::-;31142:4;31126:22;;;;:7;:22;;;;;:59;;:22;;;:59;;;;;:::i;:::-;;;;-1:-1:-1;;31223:4:0;31203:26;;;;:11;:26;;;;;;;;31200:104;;;31276:12;;;;;31266:4;31250:22;;;;:7;:22;;;;;:38;;31276:12;;31250:22;;:38;;31276:12;;31250:38;:::i;:::-;;;;-1:-1:-1;;31200:104:0;31346:4;-1:-1:-1;;;;;31323:43:0;31332:4;-1:-1:-1;;;;;31323:43:0;;31353:6;:12;;;31323:43;;;;391:25:1;;379:2;364:18;;245:177;31323:43:0;;;;;;;;31089:289;31463:6;:18;;;31448:6;:12;;;:33;;;;:::i;:::-;31433:6;:11;;;:49;;;;:::i;:::-;31415:6;:14;;;:68;;;;:::i;:::-;31390:22;;;:93;-1:-1:-1;31390:22:0;29546:1969;-1:-1:-1;;;;;;;;29546:1969:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;427:118:1;513:5;506:13;499:21;492:5;489:32;479:60;;535:1;532;525:12;550:376;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:28;769:5;747:28;:::i;:::-;794:5;-1:-1:-1;851:2:1;836:18;;823:32;864:30;823:32;864:30;:::i;:::-;913:7;903:17;;;550:376;;;;;:::o;1301:258::-;1373:1;1383:113;1397:6;1394:1;1391:13;1383:113;;;1473:11;;;1467:18;1454:11;;;1447:39;1419:2;1412:10;1383:113;;;1514:6;1511:1;1508:13;1505:48;;;-1:-1:-1;;1549:1:1;1531:16;;1524:27;1301:258::o;1564:442::-;1713:2;1702:9;1695:21;1676:4;1745:6;1739:13;1788:6;1783:2;1772:9;1768:18;1761:34;1804:66;1863:6;1858:2;1847:9;1843:18;1838:2;1830:6;1826:15;1804:66;:::i;:::-;1922:2;1910:15;-1:-1:-1;;1906:88:1;1891:104;;;;1997:2;1887:113;;1564:442;-1:-1:-1;;1564:442:1:o;2011:159::-;2078:20;;2138:6;2127:18;;2117:29;;2107:57;;2160:1;2157;2150:12;2107:57;2011:159;;;:::o;2175:401::-;2257:6;2265;2273;2281;2334:3;2322:9;2313:7;2309:23;2305:33;2302:53;;;2351:1;2348;2341:12;2302:53;2374:28;2392:9;2374:28;:::i;:::-;2364:38;;2421:37;2454:2;2443:9;2439:18;2421:37;:::i;:::-;2411:47;;2477:37;2510:2;2499:9;2495:18;2477:37;:::i;:::-;2467:47;;2533:37;2566:2;2555:9;2551:18;2533:37;:::i;:::-;2523:47;;2175:401;;;;;;;:::o;2829:154::-;-1:-1:-1;;;;;2908:5:1;2904:54;2897:5;2894:65;2884:93;;2973:1;2970;2963:12;2988:315;3056:6;3064;3117:2;3105:9;3096:7;3092:23;3088:32;3085:52;;;3133:1;3130;3123:12;3085:52;3172:9;3159:23;3191:31;3216:5;3191:31;:::i;:::-;3241:5;3293:2;3278:18;;;;3265:32;;-1:-1:-1;;;2988:315:1:o;3500:247::-;3559:6;3612:2;3600:9;3591:7;3587:23;3583:32;3580:52;;;3628:1;3625;3618:12;3580:52;3667:9;3654:23;3686:31;3711:5;3686:31;:::i;3752:382::-;3817:6;3825;3878:2;3866:9;3857:7;3853:23;3849:32;3846:52;;;3894:1;3891;3884:12;3846:52;3933:9;3920:23;3952:31;3977:5;3952:31;:::i;4139:456::-;4216:6;4224;4232;4285:2;4273:9;4264:7;4260:23;4256:32;4253:52;;;4301:1;4298;4291:12;4253:52;4340:9;4327:23;4359:31;4384:5;4359:31;:::i;:::-;4409:5;-1:-1:-1;4466:2:1;4451:18;;4438:32;4479:33;4438:32;4479:33;:::i;:::-;4139:456;;4531:7;;-1:-1:-1;;;4585:2:1;4570:18;;;;4557:32;;4139:456::o;4600:248::-;4668:6;4676;4729:2;4717:9;4708:7;4704:23;4700:32;4697:52;;;4745:1;4742;4735:12;4697:52;-1:-1:-1;;4768:23:1;;;4838:2;4823:18;;;4810:32;;-1:-1:-1;4600:248:1:o;4853:184::-;4905:77;4902:1;4895:88;5002:4;4999:1;4992:15;5026:4;5023:1;5016:15;5042:334;5113:2;5107:9;5169:2;5159:13;;-1:-1:-1;;5155:86:1;5143:99;;5272:18;5257:34;;5293:22;;;5254:62;5251:88;;;5319:18;;:::i;:::-;5355:2;5348:22;5042:334;;-1:-1:-1;5042:334:1:o;5381:183::-;5441:4;5474:18;5466:6;5463:30;5460:56;;;5496:18;;:::i;:::-;-1:-1:-1;5541:1:1;5537:14;5553:4;5533:25;;5381:183::o;5569:662::-;5623:5;5676:3;5669:4;5661:6;5657:17;5653:27;5643:55;;5694:1;5691;5684:12;5643:55;5730:6;5717:20;5756:4;5780:60;5796:43;5836:2;5796:43;:::i;:::-;5780:60;:::i;:::-;5874:15;;;5960:1;5956:10;;;;5944:23;;5940:32;;;5905:12;;;;5984:15;;;5981:35;;;6012:1;6009;6002:12;5981:35;6048:2;6040:6;6036:15;6060:142;6076:6;6071:3;6068:15;6060:142;;;6142:17;;6130:30;;6180:12;;;;6093;;6060:142;;;-1:-1:-1;6220:5:1;5569:662;-1:-1:-1;;;;;;5569:662:1:o;6236:1215::-;6354:6;6362;6415:2;6403:9;6394:7;6390:23;6386:32;6383:52;;;6431:1;6428;6421:12;6383:52;6471:9;6458:23;6500:18;6541:2;6533:6;6530:14;6527:34;;;6557:1;6554;6547:12;6527:34;6595:6;6584:9;6580:22;6570:32;;6640:7;6633:4;6629:2;6625:13;6621:27;6611:55;;6662:1;6659;6652:12;6611:55;6698:2;6685:16;6720:4;6744:60;6760:43;6800:2;6760:43;:::i;6744:60::-;6838:15;;;6920:1;6916:10;;;;6908:19;;6904:28;;;6869:12;;;;6944:19;;;6941:39;;;6976:1;6973;6966:12;6941:39;7000:11;;;;7020:217;7036:6;7031:3;7028:15;7020:217;;;7116:3;7103:17;7133:31;7158:5;7133:31;:::i;:::-;7177:18;;7053:12;;;;7215;;;;7020:217;;;7256:5;-1:-1:-1;;7299:18:1;;7286:32;;-1:-1:-1;;7330:16:1;;;7327:36;;;7359:1;7356;7349:12;7327:36;;7382:63;7437:7;7426:8;7415:9;7411:24;7382:63;:::i;:::-;7372:73;;;6236:1215;;;;;:::o;7456:180::-;7515:6;7568:2;7556:9;7547:7;7543:23;7539:32;7536:52;;;7584:1;7581;7574:12;7536:52;-1:-1:-1;7607:23:1;;7456:180;-1:-1:-1;7456:180:1:o;7830:328::-;7904:6;7912;7920;7973:2;7961:9;7952:7;7948:23;7944:32;7941:52;;;7989:1;7986;7979:12;7941:52;8012:28;8030:9;8012:28;:::i;:::-;8002:38;;8059:37;8092:2;8081:9;8077:18;8059:37;:::i;:::-;8049:47;;8115:37;8148:2;8137:9;8133:18;8115:37;:::i;:::-;8105:47;;7830:328;;;;;:::o;8163:367::-;8226:8;8236:6;8290:3;8283:4;8275:6;8271:17;8267:27;8257:55;;8308:1;8305;8298:12;8257:55;-1:-1:-1;8331:20:1;;8374:18;8363:30;;8360:50;;;8406:1;8403;8396:12;8360:50;8443:4;8435:6;8431:17;8419:29;;8503:3;8496:4;8486:6;8483:1;8479:14;8471:6;8467:27;8463:38;8460:47;8457:67;;;8520:1;8517;8510:12;8457:67;8163:367;;;;;:::o;8535:1224::-;8702:6;8710;8718;8726;8734;8742;8750;8803:3;8791:9;8782:7;8778:23;8774:33;8771:53;;;8820:1;8817;8810:12;8771:53;8860:9;8847:23;8889:18;8930:2;8922:6;8919:14;8916:34;;;8946:1;8943;8936:12;8916:34;8985:70;9047:7;9038:6;9027:9;9023:22;8985:70;:::i;:::-;9074:8;;-1:-1:-1;8959:96:1;-1:-1:-1;9162:2:1;9147:18;;9134:32;;-1:-1:-1;9178:16:1;;;9175:36;;;9207:1;9204;9197:12;9175:36;9246:72;9310:7;9299:8;9288:9;9284:24;9246:72;:::i;:::-;9337:8;;-1:-1:-1;9220:98:1;-1:-1:-1;9425:2:1;9410:18;;9397:32;;-1:-1:-1;9441:16:1;;;9438:36;;;9470:1;9467;9460:12;9438:36;;9509:72;9573:7;9562:8;9551:9;9547:24;9509:72;:::i;:::-;9600:8;;-1:-1:-1;9483:98:1;-1:-1:-1;;9685:2:1;9670:18;;9657:32;9698:31;9657:32;9698:31;:::i;:::-;9748:5;9738:15;;;8535:1224;;;;;;;;;;:::o;10292:404::-;10376:6;10384;10437:2;10425:9;10416:7;10412:23;10408:32;10405:52;;;10453:1;10450;10443:12;10405:52;10492:9;10479:23;10511:31;10536:5;10511:31;:::i;:::-;10561:5;-1:-1:-1;10618:2:1;10603:18;;10590:32;10631:33;10590:32;10631:33;:::i;11341:385::-;11427:6;11435;11443;11451;11504:3;11492:9;11483:7;11479:23;11475:33;11472:53;;;11521:1;11518;11511:12;11472:53;-1:-1:-1;;11544:23:1;;;11614:2;11599:18;;11586:32;;-1:-1:-1;11665:2:1;11650:18;;11637:32;;11716:2;11701:18;11688:32;;-1:-1:-1;11341:385:1;-1:-1:-1;11341:385:1:o;12350:437::-;12429:1;12425:12;;;;12472;;;12493:61;;12547:4;12539:6;12535:17;12525:27;;12493:61;12600:2;12592:6;12589:14;12569:18;12566:38;12563:218;;12637:77;12634:1;12627:88;12738:4;12735:1;12728:15;12766:4;12763:1;12756:15;12563:218;;12350:437;;;:::o;12792:184::-;12844:77;12841:1;12834:88;12941:4;12938:1;12931:15;12965:4;12962:1;12955:15;12981:224;13020:3;13048:6;13081:2;13078:1;13074:10;13111:2;13108:1;13104:10;13142:3;13138:2;13134:12;13129:3;13126:21;13123:47;;;13150:18;;:::i;:::-;13186:13;;12981:224;-1:-1:-1;;;;12981:224:1:o;13618:482::-;13707:1;13750:5;13707:1;13764:330;13785:7;13775:8;13772:21;13764:330;;;13904:4;-1:-1:-1;;13832:77:1;13826:4;13823:87;13820:113;;;13913:18;;:::i;:::-;13963:7;13953:8;13949:22;13946:55;;;13983:16;;;;13946:55;14062:22;;;;14022:15;;;;13764:330;;;13768:3;13618:482;;;;;:::o;14105:866::-;14154:5;14184:8;14174:80;;-1:-1:-1;14225:1:1;14239:5;;14174:80;14273:4;14263:76;;-1:-1:-1;14310:1:1;14324:5;;14263:76;14355:4;14373:1;14368:59;;;;14441:1;14436:130;;;;14348:218;;14368:59;14398:1;14389:10;;14412:5;;;14436:130;14473:3;14463:8;14460:17;14457:43;;;14480:18;;:::i;:::-;-1:-1:-1;;14536:1:1;14522:16;;14551:5;;14348:218;;14650:2;14640:8;14637:16;14631:3;14625:4;14622:13;14618:36;14612:2;14602:8;14599:16;14594:2;14588:4;14585:12;14581:35;14578:77;14575:159;;;-1:-1:-1;14687:19:1;;;14719:5;;14575:159;14766:34;14791:8;14785:4;14766:34;:::i;:::-;14896:6;-1:-1:-1;;14824:79:1;14815:7;14812:92;14809:118;;;14907:18;;:::i;:::-;14945:20;;14105:866;-1:-1:-1;;;14105:866:1:o;14976:140::-;15034:5;15063:47;15104:4;15094:8;15090:19;15084:4;15063:47;:::i;15121:184::-;15173:77;15170:1;15163:88;15270:4;15267:1;15260:15;15294:4;15291:1;15284:15;15310:120;15350:1;15376;15366:35;;15381:18;;:::i;:::-;-1:-1:-1;15415:9:1;;15310:120::o;16149:228::-;16189:7;16315:1;-1:-1:-1;;16243:74:1;16240:1;16237:81;16232:1;16225:9;16218:17;16214:105;16211:131;;;16322:18;;:::i;:::-;-1:-1:-1;16362:9:1;;16149:228::o;16382:184::-;16434:77;16431:1;16424:88;16531:4;16528:1;16521:15;16555:4;16552:1;16545:15;16571:184;16623:77;16620:1;16613:88;16720:4;16717:1;16710:15;16744:4;16741:1;16734:15;16760:125;16800:4;16828:1;16825;16822:8;16819:34;;;16833:18;;:::i;:::-;-1:-1:-1;16870:9:1;;16760:125::o;16890:195::-;16929:3;-1:-1:-1;;16953:5:1;16950:77;16947:103;;17030:18;;:::i;:::-;-1:-1:-1;17077:1:1;17066:13;;16890:195::o;17857:175::-;17894:3;17938:4;17931:5;17927:16;17967:4;17958:7;17955:17;17952:43;;17975:18;;:::i;:::-;18024:1;18011:15;;17857:175;-1:-1:-1;;17857:175:1:o;20243:556::-;20297:5;20350:3;20343:4;20335:6;20331:17;20327:27;20317:55;;20368:1;20365;20358:12;20317:55;20397:6;20391:13;20423:18;20419:2;20416:26;20413:52;;;20445:18;;:::i;:::-;20489:114;20597:4;-1:-1:-1;;20521:4:1;20517:2;20513:13;20509:86;20505:97;20489:114;:::i;:::-;20628:2;20619:7;20612:19;20674:3;20667:4;20662:2;20654:6;20650:15;20646:26;20643:35;20640:55;;;20691:1;20688;20681:12;20640:55;20704:64;20765:2;20758:4;20749:7;20745:18;20738:4;20730:6;20726:17;20704:64;:::i;20804:774::-;20919:6;20927;20935;20943;20996:3;20984:9;20975:7;20971:23;20967:33;20964:53;;;21013:1;21010;21003:12;20964:53;21046:9;21040:16;21075:18;21116:2;21108:6;21105:14;21102:34;;;21132:1;21129;21122:12;21102:34;21155:61;21208:7;21199:6;21188:9;21184:22;21155:61;:::i;:::-;21145:71;;21262:2;21251:9;21247:18;21241:25;21225:41;;21291:2;21281:8;21278:16;21275:36;;;21307:1;21304;21297:12;21275:36;;21330:63;21385:7;21374:8;21363:9;21359:24;21330:63;:::i;:::-;21320:73;;;21433:2;21422:9;21418:18;21412:25;21402:35;;21480:2;21469:9;21465:18;21459:25;21524:4;21517:5;21513:16;21506:5;21503:27;21493:55;;21544:1;21541;21534:12;21493:55;20804:774;;;;-1:-1:-1;20804:774:1;;-1:-1:-1;;20804:774:1:o;21912:112::-;21944:1;21970;21960:35;;21975:18;;:::i;:::-;-1:-1:-1;22009:9:1;;21912:112::o;22029:251::-;22099:6;22152:2;22140:9;22131:7;22127:23;22123:32;22120:52;;;22168:1;22165;22158:12;22120:52;22200:9;22194:16;22219:31;22244:5;22219:31;:::i;23252:306::-;23340:6;23348;23356;23409:2;23397:9;23388:7;23384:23;23380:32;23377:52;;;23425:1;23422;23415:12;23377:52;23454:9;23448:16;23438:26;;23504:2;23493:9;23489:18;23483:25;23473:35;;23548:2;23537:9;23533:18;23527:25;23517:35;;23252:306;;;;;:::o;27297:245::-;27364:6;27417:2;27405:9;27396:7;27392:23;27388:32;27385:52;;;27433:1;27430;27423:12;27385:52;27465:9;27459:16;27484:28;27506:5;27484:28;:::i;29877:128::-;29917:3;29948:1;29944:6;29941:1;29938:13;29935:39;;;29954:18;;:::i;:::-;-1:-1:-1;29990:9:1;;29877:128::o;30824:1026::-;31086:4;31134:3;31123:9;31119:19;31165:6;31154:9;31147:25;31191:2;31229:6;31224:2;31213:9;31209:18;31202:34;31272:3;31267:2;31256:9;31252:18;31245:31;31296:6;31331;31325:13;31362:6;31354;31347:22;31400:3;31389:9;31385:19;31378:26;;31439:2;31431:6;31427:15;31413:29;;31460:1;31470:218;31484:6;31481:1;31478:13;31470:218;;;31549:13;;-1:-1:-1;;;;;31545:62:1;31533:75;;31663:15;;;;31628:12;;;;31506:1;31499:9;31470:218;;;-1:-1:-1;;;;;;;31744:55:1;;;;31739:2;31724:18;;31717:83;-1:-1:-1;;;31831:3:1;31816:19;31809:35;31705:3;30824:1026;-1:-1:-1;;;30824:1026:1:o;32108:217::-;32147:4;32176:6;32232:10;;;;32202;;32254:12;;;32251:38;;;32269:18;;:::i;:::-;32306:13;;32108:217;-1:-1:-1;;;32108:217:1:o

Swarm Source

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