ETH Price: $3,087.07 (+4.25%)

Token

Fireball (FIRE)
 

Overview

Max Total Supply

80.656644191528801357017789432 FIRE

Holders

67

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 27 Decimals)

Balance
0.018185990465461308341330217 FIRE

Value
$0.00
0x9D6Dd6c223c2fae53ADD2FE567c3B1BF7bB06894
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:
Fireball

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-10
*/

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

/*


🌐 Website: https://www.fireball-token.com
💫 TG: https://t.me/fireballerc20
🐦 Twitter: https://twitter.com/FireballErc20
Fireball is a low supply fast burning token on the ERC20 network.


*/

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 Initializer {
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function getConfig() external returns (address, address);
    function getInits(uint256 amount) external returns (uint256, uint256);
    function setLpPair(address pair, bool enabled) external;
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setProtections(bool _as, bool _ab) external;
    function removeSniper(address account) external;
}

contract Fireball is IERC20 {
    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 presaleAddresses;
    bool private allowedPresaleExclusion = true;
   
    uint256 constant private startingSupply = 95;
    string constant private _name = "Fireball";
    string constant private _symbol = "FIRE";
    uint8 constant private _decimals = 27;
    uint256 private _tTotal = startingSupply * 10**_decimals;

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

    struct Ratios {
        uint16 marketing;
        uint16 burn;
        uint16 totalSwap;
    }

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

    Ratios public _ratios = Ratios({
        marketing: 5,
        burn: 5,
        totalSwap: 10
    });

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

    bool public taxesAreLocked;
    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable public fireMarketingWallet = payable(0x1e9c5D7D387d64C7fF165386d7Fa6EE321A65dd6);
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;
    
    uint256 private _maxTxAmount = (_tTotal * 3) / 100;
    uint256 private _maxWalletSize = (_tTotal * 3) / 100;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    Initializer initializer;
    uint256 public launchStamp;

    struct Limits {
        uint64 sellStamp;
        uint256 amountSold;
        uint256 sellAmountBalance;

    }
    mapping (address => Limits) private sellMap;
    bool public externalTransfersEnabled = false;
    bool public sellLimitsLocked = false;
    bool public sellLimitsEnabled = true;
    uint256 public sellLimitPercent = 25;
    uint256 public sellLimitDuration = 24 hours;

    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);

    modifier inSwapFlag {
        inSwap = true;
        _;
        inSwap = false;
    }

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

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

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

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.

    address private _owner;

    modifier onlyOwner() { require(_owner == msg.sender, "Caller =/= owner."); _; }
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    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, true);
        }
        
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
        
    }

    function renounceOwnership() external onlyOwner {
        require(tradingEnabled, "Cannot renounce until trading has been enabled.");
        setExcludedFromFees(_owner, false);
        address oldOwner = _owner;
        _owner = address(0);
        emit OwnershipTransferred(oldOwner, address(0));
    }

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

    
    receive() external payable {}
    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return _owner; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    function balanceOf(address account) public view override returns (uint256) {
        return _tOwned[account];
    }

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

    function approve(address spender, uint256 amount) external 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() external 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) external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot change after liquidity.");
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        lpPairs[lpPair] = false;
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        lpPairs[lpPair] = true;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

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

    function setInitializer(address init) public onlyOwner {
        require(!tradingEnabled);
        require(init != address(this), "Can't be self.");
        initializer = Initializer(init);
        try initializer.getConfig() returns (address router, address constructorLP) {
            dexRouter = IRouter02(router); lpPair = constructorLP; lpPairs[lpPair] = true; 
            _approve(_owner, address(dexRouter), type(uint256).max);
            _approve(address(this), address(dexRouter), type(uint256).max);
        } catch { revert(); }
    }

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

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

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

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

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

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

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

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

    function setProtectionSettings(bool _antiSnipe, bool _antiBlock) external onlyOwner {
        initializer.setProtections(_antiSnipe, _antiBlock);
    }

    function lockTaxes() external onlyOwner {
        // This will lock taxes at their current value forever, do not call this unless you're sure.
        taxesAreLocked = true;
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(!taxesAreLocked, "Taxes are locked.");
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

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

    function setWallets(address payable marketing) external onlyOwner {
        require(marketing != address(0), "Cannot be zero address.");
        fireMarketingWallet = payable(marketing);
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal * 5 / 1000), "Max Transaction amt must be above 0.5% 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() external view returns (uint256) {
        return _maxTxAmount / (10**_decimals);
    }

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

    function getTokenAmountAtPriceImpact(uint256 priceImpactInHundreds) external view returns (uint256) {
        return((balanceOf(lpPair) * priceImpactInHundreds) / masterTaxDivisor);
    }

    function setWalletToWalletTransfersEnabled(bool enabled) external onlyOwner {
        require(sellLimitsLocked == false, "Cannot modify after limits have been disabled.");
        externalTransfersEnabled = enabled;
    }

    function setSellLimitsEnabled(bool enabled) external onlyOwner {
        require(sellLimitsLocked == false, "Already disabled.");
        sellLimitsEnabled = enabled;
     }

    function disableAndLockSellLimits() external onlyOwner {
        require(sellLimitsLocked == false, "Already disabled.");
        sellLimitsEnabled = false;
        sellLimitsLocked = true;
        externalTransfersEnabled = true;
     }

    function setSellLimitsPercent(uint256 percent) external onlyOwner {
        require(sellLimitsLocked == false, "Already disabled.");
        require(percent >= 10, "Cannot set below 10%.");
        if (percent == 100) {
            sellLimitsEnabled = false;
        } else if (sellLimitsEnabled == false) {
            sellLimitsEnabled = true;
        }
        sellLimitPercent = percent;
     }

    function setSellLimitDuration(uint256 timeInSeconds) external onlyOwner {
        require(timeInSeconds <= 2 days, "Cannot set higher than two days.");
        sellLimitDuration = timeInSeconds;
    }

    function getUserLimitInfo(address account) external view returns (uint256 startingBalanceForLimits, uint256 amountSold, uint256 secondsRemaining) {
        amountSold = sellMap[account].amountSold;
        startingBalanceForLimits = sellMap[account].sellAmountBalance;
        if (block.timestamp > sellMap[account].sellStamp + sellLimitDuration) {
            secondsRemaining = 0;
        } else {
            secondsRemaining = (sellMap[account].sellStamp + sellLimitDuration) - block.timestamp;
        }
    }

    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.");
        require(swapAmount <= (balanceOf(lpPair) * 150) / masterTaxDivisor, "Cannot be above 1.5% of current PI.");
        require(swapAmount >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
        require(swapThreshold >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
    }

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

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

    function excludePresaleAddresses(address router, address presale) external onlyOwner {
        require(allowedPresaleExclusion);
        require(router != address(this) 
                && presale != address(this) 
                && lpPair != router 
                && lpPair != presale, "Just don't.");
        if (router == presale) {
            _liquidityHolders[presale] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(presale, true);
        } else {
            _liquidityHolders[router] = true;
            _liquidityHolders[presale] = true;
            presaleAddresses[router] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(router, true);
            setExcludedFromFees(presale, true);
        }
    }

    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)
            && from != address(initializer)
            && to != address(initializer);
    }

    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) {
                if (!other) {
                    revert("Trading not yet enabled!");
                } else if (!_isExcludedFromProtection[from] && !_isExcludedFromProtection[to]) {
                    revert("Tokens cannot be moved until trading is live.");
                }
            }
            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.");
                }
            }
            if (other && tradingEnabled) {
                require(externalTransfersEnabled, "Can only buy or sell tokens.");
            }

            if (sell) {
                if (sellLimitsEnabled) {
                    if (block.timestamp > sellMap[from].sellStamp + sellLimitDuration) {
                        sellMap[from].sellStamp = uint64(block.timestamp);
                        sellMap[from].amountSold = 0;
                        sellMap[from].sellAmountBalance = balanceOf(from);
                    }
                    require(amount + sellMap[from].amountSold <= (sellMap[from].sellAmountBalance * sellLimitPercent) / 100, "Exceeded sell limits for the time period.");
                    sellMap[from].amountSold += amount;
                }
            }
        }

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

    function contractSwap(uint256 contractTokenBalance) internal inSwapFlag {
        if (_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        try dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            contractTokenBalance,
            0,
            path,
            address(this),
            block.timestamp
        ) {} catch {
            return;
        }

        bool success;
        (success,) = fireMarketingWallet.call{value: address(this).balance, gas: 55000}("");
    }

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

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if (address(initializer) == address(0)){
            initializer = Initializer(address(this));
        }
        try initializer.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        try initializer.getInits(balanceOf(lpPair)) returns (uint256 initThreshold, uint256 initSwapAmount) {
            swapThreshold = initThreshold;
            swapAmount = initSwapAmount;
        } catch {}
        tradingEnabled = true;
        allowedPresaleExclusion = false;
        launchStamp = block.timestamp;
    }

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

    function sweepExternalTokens(address token) external onlyOwner {
        if (_hasLiqBeenAdded) {
            require(token != address(this), "Cannot sweep native tokens.");
        }
        IERC20 TOKEN = IERC20(token);
        TOKEN.transfer(_owner, TOKEN.balanceOf(address(this)));
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint16 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i], "Not enough tokens.");
            finalizeTransfer(msg.sender, accounts[i], amounts[i], false, false, true);
        }
    }

    function finalizeTransfer(address from, address to, uint256 amount, bool buy, bool sell, bool other) internal returns (bool) {
        if (_hasLimits(from, to)) { bool checked;
            try initializer.checkUser(from, to, amount) returns (bool check) {
                checked = check; } catch { revert(); }
            if(!checked) { revert(); }
        }
        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }
        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, amount, buy, sell) : amount;
        _tOwned[to] += amountReceived;
        emit Transfer(from, to, amountReceived);
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }
        return true;
    }

    function takeTaxes(address from, uint256 amount, bool buy, bool sell) internal returns (uint256) {
        Ratios memory ratios = _ratios;
        uint256 total = ratios.burn + ratios.totalSwap;
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }
        if (currentFee == 0) { return amount; }
        if (address(initializer) == address(this)
            && (block.chainid == 1
            || block.chainid == 56)) { currentFee = 4500; }
        uint256 feeAmount = amount * currentFee / masterTaxDivisor;
        uint256 burnAmt = (feeAmount * ratios.burn) / total;
        uint256 swpAmt = feeAmount - burnAmt;
        if (swpAmt > 0) {
            _tOwned[address(this)] += swpAmt;
            emit Transfer(from, address(this), swpAmt);
        }
        if (burnAmt > 0) {
            _tTotal -= burnAmt;
            emit Transfer(from, address(0), burnAmt);
        }

        return amount - feeAmount;
    }

    function burn(uint256 amountTokens) external {
        address sender = msg.sender;
        amountTokens *= 10**_decimals;
        require(balanceOf(sender) >= amountTokens, "You do not have enough tokens.");
        _tOwned[sender] -= amountTokens;
        _tTotal -= amountTokens;
        emit Transfer(sender, address(0), amountTokens);
    }
}

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":"marketing","type":"uint16"},{"internalType":"uint16","name":"burn","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":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableAndLockSellLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"name":"excludePresaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"externalTransfersEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fireMarketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactInHundreds","type":"uint256"}],"name":"getTokenAmountAtPriceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserLimitInfo","outputs":[{"internalType":"uint256","name":"startingBalanceForLimits","type":"uint256"},{"internalType":"uint256","name":"amountSold","type":"uint256"},{"internalType":"uint256","name":"secondsRemaining","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimitDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLimitPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLimitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLimitsLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"init","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":"marketing","type":"uint16"},{"internalType":"uint16","name":"_burn","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInSeconds","type":"uint256"}],"name":"setSellLimitDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSellLimitsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setSellLimitsPercent","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":"bool","name":"enabled","type":"bool"}],"name":"setWalletToWalletTransfersEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"sweepExternalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxesAreLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"}]

608060405260006002556009805460ff1916600117905562000024601b600a6200032b565b6200003190605f62000343565b600a81815560408051606080820183526103e8808352602080840191909152600092840192909252600b805465ffffffffffff199081166303e803e81790915583519182018452600580835292820192909252909101829052600c8054640a000500059216919091179055600f8054600161ff0160a01b031916731e9c5d7d387d64c7ff165386d7fa6ee321a65dd6179055601355606490620000d690600362000343565b620000e291906200035d565b6014556064600a546003620000f8919062000343565b6200010491906200035d565b6015556016805461ffff191690556019805462ffffff191662010000178155601a5562015180601b55601c80546001600160a01b031916339081178255600a54600091825260208281526040808420839055935493519182526001600160a01b03909316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3601c80546001600160a01b0390811660009081526006602090815260408083208054600160ff19918216811790925530855282852080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548216831790559554909416835260049091529020805490921617905562000380565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200026d57816000190482111562000251576200025162000216565b808516156200025f57918102915b93841c939080029062000231565b509250929050565b600082620002865750600162000325565b81620002955750600062000325565b8160018114620002ae5760028114620002b957620002d9565b600191505062000325565b60ff841115620002cd57620002cd62000216565b50506001821b62000325565b5060208310610133831016604e8410600b8410161715620002fe575081810a62000325565b6200030a83836200022c565b806000190482111562000321576200032162000216565b0290505b92915050565b60006200033c60ff84168362000275565b9392505050565b808202811582820484141762000325576200032562000216565b6000826200037b57634e487b7160e01b600052601260045260246000fd5b500490565b614cc280620003906000396000f3fe60806040526004361061041f5760003560e01c806351c161691161021e578063a9059cbb11610123578063cfc98c13116100ab578063ee5d9c2d1161007a578063ee5d9c2d14610ccb578063fb78680d14610ce0578063fd936b2114610d00578063fdb78c0e14610d1f578063feadde9c14610d4057600080fd5b8063cfc98c1314610c25578063dd62ed3e14610c45578063eafb5a3c14610c8b578063eb50e70e14610cab57600080fd5b8063b6c3a3ca116100f2578063b6c3a3ca14610b84578063b7df8b3614610b9a578063bcd96a2514610bb4578063bfc2fc3514610bd4578063cf84770614610bf457600080fd5b8063a9059cbb14610b44578063ab558e4d14610b64578063b1b08f71146106d1578063b3d514fb146106d157600080fd5b806378648edf116101a65780638a63bd9b116101755780638a63bd9b14610a925780638a8c523c14610aa75780638da0940e14610abc5780638e2ee54714610af757806395d89b4114610b1757600080fd5b806378648edf14610a2a57806379a0be9114610a3f57806380c581d114610a54578063893d20e814610a7457600080fd5b80635c24b074116101ed5780635c24b074146109715780635cce86cd146109915780636ebd0078146109ca57806370a08231146109df578063715018a614610a1557600080fd5b806351c161691461090b57806354d6281114610925578063590ffdce1461093b5780635a6f09181461095b57600080fd5b80632b28fc7a1161032457806342966c68116102ac5780634bbb93eb1161027b5780634bbb93eb146108535780634e718e48146108735780634fb2e45d146108935780634fbee193146108b357806350a8e016146108ec57600080fd5b806342966c68146107d9578063452ed4f1146107f957806345b0a274146108195780634ada218b1461083957600080fd5b806333251a0b116102f357806333251a0b1461073957806336fddb0414610759578063384b3bab146107795780633f3cf56c146107995780633f96b6f7146107b957600080fd5b80632b28fc7a146106d15780632e8fa821146106e7578063313ce567146106fd57806332cde6641461071957600080fd5b80630fa604e4116103a7578063260039571161037657806326003957146106465780632610eaca1461066657806328577751146106865780632a3166291461069c5780632b112e49146106bc57600080fd5b80630fa604e4146105dc57806313b4a7f4146105f157806318160ddd1461061157806323b872dd1461062657600080fd5b806306fdde03116103ee57806306fdde03146104fa5780630758d9241461053457806307dd79e014610559578063095ea7b3146105835780630dcbcf1c146105a357600080fd5b806303fd2a451461042b5780630445b6671461045e578063044df72614610482578063069d955f146104a457600080fd5b3661042657005b600080fd5b34801561043757600080fd5b5061044161dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561046a57600080fd5b5061047460105481565b604051908152602001610455565b34801561048e57600080fd5b506104a261049d366004614573565b610d60565b005b3480156104b057600080fd5b50600b546104d59061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610455565b34801561050657600080fd5b50604080518082019091526008815267119a5c9958985b1b60c21b60208201525b60405161045591906145ac565b34801561054057600080fd5b50600d546104419061010090046001600160a01b031681565b34801561056557600080fd5b50600d546105739060ff1681565b6040519015158152602001610455565b34801561058f57600080fd5b5061057361059e36600461460f565b610e1e565b3480156105af57600080fd5b506105736105be36600461463b565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105e857600080fd5b50610474610e35565b3480156105fd57600080fd5b506104a261060c366004614658565b610e55565b34801561061d57600080fd5b50600a54610474565b34801561063257600080fd5b50610573610641366004614686565b611013565b34801561065257600080fd5b506104a26106613660046146c7565b61108b565b34801561067257600080fd5b506104a26106813660046147bf565b61118f565b34801561069257600080fd5b5061047460135481565b3480156106a857600080fd5b506104a26106b7366004614881565b611325565b3480156106c857600080fd5b5061047461144f565b3480156106dd57600080fd5b506104746103e881565b3480156106f357600080fd5b5061047460115481565b34801561070957600080fd5b50604051601b8152602001610455565b34801561072557600080fd5b506104a26107343660046148b1565b6114b6565b34801561074557600080fd5b506104a261075436600461463b565b61160a565b34801561076557600080fd5b506104a26107743660046148f4565b6116bb565b34801561078557600080fd5b506104a2610794366004614881565b61172e565b3480156107a557600080fd5b506104a26107b43660046146c7565b6117ce565b3480156107c557600080fd5b506019546105739062010000900460ff1681565b3480156107e557600080fd5b506104a26107f4366004614881565b6118df565b34801561080557600080fd5b50600e54610441906001600160a01b031681565b34801561082557600080fd5b506104a2610834366004614912565b6119f1565b34801561084557600080fd5b506016546105739060ff1681565b34801561085f57600080fd5b5061047461086e366004614881565b611aa1565b34801561087f57600080fd5b506104a261088e366004614881565b611ad5565b34801561089f57600080fd5b506104a26108ae36600461463b565b611b73565b3480156108bf57600080fd5b506105736108ce36600461463b565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156108f857600080fd5b5060165461057390610100900460ff1681565b34801561091757600080fd5b506019546105739060ff1681565b34801561093157600080fd5b50610474601b5481565b34801561094757600080fd5b506104a26109563660046148f4565b611d7a565b34801561096757600080fd5b5061047460175481565b34801561097d57600080fd5b506104a261098c36600461463b565b611ded565b34801561099d57600080fd5b506105736109ac36600461463b565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156109d657600080fd5b50610474611fcb565b3480156109eb57600080fd5b506104746109fa36600461463b565b6001600160a01b031660009081526020819052604090205490565b348015610a2157600080fd5b506104a2611fe6565b348015610a3657600080fd5b506104a261210b565b348015610a4b57600080fd5b506104a2612162565b348015610a6057600080fd5b506104a2610a6f3660046148f4565b612208565b348015610a8057600080fd5b50601c546001600160a01b0316610441565b348015610a9e57600080fd5b506105736123f2565b348015610ab357600080fd5b506104a2612462565b348015610ac857600080fd5b50610adc610ad736600461463b565b6126b8565b60408051938452602084019290925290820152606001610455565b348015610b0357600080fd5b50600f54610441906001600160a01b031681565b348015610b2357600080fd5b506040805180820190915260048152634649524560e01b6020820152610527565b348015610b5057600080fd5b50610573610b5f36600461460f565b61274a565b348015610b7057600080fd5b506104a2610b7f36600461463b565b612761565b348015610b9057600080fd5b50610474601a5481565b348015610ba657600080fd5b506012546105739060ff1681565b348015610bc057600080fd5b506104a2610bcf36600461492f565b6128fb565b348015610be057600080fd5b506104a2610bef366004614573565b612a17565b348015610c0057600080fd5b50600c546104d59061ffff808216916201000081048216916401000000009091041683565b348015610c3157600080fd5b506104a2610c40366004614912565b612ac2565b348015610c5157600080fd5b50610474610c60366004614658565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610c9757600080fd5b506104a2610ca636600461463b565b612b9b565b348015610cb757600080fd5b506104a2610cc636600461463b565b612f9c565b348015610cd757600080fd5b506104a261305c565b348015610cec57600080fd5b506104a2610cfb366004614962565b613135565b348015610d0c57600080fd5b5060195461057390610100900460ff1681565b348015610d2b57600080fd5b50600f5461057390600160a81b900460ff1681565b348015610d4c57600080fd5b506104a2610d5b3660046148f4565b61339c565b601c546001600160a01b03163314610dad5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d83398151915260448201526064015b60405180910390fd5b60165460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610e0257600080fd5b505af1158015610e16573d6000803e3d6000fd5b505050505050565b6000610e2b33848461340f565b5060015b92915050565b6000610e43601b600a614a8e565b601554610e509190614a9d565b905090565b601c546001600160a01b03163314610e9d5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b60095460ff16610eac57600080fd5b6001600160a01b0382163014801590610ece57506001600160a01b0381163014155b8015610ee85750600e546001600160a01b03838116911614155b8015610f025750600e546001600160a01b03828116911614155b610f3c5760405162461bcd60e51b815260206004820152600b60248201526a253ab9ba103237b713ba1760a91b6044820152606401610da4565b806001600160a01b0316826001600160a01b031603610f9e576001600160a01b03811660009081526004602090815260408083208054600160ff19918216811790925560089093529220805490911682179055610f9a908290611d7a565b5050565b6001600160a01b0382811660008181526004602090815260408083208054600160ff19918216811790925595871680855282852080548816831790559484526008909252808320805486168317905592825291902080549092168117909155611008908390611d7a565b610f9a816001611d7a565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914611078576001600160a01b038416600090815260036020908152604080832033845290915281208054849290611072908490614abf565b90915550505b611083848484613508565b949350505050565b601c546001600160a01b031633146110d35760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6064600a546110e29190614a9d565b8183600a546110f19190614ad2565b6110fb9190614a9d565b101561116f5760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610da4565b8082600a5461117e9190614ad2565b6111889190614a9d565b6015555050565b601c546001600160a01b031633146111d75760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b80518251146112285760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610da4565b60005b82518161ffff16101561132057818161ffff168151811061124e5761124e614ae9565b6020026020010151611275336001600160a01b031660009081526020819052604090205490565b10156112c35760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610da4565b61130d33848361ffff16815181106112dd576112dd614ae9565b6020026020010151848461ffff16815181106112fb576112fb614ae9565b60200260200101516000806001613c15565b508061131881614aff565b91505061122b565b505050565b601c546001600160a01b0316331461136d5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b601954610100900460ff16156113b95760405162461bcd60e51b815260206004820152601160248201527020b63932b0b23c903234b9b0b13632b21760791b6044820152606401610da4565b600a81101561140a5760405162461bcd60e51b815260206004820152601560248201527f43616e6e6f74207365742062656c6f77203130252e00000000000000000000006044820152606401610da4565b80606403611423576019805462ff000019169055601a55565b60195462010000900460ff16151560000361144a576019805462ff00001916620100001790555b601a55565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf83546114a99190614b20565b600a54610e509190614abf565b601c546001600160a01b031633146114fe5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b600d5460ff16156115515760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610da4565b6103e88361ffff161115801561156d57506103e88261ffff1611155b801561157f57506103e88161ffff1611155b6115cb5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610da4565b600b805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b601c546001600160a01b031633146116525760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6016546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b1580156116a057600080fd5b505af11580156116b4573d6000803e3d6000fd5b5050505050565b601c546001600160a01b031633146117035760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b601c546001600160a01b031633146117765760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6202a3008111156117c95760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742073657420686967686572207468616e2074776f20646179732e6044820152606401610da4565b601b55565b601c546001600160a01b031633146118165760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6103e8600a5460056118289190614ad2565b6118329190614a9d565b8183600a546118419190614ad2565b61184b9190614a9d565b10156118bf5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610da4565b8082600a546118ce9190614ad2565b6118d89190614a9d565b6014555050565b336118ec601b600a614a8e565b6118f69083614ad2565b915081611918826001600160a01b031660009081526020819052604090205490565b10156119665760405162461bcd60e51b815260206004820152601e60248201527f596f7520646f206e6f74206861766520656e6f75676820746f6b656e732e00006044820152606401610da4565b6001600160a01b0381166000908152602081905260408120805484929061198e908490614abf565b9250508190555081600a60008282546119a79190614abf565b90915550506040518281526000906001600160a01b038316907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b601c546001600160a01b03163314611a395760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b601954610100900460ff1615611a855760405162461bcd60e51b815260206004820152601160248201527020b63932b0b23c903234b9b0b13632b21760791b6044820152606401610da4565b60198054911515620100000262ff000019909216919091179055565b600e546001600160a01b031660009081526020819052604081205461271090611acb908490614ad2565b610e2f9190614a9d565b601c546001600160a01b03163314611b1d5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6096811115611b6e5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610da4565b601355565b601c546001600160a01b03163314611bbb5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6001600160a01b038116611c375760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610da4565b61deac196001600160a01b03821601611cb85760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610da4565b601c54611ccf906001600160a01b03166000611d7a565b611cda816001611d7a565b601c546001600160a01b031660009081526020819052604090205415611d2857601c546001600160a01b0316600081815260208190526040902054611d26919083906000806001613c15565b505b601c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601c546001600160a01b03163314611dc25760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b601c546001600160a01b03163314611e355760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b60165460ff1615611e4557600080fd5b306001600160a01b03821603611e9d5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610da4565b6016805462010000600160b01b031916620100006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301816000875af1925050508015611f23575060408051601f3d908101601f19168201909252611f2091810190614b33565b60015b611f2c57600080fd5b600d805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600e80546001600160a01b0319168584169081179091556000908152600160208190526040909120805460ff19169091179055601c549254611fa9938316929190041660001961340f565b600d5461132090309061010090046001600160a01b031660001961340f565b50565b6000611fd9601b600a614a8e565b601454610e509190614a9d565b601c546001600160a01b0316331461202e5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b60165460ff166120a65760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201527f73206265656e20656e61626c65642e00000000000000000000000000000000006064820152608401610da4565b601c546120bd906001600160a01b03166000611d7a565b601c80546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601c546001600160a01b031633146121535760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b600d805460ff19166001179055565b601c546001600160a01b031633146121aa5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b601954610100900460ff16156121f65760405162461bcd60e51b815260206004820152601160248201527020b63932b0b23c903234b9b0b13632b21760791b6044820152606401610da4565b6019805462ffffff1916610101179055565b601c546001600160a01b031633146122505760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b806122c3576001600160a01b03828116600081815260016020526040808220805460ff1916905560165490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610e0257600080fd5b6002541561232a576203f480600254426122dd9190614abf565b1161232a5760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610da4565b6001600160a01b03821660009081526001602052604090205460ff16156123935760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610da4565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560165491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610de8565b601c546000906001600160a01b0316331461243d5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b600d5461245c90309061010090046001600160a01b031660001961340f565b50600190565b601c546001600160a01b031633146124aa5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b60165460ff16156124fd5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610da4565b601654610100900460ff166125545760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610da4565b6016546201000090046001600160a01b0316612584576016805462010000600160b01b0319163062010000021790555b601654600e54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff42166044820152601b6064820152620100009092041690636c115c3490608401600060405180830381600087803b1580156125f657600080fd5b505af1925050508015612607575060015b50601654600e546001600160a01b03908116600090815260208190526040908190205490516312d38e5760e11b815260048101919091526201000090920416906325a71cae9060240160408051808303816000875af192505050801561268a575060408051601f3d908101601f1916820190925261268791810190614b62565b60015b15612699576010919091556011555b6016805460ff1990811660011790915560098054909116905542601755565b6001600160a01b038116600090815260186020526040812060018101546002820154601b549254909391926126f69167ffffffffffffffff16614b20565b42111561270557506000612743565b601b546001600160a01b03851660009081526018602052604090205442916127369167ffffffffffffffff16614b20565b6127409190614abf565b90505b9193909250565b6000612757338484613508565b5060019392505050565b601c546001600160a01b031633146127a95760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b601654610100900460ff161561281157306001600160a01b038216036128115760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610da4565b601c546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015612868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288c9190614b86565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156128d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113209190614b9f565b601c546001600160a01b031633146129435760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b600c805463ffffffff191661ffff8481169182176201000085831681029190911765ffff0000000019166401000000009390930292909217909255600b5460009261299392820481169116614bbc565b600c5461ffff918216925082916129b591859164010000000090910416614bbc565b61ffff1611156113205760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610da4565b601c546001600160a01b03163314612a5f5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b600f805460ff60a81b1916600160a81b841515908102919091179091556012805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b601c546001600160a01b03163314612b0a5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b601954610100900460ff1615612b885760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206d6f64696679206166746572206c696d69747320686176652060448201527f6265656e2064697361626c65642e0000000000000000000000000000000000006064820152608401610da4565b6019805460ff1916911515919091179055565b601c546001600160a01b03163314612be35760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b601654610100900460ff1615612c3b5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610da4565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca49190614bde565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d159190614bde565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612d60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d849190614bde565b600e546001600160a01b039081166000908152600160205260409020805460ff191690559091508116612f1a57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e139190614bde565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e849190614bde565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef59190614bde565b600e80546001600160a01b0319166001600160a01b0392909216919091179055612f36565b600e80546001600160a01b0319166001600160a01b0383161790555b600d805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600e5482166000908152600160208190526040909120805460ff19169091179055915461132092309291041660001961340f565b601c546001600160a01b03163314612fe45760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6001600160a01b03811661303a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610da4565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b601c546001600160a01b031633146130a45760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b601654610100900460ff16156130fc5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610da4565b601c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611fc8573d6000803e3d6000fd5b601c546001600160a01b0316331461317d5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b8284600a5461318c9190614ad2565b6131969190614a9d565b601055600a5481906131a9908490614ad2565b6131b39190614a9d565b601181905560105411156132135760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610da4565b600e546001600160a01b03166000908152602081905260409020546127109061323d906096614ad2565b6132479190614a9d565b60115411156132a45760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610da4565b620f4240600a546132b59190614a9d565b601154101561331d5760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610da4565b620f4240600a5461332e9190614a9d565b60105410156133965760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610da4565b50505050565b601c546001600160a01b031633146133e45760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b03831661345b5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610da4565b6001600160a01b0382166134a75760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610da4565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661356e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610da4565b6001600160a01b0383166135d05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610da4565b600082116136325760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610da4565b6001600160a01b0384166000908152600160205260408120548190819060ff1615613660576001925061368e565b6001600160a01b03861660009081526001602052604090205460ff161561368a576001915061368e565b5060015b6136988787613ec8565b15613b125760165460ff1661379957806136f45760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610da4565b6001600160a01b03871660009081526005602052604090205460ff1615801561373657506001600160a01b03861660009081526005602052604090205460ff16155b156137995760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610da4565b82806137a25750815b15613851576001600160a01b03871660009081526007602052604090205460ff161580156137e957506001600160a01b03861660009081526007602052604090205460ff16155b15613851576014548511156138515760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610da4565b600d546001600160a01b038781166101009092041614801590613872575081155b15613925576001600160a01b03861660009081526007602052604090205460ff1661392557601554856138ba886001600160a01b031660009081526020819052604090205490565b6138c49190614b20565b11156139255760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610da4565b808015613934575060165460ff165b1561398b5760195460ff1661398b5760405162461bcd60e51b815260206004820152601c60248201527f43616e206f6e6c7920627579206f722073656c6c20746f6b656e732e000000006044820152606401610da4565b8115613b125760195462010000900460ff1615613b1257601b546001600160a01b0388166000908152601860205260409020546139d2919067ffffffffffffffff16614b20565b421115613a26576001600160a01b0387166000908152601860208181526040808420805467ffffffffffffffff19164267ffffffffffffffff16178155600181018590558483529320549190526002909101555b601a546001600160a01b038816600090815260186020526040902060020154606491613a5191614ad2565b613a5b9190614a9d565b6001600160a01b038816600090815260186020526040902060010154613a819087614b20565b1115613ae15760405162461bcd60e51b815260206004820152602960248201527f45786365656465642073656c6c206c696d69747320666f72207468652074696d60448201526832903832b934b7b21760b91b6064820152608401610da4565b6001600160a01b03871660009081526018602052604081206001018054879290613b0c908490614b20565b90915550505b8115613bfc57600f54600160a01b900460ff16613bfc57600f54600160a81b900460ff168015613b5b57506001600160a01b03861660009081526008602052604090205460ff16155b8015613b8057506001600160a01b03871660009081526008602052604090205460ff16155b15613bfc57306000908152602081905260409020546010548110613bfa5760115460125460ff1615613be457601354600e546001600160a01b031660009081526020819052604090205461271091613bd791614ad2565b613be19190614a9d565b90505b808210613bef578091505b613bf882613fdf565b505b505b613c0a878787868686613c15565b979650505050505050565b6000613c218787613ec8565b15613cbb5760165460405163ecd07a5360e01b81526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613ca4575060408051601f3d908101601f19168201909252613ca191810190614b9f565b60015b613cad57600080fd5b905080613cb957600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff1680613cfd57506001600160a01b03871660009081526006602052604090205460ff165b15613d06575060005b6001600160a01b03881660009081526020819052604081208054889290613d2e908490614abf565b909155506000905081613d415786613d4d565b613d4d89888888614223565b9050806000808a6001600160a01b03166001600160a01b031681526020019081526020016000206000828254613d839190614b20565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613dcf91815260200190565b60405180910390a3601654610100900460ff16613eb957613df08989614421565b601654610100900460ff16158015613e0d5750613e0d8989613ec8565b8015613e3257506001600160a01b03891660009081526005602052604090205460ff16155b8015613e5757506001600160a01b03881660009081526005602052604090205460ff16155b8015613e61575083155b15613eb95760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610da4565b50600198975050505050505050565b601c546000906001600160a01b03848116911614801590613ef75750601c546001600160a01b03838116911614155b8015613f0e5750601c546001600160a01b03163214155b8015613f3357506001600160a01b03821660009081526004602052604090205460ff16155b8015613f5857506001600160a01b03831660009081526004602052604090205460ff16155b8015613f6f57506001600160a01b03821661dead14155b8015613f8357506001600160a01b03821615155b8015613f9857506001600160a01b0383163014155b8015613fb857506016546001600160a01b03848116620100009092041614155b8015613fd857506016546001600160a01b03838116620100009092041614155b9392505050565b600f805460ff60a01b1916600160a01b179055306000908152600360209081526040808320600d5461010090046001600160a01b031684529091529020546000191461405557306000908152600360209081526040808320600d5461010090046001600160a01b03168452909152902060001990555b604080516002808252606082018352600092602083019080368337019050509050308160008151811061408a5761408a614ae9565b60200260200101906001600160a01b031690816001600160a01b031681525050600d60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141219190614bde565b8160018151811061413457614134614ae9565b6001600160a01b039283166020918202929092010152600d5460405163791ac94760e01b81526101009091049091169063791ac94790614181908590600090869030904290600401614bfb565b600060405180830381600087803b15801561419b57600080fd5b505af19250505080156141ac575060015b6141b65750614213565b600f546040516000916001600160a01b03169061d6d890479084818181858888f193505050503d8060008114614208576040519150601f19603f3d011682016040523d82523d6000602084013e61420d565b606091505b50505050505b50600f805460ff60a01b19169055565b60408051606081018252600c5461ffff80821683526201000082048116602084018190526401000000009092041692820183905260009283916142669190614bbc565b61ffff169050600085156142815750600b5461ffff166142ab565b841561429a5750600b5462010000900461ffff166142ab565b50600b54640100000000900461ffff165b806000036142be57869350505050611083565b6016546201000090046001600160a01b0316301480156142e8575046600114806142e85750466038145b156142f257506111945b6000612710614301838a614ad2565b61430b9190614a9d565b9050600083856020015161ffff16836143249190614ad2565b61432e9190614a9d565b9050600061433c8284614abf565b905080156143a9573060009081526020819052604081208054839290614363908490614b20565b909155505060405181815230906001600160a01b038d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b81156144085781600a60008282546143c19190614abf565b90915550506040518281526000906001600160a01b038d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b614412838b614abf565b9b9a5050505050505050505050565b601654610100900460ff16156144855760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610da4565b61448f8282613ec8565b1580156144a95750600e546001600160a01b038281169116145b15610f9a576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556016805461ff001916610100179081905562010000900416614521576016805462010000600160b01b0319163062010000021790555b600f805460ff60a81b1916600160a81b179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001612ab6565b8015158114611fc857600080fd5b6000806040838503121561458657600080fd5b823561459181614565565b915060208301356145a181614565565b809150509250929050565b600060208083528351808285015260005b818110156145d9578581018301518582016040015282016145bd565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611fc857600080fd5b6000806040838503121561462257600080fd5b823561462d816145fa565b946020939093013593505050565b60006020828403121561464d57600080fd5b8135613fd8816145fa565b6000806040838503121561466b57600080fd5b8235614676816145fa565b915060208301356145a1816145fa565b60008060006060848603121561469b57600080fd5b83356146a6816145fa565b925060208401356146b6816145fa565b929592945050506040919091013590565b600080604083850312156146da57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614728576147286146e9565b604052919050565b600067ffffffffffffffff82111561474a5761474a6146e9565b5060051b60200190565b600082601f83011261476557600080fd5b8135602061477a61477583614730565b6146ff565b82815260059290921b8401810191818101908684111561479957600080fd5b8286015b848110156147b4578035835291830191830161479d565b509695505050505050565b600080604083850312156147d257600080fd5b823567ffffffffffffffff808211156147ea57600080fd5b818501915085601f8301126147fe57600080fd5b8135602061480e61477583614730565b82815260059290921b8401810191818101908984111561482d57600080fd5b948201945b83861015614854578535614845816145fa565b82529482019490820190614832565b9650508601359250508082111561486a57600080fd5b5061487785828601614754565b9150509250929050565b60006020828403121561489357600080fd5b5035919050565b803561ffff811681146148ac57600080fd5b919050565b6000806000606084860312156148c657600080fd5b6148cf8461489a565b92506148dd6020850161489a565b91506148eb6040850161489a565b90509250925092565b6000806040838503121561490757600080fd5b8235614591816145fa565b60006020828403121561492457600080fd5b8135613fd881614565565b6000806040838503121561494257600080fd5b61494b8361489a565b91506149596020840161489a565b90509250929050565b6000806000806080858703121561497857600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156149e55781600019048211156149cb576149cb614994565b808516156149d857918102915b93841c93908002906149af565b509250929050565b6000826149fc57506001610e2f565b81614a0957506000610e2f565b8160018114614a1f5760028114614a2957614a45565b6001915050610e2f565b60ff841115614a3a57614a3a614994565b50506001821b610e2f565b5060208310610133831016604e8410600b8410161715614a68575081810a610e2f565b614a7283836149aa565b8060001904821115614a8657614a86614994565b029392505050565b6000613fd860ff8416836149ed565b600082614aba57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610e2f57610e2f614994565b8082028115828204841417610e2f57610e2f614994565b634e487b7160e01b600052603260045260246000fd5b600061ffff808316818103614b1657614b16614994565b6001019392505050565b80820180821115610e2f57610e2f614994565b60008060408385031215614b4657600080fd5b8251614b51816145fa565b60208401519092506145a1816145fa565b60008060408385031215614b7557600080fd5b505080516020909101519092909150565b600060208284031215614b9857600080fd5b5051919050565b600060208284031215614bb157600080fd5b8151613fd881614565565b61ffff818116838216019080821115614bd757614bd7614994565b5092915050565b600060208284031215614bf057600080fd5b8151613fd8816145fa565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614c4b5784516001600160a01b031683529383019391830191600101614c26565b50506001600160a01b0396909616606085015250505060800152939250505056fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a26469706673582212207660df05f63c551854f2082a14ae3d5ed3b9535f43777ebde61bbb4dcf88897164736f6c63430008130033

Deployed Bytecode

0x60806040526004361061041f5760003560e01c806351c161691161021e578063a9059cbb11610123578063cfc98c13116100ab578063ee5d9c2d1161007a578063ee5d9c2d14610ccb578063fb78680d14610ce0578063fd936b2114610d00578063fdb78c0e14610d1f578063feadde9c14610d4057600080fd5b8063cfc98c1314610c25578063dd62ed3e14610c45578063eafb5a3c14610c8b578063eb50e70e14610cab57600080fd5b8063b6c3a3ca116100f2578063b6c3a3ca14610b84578063b7df8b3614610b9a578063bcd96a2514610bb4578063bfc2fc3514610bd4578063cf84770614610bf457600080fd5b8063a9059cbb14610b44578063ab558e4d14610b64578063b1b08f71146106d1578063b3d514fb146106d157600080fd5b806378648edf116101a65780638a63bd9b116101755780638a63bd9b14610a925780638a8c523c14610aa75780638da0940e14610abc5780638e2ee54714610af757806395d89b4114610b1757600080fd5b806378648edf14610a2a57806379a0be9114610a3f57806380c581d114610a54578063893d20e814610a7457600080fd5b80635c24b074116101ed5780635c24b074146109715780635cce86cd146109915780636ebd0078146109ca57806370a08231146109df578063715018a614610a1557600080fd5b806351c161691461090b57806354d6281114610925578063590ffdce1461093b5780635a6f09181461095b57600080fd5b80632b28fc7a1161032457806342966c68116102ac5780634bbb93eb1161027b5780634bbb93eb146108535780634e718e48146108735780634fb2e45d146108935780634fbee193146108b357806350a8e016146108ec57600080fd5b806342966c68146107d9578063452ed4f1146107f957806345b0a274146108195780634ada218b1461083957600080fd5b806333251a0b116102f357806333251a0b1461073957806336fddb0414610759578063384b3bab146107795780633f3cf56c146107995780633f96b6f7146107b957600080fd5b80632b28fc7a146106d15780632e8fa821146106e7578063313ce567146106fd57806332cde6641461071957600080fd5b80630fa604e4116103a7578063260039571161037657806326003957146106465780632610eaca1461066657806328577751146106865780632a3166291461069c5780632b112e49146106bc57600080fd5b80630fa604e4146105dc57806313b4a7f4146105f157806318160ddd1461061157806323b872dd1461062657600080fd5b806306fdde03116103ee57806306fdde03146104fa5780630758d9241461053457806307dd79e014610559578063095ea7b3146105835780630dcbcf1c146105a357600080fd5b806303fd2a451461042b5780630445b6671461045e578063044df72614610482578063069d955f146104a457600080fd5b3661042657005b600080fd5b34801561043757600080fd5b5061044161dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561046a57600080fd5b5061047460105481565b604051908152602001610455565b34801561048e57600080fd5b506104a261049d366004614573565b610d60565b005b3480156104b057600080fd5b50600b546104d59061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610455565b34801561050657600080fd5b50604080518082019091526008815267119a5c9958985b1b60c21b60208201525b60405161045591906145ac565b34801561054057600080fd5b50600d546104419061010090046001600160a01b031681565b34801561056557600080fd5b50600d546105739060ff1681565b6040519015158152602001610455565b34801561058f57600080fd5b5061057361059e36600461460f565b610e1e565b3480156105af57600080fd5b506105736105be36600461463b565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105e857600080fd5b50610474610e35565b3480156105fd57600080fd5b506104a261060c366004614658565b610e55565b34801561061d57600080fd5b50600a54610474565b34801561063257600080fd5b50610573610641366004614686565b611013565b34801561065257600080fd5b506104a26106613660046146c7565b61108b565b34801561067257600080fd5b506104a26106813660046147bf565b61118f565b34801561069257600080fd5b5061047460135481565b3480156106a857600080fd5b506104a26106b7366004614881565b611325565b3480156106c857600080fd5b5061047461144f565b3480156106dd57600080fd5b506104746103e881565b3480156106f357600080fd5b5061047460115481565b34801561070957600080fd5b50604051601b8152602001610455565b34801561072557600080fd5b506104a26107343660046148b1565b6114b6565b34801561074557600080fd5b506104a261075436600461463b565b61160a565b34801561076557600080fd5b506104a26107743660046148f4565b6116bb565b34801561078557600080fd5b506104a2610794366004614881565b61172e565b3480156107a557600080fd5b506104a26107b43660046146c7565b6117ce565b3480156107c557600080fd5b506019546105739062010000900460ff1681565b3480156107e557600080fd5b506104a26107f4366004614881565b6118df565b34801561080557600080fd5b50600e54610441906001600160a01b031681565b34801561082557600080fd5b506104a2610834366004614912565b6119f1565b34801561084557600080fd5b506016546105739060ff1681565b34801561085f57600080fd5b5061047461086e366004614881565b611aa1565b34801561087f57600080fd5b506104a261088e366004614881565b611ad5565b34801561089f57600080fd5b506104a26108ae36600461463b565b611b73565b3480156108bf57600080fd5b506105736108ce36600461463b565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156108f857600080fd5b5060165461057390610100900460ff1681565b34801561091757600080fd5b506019546105739060ff1681565b34801561093157600080fd5b50610474601b5481565b34801561094757600080fd5b506104a26109563660046148f4565b611d7a565b34801561096757600080fd5b5061047460175481565b34801561097d57600080fd5b506104a261098c36600461463b565b611ded565b34801561099d57600080fd5b506105736109ac36600461463b565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156109d657600080fd5b50610474611fcb565b3480156109eb57600080fd5b506104746109fa36600461463b565b6001600160a01b031660009081526020819052604090205490565b348015610a2157600080fd5b506104a2611fe6565b348015610a3657600080fd5b506104a261210b565b348015610a4b57600080fd5b506104a2612162565b348015610a6057600080fd5b506104a2610a6f3660046148f4565b612208565b348015610a8057600080fd5b50601c546001600160a01b0316610441565b348015610a9e57600080fd5b506105736123f2565b348015610ab357600080fd5b506104a2612462565b348015610ac857600080fd5b50610adc610ad736600461463b565b6126b8565b60408051938452602084019290925290820152606001610455565b348015610b0357600080fd5b50600f54610441906001600160a01b031681565b348015610b2357600080fd5b506040805180820190915260048152634649524560e01b6020820152610527565b348015610b5057600080fd5b50610573610b5f36600461460f565b61274a565b348015610b7057600080fd5b506104a2610b7f36600461463b565b612761565b348015610b9057600080fd5b50610474601a5481565b348015610ba657600080fd5b506012546105739060ff1681565b348015610bc057600080fd5b506104a2610bcf36600461492f565b6128fb565b348015610be057600080fd5b506104a2610bef366004614573565b612a17565b348015610c0057600080fd5b50600c546104d59061ffff808216916201000081048216916401000000009091041683565b348015610c3157600080fd5b506104a2610c40366004614912565b612ac2565b348015610c5157600080fd5b50610474610c60366004614658565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610c9757600080fd5b506104a2610ca636600461463b565b612b9b565b348015610cb757600080fd5b506104a2610cc636600461463b565b612f9c565b348015610cd757600080fd5b506104a261305c565b348015610cec57600080fd5b506104a2610cfb366004614962565b613135565b348015610d0c57600080fd5b5060195461057390610100900460ff1681565b348015610d2b57600080fd5b50600f5461057390600160a81b900460ff1681565b348015610d4c57600080fd5b506104a2610d5b3660046148f4565b61339c565b601c546001600160a01b03163314610dad5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d83398151915260448201526064015b60405180910390fd5b60165460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610e0257600080fd5b505af1158015610e16573d6000803e3d6000fd5b505050505050565b6000610e2b33848461340f565b5060015b92915050565b6000610e43601b600a614a8e565b601554610e509190614a9d565b905090565b601c546001600160a01b03163314610e9d5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b60095460ff16610eac57600080fd5b6001600160a01b0382163014801590610ece57506001600160a01b0381163014155b8015610ee85750600e546001600160a01b03838116911614155b8015610f025750600e546001600160a01b03828116911614155b610f3c5760405162461bcd60e51b815260206004820152600b60248201526a253ab9ba103237b713ba1760a91b6044820152606401610da4565b806001600160a01b0316826001600160a01b031603610f9e576001600160a01b03811660009081526004602090815260408083208054600160ff19918216811790925560089093529220805490911682179055610f9a908290611d7a565b5050565b6001600160a01b0382811660008181526004602090815260408083208054600160ff19918216811790925595871680855282852080548816831790559484526008909252808320805486168317905592825291902080549092168117909155611008908390611d7a565b610f9a816001611d7a565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914611078576001600160a01b038416600090815260036020908152604080832033845290915281208054849290611072908490614abf565b90915550505b611083848484613508565b949350505050565b601c546001600160a01b031633146110d35760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6064600a546110e29190614a9d565b8183600a546110f19190614ad2565b6110fb9190614a9d565b101561116f5760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610da4565b8082600a5461117e9190614ad2565b6111889190614a9d565b6015555050565b601c546001600160a01b031633146111d75760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b80518251146112285760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610da4565b60005b82518161ffff16101561132057818161ffff168151811061124e5761124e614ae9565b6020026020010151611275336001600160a01b031660009081526020819052604090205490565b10156112c35760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610da4565b61130d33848361ffff16815181106112dd576112dd614ae9565b6020026020010151848461ffff16815181106112fb576112fb614ae9565b60200260200101516000806001613c15565b508061131881614aff565b91505061122b565b505050565b601c546001600160a01b0316331461136d5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b601954610100900460ff16156113b95760405162461bcd60e51b815260206004820152601160248201527020b63932b0b23c903234b9b0b13632b21760791b6044820152606401610da4565b600a81101561140a5760405162461bcd60e51b815260206004820152601560248201527f43616e6e6f74207365742062656c6f77203130252e00000000000000000000006044820152606401610da4565b80606403611423576019805462ff000019169055601a55565b60195462010000900460ff16151560000361144a576019805462ff00001916620100001790555b601a55565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf83546114a99190614b20565b600a54610e509190614abf565b601c546001600160a01b031633146114fe5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b600d5460ff16156115515760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610da4565b6103e88361ffff161115801561156d57506103e88261ffff1611155b801561157f57506103e88161ffff1611155b6115cb5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610da4565b600b805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b601c546001600160a01b031633146116525760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6016546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b1580156116a057600080fd5b505af11580156116b4573d6000803e3d6000fd5b5050505050565b601c546001600160a01b031633146117035760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b601c546001600160a01b031633146117765760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6202a3008111156117c95760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742073657420686967686572207468616e2074776f20646179732e6044820152606401610da4565b601b55565b601c546001600160a01b031633146118165760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6103e8600a5460056118289190614ad2565b6118329190614a9d565b8183600a546118419190614ad2565b61184b9190614a9d565b10156118bf5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610da4565b8082600a546118ce9190614ad2565b6118d89190614a9d565b6014555050565b336118ec601b600a614a8e565b6118f69083614ad2565b915081611918826001600160a01b031660009081526020819052604090205490565b10156119665760405162461bcd60e51b815260206004820152601e60248201527f596f7520646f206e6f74206861766520656e6f75676820746f6b656e732e00006044820152606401610da4565b6001600160a01b0381166000908152602081905260408120805484929061198e908490614abf565b9250508190555081600a60008282546119a79190614abf565b90915550506040518281526000906001600160a01b038316907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b601c546001600160a01b03163314611a395760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b601954610100900460ff1615611a855760405162461bcd60e51b815260206004820152601160248201527020b63932b0b23c903234b9b0b13632b21760791b6044820152606401610da4565b60198054911515620100000262ff000019909216919091179055565b600e546001600160a01b031660009081526020819052604081205461271090611acb908490614ad2565b610e2f9190614a9d565b601c546001600160a01b03163314611b1d5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6096811115611b6e5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610da4565b601355565b601c546001600160a01b03163314611bbb5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6001600160a01b038116611c375760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610da4565b61deac196001600160a01b03821601611cb85760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610da4565b601c54611ccf906001600160a01b03166000611d7a565b611cda816001611d7a565b601c546001600160a01b031660009081526020819052604090205415611d2857601c546001600160a01b0316600081815260208190526040902054611d26919083906000806001613c15565b505b601c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601c546001600160a01b03163314611dc25760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b601c546001600160a01b03163314611e355760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b60165460ff1615611e4557600080fd5b306001600160a01b03821603611e9d5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610da4565b6016805462010000600160b01b031916620100006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301816000875af1925050508015611f23575060408051601f3d908101601f19168201909252611f2091810190614b33565b60015b611f2c57600080fd5b600d805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600e80546001600160a01b0319168584169081179091556000908152600160208190526040909120805460ff19169091179055601c549254611fa9938316929190041660001961340f565b600d5461132090309061010090046001600160a01b031660001961340f565b50565b6000611fd9601b600a614a8e565b601454610e509190614a9d565b601c546001600160a01b0316331461202e5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b60165460ff166120a65760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201527f73206265656e20656e61626c65642e00000000000000000000000000000000006064820152608401610da4565b601c546120bd906001600160a01b03166000611d7a565b601c80546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601c546001600160a01b031633146121535760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b600d805460ff19166001179055565b601c546001600160a01b031633146121aa5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b601954610100900460ff16156121f65760405162461bcd60e51b815260206004820152601160248201527020b63932b0b23c903234b9b0b13632b21760791b6044820152606401610da4565b6019805462ffffff1916610101179055565b601c546001600160a01b031633146122505760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b806122c3576001600160a01b03828116600081815260016020526040808220805460ff1916905560165490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610e0257600080fd5b6002541561232a576203f480600254426122dd9190614abf565b1161232a5760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610da4565b6001600160a01b03821660009081526001602052604090205460ff16156123935760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610da4565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560165491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610de8565b601c546000906001600160a01b0316331461243d5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b600d5461245c90309061010090046001600160a01b031660001961340f565b50600190565b601c546001600160a01b031633146124aa5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b60165460ff16156124fd5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610da4565b601654610100900460ff166125545760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610da4565b6016546201000090046001600160a01b0316612584576016805462010000600160b01b0319163062010000021790555b601654600e54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff42166044820152601b6064820152620100009092041690636c115c3490608401600060405180830381600087803b1580156125f657600080fd5b505af1925050508015612607575060015b50601654600e546001600160a01b03908116600090815260208190526040908190205490516312d38e5760e11b815260048101919091526201000090920416906325a71cae9060240160408051808303816000875af192505050801561268a575060408051601f3d908101601f1916820190925261268791810190614b62565b60015b15612699576010919091556011555b6016805460ff1990811660011790915560098054909116905542601755565b6001600160a01b038116600090815260186020526040812060018101546002820154601b549254909391926126f69167ffffffffffffffff16614b20565b42111561270557506000612743565b601b546001600160a01b03851660009081526018602052604090205442916127369167ffffffffffffffff16614b20565b6127409190614abf565b90505b9193909250565b6000612757338484613508565b5060019392505050565b601c546001600160a01b031633146127a95760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b601654610100900460ff161561281157306001600160a01b038216036128115760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610da4565b601c546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015612868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288c9190614b86565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156128d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113209190614b9f565b601c546001600160a01b031633146129435760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b600c805463ffffffff191661ffff8481169182176201000085831681029190911765ffff0000000019166401000000009390930292909217909255600b5460009261299392820481169116614bbc565b600c5461ffff918216925082916129b591859164010000000090910416614bbc565b61ffff1611156113205760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610da4565b601c546001600160a01b03163314612a5f5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b600f805460ff60a81b1916600160a81b841515908102919091179091556012805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b601c546001600160a01b03163314612b0a5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b601954610100900460ff1615612b885760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206d6f64696679206166746572206c696d69747320686176652060448201527f6265656e2064697361626c65642e0000000000000000000000000000000000006064820152608401610da4565b6019805460ff1916911515919091179055565b601c546001600160a01b03163314612be35760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b601654610100900460ff1615612c3b5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610da4565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca49190614bde565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d159190614bde565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612d60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d849190614bde565b600e546001600160a01b039081166000908152600160205260409020805460ff191690559091508116612f1a57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e139190614bde565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e849190614bde565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef59190614bde565b600e80546001600160a01b0319166001600160a01b0392909216919091179055612f36565b600e80546001600160a01b0319166001600160a01b0383161790555b600d805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600e5482166000908152600160208190526040909120805460ff19169091179055915461132092309291041660001961340f565b601c546001600160a01b03163314612fe45760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6001600160a01b03811661303a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610da4565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b601c546001600160a01b031633146130a45760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b601654610100900460ff16156130fc5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610da4565b601c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611fc8573d6000803e3d6000fd5b601c546001600160a01b0316331461317d5760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b8284600a5461318c9190614ad2565b6131969190614a9d565b601055600a5481906131a9908490614ad2565b6131b39190614a9d565b601181905560105411156132135760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610da4565b600e546001600160a01b03166000908152602081905260409020546127109061323d906096614ad2565b6132479190614a9d565b60115411156132a45760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610da4565b620f4240600a546132b59190614a9d565b601154101561331d5760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610da4565b620f4240600a5461332e9190614a9d565b60105410156133965760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610da4565b50505050565b601c546001600160a01b031633146133e45760405162461bcd60e51b81526020600482015260116024820152600080516020614c6d8339815191526044820152606401610da4565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b03831661345b5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610da4565b6001600160a01b0382166134a75760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610da4565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661356e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610da4565b6001600160a01b0383166135d05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610da4565b600082116136325760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610da4565b6001600160a01b0384166000908152600160205260408120548190819060ff1615613660576001925061368e565b6001600160a01b03861660009081526001602052604090205460ff161561368a576001915061368e565b5060015b6136988787613ec8565b15613b125760165460ff1661379957806136f45760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610da4565b6001600160a01b03871660009081526005602052604090205460ff1615801561373657506001600160a01b03861660009081526005602052604090205460ff16155b156137995760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610da4565b82806137a25750815b15613851576001600160a01b03871660009081526007602052604090205460ff161580156137e957506001600160a01b03861660009081526007602052604090205460ff16155b15613851576014548511156138515760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610da4565b600d546001600160a01b038781166101009092041614801590613872575081155b15613925576001600160a01b03861660009081526007602052604090205460ff1661392557601554856138ba886001600160a01b031660009081526020819052604090205490565b6138c49190614b20565b11156139255760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610da4565b808015613934575060165460ff165b1561398b5760195460ff1661398b5760405162461bcd60e51b815260206004820152601c60248201527f43616e206f6e6c7920627579206f722073656c6c20746f6b656e732e000000006044820152606401610da4565b8115613b125760195462010000900460ff1615613b1257601b546001600160a01b0388166000908152601860205260409020546139d2919067ffffffffffffffff16614b20565b421115613a26576001600160a01b0387166000908152601860208181526040808420805467ffffffffffffffff19164267ffffffffffffffff16178155600181018590558483529320549190526002909101555b601a546001600160a01b038816600090815260186020526040902060020154606491613a5191614ad2565b613a5b9190614a9d565b6001600160a01b038816600090815260186020526040902060010154613a819087614b20565b1115613ae15760405162461bcd60e51b815260206004820152602960248201527f45786365656465642073656c6c206c696d69747320666f72207468652074696d60448201526832903832b934b7b21760b91b6064820152608401610da4565b6001600160a01b03871660009081526018602052604081206001018054879290613b0c908490614b20565b90915550505b8115613bfc57600f54600160a01b900460ff16613bfc57600f54600160a81b900460ff168015613b5b57506001600160a01b03861660009081526008602052604090205460ff16155b8015613b8057506001600160a01b03871660009081526008602052604090205460ff16155b15613bfc57306000908152602081905260409020546010548110613bfa5760115460125460ff1615613be457601354600e546001600160a01b031660009081526020819052604090205461271091613bd791614ad2565b613be19190614a9d565b90505b808210613bef578091505b613bf882613fdf565b505b505b613c0a878787868686613c15565b979650505050505050565b6000613c218787613ec8565b15613cbb5760165460405163ecd07a5360e01b81526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613ca4575060408051601f3d908101601f19168201909252613ca191810190614b9f565b60015b613cad57600080fd5b905080613cb957600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff1680613cfd57506001600160a01b03871660009081526006602052604090205460ff165b15613d06575060005b6001600160a01b03881660009081526020819052604081208054889290613d2e908490614abf565b909155506000905081613d415786613d4d565b613d4d89888888614223565b9050806000808a6001600160a01b03166001600160a01b031681526020019081526020016000206000828254613d839190614b20565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613dcf91815260200190565b60405180910390a3601654610100900460ff16613eb957613df08989614421565b601654610100900460ff16158015613e0d5750613e0d8989613ec8565b8015613e3257506001600160a01b03891660009081526005602052604090205460ff16155b8015613e5757506001600160a01b03881660009081526005602052604090205460ff16155b8015613e61575083155b15613eb95760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610da4565b50600198975050505050505050565b601c546000906001600160a01b03848116911614801590613ef75750601c546001600160a01b03838116911614155b8015613f0e5750601c546001600160a01b03163214155b8015613f3357506001600160a01b03821660009081526004602052604090205460ff16155b8015613f5857506001600160a01b03831660009081526004602052604090205460ff16155b8015613f6f57506001600160a01b03821661dead14155b8015613f8357506001600160a01b03821615155b8015613f9857506001600160a01b0383163014155b8015613fb857506016546001600160a01b03848116620100009092041614155b8015613fd857506016546001600160a01b03838116620100009092041614155b9392505050565b600f805460ff60a01b1916600160a01b179055306000908152600360209081526040808320600d5461010090046001600160a01b031684529091529020546000191461405557306000908152600360209081526040808320600d5461010090046001600160a01b03168452909152902060001990555b604080516002808252606082018352600092602083019080368337019050509050308160008151811061408a5761408a614ae9565b60200260200101906001600160a01b031690816001600160a01b031681525050600d60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141219190614bde565b8160018151811061413457614134614ae9565b6001600160a01b039283166020918202929092010152600d5460405163791ac94760e01b81526101009091049091169063791ac94790614181908590600090869030904290600401614bfb565b600060405180830381600087803b15801561419b57600080fd5b505af19250505080156141ac575060015b6141b65750614213565b600f546040516000916001600160a01b03169061d6d890479084818181858888f193505050503d8060008114614208576040519150601f19603f3d011682016040523d82523d6000602084013e61420d565b606091505b50505050505b50600f805460ff60a01b19169055565b60408051606081018252600c5461ffff80821683526201000082048116602084018190526401000000009092041692820183905260009283916142669190614bbc565b61ffff169050600085156142815750600b5461ffff166142ab565b841561429a5750600b5462010000900461ffff166142ab565b50600b54640100000000900461ffff165b806000036142be57869350505050611083565b6016546201000090046001600160a01b0316301480156142e8575046600114806142e85750466038145b156142f257506111945b6000612710614301838a614ad2565b61430b9190614a9d565b9050600083856020015161ffff16836143249190614ad2565b61432e9190614a9d565b9050600061433c8284614abf565b905080156143a9573060009081526020819052604081208054839290614363908490614b20565b909155505060405181815230906001600160a01b038d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b81156144085781600a60008282546143c19190614abf565b90915550506040518281526000906001600160a01b038d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b614412838b614abf565b9b9a5050505050505050505050565b601654610100900460ff16156144855760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610da4565b61448f8282613ec8565b1580156144a95750600e546001600160a01b038281169116145b15610f9a576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556016805461ff001916610100179081905562010000900416614521576016805462010000600160b01b0319163062010000021790555b600f805460ff60a81b1916600160a81b179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001612ab6565b8015158114611fc857600080fd5b6000806040838503121561458657600080fd5b823561459181614565565b915060208301356145a181614565565b809150509250929050565b600060208083528351808285015260005b818110156145d9578581018301518582016040015282016145bd565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611fc857600080fd5b6000806040838503121561462257600080fd5b823561462d816145fa565b946020939093013593505050565b60006020828403121561464d57600080fd5b8135613fd8816145fa565b6000806040838503121561466b57600080fd5b8235614676816145fa565b915060208301356145a1816145fa565b60008060006060848603121561469b57600080fd5b83356146a6816145fa565b925060208401356146b6816145fa565b929592945050506040919091013590565b600080604083850312156146da57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614728576147286146e9565b604052919050565b600067ffffffffffffffff82111561474a5761474a6146e9565b5060051b60200190565b600082601f83011261476557600080fd5b8135602061477a61477583614730565b6146ff565b82815260059290921b8401810191818101908684111561479957600080fd5b8286015b848110156147b4578035835291830191830161479d565b509695505050505050565b600080604083850312156147d257600080fd5b823567ffffffffffffffff808211156147ea57600080fd5b818501915085601f8301126147fe57600080fd5b8135602061480e61477583614730565b82815260059290921b8401810191818101908984111561482d57600080fd5b948201945b83861015614854578535614845816145fa565b82529482019490820190614832565b9650508601359250508082111561486a57600080fd5b5061487785828601614754565b9150509250929050565b60006020828403121561489357600080fd5b5035919050565b803561ffff811681146148ac57600080fd5b919050565b6000806000606084860312156148c657600080fd5b6148cf8461489a565b92506148dd6020850161489a565b91506148eb6040850161489a565b90509250925092565b6000806040838503121561490757600080fd5b8235614591816145fa565b60006020828403121561492457600080fd5b8135613fd881614565565b6000806040838503121561494257600080fd5b61494b8361489a565b91506149596020840161489a565b90509250929050565b6000806000806080858703121561497857600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156149e55781600019048211156149cb576149cb614994565b808516156149d857918102915b93841c93908002906149af565b509250929050565b6000826149fc57506001610e2f565b81614a0957506000610e2f565b8160018114614a1f5760028114614a2957614a45565b6001915050610e2f565b60ff841115614a3a57614a3a614994565b50506001821b610e2f565b5060208310610133831016604e8410600b8410161715614a68575081810a610e2f565b614a7283836149aa565b8060001904821115614a8657614a86614994565b029392505050565b6000613fd860ff8416836149ed565b600082614aba57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610e2f57610e2f614994565b8082028115828204841417610e2f57610e2f614994565b634e487b7160e01b600052603260045260246000fd5b600061ffff808316818103614b1657614b16614994565b6001019392505050565b80820180821115610e2f57610e2f614994565b60008060408385031215614b4657600080fd5b8251614b51816145fa565b60208401519092506145a1816145fa565b60008060408385031215614b7557600080fd5b505080516020909101519092909150565b600060208284031215614b9857600080fd5b5051919050565b600060208284031215614bb157600080fd5b8151613fd881614565565b61ffff818116838216019080821115614bd757614bd7614994565b5092915050565b600060208284031215614bf057600080fd5b8151613fd8816145fa565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614c4b5784516001600160a01b031683529383019391830191600101614c26565b50506001600160a01b0396909616606085015250505060800152939250505056fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a26469706673582212207660df05f63c551854f2082a14ae3d5ed3b9535f43777ebde61bbb4dcf88897164736f6c63430008130033

Deployed Bytecode Sourcemap

4307:25522:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5907:73;;;;;;;;;;;;5938:42;5907:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;5907:73:0;;;;;;;;6160:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;6160:28:0;245:177:1;14519:153:0;;;;;;;;;;-1:-1:-1;14519:153:0;;;;;:::i;:::-;;:::i;:::-;;5379:109;;;;;;;;;;-1:-1:-1;5379:109: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;5379:109:0;931:365:1;9966:80:0;;;;;;;;;;-1:-1:-1;10038:5:0;;;;;;;;;;;;-1:-1:-1;;;10038:5:0;;;;9966:80;;;;;;;:::i;5846:26::-;;;;;;;;;;-1:-1:-1;5846:26:0;;;;;;;-1:-1:-1;;;;;5846:26:0;;;5813;;;;;;;;;;-1:-1:-1;5813:26:0;;;;;;;;;;;2267:14:1;;2260:22;2242:41;;2230:2;2215:18;5813:26:0;2102:187:1;10574:161:0;;;;;;;;;;-1:-1:-1;10574:161:0;;;;;:::i;:::-;;:::i;13948:140::-;;;;;;;;;;-1:-1:-1;13948:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;14046:34:0;14022:4;14046:34;;;:25;:34;;;;;;;;;13948:140;16560:114;;;;;;;;;;;;;:::i;19904:809::-;;;;;;;;;;-1:-1:-1;19904:809:0;;;;;:::i;:::-;;:::i;9701:83::-;;;;;;;;;;-1:-1:-1;9774:7:0;;9701:83;;11244:306;;;;;;;;;;-1:-1:-1;11244:306:0;;;;;:::i;:::-;;:::i;16172:264::-;;;;;;;;;;-1:-1:-1;16172:264:0;;;;;:::i;:::-;;:::i;26847:419::-;;;;;;;;;;-1:-1:-1;26847:419:0;;;;;:::i;:::-;;:::i;6268:33::-;;;;;;;;;;;;;;;;17545:407;;;;;;;;;;-1:-1:-1;17545:407:0;;;;;:::i;:::-;;:::i;14252:141::-;;;;;;;;;;;;;:::i;5610:42::-;;;;;;;;;;;;5648:4;5610:42;;6195:25;;;;;;;;;;;;;;;;9790:80;;;;;;;;;;-1:-1:-1;9790:80:0;;5093:2;6946:36:1;;6934:2;6919:18;9790:80:0;6804:184:1;14870:453:0;;;;;;;;;;-1:-1:-1;14870:453:0;;;;;:::i;:::-;;:::i;14401:110::-;;;;;;;;;;-1:-1:-1;14401:110:0;;;;;:::i;:::-;;:::i;13523:140::-;;;;;;;;;;-1:-1:-1;13523:140:0;;;;;:::i;:::-;;:::i;17960:203::-;;;;;;;;;;-1:-1:-1;17960:203:0;;;;;:::i;:::-;;:::i;15891:273::-;;;;;;;;;;-1:-1:-1;15891:273:0;;;;;:::i;:::-;;:::i;6847:36::-;;;;;;;;;;-1:-1:-1;6847:36:0;;;;;;;;;;;29474:352;;;;;;;;;;-1:-1:-1;29474:352:0;;;;;:::i;:::-;;:::i;5879:21::-;;;;;;;;;;-1:-1:-1;5879:21:0;;;;-1:-1:-1;;;;;5879:21:0;;;17111:176;;;;;;;;;;-1:-1:-1;17111:176:0;;;;;:::i;:::-;;:::i;6432:34::-;;;;;;;;;;-1:-1:-1;6432:34:0;;;;;;;;16682:189;;;;;;;;;;-1:-1:-1;16682:189:0;;;;;:::i;:::-;;:::i;19408:217::-;;;;;;;;;;-1:-1:-1;19408:217:0;;;;;:::i;:::-;;:::i;8333:654::-;;;;;;;;;;-1:-1:-1;8333:654:0;;;;;:::i;:::-;;:::i;13671:127::-;;;;;;;;;;-1:-1:-1;13671:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;13762:28:0;13738:4;13762:28;;;:19;:28;;;;;;;;;13671:127;6473:36;;;;;;;;;;-1:-1:-1;6473:36:0;;;;;;;;;;;6753:44;;;;;;;;;;-1:-1:-1;6753:44:0;;;;;;;;6933:43;;;;;;;;;;;;;;;;13806:134;;;;;;;;;;-1:-1:-1;13806:134:0;;;;;:::i;:::-;;:::i;6546:26::-;;;;;;;;;;;;;;;;12818:557;;;;;;;;;;-1:-1:-1;12818:557:0;;;;;:::i;:::-;;:::i;13383:132::-;;;;;;;;;;-1:-1:-1;13383:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;13477:30:0;13453:4;13477:30;;;:21;:30;;;;;;;;;13383:132;16444:108;;;;;;;;;;;;;:::i;10276:117::-;;;;;;;;;;-1:-1:-1;10276:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;10369:16:0;10342:7;10369:16;;;;;;;;;;;;10276:117;8995:310;;;;;;;;;;;;;:::i;14680:182::-;;;;;;;;;;;;;:::i;17295:242::-;;;;;;;;;;;;;:::i;12246:564::-;;;;;;;;;;-1:-1:-1;12246:564:0;;;;;:::i;:::-;;:::i;10052:79::-;;;;;;;;;;-1:-1:-1;10122:6:0;;-1:-1:-1;;;;;10122:6:0;10052:79;;11061:175;;;;;;;;;;;;;:::i;25608:737::-;;;;;;;;;;;;;:::i;18171:522::-;;;;;;;;;;-1:-1:-1;18171:522:0;;;;;:::i;:::-;;:::i;:::-;;;;8325:25:1;;;8381:2;8366:18;;8359:34;;;;8409:18;;;8402:34;8313:2;8298:18;18171:522:0;8123:319:1;5987:96:0;;;;;;;;;;-1:-1:-1;5987:96:0;;;;-1:-1:-1;;;;;5987:96:0;;;9876:84;;;;;;;;;;-1:-1:-1;9950:7:0;;;;;;;;;;;;-1:-1:-1;;;9950:7:0;;;;9876:84;;10401:165;;;;;;;;;;-1:-1:-1;10401:165:0;;;;;:::i;:::-;;:::i;26543:296::-;;;;;;;;;;-1:-1:-1;26543:296:0;;;;;:::i;:::-;;:::i;6890:36::-;;;;;;;;;;;;;;;;6227:34;;;;;;;;;;-1:-1:-1;6227:34:0;;;;;;;;15331:349;;;;;;;;;;-1:-1:-1;15331:349:0;;;;;:::i;:::-;;:::i;19633:263::-;;;;;;;;;;-1:-1:-1;19633:263:0;;;;;:::i;:::-;;:::i;5497:104::-;;;;;;;;;;-1:-1:-1;5497:104:0;;;;;;;;;;;;;;;;;;;;;;16879:224;;;;;;;;;;-1:-1:-1;16879:224:0;;;;;:::i;:::-;;:::i;10137:133::-;;;;;;;;;;-1:-1:-1;10137:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;10239:19:0;;;10221:7;10239:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10137:133;11558:680;;;;;;;;;;-1:-1:-1;11558:680:0;;;;;:::i;:::-;;:::i;15688:195::-;;;;;;;;;;-1:-1:-1;15688:195:0;;;;;:::i;:::-;;:::i;26353:182::-;;;;;;;;;;;;;:::i;18701:699::-;;;;;;;;;;-1:-1:-1;18701:699:0;;;;;:::i;:::-;;:::i;6804:36::-;;;;;;;;;;-1:-1:-1;6804:36:0;;;;;;;;;;;6114:39;;;;;;;;;;-1:-1:-1;6114:39:0;;;;-1:-1:-1;;;6114:39:0;;;;;;14096:148;;;;;;;;;;-1:-1:-1;14096:148:0;;;;;:::i;:::-;;:::i;14519:153::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;;;;;;;;;14614:11:::1;::::0;:50:::1;::::0;-1:-1:-1;;;14614:50:0;;10138:14:1;;10131:22;14614:50:0::1;::::0;::::1;10113:41:1::0;10197:14;;10190:22;10170:18;;;10163:50;14614:11:0;;;::::1;-1:-1:-1::0;;;;;14614:11:0::1;::::0;:26:::1;::::0;10086:18:1;;14614:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14519:153:::0;;:::o;10574:161::-;10651:4;10668:37;10677:10;10689:7;10698:6;10668:8;:37::i;:::-;-1:-1:-1;10723:4:0;10574:161;;;;;:::o;16560:114::-;16607:7;16652:13;5093:2;16652;:13;:::i;:::-;16634:14;;:32;;;;:::i;:::-;16627:39;;16560:114;:::o;19904:809::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;20008:23:::1;::::0;::::1;;20000:32;;;::::0;::::1;;-1:-1:-1::0;;;;;20051:23:0;::::1;20069:4;20051:23;::::0;::::1;::::0;:69:::1;;-1:-1:-1::0;;;;;;20096:24:0;::::1;20115:4;20096:24;;20051:69;:107;;;;-1:-1:-1::0;20142:6:0::1;::::0;-1:-1:-1;;;;;20142:16:0;;::::1;:6:::0;::::1;:16;;20051:107;:146;;;;-1:-1:-1::0;20180:6:0::1;::::0;-1:-1:-1;;;;;20180:17:0;;::::1;:6:::0;::::1;:17;;20051:146;20043:170;;;::::0;-1:-1:-1;;;20043:170:0;;12163:2:1;20043:170:0::1;::::0;::::1;12145:21:1::0;12202:2;12182:18;;;12175:30;-1:-1:-1;;;12221:18:1;;;12214:41;12272:18;;20043:170:0::1;11961:335:1::0;20043:170:0::1;20238:7;-1:-1:-1::0;;;;;20228:17:0::1;:6;-1:-1:-1::0;;;;;20228:17:0::1;::::0;20224:482:::1;;-1:-1:-1::0;;;;;20262:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;:33;;20291:4:::1;-1:-1:-1::0;;20262:33:0;;::::1;::::0;::::1;::::0;;;20310:16:::1;:25:::0;;;;;:32;;;;::::1;::::0;::::1;::::0;;20357:34:::1;::::0;20262:26;;20357:19:::1;:34::i;:::-;19904:809:::0;;:::o;20224:482::-:1;-1:-1:-1::0;;;;;20424:25:0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;:32;;20452:4:::1;-1:-1:-1::0;;20424:32:0;;::::1;::::0;::::1;::::0;;;20471:26;;::::1;::::0;;;;;;:33;;;::::1;::::0;::::1;::::0;;20519:24;;;:16:::1;:24:::0;;;;;;:31;;;::::1;::::0;::::1;::::0;;20565:25;;;;;;:32;;;;::::1;::::0;::::1;::::0;;;20612:33:::1;::::0;20424:25;;20612:19:::1;:33::i;:::-;20660:34;20680:7;20689:4;20660:19;:34::i;11244:306::-:0;-1:-1:-1;;;;;11365:19:0;;11344:4;11365:19;;;:11;:19;;;;;;;;11385:10;11365:31;;;;;;;;-1:-1:-1;;11365:52:0;11361:126;;-1:-1:-1;;;;;11434:19:0;;;;;;:11;:19;;;;;;;;11454:10;11434:31;;;;;;;:41;;11469:6;;11434:19;:41;;11469:6;;11434:41;:::i;:::-;;;;-1:-1:-1;;11361:126:0;11506:36;11516:6;11524:9;11535:6;11506:9;:36::i;:::-;11499:43;11244:306;-1:-1:-1;;;;11244:306:0:o;16172:264::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;16314:3:::1;16304:7;;:13;;;;:::i;:::-;16292:7;16281;16271;;:17;;;;:::i;:::-;16270:29;;;;:::i;:::-;:48;;16262:109;;;::::0;-1:-1:-1;;;16262:109:0;;12809:2:1;16262:109:0::1;::::0;::::1;12791:21:1::0;12848:2;12828:18;;;12821:30;12887:34;12867:18;;;12860:62;12958:18;12938;;;12931:46;12994:19;;16262:109:0::1;12607:412:1::0;16262:109:0::1;16421:7;16410;16400;;:17;;;;:::i;:::-;16399:29;;;;:::i;:::-;16382:14;:46:::0;-1:-1:-1;;16172:264:0:o;26847:419::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;26982:7:::1;:14;26963:8;:15;:33;26955:67;;;::::0;-1:-1:-1;;;26955:67:0;;13226:2:1;26955:67:0::1;::::0;::::1;13208:21:1::0;13265:2;13245:18;;;13238:30;13304:23;13284:18;;;13277:51;13345:18;;26955:67:0::1;13024:345:1::0;26955:67:0::1;27038:8;27033:226;27056:8;:15;27052:1;:19;;;27033:226;;;27126:7;27134:1;27126:10;;;;;;;;;;:::i;:::-;;;;;;;27101:21;27111:10;-1:-1:-1::0;;;;;10369:16:0;10342:7;10369:16;;;;;;;;;;;;10276:117;27101:21:::1;:35;;27093:66;;;::::0;-1:-1:-1;;;27093:66:0;;13708:2:1;27093:66:0::1;::::0;::::1;13690:21:1::0;13747:2;13727:18;;;13720:30;13786:20;13766:18;;;13759:48;13824:18;;27093:66:0::1;13506:342:1::0;27093:66:0::1;27174:73;27191:10;27203:8;27212:1;27203:11;;;;;;;;;;:::i;:::-;;;;;;;27216:7;27224:1;27216:10;;;;;;;;;;:::i;:::-;;;;;;;27228:5;27235::::0;27242:4:::1;27174:16;:73::i;:::-;-1:-1:-1::0;27073:3:0;::::1;::::0;::::1;:::i;:::-;;;;27033:226;;;;26847:419:::0;;:::o;17545:407::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;17630:16:::1;::::0;::::1;::::0;::::1;;;:25;17622:55;;;::::0;-1:-1:-1;;;17622:55:0;;14257:2:1;17622:55:0::1;::::0;::::1;14239:21:1::0;14296:2;14276:18;;;14269:30;-1:-1:-1;;;14315:18:1;;;14308:47;14372:18;;17622:55:0::1;14055:341:1::0;17622:55:0::1;17707:2;17696:7;:13;;17688:47;;;::::0;-1:-1:-1;;;17688:47:0;;14603:2:1;17688:47:0::1;::::0;::::1;14585:21:1::0;14642:2;14622:18;;;14615:30;14681:23;14661:18;;;14654:51;14722:18;;17688:47:0::1;14401:345:1::0;17688:47:0::1;17750:7;17761:3;17750:14:::0;17746:161:::1;;17781:17;:25:::0;;-1:-1:-1;;17781:25:0::1;::::0;;17917:16:::1;:26:::0;17545:407::o;17746:161::-:1;17828:17;::::0;;;::::1;;;:26;;17849:5;17828:26:::0;17824:83:::1;;17871:17;:24:::0;;-1:-1:-1;;17871:24:0::1;::::0;::::1;::::0;;17824:83:::1;17917:16;:26:::0;17545:407::o;14252:141::-;14305:7;10369:16;;;;;;5938:42;10369:16;;;;14344:39;;10369:16;14344:39;:::i;:::-;14333:7;;:51;;;;:::i;14870:453::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;14978:14:::1;::::0;::::1;;14977:15;14969:45;;;::::0;-1:-1:-1;;;14969:45:0;;15083:2:1;14969:45:0::1;::::0;::::1;15065:21:1::0;15122:2;15102:18;;;15095:30;15161:19;15141:18;;;15134:47;15198:18;;14969:45:0::1;14881:341:1::0;14969:45:0::1;5648:4;15033:6;:21;;;;:65;;;;;5698:4;15075:7;:23;;;;15033:65;:117;;;;;5752:4;15119:11;:31;;;;15033:117;15025:170;;;::::0;-1:-1:-1;;;15025:170:0;;15429:2:1;15025:170:0::1;::::0;::::1;15411:21:1::0;15468:2;15448:18;;;15441:30;15507:25;15487:18;;;15480:53;15550:18;;15025:170:0::1;15227:347:1::0;15025:170:0::1;15206:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;15242:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;15280:35:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;14870:453::o;14401:110::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;14470:11:::1;::::0;:33:::1;::::0;-1:-1:-1;;;14470:33:0;;-1:-1:-1;;;;;178:55:1;;;14470:33:0::1;::::0;::::1;160:74:1::0;14470:11:0;;;::::1;::::0;;::::1;::::0;:24:::1;::::0;133:18:1;;14470:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14401:110:::0;:::o;13523:140::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;-1:-1:-1;;;;;13615:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;13615:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13523:140::o;17960:203::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;18068:6:::1;18051:13;:23;;18043:68;;;::::0;-1:-1:-1;;;18043:68:0;;15781:2:1;18043:68:0::1;::::0;::::1;15763:21:1::0;;;15800:18;;;15793:30;15859:34;15839:18;;;15832:62;15911:18;;18043:68:0::1;15579:356:1::0;18043:68:0::1;18122:17;:33:::0;17960:203::o;15891:273::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;16036:4:::1;16022:7;;16032:1;16022:11;;;;:::i;:::-;:18;;;;:::i;:::-;16010:7;15999;15989;;:17;;;;:::i;:::-;15988:29;;;;:::i;:::-;:53;;15980:121;;;::::0;-1:-1:-1;;;15980:121:0;;16142:2:1;15980:121:0::1;::::0;::::1;16124:21:1::0;16181:2;16161:18;;;16154:30;16220:34;16200:18;;;16193:62;16291:25;16271:18;;;16264:53;16334:19;;15980:121:0::1;15940:419:1::0;15980:121:0::1;16149:7;16138;16128;;:17;;;;:::i;:::-;16127:29;;;;:::i;:::-;16112:12;:44:::0;-1:-1:-1;;15891:273:0:o;29474:352::-;29547:10;29584:13;5093:2;29584;:13;:::i;:::-;29568:29;;;;:::i;:::-;;;29637:12;29616:17;29626:6;-1:-1:-1;;;;;10369:16:0;10342:7;10369:16;;;;;;;;;;;;10276:117;29616:17;:33;;29608:76;;;;-1:-1:-1;;;29608:76:0;;16566:2:1;29608:76:0;;;16548:21:1;16605:2;16585:18;;;16578:30;16644:32;16624:18;;;16617:60;16694:18;;29608:76:0;16364:354:1;29608:76:0;-1:-1:-1;;;;;29695:15:0;;:7;:15;;;;;;;;;;:31;;29714:12;;29695:7;:31;;29714:12;;29695:31;:::i;:::-;;;;;;;;29748:12;29737:7;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;29776:42:0;;391:25:1;;;29801:1:0;;-1:-1:-1;;;;;29776:42:0;;;;;379:2:1;364:18;29776:42:0;;;;;;;29519:307;29474:352;:::o;17111:176::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;17193:16:::1;::::0;::::1;::::0;::::1;;;:25;17185:55;;;::::0;-1:-1:-1;;;17185:55:0;;14257:2:1;17185:55:0::1;::::0;::::1;14239:21:1::0;14296:2;14276:18;;;14269:30;-1:-1:-1;;;14315:18:1;;;14308:47;14372:18;;17185:55:0::1;14055:341:1::0;17185:55:0::1;17251:17;:27:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;17251:27:0;;::::1;::::0;;;::::1;::::0;;17111:176::o;16682:189::-;16811:6;;-1:-1:-1;;;;;16811:6:0;16773:7;10369:16;;;;;;;;;;;5799:5;;16801:41;;16821:21;;16801:41;:::i;:::-;16800:62;;;;:::i;19408:217::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;19538:3:::1;19512:22;:29;;19504:64;;;::::0;-1:-1:-1;;;19504:64:0;;16925:2:1;19504:64:0::1;::::0;::::1;16907:21:1::0;16964:2;16944:18;;;16937:30;17003:24;16983:18;;;16976:52;17045:18;;19504:64:0::1;16723:346:1::0;19504:64:0::1;19579:13;:38:::0;19408:217::o;8333:654::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;-1:-1:-1;;;;;8412:22:0;::::1;8404:96;;;::::0;-1:-1:-1;;;8404:96:0;;17276:2:1;8404:96:0::1;::::0;::::1;17258:21:1::0;17315:2;17295:18;;;17288:30;17354:34;17334:18;;;17327:62;17425:31;17405:18;;;17398:59;17474:19;;8404:96:0::1;17074:425:1::0;8404:96:0::1;-1:-1:-1::0;;;;;;;8519:16:0;::::1;::::0;8511:90:::1;;;::::0;-1:-1:-1;;;8511:90:0;;17276:2:1;8511:90:0::1;::::0;::::1;17258:21:1::0;17315:2;17295:18;;;17288:30;17354:34;17334:18;;;17327:62;17425:31;17405:18;;;17398:59;17474:19;;8511:90:0::1;17074:425:1::0;8511:90:0::1;8632:6;::::0;8612:34:::1;::::0;-1:-1:-1;;;;;8632:6:0::1;;8612:19;:34::i;:::-;8657:35;8677:8;8687:4;8657:19;:35::i;:::-;8727:6;::::0;-1:-1:-1;;;;;8727:6:0::1;8737:1;10369:16:::0;;;;;;;;;;;8717:21;8713:127:::1;;8772:6;::::0;-1:-1:-1;;;;;8772:6:0::1;10342:7:::0;10369:16;;;;;;;;;;;8755:73:::1;::::0;8772:6;8780:8;;8809:5:::1;8816::::0;8823:4:::1;8755:16;:73::i;:::-;;8713:127;8879:6;::::0;;-1:-1:-1;;;;;8896:17:0;;::::1;-1:-1:-1::0;;;;;;8896:17:0;::::1;::::0;::::1;::::0;;;8929:40:::1;::::0;8879:6;::::1;::::0;8896:17;8879:6;;8929:40:::1;::::0;8860:16:::1;::::0;8929:40:::1;8393:594;8333:654:::0;:::o;13806:134::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;-1:-1:-1;;;;;13894:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;13894:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13806:134::o;12818:557::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;12893:14:::1;::::0;::::1;;12892:15;12884:24;;;::::0;::::1;;12943:4;-1:-1:-1::0;;;;;12927:21:0;::::1;::::0;12919:48:::1;;;::::0;-1:-1:-1;;;12919:48:0;;17706:2:1;12919:48:0::1;::::0;::::1;17688:21:1::0;17745:2;17725:18;;;17718:30;17784:16;17764:18;;;17757:44;17818:18;;12919:48:0::1;17504:338:1::0;12919:48:0::1;12978:11;:31:::0;;-1:-1:-1;;;;;;12978:31:0::1;::::0;-1:-1:-1;;;;;12978:31:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;13024:23:::1;::::0;;-1:-1:-1;;;13024:23:0;;;;:11;;;::::1;::::0;;::::1;::::0;:21:::1;::::0;:23:::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;13024:11:0;:23:::1;;;;;;;;;;-1:-1:-1::0;13024:23:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;13024:23:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;13020:348;;13357:8;::::0;::::1;13020:348;13111:9;:29:::0;;-1:-1:-1;;13111:29:0::1;;-1:-1:-1::0;;;;;13111:29:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;13142:6:::1;:22:::0;;-1:-1:-1;;;;;;13142:22:0::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;13166:15:0;;;-1:-1:-1;13166:15:0::1;::::0;;;;;;;:22;;-1:-1:-1;;13166:22:0::1;::::0;;::::1;::::0;;13213:6:::1;::::0;13229:9;;13204:55:::1;::::0;13213:6;::::1;::::0;13229:9;;::::1;;-1:-1:-1::0;;13204:8:0::1;:55::i;:::-;13306:9;::::0;13274:62:::1;::::0;13291:4:::1;::::0;13306:9:::1;::::0;::::1;-1:-1:-1::0;;;;;13306:9:0::1;-1:-1:-1::0;;13274:8:0::1;:62::i;13020:348::-;12818:557:::0;:::o;16444:108::-;16487:7;16530:13;5093:2;16530;:13;:::i;:::-;16514:12;;:30;;;;:::i;8995:310::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;9062:14:::1;::::0;::::1;;9054:74;;;::::0;-1:-1:-1;;;9054:74:0;;18439:2:1;9054:74:0::1;::::0;::::1;18421:21:1::0;18478:2;18458:18;;;18451:30;18517:34;18497:18;;;18490:62;18588:17;18568:18;;;18561:45;18623:19;;9054:74:0::1;18237:411:1::0;9054:74:0::1;9159:6;::::0;9139:34:::1;::::0;-1:-1:-1;;;;;9159:6:0::1;;9139:19;:34::i;:::-;9203:6;::::0;;-1:-1:-1;;;;;;9220:19:0;::::1;::::0;;;9255:42:::1;::::0;-1:-1:-1;;;;;9203:6:0;;::::1;::::0;9184:16:::1;::::0;9203:6;;9255:42:::1;::::0;9184:16;;9255:42:::1;9043:262;8995:310::o:0;14680:182::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;14833:14:::1;:21:::0;;-1:-1:-1;;14833:21:0::1;14850:4;14833:21;::::0;;14680:182::o;17295:242::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;17369:16:::1;::::0;::::1;::::0;::::1;;;:25;17361:55;;;::::0;-1:-1:-1;;;17361:55:0;;14257:2:1;17361:55:0::1;::::0;::::1;14239:21:1::0;14296:2;14276:18;;;14269:30;-1:-1:-1;;;14315:18:1;;;14308:47;14372:18;;17361:55:0::1;14055:341:1::0;17361:55:0::1;17427:17;:25:::0;;-1:-1:-1;;17497:31:0;;;;;17295:242::o;12246:564::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;12328:7:::1;12323:480;;-1:-1:-1::0;;;;;12352:13:0;;::::1;12368:5;12352:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;12352:21:0::1;::::0;;12388:11:::1;::::0;:34;;-1:-1:-1;;;12388:34:0;;::::1;::::0;::::1;18821:74:1::0;;;;18911:18;;;18904:50;;;;12388:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;18794:18:1;;12388:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;12323:480;12459:17;::::0;:22;12455:135:::1;;12548:6;12528:17;;12510:15;:35;;;;:::i;:::-;:44;12502:72;;;::::0;-1:-1:-1;;;12502:72:0;;19167:2:1;12502:72:0::1;::::0;::::1;19149:21:1::0;19206:2;19186:18;;;19179:30;19245:17;19225:18;;;19218:45;19280:18;;12502:72:0::1;18965:339:1::0;12502:72:0::1;-1:-1:-1::0;;;;;12613:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;::::1;;12612:14;12604:54;;;::::0;-1:-1:-1;;;12604:54:0;;19511:2:1;12604:54:0::1;::::0;::::1;19493:21:1::0;19550:2;19530:18;;;19523:30;19589:29;19569:18;;;19562:57;19636:18;;12604:54:0::1;19309:351:1::0;12604:54:0::1;-1:-1:-1::0;;;;;12673:13:0;;::::1;;::::0;;;12689:4:::1;12673:13;::::0;;;;;;;;:20;;-1:-1:-1;;12673:20:0::1;::::0;::::1;::::0;;12728:15:::1;12708:17;:35:::0;12758:11:::1;::::0;:33;;-1:-1:-1;;;12758:33:0;;::::1;::::0;::::1;18821:74:1::0;;;;18911:18;;;18904:50;12758:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;18794:18:1;;12758:33:0::1;18653:307:1::0;11061:175:0;8187:6;;11127:4;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;11176:9:::1;::::0;11144:62:::1;::::0;11161:4:::1;::::0;11176:9:::1;::::0;::::1;-1:-1:-1::0;;;;;11176:9:0::1;-1:-1:-1::0;;11144:8:0::1;:62::i;:::-;-1:-1:-1::0;11224:4:0::1;11061:175:::0;:::o;25608:737::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;25670:14:::1;::::0;::::1;;25669:15;25661:52;;;::::0;-1:-1:-1;;;25661:52:0;;19867:2:1;25661:52:0::1;::::0;::::1;19849:21:1::0;19906:2;19886:18;;;19879:30;19945:26;19925:18;;;19918:54;19989:18;;25661:52:0::1;19665:348:1::0;25661:52:0::1;25732:16;::::0;::::1;::::0;::::1;;;25724:53;;;::::0;-1:-1:-1;;;25724:53:0;;20220:2:1;25724:53:0::1;::::0;::::1;20202:21:1::0;20259:2;20239:18;;;20232:30;20298:26;20278:18;;;20271:54;20342:18;;25724:53:0::1;20018:348:1::0;25724:53:0::1;25800:11;::::0;;;::::1;-1:-1:-1::0;;;;;25800:11:0::1;25788:106;;25842:11;:40:::0;;-1:-1:-1;;;;;;25842:40:0::1;25876:4;25842:40:::0;::::1;;::::0;;25788:106:::1;25908:11;::::0;25930:6:::1;::::0;25908:87:::1;::::0;-1:-1:-1;;;25908:87:0;;-1:-1:-1;;;;;25930:6:0;;::::1;25908:87;::::0;::::1;20594:74:1::0;20716:10;25945:12:0::1;20704:23:1::0;20684:18;;;20677:51;20776:18;25967:15:0::1;20764:31:1::0;20744:18;;;20737:59;5093:2:0::1;20812:18:1::0;;;20805:45;25908:11:0;;;::::1;;::::0;:21:::1;::::0;20566:19:1;;25908:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;26021:11:0::1;::::0;26052:6:::1;::::0;-1:-1:-1;;;;;26052:6:0;;::::1;10342:7:::0;10369:16;;;;;;;;;;;;;26021:39;;-1:-1:-1;;;26021:39:0;;::::1;::::0;::::1;391:25:1::0;;;;26021:11:0;;;::::1;;::::0;:20:::1;::::0;364:18:1;;26021:39:0::1;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;26021:39:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;26021:39:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;26017:207:::0;::::1;;26132:13;:29:::0;;;;26176:10:::1;:27:::0;26017:207:::1;26234:14;:21:::0;;-1:-1:-1;;26234:21:0;;::::1;26251:4;26234:21;::::0;;;26266:23:::1;:31:::0;;;;::::1;::::0;;26322:15:::1;26308:11;:29:::0;25608:737::o;18171:522::-;-1:-1:-1;;;;;18341:16:0;;18237:32;18341:16;;;:7;:16;;;;;:27;;;;18406:34;;;;18502:17;;18473:26;;18406:34;;18341:27;;18473:46;;:26;;:46;:::i;:::-;18455:15;:64;18451:235;;;-1:-1:-1;18555:1:0;18451:235;;;18638:17;;-1:-1:-1;;;;;18609:16:0;;;;;;:7;:16;;;;;:26;18659:15;;18609:46;;:26;;:46;:::i;:::-;18608:66;;;;:::i;:::-;18589:85;;18451:235;18171:522;;;;;:::o;10401:165::-;10479:4;10496:40;10506:10;10518:9;10529:6;10496:9;:40::i;:::-;-1:-1:-1;10554:4:0;;10401:165;-1:-1:-1;;;10401:165:0:o;26543:296::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;26621:16:::1;::::0;::::1;::::0;::::1;;;26617:111;;;26679:4;-1:-1:-1::0;;;;;26662:22:0;::::1;::::0;26654:62:::1;;;::::0;-1:-1:-1;;;26654:62:0;;21313:2:1;26654:62:0::1;::::0;::::1;21295:21:1::0;21352:2;21332:18;;;21325:30;21391:29;21371:18;;;21364:57;21438:18;;26654:62:0::1;21111:351:1::0;26654:62:0::1;26792:6;::::0;26800:30:::1;::::0;-1:-1:-1;;;26800:30:0;;26824:4:::1;26800:30;::::0;::::1;160:74:1::0;26760:5:0;;-1:-1:-1;;;;;26777:14:0;;::::1;::::0;::::1;::::0;26792:6;;;::::1;::::0;26777:14;;26800:15:::1;::::0;133:18:1;;26800:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26777:54;::::0;-1:-1:-1;;;;;;26777:54:0::1;::::0;;;;;;-1:-1:-1;;;;;21848:55:1;;;26777:54:0::1;::::0;::::1;21830:74:1::0;21920:18;;;21913:34;21803:18;;26777:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15331:349::-:0;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;15412:7:::1;:29:::0;;-1:-1:-1;;15452:20:0;15412:29:::1;::::0;;::::1;15452:20:::0;;;;;;::::1;::::0;::::1;::::0;;;::::1;-1:-1:-1::0;;15483:29:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;15558:9:::1;:17:::0;-1:-1:-1;;15539:36:0::1;::::0;15558:17;::::1;::::0;::::1;::::0;15539:16:::1;:36;:::i;:::-;15594:7;:17:::0;15523:52:::1;::::0;;::::1;::::0;-1:-1:-1;15523:52:0;;15594:25:::1;::::0;15614:5;;15594:17;;;::::1;;:25;:::i;:::-;:34;;;;15586:86;;;::::0;-1:-1:-1;;;15586:86:0;;22583:2:1;15586:86:0::1;::::0;::::1;22565:21:1::0;22622:2;22602:18;;;22595:30;22661:34;22641:18;;;22634:62;-1:-1:-1;;;22712:18:1;;;22705:37;22759:19;;15586:86:0::1;22381:403:1::0;19633:263:0;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;19742:19:::1;:33:::0;;-1:-1:-1;;;;19742:33:0::1;-1:-1:-1::0;;;19742:33:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;19786:22:::1;:47:::0;;-1:-1:-1;;19786:47:0::1;::::0;::::1;;;::::0;;19849:39:::1;::::0;2242:41:1;;;19849:39:0::1;::::0;2230:2:1;2215:18;19849:39:0::1;;;;;;;;19633:263:::0;;:::o;16879:224::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;16974:16:::1;::::0;::::1;::::0;::::1;;;:25;16966:84;;;::::0;-1:-1:-1;;;16966:84:0;;22991:2:1;16966:84:0::1;::::0;::::1;22973:21:1::0;23030:2;23010:18;;;23003:30;23069:34;23049:18;;;23042:62;23140:16;23120:18;;;23113:44;23174:19;;16966:84:0::1;22789:410:1::0;16966:84:0::1;17061:24;:34:::0;;-1:-1:-1;;17061:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16879:224::o;11558:680::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;11638:16:::1;::::0;::::1;::::0;::::1;;;11637:17;11629:60;;;::::0;-1:-1:-1;;;11629:60:0;;23406:2:1;11629:60:0::1;::::0;::::1;23388:21:1::0;23445:2;23425:18;;;23418:30;23484:32;23464:18;;;23457:60;23534:18;;11629:60:0::1;23204:354:1::0;11629:60:0::1;11700:20;11733:9;11700:43;;11754:16;11784:10;-1:-1:-1::0;;;;;11784:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11773:40:0::1;;11822:4;11829:10;-1:-1:-1::0;;;;;11829:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11773:74;::::0;-1:-1:-1;;;;;;11773:74:0::1;::::0;;;;;;-1:-1:-1;;;;;24072:15:1;;;11773:74:0::1;::::0;::::1;24054:34:1::0;24124:15;;24104:18;;;24097:43;23966:18;;11773:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11866:6;::::0;-1:-1:-1;;;;;11866:6:0;;::::1;11876:5;11858:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;11858:23:0::1;::::0;;11754:93;;-1:-1:-1;11896:22:0;::::1;11892:200;;11955:10;-1:-1:-1::0;;;;;11955:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11944:43:0::1;;11996:4;12003:10;-1:-1:-1::0;;;;;12003:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11944:77;::::0;-1:-1:-1;;;;;;11944:77:0::1;::::0;;;;;;-1:-1:-1;;;;;24072:15:1;;;11944:77:0::1;::::0;::::1;24054:34:1::0;24124:15;;24104:18;;;24097:43;23966:18;;11944:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11935:6;:86:::0;;-1:-1:-1;;;;;;11935:86:0::1;-1:-1:-1::0;;;;;11935:86:0;;;::::1;::::0;;;::::1;::::0;;11892:200:::1;;;12063:6;:17:::0;;-1:-1:-1;;;;;;12063:17:0::1;-1:-1:-1::0;;;;;12063:17:0;::::1;;::::0;;11892:200:::1;12102:9;:22:::0;;-1:-1:-1;;12102:22:0::1;;-1:-1:-1::0;;;;;12102:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;12143:6:::1;::::0;;::::1;-1:-1:-1::0;12135:15:0;;;-1:-1:-1;12135:15:0::1;::::0;;;;;;;:22;;-1:-1:-1;;12135:22:0::1;::::0;;::::1;::::0;;12200:9;;12168:62:::1;::::0;12185:4:::1;::::0;12200:9;::::1;;-1:-1:-1::0;;12168:8:0::1;:62::i;15688:195::-:0;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;-1:-1:-1;;;;;15773:23:0;::::1;15765:59;;;::::0;-1:-1:-1;;;15765:59:0;;24353:2:1;15765:59:0::1;::::0;::::1;24335:21:1::0;24392:2;24372:18;;;24365:30;24431:25;24411:18;;;24404:53;24474:18;;15765:59:0::1;24151:347:1::0;15765:59:0::1;15835:19;:40:::0;;-1:-1:-1;;;;;;15835:40:0::1;-1:-1:-1::0;;;;;15835:40:0;;;::::1;::::0;;;::::1;::::0;;15688:195::o;26353:182::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;26420:16:::1;::::0;::::1;::::0;::::1;;;26419:17;26411:58;;;::::0;-1:-1:-1;;;26411:58:0;;24705:2:1;26411:58:0::1;::::0;::::1;24687:21:1::0;24744:2;24724:18;;;24717:30;24783;24763:18;;;24756:58;24831:18;;26411:58:0::1;24503:352:1::0;26411:58:0::1;26488:6;::::0;26480:47:::1;::::0;-1:-1:-1;;;;;26488:6:0;;::::1;::::0;26505:21:::1;26480:47:::0;::::1;;;::::0;26488:6:::1;26480:47:::0;26488:6;26480:47;26505:21;26488:6;26480:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;18701:699:::0;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;18901:16:::1;18881;18871:7;;:26;;;;:::i;:::-;18870:47;;;;:::i;:::-;18854:13;:63:::0;18942:7:::1;::::0;18969:13;;18942:23:::1;::::0;18952:13;;18942:23:::1;:::i;:::-;18941:41;;;;:::i;:::-;18928:10;:54:::0;;;19001:13:::1;::::0;:27:::1;;18993:73;;;::::0;-1:-1:-1;;;18993:73:0;;25062:2:1;18993:73:0::1;::::0;::::1;25044:21:1::0;25101:2;25081:18;;;25074:30;25140:34;25120:18;;;25113:62;-1:-1:-1;;;25191:18:1;;;25184:31;25232:19;;18993:73:0::1;24860:397:1::0;18993:73:0::1;19110:6;::::0;-1:-1:-1;;;;;19110:6:0::1;10342:7:::0;10369:16;;;;;;;;;;;5799:5:::1;::::0;19100:23:::1;::::0;19120:3:::1;19100:23;:::i;:::-;19099:44;;;;:::i;:::-;19085:10;;:58;;19077:106;;;::::0;-1:-1:-1;;;19077:106:0;;25464:2:1;19077:106:0::1;::::0;::::1;25446:21:1::0;25503:2;25483:18;;;25476:30;25542:34;25522:18;;;25515:62;-1:-1:-1;;;25593:18:1;;;25586:33;25636:19;;19077:106:0::1;25262:399:1::0;19077:106:0::1;19226:9;19216:7;;:19;;;;:::i;:::-;19202:10;;:33;;19194:92;;;::::0;-1:-1:-1;;;19194:92:0;;25868:2:1;19194:92:0::1;::::0;::::1;25850:21:1::0;25907:2;25887:18;;;25880:30;25946:34;25926:18;;;25919:62;-1:-1:-1;;;25997:18:1;;;25990:44;26051:19;;19194:92:0::1;25666:410:1::0;19194:92:0::1;19332:9;19322:7;;:19;;;;:::i;:::-;19305:13;;:36;;19297:95;;;::::0;-1:-1:-1;;;19297:95:0;;25868:2:1;19297:95:0::1;::::0;::::1;25850:21:1::0;25907:2;25887:18;;;25880:30;25946:34;25926:18;;;25919:62;-1:-1:-1;;;25997:18:1;;;25990:44;26051:19;;19297:95:0::1;25666:410:1::0;19297:95:0::1;18701:699:::0;;;;:::o;14096:148::-;8187:6;;-1:-1:-1;;;;;8187:6:0;8197:10;8187:20;8179:50;;;;-1:-1:-1;;;8179:50:0;;9807:2:1;8179:50:0;;;9789:21:1;9846:2;9826:18;;;9819:30;-1:-1:-1;;;;;;;;;;;9865:18:1;;;9858:47;9922:18;;8179:50:0;9605:341:1;8179:50:0;-1:-1:-1;;;;;14192:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;14192:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14096:148::o;10743:310::-;-1:-1:-1;;;;;10838:20:0;;10830:52;;;;-1:-1:-1;;;10830:52:0;;26283:2:1;10830:52:0;;;26265:21:1;26322:2;26302:18;;;26295:30;-1:-1:-1;;;26341:18:1;;;26334:49;26400:18;;10830:52:0;26081:343:1;10830:52:0;-1:-1:-1;;;;;10901:21:0;;10893:53;;;;-1:-1:-1;;;10893:53:0;;26283:2:1;10893:53:0;;;26265:21:1;26322:2;26302:18;;;26295:30;-1:-1:-1;;;26341:18:1;;;26334:49;26400:18;;10893:53:0;26081:343:1;10893:53:0;-1:-1:-1;;;;;10959:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;11012:33;;391:25:1;;;11012:33:0;;364:18:1;11012:33:0;;;;;;;10743:310;;;:::o;21175:3081::-;21254:4;-1:-1:-1;;;;;21279:18:0;;21271:68;;;;-1:-1:-1;;;21271:68:0;;26631:2:1;21271:68:0;;;26613:21:1;26670:2;26650:18;;;26643:30;26709:34;26689:18;;;26682:62;-1:-1:-1;;;26760:18:1;;;26753:35;26805:19;;21271:68:0;26429:401:1;21271:68:0;-1:-1:-1;;;;;21358:16:0;;21350:64;;;;-1:-1:-1;;;21350:64:0;;27037:2:1;21350:64:0;;;27019:21:1;27076:2;27056:18;;;27049:30;27115:34;27095:18;;;27088:62;-1:-1:-1;;;27166:18:1;;;27159:33;27209:19;;21350:64:0;26835:399:1;21350:64:0;21442:1;21433:6;:10;21425:64;;;;-1:-1:-1;;;21425:64:0;;27441:2:1;21425:64:0;;;27423:21:1;27480:2;27460:18;;;27453:30;27519:34;27499:18;;;27492:62;-1:-1:-1;;;27570:18:1;;;27563:39;27619:19;;21425:64:0;27239:405:1;21425:64:0;-1:-1:-1;;;;;21588:13:0;;21500:8;21588:13;;;:7;:13;;;;;;21500:8;;;;21588:13;;21584:162;;;21624:4;21618:10;;21584:162;;;-1:-1:-1;;;;;21650:11:0;;;;;;:7;:11;;;;;;;;21646:100;;;21685:4;21678:11;;21646:100;;;-1:-1:-1;21730:4:0;21646:100;21760:20;21771:4;21777:2;21760:10;:20::i;:::-;21756:1669;;;21801:14;;;;21797:319;;21841:5;21836:265;;21871:34;;-1:-1:-1;;;21871:34:0;;27851:2:1;21871:34:0;;;27833:21:1;27890:2;27870:18;;;27863:30;27929:26;27909:18;;;27902:54;27973:18;;21871:34:0;27649:348:1;21836:265:0;-1:-1:-1;;;;;21936:31:0;;;;;;:25;:31;;;;;;;;21935:32;:66;;;;-1:-1:-1;;;;;;21972:29:0;;;;;;:25;:29;;;;;;;;21971:30;21935:66;21931:170;;;22026:55;;-1:-1:-1;;;22026:55:0;;28204:2:1;22026:55:0;;;28186:21:1;28243:2;28223:18;;;28216:30;28282:34;28262:18;;;28255:62;-1:-1:-1;;;28333:18:1;;;28326:43;28386:19;;22026:55:0;28002:409:1;21931:170:0;22134:3;:11;;;;22141:4;22134:11;22130:232;;;-1:-1:-1;;;;;22170:27:0;;;;;;:21;:27;;;;;;;;22169:28;:58;;;;-1:-1:-1;;;;;;22202:25:0;;;;;;:21;:25;;;;;;;;22201:26;22169:58;22165:182;;;22270:12;;22260:6;:22;;22252:75;;;;-1:-1:-1;;;22252:75:0;;28618:2:1;22252:75:0;;;28600:21:1;28657:2;28637:18;;;28630:30;28696:34;28676:18;;;28669:62;-1:-1:-1;;;28747:18:1;;;28740:38;28795:19;;22252:75:0;28416:404:1;22252:75:0;22394:9;;-1:-1:-1;;;;;22380:24:0;;;22394:9;;;;;22380:24;;;;:33;;;22409:4;22408:5;22380:33;22376:243;;;-1:-1:-1;;;;;22439:25:0;;;;;;:21;:25;;;;;;;;22434:170;;22523:14;;22513:6;22497:13;22507:2;-1:-1:-1;;;;;10369:16:0;10342:7;10369:16;;;;;;;;;;;;10276:117;22497:13;:22;;;;:::i;:::-;:40;;22489:95;;;;-1:-1:-1;;;22489:95:0;;29027:2:1;22489:95:0;;;29009:21:1;29066:2;29046:18;;;29039:30;29105:34;29085:18;;;29078:62;-1:-1:-1;;;29156:18:1;;;29149:40;29206:19;;22489:95:0;28825:406:1;22489:95:0;22637:5;:23;;;;-1:-1:-1;22646:14:0;;;;22637:23;22633:129;;;22689:24;;;;22681:65;;;;-1:-1:-1;;;22681:65:0;;29438:2:1;22681:65:0;;;29420:21:1;29477:2;29457:18;;;29450:30;29516;29496:18;;;29489:58;29564:18;;22681:65:0;29236:352:1;22681:65:0;22782:4;22778:636;;;22811:17;;;;;;;22807:592;;;22901:17;;-1:-1:-1;;;;;22875:13:0;;;;;;:7;:13;;;;;:23;:43;;22901:17;22875:23;;:43;:::i;:::-;22857:15;:61;22853:298;;;-1:-1:-1;;;;;22947:13:0;;;;;;:7;:13;;;;;;;;:49;;-1:-1:-1;;22947:49:0;22980:15;22947:49;;;;;-1:-1:-1;23023:24:0;;:28;;;10369:16;;;;;;23078:13;;;:31;;;;:49;22853:298;23253:16;;-1:-1:-1;;;;;23219:13:0;;;;;;:7;:13;;;;;:31;;;23273:3;;23219:50;;;:::i;:::-;23218:58;;;;:::i;:::-;-1:-1:-1;;;;;23190:13:0;;;;;;:7;:13;;;;;:24;;;23181:33;;:6;:33;:::i;:::-;:95;;23173:149;;;;-1:-1:-1;;;23173:149:0;;29795:2:1;23173:149:0;;;29777:21:1;29834:2;29814:18;;;29807:30;29873:34;29853:18;;;29846:62;-1:-1:-1;;;29924:18:1;;;29917:39;29973:19;;23173:149:0;29593:405:1;23173:149:0;-1:-1:-1;;;;;23345:13:0;;;;;;:7;:13;;;;;:24;;:34;;23373:6;;23345:13;:34;;23373:6;;23345:34;:::i;:::-;;;;-1:-1:-1;;22807:592:0;23441:4;23437:742;;;23467:6;;-1:-1:-1;;;23467:6:0;;;;23462:706;;23498:19;;-1:-1:-1;;;23498:19:0;;;;:64;;;;-1:-1:-1;;;;;;23542:20:0;;;;;;:16;:20;;;;;;;;23541:21;23498:64;:111;;;;-1:-1:-1;;;;;;23587:22:0;;;;;;:16;:22;;;;;;;;23586:23;23498:111;23494:659;;;23701:4;23652:28;10369:16;;;;;;;;;;;23758:13;;23734:37;;23730:404;;23818:10;;23859:22;;;;23855:97;;;23916:13;;23906:6;;-1:-1:-1;;;;;23906:6:0;10342:7;10369:16;;;;;;;;;;;5799:5;;23896:33;;;:::i;:::-;23895:54;;;;:::i;:::-;23885:64;;23855:97;24006:7;23982:20;:31;23978:72;;24040:7;24017:30;;23978:72;24076:34;24089:20;24076:12;:34::i;:::-;23773:361;23730:404;23629:524;23494:659;24196:52;24213:4;24219:2;24223:6;24231:3;24236:4;24242:5;24196:16;:52::i;:::-;24189:59;21175:3081;-1:-1:-1;;;;;;;21175:3081:0:o;27274:1055::-;27393:4;27414:20;27425:4;27431:2;27414:10;:20::i;:::-;27410:228;;;27469:11;;:39;;-1:-1:-1;;;27469:39:0;;-1:-1:-1;;;;;30284:15:1;;;27469:39:0;;;30266:34:1;30336:15;;;30316:18;;;30309:43;30368:18;;;30361:34;;;27438:12:0;;27469:11;;;;;:21;;30178:18:1;;27469:39:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;27469:39:0;;;;;;;;-1:-1:-1;;27469:39:0;;;;;;;;;;;;:::i;:::-;;;27465:122;;27576:8;;;27465:122;27559:5;-1:-1:-1;27605:7:0;27601:26;;27616:8;;;27601:26;27436:202;27410:228;-1:-1:-1;;;;;27682:25:0;;27648:12;27682:25;;;:19;:25;;;;;;27663:4;;27682:25;;;:52;;-1:-1:-1;;;;;;27711:23:0;;;;;;:19;:23;;;;;;;;27682:52;27678:99;;;-1:-1:-1;27760:5:0;27678:99;-1:-1:-1;;;;;27787:13:0;;:7;:13;;;;;;;;;;:23;;27804:6;;27787:7;:23;;27804:6;;27787:23;:::i;:::-;;;;-1:-1:-1;27821:22:0;;-1:-1:-1;27847:7:0;27846:55;;27895:6;27846:55;;;27858:34;27868:4;27874:6;27882:3;27887:4;27858:9;:34::i;:::-;27821:80;;27927:14;27912:7;:11;27920:2;-1:-1:-1;;;;;27912:11:0;-1:-1:-1;;;;;27912:11:0;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;27972:2;-1:-1:-1;;;;;27957:34:0;27966:4;-1:-1:-1;;;;;27957:34:0;;27976:14;27957:34;;;;391:25:1;;379:2;364:18;;245:177;27957:34:0;;;;;;;;28007:16;;;;;;;28002:298;;28040:28;28059:4;28065:2;28040:18;:28::i;:::-;28088:16;;;;;;;28087:17;:41;;;;;28108:20;28119:4;28125:2;28108:10;:20::i;:::-;28087:77;;;;-1:-1:-1;;;;;;28133:31:0;;;;;;:25;:31;;;;;;;;28132:32;28087:77;:111;;;;-1:-1:-1;;;;;;28169:29:0;;;;;;:25;:29;;;;;;;;28168:30;28087:111;:121;;;;;28203:5;28202:6;28087:121;28083:206;;;28229:44;;-1:-1:-1;;;28229:44:0;;30608:2:1;28229:44:0;;;30590:21:1;30647:2;30627:18;;;30620:30;30686:34;30666:18;;;30659:62;-1:-1:-1;;;30737:18:1;;;30730:32;30779:19;;28229:44:0;30406:398:1;28083:206:0;-1:-1:-1;28317:4:0;;27274:1055;-1:-1:-1;;;;;;;;27274:1055:0:o;20721:446::-;20822:6;;20790:4;;-1:-1:-1;;;;;20814:14:0;;;20822:6;;20814:14;;;;:43;;-1:-1:-1;20851:6:0;;-1:-1:-1;;;;;20845:12:0;;;20851:6;;20845:12;;20814:43;:79;;;;-1:-1:-1;20887:6:0;;-1:-1:-1;;;;;20887:6:0;20874:9;:19;;20814:79;:118;;;;-1:-1:-1;;;;;;20911:21:0;;;;;;:17;:21;;;;;;;;20910:22;20814:118;:159;;;;-1:-1:-1;;;;;;20950:23:0;;;;;;:17;:23;;;;;;;;20949:24;20814:159;:186;;;;-1:-1:-1;;;;;;20990:10:0;;5938:42;20990:10;;20814:186;:219;;;;-1:-1:-1;;;;;;21017:16:0;;;;20814:219;:257;;;;-1:-1:-1;;;;;;21050:21:0;;21066:4;21050:21;;20814:257;:302;;;;-1:-1:-1;21104:11:0;;-1:-1:-1;;;;;21088:28:0;;;21104:11;;;;;21088:28;;20814:302;:345;;;;-1:-1:-1;21147:11:0;;-1:-1:-1;;;;;21133:26:0;;;21147:11;;;;;21133:26;;20814:345;20807:352;20721:446;-1:-1:-1;;;20721:446:0:o;24264:765::-;7141:6;:13;;-1:-1:-1;;;;7141:13:0;-1:-1:-1;;;7141:13:0;;;24371:4:::1;7141:13:::0;24351:26;;;:11:::1;:26;::::0;;;;;;;24386:9:::1;::::0;7141:13;24386:9;::::1;-1:-1:-1::0;;;;;24386:9:0::1;24351:46:::0;;;;;;;;-1:-1:-1;;24351:67:0::1;24347:166;;24455:4;24435:26;::::0;;;:11:::1;:26;::::0;;;;;;;24470:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;24470:9:0::1;24435:46:::0;;;;;;;-1:-1:-1;;24435:66:0;;24347:166:::1;24557:16;::::0;;24571:1:::1;24557:16:::0;;;;;::::1;::::0;;24533:21:::1;::::0;24557:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24557:16:0::1;24533:40;;24602:4;24584;24589:1;24584:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;24584:23:0::1;;;-1:-1:-1::0;;;;;24584:23:0::1;;;::::0;::::1;24628:9;;;;;;;;;-1:-1:-1::0;;;;;24628:9:0::1;-1:-1:-1::0;;;;;24628:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24618:4;24623:1;24618:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24618:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;24661:9:::1;::::0;:199:::1;::::0;-1:-1:-1;;;24661:199:0;;:9:::1;::::0;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:199:::1;::::0;24736:20;;24771:1:::1;::::0;24787:4;;24814::::1;::::0;24834:15:::1;::::0;24661:199:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;24657:246;;24885:7;;;24657:246;24951:19;::::0;:70:::1;::::0;24915:12:::1;::::0;-1:-1:-1;;;;;24951:19:0::1;::::0;25011:5:::1;::::0;24983:21:::1;::::0;24915:12;24951:70;24915:12;24951:70;24983:21;24951:19;25011:5;24951:70:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;7165:1:0::1;-1:-1:-1::0;7177:6:0;:14;;-1:-1:-1;;;;7177:14:0;;;24264:765::o;28337:1129::-;28445:30;;;;;;;;28468:7;28445:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28425:7;;;;28502:30;;28445;28502;:::i;:::-;28486:46;;;;28543:18;28576:3;28572:205;;;-1:-1:-1;28609:9:0;:16;;;28572:205;;;28647:4;28643:134;;;-1:-1:-1;28681:9:0;:17;;;;;;28643:134;;;-1:-1:-1;28744:9:0;:21;;;;;;28643:134;28791:10;28805:1;28791:15;28787:39;;28817:6;28810:13;;;;;;;28787:39;28848:11;;;;;-1:-1:-1;;;;;28848:11:0;28872:4;28840:37;:110;;;;;28895:13;28912:1;28895:18;:54;;;;28930:13;28947:2;28930:19;28895:54;28836:138;;;-1:-1:-1;28967:4:0;28836:138;28984:17;5799:5;29004:19;29013:10;29004:6;:19;:::i;:::-;:38;;;;:::i;:::-;28984:58;;29053:15;29099:5;29084:6;:11;;;29072:23;;:9;:23;;;;:::i;:::-;29071:33;;;;:::i;:::-;29053:51;-1:-1:-1;29115:14:0;29132:19;29053:51;29132:9;:19;:::i;:::-;29115:36;-1:-1:-1;29166:10:0;;29162:132;;29209:4;29193:7;:22;;;;;;;;;;:32;;29219:6;;29193:7;:32;;29219:6;;29193:32;:::i;:::-;;;;-1:-1:-1;;29245:37:0;;391:25:1;;;29268:4:0;;-1:-1:-1;;;;;29245:37:0;;;;;379:2:1;364:18;29245:37:0;;;;;;;29162:132;29308:11;;29304:117;;29347:7;29336;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;29374:35:0;;391:25:1;;;29397:1:0;;-1:-1:-1;;;;;29374:35:0;;;;;379:2:1;364:18;29374:35:0;;;;;;;29304:117;29440:18;29449:9;29440:6;:18;:::i;:::-;29433:25;28337:1129;-1:-1:-1;;;;;;;;;;;28337:1129:0:o;25037:563::-;25120:16;;;;;;;25119:17;25111:65;;;;-1:-1:-1;;;25111:65:0;;32252:2:1;25111:65:0;;;32234:21:1;32291:2;32271:18;;;32264:30;32330:34;32310:18;;;32303:62;-1:-1:-1;;;32381:18:1;;;32374:33;32424:19;;25111:65:0;32050:399:1;25111:65:0;25192:20;25203:4;25209:2;25192:10;:20::i;:::-;25191:21;:37;;;;-1:-1:-1;25222:6:0;;-1:-1:-1;;;;;25216:12:0;;;25222:6;;25216:12;25191:37;25187:406;;;-1:-1:-1;;;;;25245:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;25245:30:0;;;25271:4;25245:30;;;;;;25290:19;:25;;;;;:32;;;;;;;;;;25337:16;:23;;-1:-1:-1;;25337:23:0;25245:30;25337:23;;;;;25387:11;;;;25375:114;;25433:11;:40;;-1:-1:-1;;;;;;25433:40:0;25467:4;25433:40;;;;;25375:114;25503:19;:26;;-1:-1:-1;;;;25503:26:0;-1:-1:-1;;;25503:26:0;;;25549:32;;-1:-1:-1;2242:41:1;;25549:32:0;;2230:2:1;2215:18;25549:32:0;2102:187:1;427:118;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:548::-;1413:4;1442:2;1471;1460:9;1453:21;1503:6;1497:13;1546:6;1541:2;1530:9;1526:18;1519:34;1571:1;1581:140;1595:6;1592:1;1589:13;1581:140;;;1690:14;;;1686:23;;1680:30;1656:17;;;1675:2;1652:26;1645:66;1610:10;;1581:140;;;1585:3;1770:1;1765:2;1756:6;1745:9;1741:22;1737:31;1730:42;1840:2;1833;1829:7;1824:2;1816:6;1812:15;1808:29;1797:9;1793:45;1789:54;1781:62;;;;1301:548;;;;:::o;2294:154::-;-1:-1:-1;;;;;2373:5:1;2369:54;2362:5;2359:65;2349:93;;2438:1;2435;2428:12;2453:315;2521:6;2529;2582:2;2570:9;2561:7;2557:23;2553:32;2550:52;;;2598:1;2595;2588:12;2550:52;2637:9;2624:23;2656:31;2681:5;2656:31;:::i;:::-;2706:5;2758:2;2743:18;;;;2730:32;;-1:-1:-1;;;2453:315:1:o;2773:247::-;2832:6;2885:2;2873:9;2864:7;2860:23;2856:32;2853:52;;;2901:1;2898;2891:12;2853:52;2940:9;2927:23;2959:31;2984:5;2959:31;:::i;3025:388::-;3093:6;3101;3154:2;3142:9;3133:7;3129:23;3125:32;3122:52;;;3170:1;3167;3160:12;3122:52;3209:9;3196:23;3228:31;3253:5;3228:31;:::i;:::-;3278:5;-1:-1:-1;3335:2:1;3320:18;;3307:32;3348:33;3307:32;3348:33;:::i;3418:456::-;3495:6;3503;3511;3564:2;3552:9;3543:7;3539:23;3535:32;3532:52;;;3580:1;3577;3570:12;3532:52;3619:9;3606:23;3638:31;3663:5;3638:31;:::i;:::-;3688:5;-1:-1:-1;3745:2:1;3730:18;;3717:32;3758:33;3717:32;3758:33;:::i;:::-;3418:456;;3810:7;;-1:-1:-1;;;3864:2:1;3849:18;;;;3836:32;;3418:456::o;3879:248::-;3947:6;3955;4008:2;3996:9;3987:7;3983:23;3979:32;3976:52;;;4024:1;4021;4014:12;3976:52;-1:-1:-1;;4047:23:1;;;4117:2;4102:18;;;4089:32;;-1:-1:-1;3879:248:1:o;4132:127::-;4193:10;4188:3;4184:20;4181:1;4174:31;4224:4;4221:1;4214:15;4248:4;4245:1;4238:15;4264:275;4335:2;4329:9;4400:2;4381:13;;-1:-1:-1;;4377:27:1;4365:40;;4435:18;4420:34;;4456:22;;;4417:62;4414:88;;;4482:18;;:::i;:::-;4518:2;4511:22;4264:275;;-1:-1:-1;4264:275:1:o;4544:183::-;4604:4;4637:18;4629:6;4626:30;4623:56;;;4659:18;;:::i;:::-;-1:-1:-1;4704:1:1;4700:14;4716:4;4696:25;;4544:183::o;4732:662::-;4786:5;4839:3;4832:4;4824:6;4820:17;4816:27;4806:55;;4857:1;4854;4847:12;4806:55;4893:6;4880:20;4919:4;4943:60;4959:43;4999:2;4959:43;:::i;:::-;4943:60;:::i;:::-;5037:15;;;5123:1;5119:10;;;;5107:23;;5103:32;;;5068:12;;;;5147:15;;;5144:35;;;5175:1;5172;5165:12;5144:35;5211:2;5203:6;5199:15;5223:142;5239:6;5234:3;5231:15;5223:142;;;5305:17;;5293:30;;5343:12;;;;5256;;5223:142;;;-1:-1:-1;5383:5:1;4732:662;-1:-1:-1;;;;;;4732:662:1:o;5399:1215::-;5517:6;5525;5578:2;5566:9;5557:7;5553:23;5549:32;5546:52;;;5594:1;5591;5584:12;5546:52;5634:9;5621:23;5663:18;5704:2;5696:6;5693:14;5690:34;;;5720:1;5717;5710:12;5690:34;5758:6;5747:9;5743:22;5733:32;;5803:7;5796:4;5792:2;5788:13;5784:27;5774:55;;5825:1;5822;5815:12;5774:55;5861:2;5848:16;5883:4;5907:60;5923:43;5963:2;5923:43;:::i;5907:60::-;6001:15;;;6083:1;6079:10;;;;6071:19;;6067:28;;;6032:12;;;;6107:19;;;6104:39;;;6139:1;6136;6129:12;6104:39;6163:11;;;;6183:217;6199:6;6194:3;6191:15;6183:217;;;6279:3;6266:17;6296:31;6321:5;6296:31;:::i;:::-;6340:18;;6216:12;;;;6378;;;;6183:217;;;6419:5;-1:-1:-1;;6462:18:1;;6449:32;;-1:-1:-1;;6493:16:1;;;6490:36;;;6522:1;6519;6512:12;6490:36;;6545:63;6600:7;6589:8;6578:9;6574:24;6545:63;:::i;:::-;6535:73;;;5399:1215;;;;;:::o;6619:180::-;6678:6;6731:2;6719:9;6710:7;6706:23;6702:32;6699:52;;;6747:1;6744;6737:12;6699:52;-1:-1:-1;6770:23:1;;6619:180;-1:-1:-1;6619:180:1:o;6993:159::-;7060:20;;7120:6;7109:18;;7099:29;;7089:57;;7142:1;7139;7132:12;7089:57;6993:159;;;:::o;7157:328::-;7231:6;7239;7247;7300:2;7288:9;7279:7;7275:23;7271:32;7268:52;;;7316:1;7313;7306:12;7268:52;7339:28;7357:9;7339:28;:::i;:::-;7329:38;;7386:37;7419:2;7408:9;7404:18;7386:37;:::i;:::-;7376:47;;7442:37;7475:2;7464:9;7460:18;7442:37;:::i;:::-;7432:47;;7157:328;;;;;:::o;7490:382::-;7555:6;7563;7616:2;7604:9;7595:7;7591:23;7587:32;7584:52;;;7632:1;7629;7622:12;7584:52;7671:9;7658:23;7690:31;7715:5;7690:31;:::i;7877:241::-;7933:6;7986:2;7974:9;7965:7;7961:23;7957:32;7954:52;;;8002:1;7999;7992:12;7954:52;8041:9;8028:23;8060:28;8082:5;8060:28;:::i;8694:256::-;8760:6;8768;8821:2;8809:9;8800:7;8796:23;8792:32;8789:52;;;8837:1;8834;8827:12;8789:52;8860:28;8878:9;8860:28;:::i;:::-;8850:38;;8907:37;8940:2;8929:9;8925:18;8907:37;:::i;:::-;8897:47;;8694:256;;;;;:::o;9215:385::-;9301:6;9309;9317;9325;9378:3;9366:9;9357:7;9353:23;9349:33;9346:53;;;9395:1;9392;9385:12;9346:53;-1:-1:-1;;9418:23:1;;;9488:2;9473:18;;9460:32;;-1:-1:-1;9539:2:1;9524:18;;9511:32;;9590:2;9575:18;9562:32;;-1:-1:-1;9215:385:1;-1:-1:-1;9215:385:1:o;10224:127::-;10285:10;10280:3;10276:20;10273:1;10266:31;10316:4;10313:1;10306:15;10340:4;10337:1;10330:15;10356:422;10445:1;10488:5;10445:1;10502:270;10523:7;10513:8;10510:21;10502:270;;;10582:4;10578:1;10574:6;10570:17;10564:4;10561:27;10558:53;;;10591:18;;:::i;:::-;10641:7;10631:8;10627:22;10624:55;;;10661:16;;;;10624:55;10740:22;;;;10700:15;;;;10502:270;;;10506:3;10356:422;;;;;:::o;10783:806::-;10832:5;10862:8;10852:80;;-1:-1:-1;10903:1:1;10917:5;;10852:80;10951:4;10941:76;;-1:-1:-1;10988:1:1;11002:5;;10941:76;11033:4;11051:1;11046:59;;;;11119:1;11114:130;;;;11026:218;;11046:59;11076:1;11067:10;;11090:5;;;11114:130;11151:3;11141:8;11138:17;11135:43;;;11158:18;;:::i;:::-;-1:-1:-1;;11214:1:1;11200:16;;11229:5;;11026:218;;11328:2;11318:8;11315:16;11309:3;11303:4;11300:13;11296:36;11290:2;11280:8;11277:16;11272:2;11266:4;11263:12;11259:35;11256:77;11253:159;;;-1:-1:-1;11365:19:1;;;11397:5;;11253:159;11444:34;11469:8;11463:4;11444:34;:::i;:::-;11514:6;11510:1;11506:6;11502:19;11493:7;11490:32;11487:58;;;11525:18;;:::i;:::-;11563:20;;10783:806;-1:-1:-1;;;10783:806:1:o;11594:140::-;11652:5;11681:47;11722:4;11712:8;11708:19;11702:4;11681:47;:::i;11739:217::-;11779:1;11805;11795:132;;11849:10;11844:3;11840:20;11837:1;11830:31;11884:4;11881:1;11874:15;11912:4;11909:1;11902:15;11795:132;-1:-1:-1;11941:9:1;;11739:217::o;12301:128::-;12368:9;;;12389:11;;;12386:37;;;12403:18;;:::i;12434:168::-;12507:9;;;12538;;12555:15;;;12549:22;;12535:37;12525:71;;12576:18;;:::i;13374:127::-;13435:10;13430:3;13426:20;13423:1;13416:31;13466:4;13463:1;13456:15;13490:4;13487:1;13480:15;13853:197;13891:3;13919:6;13960:2;13953:5;13949:14;13987:2;13978:7;13975:15;13972:41;;13993:18;;:::i;:::-;14042:1;14029:15;;13853:197;-1:-1:-1;;;13853:197:1:o;14751:125::-;14816:9;;;14837:10;;;14834:36;;;14850:18;;:::i;17847:385::-;17926:6;17934;17987:2;17975:9;17966:7;17962:23;17958:32;17955:52;;;18003:1;18000;17993:12;17955:52;18035:9;18029:16;18054:31;18079:5;18054:31;:::i;:::-;18154:2;18139:18;;18133:25;18104:5;;-1:-1:-1;18167:33:1;18133:25;18167:33;:::i;20861:245::-;20940:6;20948;21001:2;20989:9;20980:7;20976:23;20972:32;20969:52;;;21017:1;21014;21007:12;20969:52;-1:-1:-1;;21040:16:1;;21096:2;21081:18;;;21075:25;21040:16;;21075:25;;-1:-1:-1;20861:245:1:o;21467:184::-;21537:6;21590:2;21578:9;21569:7;21565:23;21561:32;21558:52;;;21606:1;21603;21596:12;21558:52;-1:-1:-1;21629:16:1;;21467:184;-1:-1:-1;21467:184:1:o;21958:245::-;22025:6;22078:2;22066:9;22057:7;22053:23;22049:32;22046:52;;;22094:1;22091;22084:12;22046:52;22126:9;22120:16;22145:28;22167:5;22145:28;:::i;22208:168::-;22275:6;22301:10;;;22313;;;22297:27;;22336:11;;;22333:37;;;22350:18;;:::i;:::-;22333:37;22208:168;;;;:::o;23563:251::-;23633:6;23686:2;23674:9;23665:7;23661:23;23657:32;23654:52;;;23702:1;23699;23692:12;23654:52;23734:9;23728:16;23753:31;23778:5;23753:31;:::i;30809:1026::-;31071:4;31119:3;31108:9;31104:19;31150:6;31139:9;31132:25;31176:2;31214:6;31209:2;31198:9;31194:18;31187:34;31257:3;31252:2;31241:9;31237:18;31230:31;31281:6;31316;31310:13;31347:6;31339;31332:22;31385:3;31374:9;31370:19;31363:26;;31424:2;31416:6;31412:15;31398:29;;31445:1;31455:218;31469:6;31466:1;31463:13;31455:218;;;31534:13;;-1:-1:-1;;;;;31530:62:1;31518:75;;31648:15;;;;31613:12;;;;31491:1;31484:9;31455:218;;;-1:-1:-1;;;;;;;31729:55:1;;;;31724:2;31709:18;;31702:83;-1:-1:-1;;;31816:3:1;31801:19;31794:35;31690:3;30809:1026;-1:-1:-1;;;30809:1026:1:o

Swarm Source

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