ETH Price: $3,390.24 (-2.61%)
Gas: 1 Gwei

Token

BuyBackBurn (BBB)
 

Overview

Max Total Supply

10,000 BBB

Holders

86

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.576764057907864292 BBB

Value
$0.00
0xcea1c8482094d49a4c6aef1f5b504b3ccfbfb2ac
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:
BuyBackBurn

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-05-27
*/

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

/*

🌐 Website: https://buybackburn.cloud/
🐦 Twitter: https://twitter.com/buybackburns
💫 TG: https://t.me/buybackburns
Buybackburn is an ERC20 token with an automatic buyback and burn mechanism designed to reward holders.

*/

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 BuyBackBurn is IERC20 {
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private presaleAddresses;
    bool private allowedPresaleExclusion = true;
   
    uint256 constant private startingSupply = 10_000;
    string constant private _name = "BuyBackBurn";
    string constant private _symbol = "BBB";
    uint8 constant private _decimals = 18;
    uint256 constant private _tTotal = startingSupply * 10**_decimals;

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

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 buyback;
        uint16 totalSwap;
    }

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

    Ratios public _ratios = Ratios({
        liquidity: 0,
        marketing: 0,
        buyback: 1,
        totalSwap: 1
    });

    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 marketingWallet = payable(0xDB6A084E8d408E59BfA6785D17B34E1EFbe74405);
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;
    uint256 private _maxTxAmount = (_tTotal * 2) / 100;
    uint256 private _maxWalletSize = (_tTotal * 2) / 100;
    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    Initializer initializer;
    uint256 public launchStamp;
    bool public buybackEnabled;
    uint256 public buybackThreshold;
    uint256 public buybackAmount;

    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;

        _isExcludedFromFees[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true; // PinkLock
        _isExcludedFromFees[0x663A5C229c09b049E36dCc11a9B0d4a8Eb9db214] = true; // Unicrypt (ETH)
        _isExcludedFromFees[0xDba68f07d1b7Ca219f78ae8582C213d975c25cAf] = true; // Unicrypt (ETH)
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // 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 pure 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 buyback, uint16 liquidity, uint16 marketing) external onlyOwner {
        _ratios.buyback = buyback;
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.totalSwap = liquidity + marketing + buyback;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(_ratios.totalSwap <= total, "Cannot exceed sum of buy and sell fees.");
    }

    function setWallets(address payable marketing) external onlyOwner {
        require(marketing != address(0), "Cannot be zero address.");
        marketingWallet = 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 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 setBuybackEnabled(bool enabled) external onlyOwner {
        buybackEnabled = enabled;
    }

    function setBuybackSettings(uint256 threshold, uint256 thresholdMultiplier, uint256 amount, uint256 amountMultiplier) external onlyOwner {
        buybackThreshold = threshold * 10**thresholdMultiplier;
        buybackAmount = amount * 10**amountMultiplier;
    }

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

                if (buybackEnabled) {
                    uint256 balance = address(this).balance;
                    if (balance > buybackThreshold) {
                        if (balance > buybackAmount) {
                            buyBack(buybackAmount);
                        } else if (balance != 0) {
                            buyBack(balance);
                        }
                    }
                }
            }
        }
        return finalizeTransfer(from, to, amount, buy, sell, other);
    }

    function contractSwap(uint256 contractTokenBalance) internal inSwapFlag {
        Ratios memory ratios = _ratios;
        if (ratios.totalSwap == 0) {
            return;
        }

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

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

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

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

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

        amtBalance -= liquidityBalance;
        ratios.totalSwap -= ratios.liquidity;
        bool success;
        uint256 buybackBalance = (amtBalance * ratios.buyback) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - buybackBalance;
        if (ratios.marketing > 0) {
            (success,) = marketingWallet.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]*10**_decimals, "Not enough tokens.");
            finalizeTransfer(msg.sender, accounts[i], amounts[i]*10**_decimals, 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 buyBack(uint256 amount) internal {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        try dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            DEAD,
            block.timestamp
        ) {} catch {}
    }

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

        return amount - feeAmount;
    }
}

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":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"buyback","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":[],"name":"buybackAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"name":"excludePresaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"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":"marketingWallet","outputs":[{"internalType":"address payable","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":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBuybackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"thresholdMultiplier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"amountMultiplier","type":"uint256"}],"name":"setBuybackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"buyback","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60006003819055600a805460ff1916600190811782556101f4608081905260a05260c0839052600b805465ffffffffffff19166301f401f417905561016060405260e08390526101009290925261012082905261014091909152600c805466010001000000006001600160401b0319909116179055600f8054600161ff0160a01b03191673db6a084e8d408e59bfa6785d17b34e1efbe744051790556013819055606490620000b190601290620003ea565b620000bf9061271062000402565b620000cc90600262000402565b620000d891906200041c565b6014556064620000eb6012600a620003ea565b620000f99061271062000402565b6200010690600262000402565b6200011291906200041c565b6015556016805461ffff19169055601b80546001600160a01b03191633179055620001406012600a620003ea565b6200014e9061271062000402565b601b80546001600160a01b03908116600090815260016020526040812093909355905416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001a26012600a620003ea565b620001b09061271062000402565b60405190815260200160405180910390a3601b80546001600160a01b0390811660009081526007602081815260408084208054600160ff19918216811790925530865282862080548216831790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d8054821683179055965490951684526005825283208054861685179055527f369570fab114047d6931f481fe65511f6f30128550291df97f26a8b12fbb064780548416831790557f76e04a725e11e15e15ab8a12e133522d6ebb6e4ce8401eb7fccaa3f298dfd6e5805484168317905573dba68f07d1b7ca219f78ae8582c213d975c25caf90527fa41ba8ce755a9610529fb4698883547ff2835b475c582169085f2e8c39e304f780549092161790556200043f565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200032c578160001904821115620003105762000310620002d5565b808516156200031e57918102915b93841c9390800290620002f0565b509250929050565b6000826200034557506001620003e4565b816200035457506000620003e4565b81600181146200036d5760028114620003785762000398565b6001915050620003e4565b60ff8411156200038c576200038c620002d5565b50506001821b620003e4565b5060208310610133831016604e8410600b8410161715620003bd575081810a620003e4565b620003c98383620002eb565b8060001904821115620003e057620003e0620002d5565b0290505b92915050565b6000620003fb60ff84168362000334565b9392505050565b8082028115828204841417620003e457620003e4620002d5565b6000826200043a57634e487b7160e01b600052601260045260246000fd5b500490565b61498d806200044f6000396000f3fe6080604052600436106103d25760003560e01c806350a8e016116101fd578063a9059cbb11610118578063db0a9c3d116100ab578063eb50e70e1161007a578063eb50e70e14610bca578063ee5d9c2d14610bea578063fb78680d14610bff578063fdb78c0e14610c1f578063feadde9c14610c4057600080fd5b8063db0a9c3d14610b2e578063dd62ed3e14610b44578063e680d9ef14610b8a578063eafb5a3c14610baa57600080fd5b8063b3d514fb116100e7578063b3d514fb14610697578063b7df8b3614610a89578063bfc2fc3514610aa3578063cf84770614610ac357600080fd5b8063a9059cbb14610a29578063aa22b17214610a49578063ab558e4d14610a69578063b1b08f711461069757600080fd5b806375f0a874116101905780638a63bd9b1161015f5780638a63bd9b146109b35780638a8c523c146109c857806395d89b41146109dd5780639a9b567d14610a0957600080fd5b806375f0a8741461094057806378648edf1461096057806380c581d114610975578063893d20e81461099557600080fd5b80635cce86cd116101cc5780635cce86cd146108a75780636ebd0078146108e057806370a08231146108f5578063715018a61461092b57600080fd5b806350a8e01614610832578063590ffdce146108515780635a6f0918146108715780635c24b0741461088757600080fd5b80632610eaca116102ed57806336fddb04116102805780634bbb93eb1161024f5780634bbb93eb146107995780634e718e48146107b95780634fb2e45d146107d95780634fbee193146107f957600080fd5b806336fddb041461071f5780633f3cf56c1461073f578063452ed4f11461075f5780634ada218b1461077f57600080fd5b80632e8fa821116102bc5780632e8fa821146106ad578063313ce567146106c357806332cde664146106df57806333251a0b146106ff57600080fd5b80632610eaca1461064c578063285777511461066c5780632b112e49146106825780632b28fc7a1461069757600080fd5b80630dcbcf1c1161036557806318160ddd1161033457806318160ddd146105e1578063220923e3146105f657806323b872dd1461060c578063260039571461062c57600080fd5b80630dcbcf1c146105595780630fa604e41461059257806313b4a7f4146105a7578063160d0da5146105c757600080fd5b806306fdde03116103a157806306fdde03146104ad5780630758d924146104ea57806307dd79e01461050f578063095ea7b31461053957600080fd5b806303fd2a45146103de5780630445b66714610411578063044df72614610435578063069d955f1461045757600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f461dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041d57600080fd5b5061042760105481565b604051908152602001610408565b34801561044157600080fd5b506104556104503660046141d8565b610c60565b005b34801561046357600080fd5b50600b546104889061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610408565b3480156104b957600080fd5b5060408051808201909152600b81526a213abca130b1b5a13ab93760a91b60208201525b6040516104089190614211565b3480156104f657600080fd5b50600d546103f49061010090046001600160a01b031681565b34801561051b57600080fd5b50600d546105299060ff1681565b6040519015158152602001610408565b34801561054557600080fd5b50610529610554366004614274565b610d1e565b34801561056557600080fd5b506105296105743660046142a0565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561059e57600080fd5b50610427610d35565b3480156105b357600080fd5b506104556105c23660046142bd565b610d55565b3480156105d357600080fd5b506018546105299060ff1681565b3480156105ed57600080fd5b50610427610f13565b34801561060257600080fd5b5061042760195481565b34801561061857600080fd5b506105296106273660046142eb565b610f2d565b34801561063857600080fd5b5061045561064736600461432c565b610fa5565b34801561065857600080fd5b50610455610667366004614424565b6110e8565b34801561067857600080fd5b5061042760135481565b34801561068e57600080fd5b5061042761129d565b3480156106a357600080fd5b506104276103e881565b3480156106b957600080fd5b5061042760115481565b3480156106cf57600080fd5b5060405160128152602001610408565b3480156106eb57600080fd5b506104556106fa3660046144fd565b61131b565b34801561070b57600080fd5b5061045561071a3660046142a0565b61146f565b34801561072b57600080fd5b5061045561073a366004614540565b611520565b34801561074b57600080fd5b5061045561075a36600461432c565b611593565b34801561076b57600080fd5b50600e546103f4906001600160a01b031681565b34801561078b57600080fd5b506016546105299060ff1681565b3480156107a557600080fd5b506104276107b436600461455e565b6116e2565b3480156107c557600080fd5b506104556107d436600461455e565b611716565b3480156107e557600080fd5b506104556107f43660046142a0565b6117b4565b34801561080557600080fd5b506105296108143660046142a0565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561083e57600080fd5b5060165461052990610100900460ff1681565b34801561085d57600080fd5b5061045561086c366004614540565b6119b6565b34801561087d57600080fd5b5061042760175481565b34801561089357600080fd5b506104556108a23660046142a0565b611a29565b3480156108b357600080fd5b506105296108c23660046142a0565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108ec57600080fd5b50610427611c04565b34801561090157600080fd5b506104276109103660046142a0565b6001600160a01b031660009081526001602052604090205490565b34801561093757600080fd5b50610455611c1f565b34801561094c57600080fd5b50600f546103f4906001600160a01b031681565b34801561096c57600080fd5b50610455611d44565b34801561098157600080fd5b50610455610990366004614540565b611d9b565b3480156109a157600080fd5b50601b546001600160a01b03166103f4565b3480156109bf57600080fd5b50610529611f87565b3480156109d457600080fd5b50610455611ff7565b3480156109e957600080fd5b5060408051808201909152600381526221212160e91b60208201526104dd565b348015610a1557600080fd5b50610455610a24366004614577565b61224d565b348015610a3557600080fd5b50610529610a44366004614274565b6122a8565b348015610a5557600080fd5b50610455610a643660046144fd565b6122bf565b348015610a7557600080fd5b50610455610a843660046142a0565b612407565b348015610a9557600080fd5b506012546105299060ff1681565b348015610aaf57600080fd5b50610455610abe3660046141d8565b6125a1565b348015610acf57600080fd5b50600c54610b009061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610408565b348015610b3a57600080fd5b50610427601a5481565b348015610b5057600080fd5b50610427610b5f3660046142bd565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610b9657600080fd5b50610455610ba5366004614594565b61264c565b348015610bb657600080fd5b50610455610bc53660046142a0565b6126ca565b348015610bd657600080fd5b50610455610be53660046142a0565b612ac8565b348015610bf657600080fd5b50610455612b88565b348015610c0b57600080fd5b50610455610c1a366004614594565b612c61565b348015610c2b57600080fd5b50600f5461052990600160a81b900460ff1681565b348015610c4c57600080fd5b50610455610c5b366004614540565b612f15565b601b546001600160a01b03163314610cad5760405162461bcd60e51b8152602060048201526011602482015260008051602061493883398151915260448201526064015b60405180910390fd5b60165460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610d0257600080fd5b505af1158015610d16573d6000803e3d6000fd5b505050505050565b6000610d2b338484612f88565b5060015b92915050565b6000610d436012600a6146c0565b601554610d5091906146cf565b905090565b601b546001600160a01b03163314610d9d5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b600a5460ff16610dac57600080fd5b6001600160a01b0382163014801590610dce57506001600160a01b0381163014155b8015610de85750600e546001600160a01b03838116911614155b8015610e025750600e546001600160a01b03828116911614155b610e3c5760405162461bcd60e51b815260206004820152600b60248201526a253ab9ba103237b713ba1760a91b6044820152606401610ca4565b806001600160a01b0316826001600160a01b031603610e9e576001600160a01b03811660009081526005602090815260408083208054600160ff19918216811790925560099093529220805490911682179055610e9a9082906119b6565b5050565b6001600160a01b0382811660008181526005602090815260408083208054600160ff19918216811790925595871680855282852080548816831790559484526009909252808320805486168317905592825291902080549092168117909155610f089083906119b6565b610e9a8160016119b6565b6000610f216012600a6146c0565b610d50906127106146f1565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610f92576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610f8c908490614708565b90915550505b610f9d848484613081565b949350505050565b601b546001600160a01b03163314610fed5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b6064610ffb6012600a6146c0565b611007906127106146f1565b61101191906146cf565b818361101f6012600a6146c0565b61102b906127106146f1565b61103591906146f1565b61103f91906146cf565b10156110b35760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610ca4565b80826110c16012600a6146c0565b6110cd906127106146f1565b6110d791906146f1565b6110e191906146cf565b6015555050565b601b546001600160a01b031633146111305760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b80518251146111815760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610ca4565b60005b82518161ffff1610156112985761119d6012600a6146c0565b828261ffff16815181106111b3576111b361471b565b60200260200101516111c591906146f1565b3360009081526001602052604090205410156112235760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610ca4565b61128533848361ffff168151811061123d5761123d61471b565b60200260200101516012600a61125391906146c0565b858561ffff16815181106112695761126961471b565b602002602001015161127b91906146f1565b60008060016135e3565b508061129081614731565b915050611184565b505050565b60016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495461dead60009081527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5490916112f991614752565b6113056012600a6146c0565b611311906127106146f1565b610d509190614708565b601b546001600160a01b031633146113635760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b600d5460ff16156113b65760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610ca4565b6103e88361ffff16111580156113d257506103e88261ffff1611155b80156113e457506103e88161ffff1611155b6114305760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610ca4565b600b805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b601b546001600160a01b031633146114b75760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b6016546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b15801561150557600080fd5b505af1158015611519573d6000803e3d6000fd5b5050505050565b601b546001600160a01b031633146115685760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b601b546001600160a01b031633146115db5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b6103e86115ea6012600a6146c0565b6115f6906127106146f1565b6116019060056146f1565b61160b91906146cf565b81836116196012600a6146c0565b611625906127106146f1565b61162f91906146f1565b61163991906146cf565b10156116ad5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610ca4565b80826116bb6012600a6146c0565b6116c7906127106146f1565b6116d191906146f1565b6116db91906146cf565b6014555050565b600e546001600160a01b03166000908152600160205260408120546127109061170c9084906146f1565b610d2f91906146cf565b601b546001600160a01b0316331461175e5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b60968111156117af5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610ca4565b601355565b601b546001600160a01b031633146117fc5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b6001600160a01b0381166118785760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ca4565b61deac196001600160a01b038216016118f95760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ca4565b601b54611910906001600160a01b031660006119b6565b61191b8160016119b6565b601b546001600160a01b03166000908152600160205260409020541561196457601b546001600160a01b03166000818152600160205260409020546119629190839061127b565b505b601b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601b546001600160a01b031633146119fe5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b601b546001600160a01b03163314611a715760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b60165460ff1615611a8157600080fd5b306001600160a01b03821603611ad95760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610ca4565b6016805462010000600160b01b031916620100006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301816000875af1925050508015611b5f575060408051601f3d908101601f19168201909252611b5c91810190614765565b60015b611b6857600080fd5b600d805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600e80546001600160a01b0319168584169081179091556000908152600260205260409020805460ff19166001179055601b549254611be29383169291900416600019612f88565b600d5461129890309061010090046001600160a01b0316600019612f88565b50565b6000611c126012600a6146c0565b601454610d5091906146cf565b601b546001600160a01b03163314611c675760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b60165460ff16611cdf5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201527f73206265656e20656e61626c65642e00000000000000000000000000000000006064820152608401610ca4565b601b54611cf6906001600160a01b031660006119b6565b601b80546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601b546001600160a01b03163314611d8c5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b600d805460ff19166001179055565b601b546001600160a01b03163314611de35760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b80611e56576001600160a01b03828116600081815260026020526040808220805460ff1916905560165490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610d0257600080fd5b60035415611ebd576203f48060035442611e709190614708565b11611ebd5760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610ca4565b6001600160a01b03821660009081526002602052604090205460ff1615611f265760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610ca4565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560165491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610ce8565b601b546000906001600160a01b03163314611fd25760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b600d54611ff190309061010090046001600160a01b0316600019612f88565b50600190565b601b546001600160a01b0316331461203f5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b60165460ff16156120925760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610ca4565b601654610100900460ff166120e95760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610ca4565b6016546201000090046001600160a01b0316612119576016805462010000600160b01b0319163062010000021790555b601654600e54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561218b57600080fd5b505af192505050801561219c575060015b50601654600e546001600160a01b03908116600090815260016020526040908190205490516312d38e5760e11b815260048101919091526201000090920416906325a71cae9060240160408051808303816000875af192505050801561221f575060408051601f3d908101601f1916820190925261221c91810190614794565b60015b1561222e576010919091556011555b6016805460ff19908116600117909155600a8054909116905542601755565b601b546001600160a01b031633146122955760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b6018805460ff1916911515919091179055565b60006122b5338484613081565b5060019392505050565b601b546001600160a01b031633146123075760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b600c805461ffff838116620100000263ffffffff19828816640100000000021665ffffffffffff1990931692909217908516171790558261234882846147b8565b61235291906147b8565b600c805467ffff0000000000001916660100000000000061ffff93841602179055600b5460009161238c91620100008104821691166147b8565b600c5461ffff918216925066010000000000009004168110156124015760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610ca4565b50505050565b601b546001600160a01b0316331461244f5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b601654610100900460ff16156124b757306001600160a01b038216036124b75760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610ca4565b601b546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa15801561250e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253291906147da565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561257d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129891906147f3565b601b546001600160a01b031633146125e95760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b600f805460ff60a81b1916600160a81b841515908102919091179091556012805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b601b546001600160a01b031633146126945760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b61269f83600a614810565b6126a990856146f1565b6019556126b781600a614810565b6126c190836146f1565b601a5550505050565b601b546001600160a01b031633146127125760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b601654610100900460ff161561276a5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610ca4565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d3919061481c565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612820573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612844919061481c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561288f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b3919061481c565b600e546001600160a01b039081166000908152600260205260409020805460ff191690559091508116612a4957816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561291e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612942919061481c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561298f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b3919061481c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a24919061481c565b600e80546001600160a01b0319166001600160a01b0392909216919091179055612a65565b600e80546001600160a01b0319166001600160a01b0383161790555b600d805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600e5482166000908152600260205260409020805460ff191660011790559154611298923092910416600019612f88565b601b546001600160a01b03163314612b105760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b6001600160a01b038116612b665760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610ca4565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b601b546001600160a01b03163314612bd05760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b601654610100900460ff1615612c285760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610ca4565b601b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611c01573d6000803e3d6000fd5b601b546001600160a01b03163314612ca95760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b8284612cb76012600a6146c0565b612cc3906127106146f1565b612ccd91906146f1565b612cd791906146cf565b6010558082612ce86012600a6146c0565b612cf4906127106146f1565b612cfe91906146f1565b612d0891906146cf565b60118190556010541115612d685760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610ca4565b600e546001600160a01b031660009081526001602052604090205461271090612d929060966146f1565b612d9c91906146cf565b6011541115612df95760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610ca4565b620f4240612e096012600a6146c0565b612e15906127106146f1565b612e1f91906146cf565b6011541015612e875760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610ca4565b620f4240612e976012600a6146c0565b612ea3906127106146f1565b612ead91906146cf565b60105410156124015760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610ca4565b601b546001600160a01b03163314612f5d5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b038316612fd45760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610ca4565b6001600160a01b0382166130205760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610ca4565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166130e75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ca4565b6001600160a01b0383166131495760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ca4565b600082116131ab5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ca4565b6001600160a01b0384166000908152600260205260408120548190819060ff16156131d95760019250613207565b6001600160a01b03861660009081526002602052604090205460ff16156132035760019150613207565b5060015b613211878761388d565b1561349e5760165460ff16613312578061326d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610ca4565b6001600160a01b03871660009081526006602052604090205460ff161580156132af57506001600160a01b03861660009081526006602052604090205460ff16155b156133125760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610ca4565b828061331b5750815b156133ca576001600160a01b03871660009081526008602052604090205460ff1615801561336257506001600160a01b03861660009081526008602052604090205460ff16155b156133ca576014548511156133ca5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610ca4565b600d546001600160a01b0387811661010090920416148015906133eb575081155b1561349e576001600160a01b03861660009081526008602052604090205460ff1661349e5760155485613433886001600160a01b031660009081526001602052604090205490565b61343d9190614752565b111561349e5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610ca4565b81156135ca57600f54600160a01b900460ff166135ca57600f54600160a81b900460ff1680156134e757506001600160a01b03861660009081526009602052604090205460ff16155b801561350c57506001600160a01b03871660009081526009602052604090205460ff16155b15613588573060009081526001602052604090205460105481106135865760115460125460ff161561357057601354600e546001600160a01b031660009081526001602052604090205461271091613563916146f1565b61356d91906146cf565b90505b80821061357b578091505b613584826139a4565b505b505b60185460ff16156135ca5760195447908111156135c857601a548111156135b9576135b4601a54613e0f565b6135c8565b80156135c8576135c881613e0f565b505b6135d88787878686866135e3565b979650505050505050565b60006135ef878761388d565b156136895760165460405163ecd07a5360e01b81526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613672575060408051601f3d908101601f1916820190925261366f918101906147f3565b60015b61367b57600080fd5b90508061368757600080fd5b505b6001600160a01b03871660009081526007602052604090205460019060ff16806136cb57506001600160a01b03871660009081526007602052604090205460ff165b156136d4575060005b6001600160a01b038816600090815260016020526040812080548892906136fc908490614708565b90915550600090508161370f578661371b565b61371b89888888613f71565b6001600160a01b038916600090815260016020526040812080549293508392909190613748908490614752565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161379491815260200190565b60405180910390a3601654610100900460ff1661387e576137b58989614086565b601654610100900460ff161580156137d257506137d2898961388d565b80156137f757506001600160a01b03891660009081526006602052604090205460ff16155b801561381c57506001600160a01b03881660009081526006602052604090205460ff16155b8015613826575083155b1561387e5760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610ca4565b50600198975050505050505050565b601b546000906001600160a01b038481169116148015906138bc5750601b546001600160a01b03838116911614155b80156138d35750601b546001600160a01b03163214155b80156138f857506001600160a01b03821660009081526005602052604090205460ff16155b801561391d57506001600160a01b03831660009081526005602052604090205460ff16155b801561393457506001600160a01b03821661dead14155b801561394857506001600160a01b03821615155b801561395d57506001600160a01b0383163014155b801561397d57506016546001600160a01b03848116620100009092041614155b801561399d57506016546001600160a01b03838116620100009092041614155b9392505050565b600f805460ff60a01b1916600160a01b17905560408051608081018252600c5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052600003613a0b5750613dff565b306000908152600460209081526040808320600d5461010090046001600160a01b0316845290915290205460001914613a6e57306000908152600460209081526040808320600d5461010090046001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff1685613a8f91906146f1565b613a9991906146cf565b613aa391906146cf565b90506000613ab18285614708565b60408051600280825260608201835292935047926000926020830190803683370190505090503081600081518110613aeb57613aeb61471b565b60200260200101906001600160a01b031690816001600160a01b031681525050600d60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b82919061481c565b81600181518110613b9557613b9561471b565b6001600160a01b039283166020918202929092010152600d5460405163791ac94760e01b81526101009091049091169063791ac94790613be290869060009086903090429060040161487d565b600060405180830381600087803b158015613bfc57600080fd5b505af1925050508015613c0d575060015b613c1b575050505050613dff565b6000613c278347614708565b9050600084613c3687846146f1565b613c4091906146cf565b90508515613d2457600d5460405163f305d71960e01b815230600482015260248101889052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015613cd7575060408051601f3d908101601f19168201909252613cd4918101906148b9565b60015b613ce75750505050505050613dff565b505060408051838152602081018990527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613d2e8183614708565b9150866000015187606001818151613d4691906148e7565b61ffff908116909152606089015160408a015160009350839291821691613d6e9116866146f1565b613d7891906146cf565b90506000613d868286614708565b60208b015190915061ffff1615613df457600f546040516001600160a01b039091169061d6d89047906000818181858888f193505050503d8060008114613de9576040519150601f19603f3d011682016040523d82523d6000602084013e613dee565b606091505b50909350505b505050505050505050505b50600f805460ff60a01b19169055565b604080516002808252606082018352600092602083019080368337019050509050600d60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ea7919061481c565b81600081518110613eba57613eba61471b565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110613eee57613eee61471b565b6001600160a01b039283166020918202929092010152600d5460405163b6f9de9560e01b81526101009091049091169063b6f9de95908490613f3d90600090869061dead904290600401614902565b6000604051808303818588803b158015613f5657600080fd5b505af193505050508015613f68575060015b15610e9a575050565b6000808315613f875750600b5461ffff16613fb1565b8215613fa05750600b5462010000900461ffff16613fb1565b50600b54640100000000900461ffff165b80600003613fc25784915050610f9d565b6016546201000090046001600160a01b031630148015613fec57504660011480613fec5750466038145b15613ff657506111945b600061271061400583886146f1565b61400f91906146cf565b9050801561407c573060009081526001602052604081208054839290614036908490614752565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6135d88187614708565b601654610100900460ff16156140ea5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610ca4565b6140f4828261388d565b15801561410e5750600e546001600160a01b038281169116145b15610e9a576001600160a01b038083166000908152600560209081526040808320805460ff19908116600190811790925560079093529220805490911690911790556016805461ff001916610100179081905562010000900416614186576016805462010000600160b01b0319163062010000021790555b600f805460ff60a81b1916600160a81b179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001612640565b8015158114611c0157600080fd5b600080604083850312156141eb57600080fd5b82356141f6816141ca565b91506020830135614206816141ca565b809150509250929050565b600060208083528351808285015260005b8181101561423e57858101830151858201604001528201614222565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611c0157600080fd5b6000806040838503121561428757600080fd5b82356142928161425f565b946020939093013593505050565b6000602082840312156142b257600080fd5b813561399d8161425f565b600080604083850312156142d057600080fd5b82356142db8161425f565b915060208301356142068161425f565b60008060006060848603121561430057600080fd5b833561430b8161425f565b9250602084013561431b8161425f565b929592945050506040919091013590565b6000806040838503121561433f57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561438d5761438d61434e565b604052919050565b600067ffffffffffffffff8211156143af576143af61434e565b5060051b60200190565b600082601f8301126143ca57600080fd5b813560206143df6143da83614395565b614364565b82815260059290921b840181019181810190868411156143fe57600080fd5b8286015b848110156144195780358352918301918301614402565b509695505050505050565b6000806040838503121561443757600080fd5b823567ffffffffffffffff8082111561444f57600080fd5b818501915085601f83011261446357600080fd5b813560206144736143da83614395565b82815260059290921b8401810191818101908984111561449257600080fd5b948201945b838610156144b95785356144aa8161425f565b82529482019490820190614497565b965050860135925050808211156144cf57600080fd5b506144dc858286016143b9565b9150509250929050565b803561ffff811681146144f857600080fd5b919050565b60008060006060848603121561451257600080fd5b61451b846144e6565b9250614529602085016144e6565b9150614537604085016144e6565b90509250925092565b6000806040838503121561455357600080fd5b82356141f68161425f565b60006020828403121561457057600080fd5b5035919050565b60006020828403121561458957600080fd5b813561399d816141ca565b600080600080608085870312156145aa57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156146175781600019048211156145fd576145fd6145c6565b8085161561460a57918102915b93841c93908002906145e1565b509250929050565b60008261462e57506001610d2f565b8161463b57506000610d2f565b8160018114614651576002811461465b57614677565b6001915050610d2f565b60ff84111561466c5761466c6145c6565b50506001821b610d2f565b5060208310610133831016604e8410600b841016171561469a575081810a610d2f565b6146a483836145dc565b80600019048211156146b8576146b86145c6565b029392505050565b600061399d60ff84168361461f565b6000826146ec57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610d2f57610d2f6145c6565b81810381811115610d2f57610d2f6145c6565b634e487b7160e01b600052603260045260246000fd5b600061ffff808316818103614748576147486145c6565b6001019392505050565b80820180821115610d2f57610d2f6145c6565b6000806040838503121561477857600080fd5b82516147838161425f565b60208401519092506142068161425f565b600080604083850312156147a757600080fd5b505080516020909101519092909150565b61ffff8181168382160190808211156147d3576147d36145c6565b5092915050565b6000602082840312156147ec57600080fd5b5051919050565b60006020828403121561480557600080fd5b815161399d816141ca565b600061399d838361461f565b60006020828403121561482e57600080fd5b815161399d8161425f565b600081518084526020808501945080840160005b838110156148725781516001600160a01b03168752958201959082019060010161484d565b509495945050505050565b85815284602082015260a06040820152600061489c60a0830186614839565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156148ce57600080fd5b8351925060208401519150604084015190509250925092565b61ffff8281168282160390808211156147d3576147d36145c6565b84815260806020820152600061491b6080830186614839565b6001600160a01b0394909416604083015250606001529291505056fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a2646970667358221220904004c0eb98344d9e34d9a3ab1be592e10106bcdde9dff831ba50287f68026364736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103d25760003560e01c806350a8e016116101fd578063a9059cbb11610118578063db0a9c3d116100ab578063eb50e70e1161007a578063eb50e70e14610bca578063ee5d9c2d14610bea578063fb78680d14610bff578063fdb78c0e14610c1f578063feadde9c14610c4057600080fd5b8063db0a9c3d14610b2e578063dd62ed3e14610b44578063e680d9ef14610b8a578063eafb5a3c14610baa57600080fd5b8063b3d514fb116100e7578063b3d514fb14610697578063b7df8b3614610a89578063bfc2fc3514610aa3578063cf84770614610ac357600080fd5b8063a9059cbb14610a29578063aa22b17214610a49578063ab558e4d14610a69578063b1b08f711461069757600080fd5b806375f0a874116101905780638a63bd9b1161015f5780638a63bd9b146109b35780638a8c523c146109c857806395d89b41146109dd5780639a9b567d14610a0957600080fd5b806375f0a8741461094057806378648edf1461096057806380c581d114610975578063893d20e81461099557600080fd5b80635cce86cd116101cc5780635cce86cd146108a75780636ebd0078146108e057806370a08231146108f5578063715018a61461092b57600080fd5b806350a8e01614610832578063590ffdce146108515780635a6f0918146108715780635c24b0741461088757600080fd5b80632610eaca116102ed57806336fddb04116102805780634bbb93eb1161024f5780634bbb93eb146107995780634e718e48146107b95780634fb2e45d146107d95780634fbee193146107f957600080fd5b806336fddb041461071f5780633f3cf56c1461073f578063452ed4f11461075f5780634ada218b1461077f57600080fd5b80632e8fa821116102bc5780632e8fa821146106ad578063313ce567146106c357806332cde664146106df57806333251a0b146106ff57600080fd5b80632610eaca1461064c578063285777511461066c5780632b112e49146106825780632b28fc7a1461069757600080fd5b80630dcbcf1c1161036557806318160ddd1161033457806318160ddd146105e1578063220923e3146105f657806323b872dd1461060c578063260039571461062c57600080fd5b80630dcbcf1c146105595780630fa604e41461059257806313b4a7f4146105a7578063160d0da5146105c757600080fd5b806306fdde03116103a157806306fdde03146104ad5780630758d924146104ea57806307dd79e01461050f578063095ea7b31461053957600080fd5b806303fd2a45146103de5780630445b66714610411578063044df72614610435578063069d955f1461045757600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f461dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041d57600080fd5b5061042760105481565b604051908152602001610408565b34801561044157600080fd5b506104556104503660046141d8565b610c60565b005b34801561046357600080fd5b50600b546104889061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610408565b3480156104b957600080fd5b5060408051808201909152600b81526a213abca130b1b5a13ab93760a91b60208201525b6040516104089190614211565b3480156104f657600080fd5b50600d546103f49061010090046001600160a01b031681565b34801561051b57600080fd5b50600d546105299060ff1681565b6040519015158152602001610408565b34801561054557600080fd5b50610529610554366004614274565b610d1e565b34801561056557600080fd5b506105296105743660046142a0565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561059e57600080fd5b50610427610d35565b3480156105b357600080fd5b506104556105c23660046142bd565b610d55565b3480156105d357600080fd5b506018546105299060ff1681565b3480156105ed57600080fd5b50610427610f13565b34801561060257600080fd5b5061042760195481565b34801561061857600080fd5b506105296106273660046142eb565b610f2d565b34801561063857600080fd5b5061045561064736600461432c565b610fa5565b34801561065857600080fd5b50610455610667366004614424565b6110e8565b34801561067857600080fd5b5061042760135481565b34801561068e57600080fd5b5061042761129d565b3480156106a357600080fd5b506104276103e881565b3480156106b957600080fd5b5061042760115481565b3480156106cf57600080fd5b5060405160128152602001610408565b3480156106eb57600080fd5b506104556106fa3660046144fd565b61131b565b34801561070b57600080fd5b5061045561071a3660046142a0565b61146f565b34801561072b57600080fd5b5061045561073a366004614540565b611520565b34801561074b57600080fd5b5061045561075a36600461432c565b611593565b34801561076b57600080fd5b50600e546103f4906001600160a01b031681565b34801561078b57600080fd5b506016546105299060ff1681565b3480156107a557600080fd5b506104276107b436600461455e565b6116e2565b3480156107c557600080fd5b506104556107d436600461455e565b611716565b3480156107e557600080fd5b506104556107f43660046142a0565b6117b4565b34801561080557600080fd5b506105296108143660046142a0565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561083e57600080fd5b5060165461052990610100900460ff1681565b34801561085d57600080fd5b5061045561086c366004614540565b6119b6565b34801561087d57600080fd5b5061042760175481565b34801561089357600080fd5b506104556108a23660046142a0565b611a29565b3480156108b357600080fd5b506105296108c23660046142a0565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108ec57600080fd5b50610427611c04565b34801561090157600080fd5b506104276109103660046142a0565b6001600160a01b031660009081526001602052604090205490565b34801561093757600080fd5b50610455611c1f565b34801561094c57600080fd5b50600f546103f4906001600160a01b031681565b34801561096c57600080fd5b50610455611d44565b34801561098157600080fd5b50610455610990366004614540565b611d9b565b3480156109a157600080fd5b50601b546001600160a01b03166103f4565b3480156109bf57600080fd5b50610529611f87565b3480156109d457600080fd5b50610455611ff7565b3480156109e957600080fd5b5060408051808201909152600381526221212160e91b60208201526104dd565b348015610a1557600080fd5b50610455610a24366004614577565b61224d565b348015610a3557600080fd5b50610529610a44366004614274565b6122a8565b348015610a5557600080fd5b50610455610a643660046144fd565b6122bf565b348015610a7557600080fd5b50610455610a843660046142a0565b612407565b348015610a9557600080fd5b506012546105299060ff1681565b348015610aaf57600080fd5b50610455610abe3660046141d8565b6125a1565b348015610acf57600080fd5b50600c54610b009061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610408565b348015610b3a57600080fd5b50610427601a5481565b348015610b5057600080fd5b50610427610b5f3660046142bd565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610b9657600080fd5b50610455610ba5366004614594565b61264c565b348015610bb657600080fd5b50610455610bc53660046142a0565b6126ca565b348015610bd657600080fd5b50610455610be53660046142a0565b612ac8565b348015610bf657600080fd5b50610455612b88565b348015610c0b57600080fd5b50610455610c1a366004614594565b612c61565b348015610c2b57600080fd5b50600f5461052990600160a81b900460ff1681565b348015610c4c57600080fd5b50610455610c5b366004614540565b612f15565b601b546001600160a01b03163314610cad5760405162461bcd60e51b8152602060048201526011602482015260008051602061493883398151915260448201526064015b60405180910390fd5b60165460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610d0257600080fd5b505af1158015610d16573d6000803e3d6000fd5b505050505050565b6000610d2b338484612f88565b5060015b92915050565b6000610d436012600a6146c0565b601554610d5091906146cf565b905090565b601b546001600160a01b03163314610d9d5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b600a5460ff16610dac57600080fd5b6001600160a01b0382163014801590610dce57506001600160a01b0381163014155b8015610de85750600e546001600160a01b03838116911614155b8015610e025750600e546001600160a01b03828116911614155b610e3c5760405162461bcd60e51b815260206004820152600b60248201526a253ab9ba103237b713ba1760a91b6044820152606401610ca4565b806001600160a01b0316826001600160a01b031603610e9e576001600160a01b03811660009081526005602090815260408083208054600160ff19918216811790925560099093529220805490911682179055610e9a9082906119b6565b5050565b6001600160a01b0382811660008181526005602090815260408083208054600160ff19918216811790925595871680855282852080548816831790559484526009909252808320805486168317905592825291902080549092168117909155610f089083906119b6565b610e9a8160016119b6565b6000610f216012600a6146c0565b610d50906127106146f1565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610f92576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610f8c908490614708565b90915550505b610f9d848484613081565b949350505050565b601b546001600160a01b03163314610fed5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b6064610ffb6012600a6146c0565b611007906127106146f1565b61101191906146cf565b818361101f6012600a6146c0565b61102b906127106146f1565b61103591906146f1565b61103f91906146cf565b10156110b35760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610ca4565b80826110c16012600a6146c0565b6110cd906127106146f1565b6110d791906146f1565b6110e191906146cf565b6015555050565b601b546001600160a01b031633146111305760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b80518251146111815760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610ca4565b60005b82518161ffff1610156112985761119d6012600a6146c0565b828261ffff16815181106111b3576111b361471b565b60200260200101516111c591906146f1565b3360009081526001602052604090205410156112235760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610ca4565b61128533848361ffff168151811061123d5761123d61471b565b60200260200101516012600a61125391906146c0565b858561ffff16815181106112695761126961471b565b602002602001015161127b91906146f1565b60008060016135e3565b508061129081614731565b915050611184565b505050565b60016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495461dead60009081527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5490916112f991614752565b6113056012600a6146c0565b611311906127106146f1565b610d509190614708565b601b546001600160a01b031633146113635760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b600d5460ff16156113b65760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610ca4565b6103e88361ffff16111580156113d257506103e88261ffff1611155b80156113e457506103e88161ffff1611155b6114305760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610ca4565b600b805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b601b546001600160a01b031633146114b75760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b6016546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b15801561150557600080fd5b505af1158015611519573d6000803e3d6000fd5b5050505050565b601b546001600160a01b031633146115685760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b601b546001600160a01b031633146115db5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b6103e86115ea6012600a6146c0565b6115f6906127106146f1565b6116019060056146f1565b61160b91906146cf565b81836116196012600a6146c0565b611625906127106146f1565b61162f91906146f1565b61163991906146cf565b10156116ad5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610ca4565b80826116bb6012600a6146c0565b6116c7906127106146f1565b6116d191906146f1565b6116db91906146cf565b6014555050565b600e546001600160a01b03166000908152600160205260408120546127109061170c9084906146f1565b610d2f91906146cf565b601b546001600160a01b0316331461175e5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b60968111156117af5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610ca4565b601355565b601b546001600160a01b031633146117fc5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b6001600160a01b0381166118785760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ca4565b61deac196001600160a01b038216016118f95760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ca4565b601b54611910906001600160a01b031660006119b6565b61191b8160016119b6565b601b546001600160a01b03166000908152600160205260409020541561196457601b546001600160a01b03166000818152600160205260409020546119629190839061127b565b505b601b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601b546001600160a01b031633146119fe5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b601b546001600160a01b03163314611a715760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b60165460ff1615611a8157600080fd5b306001600160a01b03821603611ad95760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610ca4565b6016805462010000600160b01b031916620100006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301816000875af1925050508015611b5f575060408051601f3d908101601f19168201909252611b5c91810190614765565b60015b611b6857600080fd5b600d805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600e80546001600160a01b0319168584169081179091556000908152600260205260409020805460ff19166001179055601b549254611be29383169291900416600019612f88565b600d5461129890309061010090046001600160a01b0316600019612f88565b50565b6000611c126012600a6146c0565b601454610d5091906146cf565b601b546001600160a01b03163314611c675760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b60165460ff16611cdf5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201527f73206265656e20656e61626c65642e00000000000000000000000000000000006064820152608401610ca4565b601b54611cf6906001600160a01b031660006119b6565b601b80546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601b546001600160a01b03163314611d8c5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b600d805460ff19166001179055565b601b546001600160a01b03163314611de35760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b80611e56576001600160a01b03828116600081815260026020526040808220805460ff1916905560165490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610d0257600080fd5b60035415611ebd576203f48060035442611e709190614708565b11611ebd5760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610ca4565b6001600160a01b03821660009081526002602052604090205460ff1615611f265760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610ca4565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560165491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610ce8565b601b546000906001600160a01b03163314611fd25760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b600d54611ff190309061010090046001600160a01b0316600019612f88565b50600190565b601b546001600160a01b0316331461203f5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b60165460ff16156120925760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610ca4565b601654610100900460ff166120e95760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610ca4565b6016546201000090046001600160a01b0316612119576016805462010000600160b01b0319163062010000021790555b601654600e54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561218b57600080fd5b505af192505050801561219c575060015b50601654600e546001600160a01b03908116600090815260016020526040908190205490516312d38e5760e11b815260048101919091526201000090920416906325a71cae9060240160408051808303816000875af192505050801561221f575060408051601f3d908101601f1916820190925261221c91810190614794565b60015b1561222e576010919091556011555b6016805460ff19908116600117909155600a8054909116905542601755565b601b546001600160a01b031633146122955760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b6018805460ff1916911515919091179055565b60006122b5338484613081565b5060019392505050565b601b546001600160a01b031633146123075760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b600c805461ffff838116620100000263ffffffff19828816640100000000021665ffffffffffff1990931692909217908516171790558261234882846147b8565b61235291906147b8565b600c805467ffff0000000000001916660100000000000061ffff93841602179055600b5460009161238c91620100008104821691166147b8565b600c5461ffff918216925066010000000000009004168110156124015760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610ca4565b50505050565b601b546001600160a01b0316331461244f5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b601654610100900460ff16156124b757306001600160a01b038216036124b75760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610ca4565b601b546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa15801561250e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253291906147da565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561257d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129891906147f3565b601b546001600160a01b031633146125e95760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b600f805460ff60a81b1916600160a81b841515908102919091179091556012805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b601b546001600160a01b031633146126945760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b61269f83600a614810565b6126a990856146f1565b6019556126b781600a614810565b6126c190836146f1565b601a5550505050565b601b546001600160a01b031633146127125760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b601654610100900460ff161561276a5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610ca4565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d3919061481c565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612820573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612844919061481c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561288f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b3919061481c565b600e546001600160a01b039081166000908152600260205260409020805460ff191690559091508116612a4957816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561291e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612942919061481c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561298f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b3919061481c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a24919061481c565b600e80546001600160a01b0319166001600160a01b0392909216919091179055612a65565b600e80546001600160a01b0319166001600160a01b0383161790555b600d805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600e5482166000908152600260205260409020805460ff191660011790559154611298923092910416600019612f88565b601b546001600160a01b03163314612b105760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b6001600160a01b038116612b665760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610ca4565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b601b546001600160a01b03163314612bd05760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b601654610100900460ff1615612c285760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610ca4565b601b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611c01573d6000803e3d6000fd5b601b546001600160a01b03163314612ca95760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b8284612cb76012600a6146c0565b612cc3906127106146f1565b612ccd91906146f1565b612cd791906146cf565b6010558082612ce86012600a6146c0565b612cf4906127106146f1565b612cfe91906146f1565b612d0891906146cf565b60118190556010541115612d685760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610ca4565b600e546001600160a01b031660009081526001602052604090205461271090612d929060966146f1565b612d9c91906146cf565b6011541115612df95760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610ca4565b620f4240612e096012600a6146c0565b612e15906127106146f1565b612e1f91906146cf565b6011541015612e875760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610ca4565b620f4240612e976012600a6146c0565b612ea3906127106146f1565b612ead91906146cf565b60105410156124015760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610ca4565b601b546001600160a01b03163314612f5d5760405162461bcd60e51b815260206004820152601160248201526000805160206149388339815191526044820152606401610ca4565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b038316612fd45760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610ca4565b6001600160a01b0382166130205760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610ca4565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166130e75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ca4565b6001600160a01b0383166131495760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ca4565b600082116131ab5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ca4565b6001600160a01b0384166000908152600260205260408120548190819060ff16156131d95760019250613207565b6001600160a01b03861660009081526002602052604090205460ff16156132035760019150613207565b5060015b613211878761388d565b1561349e5760165460ff16613312578061326d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610ca4565b6001600160a01b03871660009081526006602052604090205460ff161580156132af57506001600160a01b03861660009081526006602052604090205460ff16155b156133125760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610ca4565b828061331b5750815b156133ca576001600160a01b03871660009081526008602052604090205460ff1615801561336257506001600160a01b03861660009081526008602052604090205460ff16155b156133ca576014548511156133ca5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610ca4565b600d546001600160a01b0387811661010090920416148015906133eb575081155b1561349e576001600160a01b03861660009081526008602052604090205460ff1661349e5760155485613433886001600160a01b031660009081526001602052604090205490565b61343d9190614752565b111561349e5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610ca4565b81156135ca57600f54600160a01b900460ff166135ca57600f54600160a81b900460ff1680156134e757506001600160a01b03861660009081526009602052604090205460ff16155b801561350c57506001600160a01b03871660009081526009602052604090205460ff16155b15613588573060009081526001602052604090205460105481106135865760115460125460ff161561357057601354600e546001600160a01b031660009081526001602052604090205461271091613563916146f1565b61356d91906146cf565b90505b80821061357b578091505b613584826139a4565b505b505b60185460ff16156135ca5760195447908111156135c857601a548111156135b9576135b4601a54613e0f565b6135c8565b80156135c8576135c881613e0f565b505b6135d88787878686866135e3565b979650505050505050565b60006135ef878761388d565b156136895760165460405163ecd07a5360e01b81526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613672575060408051601f3d908101601f1916820190925261366f918101906147f3565b60015b61367b57600080fd5b90508061368757600080fd5b505b6001600160a01b03871660009081526007602052604090205460019060ff16806136cb57506001600160a01b03871660009081526007602052604090205460ff165b156136d4575060005b6001600160a01b038816600090815260016020526040812080548892906136fc908490614708565b90915550600090508161370f578661371b565b61371b89888888613f71565b6001600160a01b038916600090815260016020526040812080549293508392909190613748908490614752565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161379491815260200190565b60405180910390a3601654610100900460ff1661387e576137b58989614086565b601654610100900460ff161580156137d257506137d2898961388d565b80156137f757506001600160a01b03891660009081526006602052604090205460ff16155b801561381c57506001600160a01b03881660009081526006602052604090205460ff16155b8015613826575083155b1561387e5760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610ca4565b50600198975050505050505050565b601b546000906001600160a01b038481169116148015906138bc5750601b546001600160a01b03838116911614155b80156138d35750601b546001600160a01b03163214155b80156138f857506001600160a01b03821660009081526005602052604090205460ff16155b801561391d57506001600160a01b03831660009081526005602052604090205460ff16155b801561393457506001600160a01b03821661dead14155b801561394857506001600160a01b03821615155b801561395d57506001600160a01b0383163014155b801561397d57506016546001600160a01b03848116620100009092041614155b801561399d57506016546001600160a01b03838116620100009092041614155b9392505050565b600f805460ff60a01b1916600160a01b17905560408051608081018252600c5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052600003613a0b5750613dff565b306000908152600460209081526040808320600d5461010090046001600160a01b0316845290915290205460001914613a6e57306000908152600460209081526040808320600d5461010090046001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff1685613a8f91906146f1565b613a9991906146cf565b613aa391906146cf565b90506000613ab18285614708565b60408051600280825260608201835292935047926000926020830190803683370190505090503081600081518110613aeb57613aeb61471b565b60200260200101906001600160a01b031690816001600160a01b031681525050600d60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b82919061481c565b81600181518110613b9557613b9561471b565b6001600160a01b039283166020918202929092010152600d5460405163791ac94760e01b81526101009091049091169063791ac94790613be290869060009086903090429060040161487d565b600060405180830381600087803b158015613bfc57600080fd5b505af1925050508015613c0d575060015b613c1b575050505050613dff565b6000613c278347614708565b9050600084613c3687846146f1565b613c4091906146cf565b90508515613d2457600d5460405163f305d71960e01b815230600482015260248101889052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015613cd7575060408051601f3d908101601f19168201909252613cd4918101906148b9565b60015b613ce75750505050505050613dff565b505060408051838152602081018990527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613d2e8183614708565b9150866000015187606001818151613d4691906148e7565b61ffff908116909152606089015160408a015160009350839291821691613d6e9116866146f1565b613d7891906146cf565b90506000613d868286614708565b60208b015190915061ffff1615613df457600f546040516001600160a01b039091169061d6d89047906000818181858888f193505050503d8060008114613de9576040519150601f19603f3d011682016040523d82523d6000602084013e613dee565b606091505b50909350505b505050505050505050505b50600f805460ff60a01b19169055565b604080516002808252606082018352600092602083019080368337019050509050600d60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ea7919061481c565b81600081518110613eba57613eba61471b565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110613eee57613eee61471b565b6001600160a01b039283166020918202929092010152600d5460405163b6f9de9560e01b81526101009091049091169063b6f9de95908490613f3d90600090869061dead904290600401614902565b6000604051808303818588803b158015613f5657600080fd5b505af193505050508015613f68575060015b15610e9a575050565b6000808315613f875750600b5461ffff16613fb1565b8215613fa05750600b5462010000900461ffff16613fb1565b50600b54640100000000900461ffff165b80600003613fc25784915050610f9d565b6016546201000090046001600160a01b031630148015613fec57504660011480613fec5750466038145b15613ff657506111945b600061271061400583886146f1565b61400f91906146cf565b9050801561407c573060009081526001602052604081208054839290614036908490614752565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6135d88187614708565b601654610100900460ff16156140ea5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610ca4565b6140f4828261388d565b15801561410e5750600e546001600160a01b038281169116145b15610e9a576001600160a01b038083166000908152600560209081526040808320805460ff19908116600190811790925560079093529220805490911690911790556016805461ff001916610100179081905562010000900416614186576016805462010000600160b01b0319163062010000021790555b600f805460ff60a81b1916600160a81b179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001612640565b8015158114611c0157600080fd5b600080604083850312156141eb57600080fd5b82356141f6816141ca565b91506020830135614206816141ca565b809150509250929050565b600060208083528351808285015260005b8181101561423e57858101830151858201604001528201614222565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611c0157600080fd5b6000806040838503121561428757600080fd5b82356142928161425f565b946020939093013593505050565b6000602082840312156142b257600080fd5b813561399d8161425f565b600080604083850312156142d057600080fd5b82356142db8161425f565b915060208301356142068161425f565b60008060006060848603121561430057600080fd5b833561430b8161425f565b9250602084013561431b8161425f565b929592945050506040919091013590565b6000806040838503121561433f57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561438d5761438d61434e565b604052919050565b600067ffffffffffffffff8211156143af576143af61434e565b5060051b60200190565b600082601f8301126143ca57600080fd5b813560206143df6143da83614395565b614364565b82815260059290921b840181019181810190868411156143fe57600080fd5b8286015b848110156144195780358352918301918301614402565b509695505050505050565b6000806040838503121561443757600080fd5b823567ffffffffffffffff8082111561444f57600080fd5b818501915085601f83011261446357600080fd5b813560206144736143da83614395565b82815260059290921b8401810191818101908984111561449257600080fd5b948201945b838610156144b95785356144aa8161425f565b82529482019490820190614497565b965050860135925050808211156144cf57600080fd5b506144dc858286016143b9565b9150509250929050565b803561ffff811681146144f857600080fd5b919050565b60008060006060848603121561451257600080fd5b61451b846144e6565b9250614529602085016144e6565b9150614537604085016144e6565b90509250925092565b6000806040838503121561455357600080fd5b82356141f68161425f565b60006020828403121561457057600080fd5b5035919050565b60006020828403121561458957600080fd5b813561399d816141ca565b600080600080608085870312156145aa57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156146175781600019048211156145fd576145fd6145c6565b8085161561460a57918102915b93841c93908002906145e1565b509250929050565b60008261462e57506001610d2f565b8161463b57506000610d2f565b8160018114614651576002811461465b57614677565b6001915050610d2f565b60ff84111561466c5761466c6145c6565b50506001821b610d2f565b5060208310610133831016604e8410600b841016171561469a575081810a610d2f565b6146a483836145dc565b80600019048211156146b8576146b86145c6565b029392505050565b600061399d60ff84168361461f565b6000826146ec57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610d2f57610d2f6145c6565b81810381811115610d2f57610d2f6145c6565b634e487b7160e01b600052603260045260246000fd5b600061ffff808316818103614748576147486145c6565b6001019392505050565b80820180821115610d2f57610d2f6145c6565b6000806040838503121561477857600080fd5b82516147838161425f565b60208401519092506142068161425f565b600080604083850312156147a757600080fd5b505080516020909101519092909150565b61ffff8181168382160190808211156147d3576147d36145c6565b5092915050565b6000602082840312156147ec57600080fd5b5051919050565b60006020828403121561480557600080fd5b815161399d816141ca565b600061399d838361461f565b60006020828403121561482e57600080fd5b815161399d8161425f565b600081518084526020808501945080840160005b838110156148725781516001600160a01b03168752958201959082019060010161484d565b509495945050505050565b85815284602082015260a06040820152600061489c60a0830186614839565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156148ce57600080fd5b8351925060208401519150604084015190509250925092565b61ffff8281168282160390808211156147d3576147d36145c6565b84815260806020820152600061491b6080830186614839565b6001600160a01b0394909416604083015250606001529291505056fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a2646970667358221220904004c0eb98344d9e34d9a3ab1be592e10106bcdde9dff831ba50287f68026364736f6c63430008130033

Deployed Bytecode Sourcemap

4334:24765:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6056:73;;;;;;;;;;;;6087:42;6056:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;6056:73:0;;;;;;;;6305:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;6305:28:0;245:177:1;14644:153:0;;;;;;;;;;-1:-1:-1;14644:153:0;;;;;:::i;:::-;;:::i;:::-;;5505:107;;;;;;;;;;-1:-1:-1;5505:107: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;5505:107:0;931:365:1;10092:80:0;;;;;;;;;;-1:-1:-1;10164:5:0;;;;;;;;;;;;-1:-1:-1;;;10164:5:0;;;;10092:80;;;;;;;:::i;5995:26::-;;;;;;;;;;-1:-1:-1;5995:26:0;;;;;;;-1:-1:-1;;;;;5995:26:0;;;5962;;;;;;;;;;-1:-1:-1;5962:26:0;;;;;;;;;;;2267:14:1;;2260:22;2242:41;;2230:2;2215:18;5962:26:0;2102:187:1;10700:161:0;;;;;;;;;;-1:-1:-1;10700:161:0;;;;;:::i;:::-;;:::i;14073:140::-;;;;;;;;;;-1:-1:-1;14073:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;14171:34:0;14147:4;14171:34;;;:25;:34;;;;;;;;;14073:140;16760:114;;;;;;;;;;;;;:::i;18667:809::-;;;;;;;;;;-1:-1:-1;18667:809:0;;;;;:::i;:::-;;:::i;6716:26::-;;;;;;;;;;-1:-1:-1;6716:26:0;;;;;;;;9827:83;;;;;;;;;;;;;:::i;6749:31::-;;;;;;;;;;;;;;;;11370:306;;;;;;;;;;-1:-1:-1;11370:306:0;;;;;:::i;:::-;;:::i;16372:264::-;;;;;;;;;;-1:-1:-1;16372:264:0;;;;;:::i;:::-;;:::i;26396:447::-;;;;;;;;;;-1:-1:-1;26396:447:0;;;;;:::i;:::-;;:::i;6413:33::-;;;;;;;;;;;;;;;;14377:141;;;;;;;;;;;;;:::i;5759:42::-;;;;;;;;;;;;5797:4;5759:42;;6340:25;;;;;;;;;;;;;;;;9916:80;;;;;;;;;;-1:-1:-1;9916:80:0;;5180:2;6761:36:1;;6749:2;6734:18;9916:80:0;6619:184:1;14995:453:0;;;;;;;;;;-1:-1:-1;14995:453:0;;;;;:::i;:::-;;:::i;14526:110::-;;;;;;;;;;-1:-1:-1;14526:110:0;;;;;:::i;:::-;;:::i;13648:140::-;;;;;;;;;;-1:-1:-1;13648:140:0;;;;;:::i;:::-;;:::i;16091:273::-;;;;;;;;;;-1:-1:-1;16091:273:0;;;;;:::i;:::-;;:::i;6028:21::-;;;;;;;;;;-1:-1:-1;6028:21:0;;;;-1:-1:-1;;;;;6028:21:0;;;6569:34;;;;;;;;;;-1:-1:-1;6569:34:0;;;;;;;;16882:189;;;;;;;;;;-1:-1:-1;16882:189:0;;;;;:::i;:::-;;:::i;17786:217::-;;;;;;;;;;-1:-1:-1;17786:217:0;;;;;:::i;:::-;;:::i;8465:654::-;;;;;;;;;;-1:-1:-1;8465:654:0;;;;;:::i;:::-;;:::i;13796:127::-;;;;;;;;;;-1:-1:-1;13796:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;13887:28:0;13863:4;13887:28;;;:19;:28;;;;;;;;;13796:127;6610:36;;;;;;;;;;-1:-1:-1;6610:36:0;;;;;;;;;;;13931:134;;;;;;;;;;-1:-1:-1;13931:134:0;;;;;:::i;:::-;;:::i;6683:26::-;;;;;;;;;;;;;;;;12944:556;;;;;;;;;;-1:-1:-1;12944:556:0;;;;;:::i;:::-;;:::i;13508:132::-;;;;;;;;;;-1:-1:-1;13508:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;13602:30:0;13578:4;13602:30;;;:21;:30;;;;;;;;;13508:132;16644:108;;;;;;;;;;;;;:::i;10402:117::-;;;;;;;;;;-1:-1:-1;10402:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;10495:16:0;10468:7;10495:16;;;:7;:16;;;;;;;10402:117;9127:310;;;;;;;;;;;;;:::i;6136:92::-;;;;;;;;;;-1:-1:-1;6136:92:0;;;;-1:-1:-1;;;;;6136:92:0;;;14805:182;;;;;;;;;;;;;:::i;12372:564::-;;;;;;;;;;-1:-1:-1;12372:564:0;;;;;:::i;:::-;;:::i;10178:79::-;;;;;;;;;;-1:-1:-1;10248:6:0;;-1:-1:-1;;;;;10248:6:0;10178:79;;11187:175;;;;;;;;;;;;;:::i;25157:737::-;;;;;;;;;;;;;:::i;10002:84::-;;;;;;;;;;-1:-1:-1;10076:7:0;;;;;;;;;;;;-1:-1:-1;;;10076:7:0;;;;10002:84;;18282:103;;;;;;;;;;-1:-1:-1;18282:103:0;;;;;:::i;:::-;;:::i;10527:165::-;;;;;;;;;;-1:-1:-1;10527:165:0;;;;;:::i;:::-;;:::i;15456:428::-;;;;;;;;;;-1:-1:-1;15456:428:0;;;;;:::i;:::-;;:::i;26092:296::-;;;;;;;;;;-1:-1:-1;26092:296:0;;;;;:::i;:::-;;:::i;6372:34::-;;;;;;;;;;-1:-1:-1;6372:34:0;;;;;;;;18011:263;;;;;;;;;;-1:-1:-1;18011:263:0;;;;;:::i;:::-;;:::i;5621:129::-;;;;;;;;;;-1:-1:-1;5621:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8603:6:1;8636:15;;;8618:34;;8688:15;;;8683:2;8668:18;;8661:43;8740:15;;;8720:18;;;8713:43;;;;8792:15;;;8787:2;8772:18;;8765:43;8580:3;8565:19;5621:129:0;8370:444:1;6787:28:0;;;;;;;;;;;;;;;;10263:133;;;;;;;;;;-1:-1:-1;10263:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;10365:19:0;;;10347:7;10365:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10263:133;18393:266;;;;;;;;;;-1:-1:-1;18393:266:0;;;;;:::i;:::-;;:::i;11684:680::-;;;;;;;;;;-1:-1:-1;11684:680:0;;;;;:::i;:::-;;:::i;15892:191::-;;;;;;;;;;-1:-1:-1;15892:191:0;;;;;:::i;:::-;;:::i;25902:182::-;;;;;;;;;;;;;:::i;17079:699::-;;;;;;;;;;-1:-1:-1;17079:699:0;;;;;:::i;:::-;;:::i;6259:39::-;;;;;;;;;;-1:-1:-1;6259:39:0;;;;-1:-1:-1;;;6259:39:0;;;;;;14221:148;;;;;;;;;;-1:-1:-1;14221:148:0;;;;;:::i;:::-;;:::i;14644:153::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;;;;;;;;;14739:11:::1;::::0;:50:::1;::::0;-1:-1:-1;;;14739:50:0;;10002:14:1;;9995:22;14739:50:0::1;::::0;::::1;9977:41:1::0;10061:14;;10054:22;10034:18;;;10027:50;14739:11:0;;;::::1;-1:-1:-1::0;;;;;14739:11:0::1;::::0;:26:::1;::::0;9950:18:1;;14739:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14644:153:::0;;:::o;10700:161::-;10777:4;10794:37;10803:10;10815:7;10824:6;10794:8;:37::i;:::-;-1:-1:-1;10849:4:0;10700:161;;;;;:::o;16760:114::-;16807:7;16852:13;5180:2;16852;:13;:::i;:::-;16834:14;;:32;;;;:::i;:::-;16827:39;;16760:114;:::o;18667:809::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;18771:23:::1;::::0;::::1;;18763:32;;;::::0;::::1;;-1:-1:-1::0;;;;;18814:23:0;::::1;18832:4;18814:23;::::0;::::1;::::0;:69:::1;;-1:-1:-1::0;;;;;;18859:24:0;::::1;18878:4;18859:24;;18814:69;:107;;;;-1:-1:-1::0;18905:6:0::1;::::0;-1:-1:-1;;;;;18905:16:0;;::::1;:6:::0;::::1;:16;;18814:107;:146;;;;-1:-1:-1::0;18943:6:0::1;::::0;-1:-1:-1;;;;;18943:17:0;;::::1;:6:::0;::::1;:17;;18814:146;18806:170;;;::::0;-1:-1:-1;;;18806:170:0;;12027:2:1;18806:170:0::1;::::0;::::1;12009:21:1::0;12066:2;12046:18;;;12039:30;-1:-1:-1;;;12085:18:1;;;12078:41;12136:18;;18806:170:0::1;11825:335:1::0;18806:170:0::1;19001:7;-1:-1:-1::0;;;;;18991:17:0::1;:6;-1:-1:-1::0;;;;;18991:17:0::1;::::0;18987:482:::1;;-1:-1:-1::0;;;;;19025:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;:33;;19054:4:::1;-1:-1:-1::0;;19025:33:0;;::::1;::::0;::::1;::::0;;;19073:16:::1;:25:::0;;;;;:32;;;;::::1;::::0;::::1;::::0;;19120:34:::1;::::0;19025:26;;19120:19:::1;:34::i;:::-;18667:809:::0;;:::o;18987:482::-:1;-1:-1:-1::0;;;;;19187:25:0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;:32;;19215:4:::1;-1:-1:-1::0;;19187:32:0;;::::1;::::0;::::1;::::0;;;19234:26;;::::1;::::0;;;;;;:33;;;::::1;::::0;::::1;::::0;;19282:24;;;:16:::1;:24:::0;;;;;;:31;;;::::1;::::0;::::1;::::0;;19328:25;;;;;;:32;;;;::::1;::::0;::::1;::::0;;;19375:33:::1;::::0;19187:25;;19375:19:::1;:33::i;:::-;19423:34;19443:7;19452:4;19423:19;:34::i;9827:83::-:0;9882:7;5241:13;5180:2;5241;:13;:::i;:::-;5224:30;;5034:6;5224:30;:::i;11370:306::-;-1:-1:-1;;;;;11491:19:0;;11470:4;11491:19;;;:11;:19;;;;;;;;11511:10;11491:31;;;;;;;;-1:-1:-1;;11491:52:0;11487:126;;-1:-1:-1;;;;;11560:19:0;;;;;;:11;:19;;;;;;;;11580:10;11560:31;;;;;;;:41;;11595:6;;11560:19;:41;;11595:6;;11560:41;:::i;:::-;;;;-1:-1:-1;;11487:126:0;11632:36;11642:6;11650:9;11661:6;11632:9;:36::i;:::-;11625:43;11370:306;-1:-1:-1;;;;11370:306:0:o;16372:264::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;16514:3:::1;5241:13;5180:2;5241;:13;:::i;:::-;5224:30;::::0;5034:6:::1;5224:30;:::i;:::-;16504:13;;;;:::i;:::-;16492:7:::0;16481;5241:13:::1;5180:2;5241;:13;:::i;:::-;5224:30;::::0;5034:6:::1;5224:30;:::i;:::-;16471:17;;;;:::i;:::-;16470:29;;;;:::i;:::-;:48;;16462:109;;;::::0;-1:-1:-1;;;16462:109:0;;12673:2:1;16462:109:0::1;::::0;::::1;12655:21:1::0;12712:2;12692:18;;;12685:30;12751:34;12731:18;;;12724:62;12822:18;12802;;;12795:46;12858:19;;16462:109:0::1;12471:412:1::0;16462:109:0::1;16621:7:::0;16610;5241:13:::1;5180:2;5241;:13;:::i;:::-;5224:30;::::0;5034:6:::1;5224:30;:::i;:::-;16600:17;;;;:::i;:::-;16599:29;;;;:::i;:::-;16582:14;:46:::0;-1:-1:-1;;16372:264:0:o;26396:447::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;26531:7:::1;:14;26512:8;:15;:33;26504:67;;;::::0;-1:-1:-1;;;26504:67:0;;13090:2:1;26504:67:0::1;::::0;::::1;13072:21:1::0;13129:2;13109:18;;;13102:30;13168:23;13148:18;;;13141:51;13209:18;;26504:67:0::1;12888:345:1::0;26504:67:0::1;26587:8;26582:254;26605:8;:15;26601:1;:19;;;26582:254;;;26686:13;5180:2;26686;:13;:::i;:::-;26675:7;26683:1;26675:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;26660:10;10468:7:::0;10495:16;;;:7;:16;;;;;;26650:49:::1;;26642:80;;;::::0;-1:-1:-1;;;26642:80:0;;13572:2:1;26642:80:0::1;::::0;::::1;13554:21:1::0;13611:2;13591:18;;;13584:30;13650:20;13630:18;;;13623:48;13688:18;;26642:80:0::1;13370:342:1::0;26642:80:0::1;26737:87;26754:10;26766:8;26775:1;26766:11;;;;;;;;;;:::i;:::-;;;;;;;5180:2;26790;:13;;;;:::i;:::-;26779:7;26787:1;26779:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;26805:5;26812::::0;26819:4:::1;26737:16;:87::i;:::-;-1:-1:-1::0;26622:3:0;::::1;::::0;::::1;:::i;:::-;;;;26582:254;;;;26396:447:::0;;:::o;14377:141::-;10495:7;:16;;;;6087:42;14430:7;10495:16;;;;;14430:7;;14469:39;;;:::i;:::-;5241:13;5180:2;5241;:13;:::i;:::-;5224:30;;5034:6;5224:30;:::i;:::-;14458:51;;;;:::i;14995:453::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;15103:14:::1;::::0;::::1;;15102:15;15094:45;;;::::0;-1:-1:-1;;;15094:45:0;;14251:2:1;15094:45:0::1;::::0;::::1;14233:21:1::0;14290:2;14270:18;;;14263:30;14329:19;14309:18;;;14302:47;14366:18;;15094:45:0::1;14049:341:1::0;15094:45:0::1;5797:4;15158:6;:21;;;;:65;;;;;5847:4;15200:7;:23;;;;15158:65;:117;;;;;5901:4;15244:11;:31;;;;15158:117;15150:170;;;::::0;-1:-1:-1;;;15150:170:0;;14597:2:1;15150:170:0::1;::::0;::::1;14579:21:1::0;14636:2;14616:18;;;14609:30;14675:25;14655:18;;;14648:53;14718:18;;15150:170:0::1;14395:347:1::0;15150:170:0::1;15331:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;15367:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;15405:35:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;14995:453::o;14526:110::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;14595:11:::1;::::0;:33:::1;::::0;-1:-1:-1;;;14595:33:0;;-1:-1:-1;;;;;178:55:1;;;14595:33:0::1;::::0;::::1;160:74:1::0;14595:11:0;;;::::1;::::0;;::::1;::::0;:24:::1;::::0;133:18:1;;14595:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14526:110:::0;:::o;13648:140::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;-1:-1:-1;;;;;13740:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;13740:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13648:140::o;16091:273::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;16236:4:::1;5241:13;5180:2;5241;:13;:::i;:::-;5224:30;::::0;5034:6:::1;5224:30;:::i;:::-;16222:11;::::0;16232:1:::1;16222:11;:::i;:::-;:18;;;;:::i;:::-;16210:7:::0;16199;5241:13:::1;5180:2;5241;:13;:::i;:::-;5224:30;::::0;5034:6:::1;5224:30;:::i;:::-;16189:17;;;;:::i;:::-;16188:29;;;;:::i;:::-;:53;;16180:121;;;::::0;-1:-1:-1;;;16180:121:0;;14949:2:1;16180:121:0::1;::::0;::::1;14931:21:1::0;14988:2;14968:18;;;14961:30;15027:34;15007:18;;;15000:62;15098:25;15078:18;;;15071:53;15141:19;;16180:121:0::1;14747:419:1::0;16180:121:0::1;16349:7:::0;16338;5241:13:::1;5180:2;5241;:13;:::i;:::-;5224:30;::::0;5034:6:::1;5224:30;:::i;:::-;16328:17;;;;:::i;:::-;16327:29;;;;:::i;:::-;16312:12;:44:::0;-1:-1:-1;;16091:273:0:o;16882:189::-;17011:6;;-1:-1:-1;;;;;17011:6:0;16973:7;10495:16;;;:7;:16;;;;;;5948:5;;17001:41;;17021:21;;17001:41;:::i;:::-;17000:62;;;;:::i;17786:217::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;17916:3:::1;17890:22;:29;;17882:64;;;::::0;-1:-1:-1;;;17882:64:0;;15373:2:1;17882:64:0::1;::::0;::::1;15355:21:1::0;15412:2;15392:18;;;15385:30;15451:24;15431:18;;;15424:52;15493:18;;17882:64:0::1;15171:346:1::0;17882:64:0::1;17957:13;:38:::0;17786:217::o;8465:654::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;-1:-1:-1;;;;;8544:22:0;::::1;8536:96;;;::::0;-1:-1:-1;;;8536:96:0;;15724:2:1;8536:96:0::1;::::0;::::1;15706:21:1::0;15763:2;15743:18;;;15736:30;15802:34;15782:18;;;15775:62;15873:31;15853:18;;;15846:59;15922:19;;8536:96:0::1;15522:425:1::0;8536:96:0::1;-1:-1:-1::0;;;;;;;8651:16:0;::::1;::::0;8643:90:::1;;;::::0;-1:-1:-1;;;8643:90:0;;15724:2:1;8643:90:0::1;::::0;::::1;15706:21:1::0;15763:2;15743:18;;;15736:30;15802:34;15782:18;;;15775:62;15873:31;15853:18;;;15846:59;15922:19;;8643:90:0::1;15522:425:1::0;8643:90:0::1;8764:6;::::0;8744:34:::1;::::0;-1:-1:-1;;;;;8764:6:0::1;;8744:19;:34::i;:::-;8789:35;8809:8;8819:4;8789:19;:35::i;:::-;8859:6;::::0;-1:-1:-1;;;;;8859:6:0::1;8869:1;10495:16:::0;;;:7;:16;;;;;;8849:21;8845:127:::1;;8904:6;::::0;-1:-1:-1;;;;;8904:6:0::1;10468:7:::0;10495:16;;;:7;:16;;;;;;8887:73:::1;::::0;8904:6;8912:8;;8922:17:::1;10402:117:::0;8887:73:::1;;8845:127;9011:6;::::0;;-1:-1:-1;;;;;9028:17:0;;::::1;-1:-1:-1::0;;;;;;9028:17:0;::::1;::::0;::::1;::::0;;;9061:40:::1;::::0;9011:6;::::1;::::0;9028:17;9011:6;;9061:40:::1;::::0;8992:16:::1;::::0;9061:40:::1;8525:594;8465:654:::0;:::o;13931:134::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;-1:-1:-1;;;;;14019:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;14019:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13931:134::o;12944:556::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;13019:14:::1;::::0;::::1;;13018:15;13010:24;;;::::0;::::1;;13069:4;-1:-1:-1::0;;;;;13053:21:0;::::1;::::0;13045:48:::1;;;::::0;-1:-1:-1;;;13045:48:0;;16154:2:1;13045:48:0::1;::::0;::::1;16136:21:1::0;16193:2;16173:18;;;16166:30;16232:16;16212:18;;;16205:44;16266:18;;13045:48:0::1;15952:338:1::0;13045:48:0::1;13104:11;:31:::0;;-1:-1:-1;;;;;;13104:31:0::1;::::0;-1:-1:-1;;;;;13104:31:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;13150:23:::1;::::0;;-1:-1:-1;;;13150:23:0;;;;:11;;;::::1;::::0;;::::1;::::0;:21:::1;::::0;:23:::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;13150:11:0;:23:::1;;;;;;;;;;-1:-1:-1::0;13150:23:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;13150:23:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;13146:347;;13482:8;::::0;::::1;13146:347;13237:9;:29:::0;;-1:-1:-1;;13237:29:0::1;;-1:-1:-1::0;;;;;13237:29:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;13268:6:::1;:22:::0;;-1:-1:-1;;;;;;13268:22:0::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;13292:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;13292:22:0::1;-1:-1:-1::0;13292:22:0::1;::::0;;13338:6:::1;::::0;13354:9;;13329:55:::1;::::0;13338:6;::::1;::::0;13354:9;;::::1;;-1:-1:-1::0;;13329:8:0::1;:55::i;:::-;13431:9;::::0;13399:62:::1;::::0;13416:4:::1;::::0;13431:9:::1;::::0;::::1;-1:-1:-1::0;;;;;13431:9:0::1;-1:-1:-1::0;;13399:8:0::1;:62::i;13146:347::-;12944:556:::0;:::o;16644:108::-;16687:7;16730:13;5180:2;16730;:13;:::i;:::-;16714:12;;:30;;;;:::i;9127:310::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;9194:14:::1;::::0;::::1;;9186:74;;;::::0;-1:-1:-1;;;9186:74:0;;16887:2:1;9186:74:0::1;::::0;::::1;16869:21:1::0;16926:2;16906:18;;;16899:30;16965:34;16945:18;;;16938:62;17036:17;17016:18;;;17009:45;17071:19;;9186:74:0::1;16685:411:1::0;9186:74:0::1;9291:6;::::0;9271:34:::1;::::0;-1:-1:-1;;;;;9291:6:0::1;;9271:19;:34::i;:::-;9335:6;::::0;;-1:-1:-1;;;;;;9352:19:0;::::1;::::0;;;9387:42:::1;::::0;-1:-1:-1;;;;;9335:6:0;;::::1;::::0;9316:16:::1;::::0;9335:6;;9387:42:::1;::::0;9316:16;;9387:42:::1;9175:262;9127:310::o:0;14805:182::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;14958:14:::1;:21:::0;;-1:-1:-1;;14958:21:0::1;14975:4;14958:21;::::0;;14805:182::o;12372:564::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;12454:7:::1;12449:480;;-1:-1:-1::0;;;;;12478:13:0;;::::1;12494:5;12478:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;12478:21:0::1;::::0;;12514:11:::1;::::0;:34;;-1:-1:-1;;;12514:34:0;;::::1;::::0;::::1;17269:74:1::0;;;;17359:18;;;17352:50;;;;12514:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;17242:18:1;;12514:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;12449:480;12585:17;::::0;:22;12581:135:::1;;12674:6;12654:17;;12636:15;:35;;;;:::i;:::-;:44;12628:72;;;::::0;-1:-1:-1;;;12628:72:0;;17615:2:1;12628:72:0::1;::::0;::::1;17597:21:1::0;17654:2;17634:18;;;17627:30;17693:17;17673:18;;;17666:45;17728:18;;12628:72:0::1;17413:339:1::0;12628:72:0::1;-1:-1:-1::0;;;;;12739:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;::::1;;12738:14;12730:54;;;::::0;-1:-1:-1;;;12730:54:0;;17959:2:1;12730:54:0::1;::::0;::::1;17941:21:1::0;17998:2;17978:18;;;17971:30;18037:29;18017:18;;;18010:57;18084:18;;12730:54:0::1;17757:351:1::0;12730:54:0::1;-1:-1:-1::0;;;;;12799:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;12799:20:0::1;12815:4;12799:20:::0;;::::1;::::0;;;12854:15:::1;12834:17;:35:::0;12884:11:::1;::::0;:33;;-1:-1:-1;;;12884:33:0;;::::1;::::0;::::1;17269:74:1::0;;;;17359:18;;;17352:50;12884:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;17242:18:1;;12884:33:0::1;17101:307:1::0;11187:175:0;8319:6;;11253:4;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;11302:9:::1;::::0;11270:62:::1;::::0;11287:4:::1;::::0;11302:9:::1;::::0;::::1;-1:-1:-1::0;;;;;11302:9:0::1;-1:-1:-1::0;;11270:8:0::1;:62::i;:::-;-1:-1:-1::0;11350:4:0::1;11187:175:::0;:::o;25157:737::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;25219:14:::1;::::0;::::1;;25218:15;25210:52;;;::::0;-1:-1:-1;;;25210:52:0;;18315:2:1;25210:52:0::1;::::0;::::1;18297:21:1::0;18354:2;18334:18;;;18327:30;18393:26;18373:18;;;18366:54;18437:18;;25210:52:0::1;18113:348:1::0;25210:52:0::1;25281:16;::::0;::::1;::::0;::::1;;;25273:53;;;::::0;-1:-1:-1;;;25273:53:0;;18668:2:1;25273:53:0::1;::::0;::::1;18650:21:1::0;18707:2;18687:18;;;18680:30;18746:26;18726:18;;;18719:54;18790:18;;25273:53:0::1;18466:348:1::0;25273:53:0::1;25349:11;::::0;;;::::1;-1:-1:-1::0;;;;;25349:11:0::1;25337:106;;25391:11;:40:::0;;-1:-1:-1;;;;;;25391:40:0::1;25425:4;25391:40:::0;::::1;;::::0;;25337:106:::1;25457:11;::::0;25479:6:::1;::::0;25457:87:::1;::::0;-1:-1:-1;;;25457:87:0;;-1:-1:-1;;;;;25479:6:0;;::::1;25457:87;::::0;::::1;19042:74:1::0;19164:10;25494:12:0::1;19152:23:1::0;19132:18;;;19125:51;19224:18;25516:15:0::1;19212:31:1::0;19192:18;;;19185:59;5180:2:0::1;19260:18:1::0;;;19253:45;25457:11:0;;;::::1;;::::0;:21:::1;::::0;19014:19:1;;25457:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;25570:11:0::1;::::0;25601:6:::1;::::0;-1:-1:-1;;;;;25601:6:0;;::::1;10468:7:::0;10495:16;;;:7;:16;;;;;;;;25570:39;;-1:-1:-1;;;25570:39:0;;::::1;::::0;::::1;391:25:1::0;;;;25570:11:0;;;::::1;;::::0;:20:::1;::::0;364:18:1;;25570:39:0::1;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;25570:39:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;25570:39:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;25566:207:::0;::::1;;25681:13;:29:::0;;;;25725:10:::1;:27:::0;25566:207:::1;25783:14;:21:::0;;-1:-1:-1;;25783:21:0;;::::1;25800:4;25783:21;::::0;;;25815:23:::1;:31:::0;;;;::::1;::::0;;25871:15:::1;25857:11;:29:::0;25157:737::o;18282:103::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;18353:14:::1;:24:::0;;-1:-1:-1;;18353:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18282:103::o;10527:165::-;10605:4;10622:40;10632:10;10644:9;10655:6;10622:9;:40::i;:::-;-1:-1:-1;10680:4:0;;10527:165;-1:-1:-1;;;10527:165:0:o;15456:428::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;15557:7:::1;:25:::0;;::::1;15633:29:::0;;::::1;::::0;::::1;-1:-1:-1::0;;15557:25:0;;::::1;::::0;::::1;15633:29:::0;-1:-1:-1;;15633:29:0;;;;;;;15593;;::::1;15633::::0;::::1;::::0;;15575:7;15693:21:::1;15653:9:::0;15613;15693:21:::1;:::i;:::-;:31;;;;:::i;:::-;15673:7;:51:::0;;-1:-1:-1;;15673:51:0::1;::::0;::::1;::::0;;::::1;;;::::0;;15770:9:::1;:17:::0;-1:-1:-1;;15751:36:0::1;::::0;15770:17;;::::1;::::0;::::1;::::0;15751:16:::1;:36;:::i;:::-;15806:7;:17:::0;15735:52:::1;::::0;;::::1;::::0;-1:-1:-1;15806:17:0;;::::1;;:26:::0;-1:-1:-1;15806:26:0::1;15798:78;;;::::0;-1:-1:-1;;;15798:78:0;;19934:2:1;15798:78:0::1;::::0;::::1;19916:21:1::0;19973:2;19953:18;;;19946:30;20012:34;19992:18;;;19985:62;-1:-1:-1;;;20063:18:1;;;20056:37;20110:19;;15798:78:0::1;19732:403:1::0;15798:78:0::1;15546:338;15456:428:::0;;;:::o;26092:296::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;26170:16:::1;::::0;::::1;::::0;::::1;;;26166:111;;;26228:4;-1:-1:-1::0;;;;;26211:22:0;::::1;::::0;26203:62:::1;;;::::0;-1:-1:-1;;;26203:62:0;;20342:2:1;26203:62:0::1;::::0;::::1;20324:21:1::0;20381:2;20361:18;;;20354:30;20420:29;20400:18;;;20393:57;20467:18;;26203:62:0::1;20140:351:1::0;26203:62:0::1;26341:6;::::0;26349:30:::1;::::0;-1:-1:-1;;;26349:30:0;;26373:4:::1;26349:30;::::0;::::1;160:74:1::0;26309:5:0;;-1:-1:-1;;;;;26326:14:0;;::::1;::::0;::::1;::::0;26341:6;;;::::1;::::0;26326:14;;26349:15:::1;::::0;133:18:1;;26349:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26326:54;::::0;-1:-1:-1;;;;;;26326:54:0::1;::::0;;;;;;-1:-1:-1;;;;;20877:55:1;;;26326:54:0::1;::::0;::::1;20859:74:1::0;20949:18;;;20942:34;20832:18;;26326:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18011:263::-:0;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;18120:19:::1;:33:::0;;-1:-1:-1;;;;18120:33:0::1;-1:-1:-1::0;;;18120:33:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;18164:22:::1;:47:::0;;-1:-1:-1;;18164:47:0::1;::::0;::::1;;;::::0;;18227:39:::1;::::0;2242:41:1;;;18227:39:0::1;::::0;2230:2:1;2215:18;18227:39:0::1;;;;;;;;18011:263:::0;;:::o;18393:266::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;18572:23:::1;18576:19:::0;18572:2:::1;:23;:::i;:::-;18560:35;::::0;:9;:35:::1;:::i;:::-;18541:16;:54:::0;18631:20:::1;18635:16:::0;18631:2:::1;:20;:::i;:::-;18622:29;::::0;:6;:29:::1;:::i;:::-;18606:13;:45:::0;-1:-1:-1;;;;18393:266:0:o;11684:680::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;11764:16:::1;::::0;::::1;::::0;::::1;;;11763:17;11755:60;;;::::0;-1:-1:-1;;;11755:60:0;;21575:2:1;11755:60:0::1;::::0;::::1;21557:21:1::0;21614:2;21594:18;;;21587:30;21653:32;21633:18;;;21626:60;21703:18;;11755:60:0::1;21373:354:1::0;11755:60:0::1;11826:20;11859:9;11826:43;;11880:16;11910:10;-1:-1:-1::0;;;;;11910:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11899:40:0::1;;11948:4;11955:10;-1:-1:-1::0;;;;;11955:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11899:74;::::0;-1:-1:-1;;;;;;11899:74:0::1;::::0;;;;;;-1:-1:-1;;;;;22241:15:1;;;11899:74:0::1;::::0;::::1;22223:34:1::0;22293:15;;22273:18;;;22266:43;22135:18;;11899:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11992:6;::::0;-1:-1:-1;;;;;11992:6:0;;::::1;12002:5;11984:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;11984:23:0::1;::::0;;11880:93;;-1:-1:-1;12022:22:0;::::1;12018:200;;12081:10;-1:-1:-1::0;;;;;12081:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12070:43:0::1;;12122:4;12129:10;-1:-1:-1::0;;;;;12129:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12070:77;::::0;-1:-1:-1;;;;;;12070:77:0::1;::::0;;;;;;-1:-1:-1;;;;;22241:15:1;;;12070:77:0::1;::::0;::::1;22223:34:1::0;22293:15;;22273:18;;;22266:43;22135:18;;12070:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12061:6;:86:::0;;-1:-1:-1;;;;;;12061:86:0::1;-1:-1:-1::0;;;;;12061:86:0;;;::::1;::::0;;;::::1;::::0;;12018:200:::1;;;12189:6;:17:::0;;-1:-1:-1;;;;;;12189:17:0::1;-1:-1:-1::0;;;;;12189:17:0;::::1;;::::0;;12018:200:::1;12228:9;:22:::0;;-1:-1:-1;;12228:22:0::1;;-1:-1:-1::0;;;;;12228:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;12269:6:::1;::::0;;::::1;-1:-1:-1::0;12261:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;12261:22:0::1;-1:-1:-1::0;12261:22:0::1;::::0;;12326:9;;12294:62:::1;::::0;12311:4:::1;::::0;12326:9;::::1;;-1:-1:-1::0;;12294:8:0::1;:62::i;15892:191::-:0;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;-1:-1:-1;;;;;15977:23:0;::::1;15969:59;;;::::0;-1:-1:-1;;;15969:59:0;;22522:2:1;15969:59:0::1;::::0;::::1;22504:21:1::0;22561:2;22541:18;;;22534:30;22600:25;22580:18;;;22573:53;22643:18;;15969:59:0::1;22320:347:1::0;15969:59:0::1;16039:15;:36:::0;;-1:-1:-1;;;;;;16039:36:0::1;-1:-1:-1::0;;;;;16039:36:0;;;::::1;::::0;;;::::1;::::0;;15892:191::o;25902:182::-;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;25969:16:::1;::::0;::::1;::::0;::::1;;;25968:17;25960:58;;;::::0;-1:-1:-1;;;25960:58:0;;22874:2:1;25960:58:0::1;::::0;::::1;22856:21:1::0;22913:2;22893:18;;;22886:30;22952;22932:18;;;22925:58;23000:18;;25960:58:0::1;22672:352:1::0;25960:58:0::1;26037:6;::::0;26029:47:::1;::::0;-1:-1:-1;;;;;26037:6:0;;::::1;::::0;26054:21:::1;26029:47:::0;::::1;;;::::0;26037:6:::1;26029:47:::0;26037:6;26029:47;26054:21;26037:6;26029:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;17079:699:::0;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;17279:16;17259;5241:13:::1;5180:2;5241;:13;:::i;:::-;5224:30;::::0;5034:6:::1;5224:30;:::i;:::-;17249:26;;;;:::i;:::-;17248:47;;;;:::i;:::-;17232:13;:63:::0;17347:13;17330;5241::::1;5180:2;5241;:13;:::i;:::-;5224:30;::::0;5034:6:::1;5224:30;:::i;:::-;17320:23;;;;:::i;:::-;17319:41;;;;:::i;:::-;17306:10;:54:::0;;;17379:13:::1;::::0;:27:::1;;17371:73;;;::::0;-1:-1:-1;;;17371:73:0;;23231:2:1;17371:73:0::1;::::0;::::1;23213:21:1::0;23270:2;23250:18;;;23243:30;23309:34;23289:18;;;23282:62;-1:-1:-1;;;23360:18:1;;;23353:31;23401:19;;17371:73:0::1;23029:397:1::0;17371:73:0::1;17488:6;::::0;-1:-1:-1;;;;;17488:6:0::1;10468:7:::0;10495:16;;;:7;:16;;;;;;5948:5:::1;::::0;17478:23:::1;::::0;17498:3:::1;17478:23;:::i;:::-;17477:44;;;;:::i;:::-;17463:10;;:58;;17455:106;;;::::0;-1:-1:-1;;;17455:106:0;;23633:2:1;17455:106:0::1;::::0;::::1;23615:21:1::0;23672:2;23652:18;;;23645:30;23711:34;23691:18;;;23684:62;-1:-1:-1;;;23762:18:1;;;23755:33;23805:19;;17455:106:0::1;23431:399:1::0;17455:106:0::1;17604:9;5241:13;5180:2;5241;:13;:::i;:::-;5224:30;::::0;5034:6:::1;5224:30;:::i;:::-;17594:19;;;;:::i;:::-;17580:10;;:33;;17572:92;;;::::0;-1:-1:-1;;;17572:92:0;;24037:2:1;17572:92:0::1;::::0;::::1;24019:21:1::0;24076:2;24056:18;;;24049:30;24115:34;24095:18;;;24088:62;-1:-1:-1;;;24166:18:1;;;24159:44;24220:19;;17572:92:0::1;23835:410:1::0;17572:92:0::1;17710:9;5241:13;5180:2;5241;:13;:::i;:::-;5224:30;::::0;5034:6:::1;5224:30;:::i;:::-;17700:19;;;;:::i;:::-;17683:13;;:36;;17675:95;;;::::0;-1:-1:-1;;;17675:95:0;;24037:2:1;17675:95:0::1;::::0;::::1;24019:21:1::0;24076:2;24056:18;;;24049:30;24115:34;24095:18;;;24088:62;-1:-1:-1;;;24166:18:1;;;24159:44;24220:19;;17675:95:0::1;23835:410:1::0;14221:148:0;8319:6;;-1:-1:-1;;;;;8319:6:0;8329:10;8319:20;8311:50;;;;-1:-1:-1;;;8311:50:0;;9671:2:1;8311:50:0;;;9653:21:1;9710:2;9690:18;;;9683:30;-1:-1:-1;;;;;;;;;;;9729:18:1;;;9722:47;9786:18;;8311:50:0;9469:341:1;8311:50:0;-1:-1:-1;;;;;14317:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;14317:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14221:148::o;10869:310::-;-1:-1:-1;;;;;10964:20:0;;10956:52;;;;-1:-1:-1;;;10956:52:0;;24452:2:1;10956:52:0;;;24434:21:1;24491:2;24471:18;;;24464:30;-1:-1:-1;;;24510:18:1;;;24503:49;24569:18;;10956:52:0;24250:343:1;10956:52:0;-1:-1:-1;;;;;11027:21:0;;11019:53;;;;-1:-1:-1;;;11019:53:0;;24452:2:1;11019:53:0;;;24434:21:1;24491:2;24471:18;;;24464:30;-1:-1:-1;;;24510:18:1;;;24503:49;24569:18;;11019:53:0;24250:343:1;11019:53:0;-1:-1:-1;;;;;11085:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;11138:33;;391:25:1;;;11138:33:0;;364:18:1;11138:33:0;;;;;;;10869:310;;;:::o;19938:2723::-;20017:4;-1:-1:-1;;;;;20042:18:0;;20034:68;;;;-1:-1:-1;;;20034:68:0;;24800:2:1;20034:68:0;;;24782:21:1;24839:2;24819:18;;;24812:30;24878:34;24858:18;;;24851:62;-1:-1:-1;;;24929:18:1;;;24922:35;24974:19;;20034:68:0;24598:401:1;20034:68:0;-1:-1:-1;;;;;20121:16:0;;20113:64;;;;-1:-1:-1;;;20113:64:0;;25206:2:1;20113:64:0;;;25188:21:1;25245:2;25225:18;;;25218:30;25284:34;25264:18;;;25257:62;-1:-1:-1;;;25335:18:1;;;25328:33;25378:19;;20113:64:0;25004:399:1;20113:64:0;20205:1;20196:6;:10;20188:64;;;;-1:-1:-1;;;20188:64:0;;25610:2:1;20188:64:0;;;25592:21:1;25649:2;25629:18;;;25622:30;25688:34;25668:18;;;25661:62;-1:-1:-1;;;25739:18:1;;;25732:39;25788:19;;20188:64:0;25408:405:1;20188:64:0;-1:-1:-1;;;;;20351:13:0;;20263:8;20351:13;;;:7;:13;;;;;;20263:8;;;;20351:13;;20347:162;;;20387:4;20381:10;;20347:162;;;-1:-1:-1;;;;;20413:11:0;;;;;;:7;:11;;;;;;;;20409:100;;;20448:4;20441:11;;20409:100;;;-1:-1:-1;20493:4:0;20409:100;20523:20;20534:4;20540:2;20523:10;:20::i;:::-;20519:874;;;20564:14;;;;20560:319;;20604:5;20599:265;;20634:34;;-1:-1:-1;;;20634:34:0;;26020:2:1;20634:34:0;;;26002:21:1;26059:2;26039:18;;;26032:30;26098:26;26078:18;;;26071:54;26142:18;;20634:34:0;25818:348:1;20599:265:0;-1:-1:-1;;;;;20699:31:0;;;;;;:25;:31;;;;;;;;20698:32;:66;;;;-1:-1:-1;;;;;;20735:29:0;;;;;;:25;:29;;;;;;;;20734:30;20698:66;20694:170;;;20789:55;;-1:-1:-1;;;20789:55:0;;26373:2:1;20789:55:0;;;26355:21:1;26412:2;26392:18;;;26385:30;26451:34;26431:18;;;26424:62;-1:-1:-1;;;26502:18:1;;;26495:43;26555:19;;20789:55:0;26171:409:1;20694:170:0;20897:3;:11;;;;20904:4;20897:11;20893:232;;;-1:-1:-1;;;;;20933:27:0;;;;;;:21;:27;;;;;;;;20932:28;:58;;;;-1:-1:-1;;;;;;20965:25:0;;;;;;:21;:25;;;;;;;;20964:26;20932:58;20928:182;;;21033:12;;21023:6;:22;;21015:75;;;;-1:-1:-1;;;21015:75:0;;26787:2:1;21015:75:0;;;26769:21:1;26826:2;26806:18;;;26799:30;26865:34;26845:18;;;26838:62;-1:-1:-1;;;26916:18:1;;;26909:38;26964:19;;21015:75:0;26585:404:1;21015:75:0;21157:9;;-1:-1:-1;;;;;21143:24:0;;;21157:9;;;;;21143:24;;;;:33;;;21172:4;21171:5;21143:33;21139:243;;;-1:-1:-1;;;;;21202:25:0;;;;;;:21;:25;;;;;;;;21197:170;;21286:14;;21276:6;21260:13;21270:2;-1:-1:-1;;;;;10495:16:0;10468:7;10495:16;;;:7;:16;;;;;;;10402:117;21260:13;:22;;;;:::i;:::-;:40;;21252:95;;;;-1:-1:-1;;;21252:95:0;;27196:2:1;21252:95:0;;;27178:21:1;27235:2;27215:18;;;27208:30;27274:34;27254:18;;;27247:62;-1:-1:-1;;;27325:18:1;;;27318:40;27375:19;;21252:95:0;26994:406:1;21252:95:0;21409:4;21405:1179;;;21435:6;;-1:-1:-1;;;21435:6:0;;;;21430:1143;;21466:19;;-1:-1:-1;;;21466:19:0;;;;:64;;;;-1:-1:-1;;;;;;21510:20:0;;;;;;:16;:20;;;;;;;;21509:21;21466:64;:111;;;;-1:-1:-1;;;;;;21555:22:0;;;;;;:16;:22;;;;;;;;21554:23;21466:111;21462:661;;;21671:4;21622:28;10495:16;;;:7;:16;;;;;;21728:13;;21704:37;;21700:404;;21788:10;;21829:22;;;;21825:97;;;21886:13;;21876:6;;-1:-1:-1;;;;;21876:6:0;10468:7;10495:16;;;:7;:16;;;;;;5948:5;;21866:33;;;:::i;:::-;21865:54;;;;:::i;:::-;21855:64;;21825:97;21976:7;21952:20;:31;21948:72;;22010:7;21987:30;;21948:72;22046:34;22059:20;22046:12;:34::i;:::-;21743:361;21700:404;21599:524;21462:661;22147:14;;;;22143:415;;;22262:16;;22204:21;;22252:26;;22248:291;;;22321:13;;22311:7;:23;22307:209;;;22367:22;22375:13;;22367:7;:22::i;:::-;22307:209;;;22427:12;;22423:93;;22472:16;22480:7;22472;:16::i;:::-;22163:395;22143:415;22601:52;22618:4;22624:2;22628:6;22636:3;22641:4;22647:5;22601:16;:52::i;:::-;22594:59;19938:2723;-1:-1:-1;;;;;;;19938:2723:0:o;26851:1055::-;26970:4;26991:20;27002:4;27008:2;26991:10;:20::i;:::-;26987:228;;;27046:11;;:39;;-1:-1:-1;;;27046:39:0;;-1:-1:-1;;;;;27686:15:1;;;27046:39:0;;;27668:34:1;27738:15;;;27718:18;;;27711:43;27770:18;;;27763:34;;;27015:12:0;;27046:11;;;;;:21;;27580:18:1;;27046:39:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;27046:39:0;;;;;;;;-1:-1:-1;;27046:39:0;;;;;;;;;;;;:::i;:::-;;;27042:122;;27153:8;;;27042:122;27136:5;-1:-1:-1;27182:7:0;27178:26;;27193:8;;;27178:26;27013:202;26987:228;-1:-1:-1;;;;;27259:25:0;;27225:12;27259:25;;;:19;:25;;;;;;27240:4;;27259:25;;;:52;;-1:-1:-1;;;;;;27288:23:0;;;;;;:19;:23;;;;;;;;27259:52;27255:99;;;-1:-1:-1;27337:5:0;27255:99;-1:-1:-1;;;;;27364:13:0;;;;;;:7;:13;;;;;:23;;27381:6;;27364:13;:23;;27381:6;;27364:23;:::i;:::-;;;;-1:-1:-1;27398:22:0;;-1:-1:-1;27424:7:0;27423:55;;27472:6;27423:55;;;27435:34;27445:4;27451:6;27459:3;27464:4;27435:9;:34::i;:::-;-1:-1:-1;;;;;27489:11:0;;;;;;:7;:11;;;;;:29;;27398:80;;-1:-1:-1;27398:80:0;;27489:11;;;:29;;27398:80;;27489:29;:::i;:::-;;;;;;;;27549:2;-1:-1:-1;;;;;27534:34:0;27543:4;-1:-1:-1;;;;;27534:34:0;;27553:14;27534:34;;;;391:25:1;;379:2;364:18;;245:177;27534:34:0;;;;;;;;27584:16;;;;;;;27579:298;;27617:28;27636:4;27642:2;27617:18;:28::i;:::-;27665:16;;;;;;;27664:17;:41;;;;;27685:20;27696:4;27702:2;27685:10;:20::i;:::-;27664:77;;;;-1:-1:-1;;;;;;27710:31:0;;;;;;:25;:31;;;;;;;;27709:32;27664:77;:111;;;;-1:-1:-1;;;;;;27746:29:0;;;;;;:25;:29;;;;;;;;27745:30;27664:111;:121;;;;;27780:5;27779:6;27664:121;27660:206;;;27806:44;;-1:-1:-1;;;27806:44:0;;28010:2:1;27806:44:0;;;27992:21:1;28049:2;28029:18;;;28022:30;28088:34;28068:18;;;28061:62;-1:-1:-1;;;28139:18:1;;;28132:32;28181:19;;27806:44:0;27808:398:1;27660:206:0;-1:-1:-1;27894:4:0;;26851:1055;-1:-1:-1;;;;;;;;26851:1055:0:o;19484:446::-;19585:6;;19553:4;;-1:-1:-1;;;;;19577:14:0;;;19585:6;;19577:14;;;;:43;;-1:-1:-1;19614:6:0;;-1:-1:-1;;;;;19608:12:0;;;19614:6;;19608:12;;19577:43;:79;;;;-1:-1:-1;19650:6:0;;-1:-1:-1;;;;;19650:6:0;19637:9;:19;;19577:79;:118;;;;-1:-1:-1;;;;;;19674:21:0;;;;;;:17;:21;;;;;;;;19673:22;19577:118;:159;;;;-1:-1:-1;;;;;;19713:23:0;;;;;;:17;:23;;;;;;;;19712:24;19577:159;:186;;;;-1:-1:-1;;;;;;19753:10:0;;6087:42;19753:10;;19577:186;:219;;;;-1:-1:-1;;;;;;19780:16:0;;;;19577:219;:257;;;;-1:-1:-1;;;;;;19813:21:0;;19829:4;19813:21;;19577:257;:302;;;;-1:-1:-1;19867:11:0;;-1:-1:-1;;;;;19851:28:0;;;19867:11;;;;;19851:28;;19577:302;:345;;;;-1:-1:-1;19910:11:0;;-1:-1:-1;;;;;19896:26:0;;;19910:11;;;;;19896:26;;19577:345;19570:352;19484:446;-1:-1:-1;;;19484:446:0:o;22669:1909::-;6980:6;:13;;-1:-1:-1;;;;6980:13:0;-1:-1:-1;;;6980:13:0;;;22752:30:::1;::::0;;::::1;::::0;::::1;::::0;;22775:7:::1;22752:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;6980:13;22797:21;22793:60:::1;;22835:7;;;22793:60;22889:4;22869:26;::::0;;;:11:::1;:26;::::0;;;;;;;22904:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;22904:9:0::1;22869:46:::0;;;;;;;;-1:-1:-1;;22869:67:0::1;22865:166;;22973:4;22953:26;::::0;;;:11:::1;:26;::::0;;;;;;;22988:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;22988:9:0::1;22953:46:::0;;;;;;;-1:-1:-1;;22953:66:0;;22865:166:::1;23043:17;23128:1;23108:6;:16;;;23064:60;;23088:6;:16;;;23065:39;;:20;:39;;;;:::i;:::-;23064:60;;;;:::i;:::-;23063:66;;;;:::i;:::-;23043:86:::0;-1:-1:-1;23140:15:0::1;23158:32;23043:86:::0;23158:20;:32:::1;:::i;:::-;23285:16;::::0;;23299:1:::1;23285:16:::0;;;;;::::1;::::0;;23140:50;;-1:-1:-1;23219:21:0::1;::::0;23201:15:::1;::::0;23285:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23285:16:0::1;23261:40;;23330:4;23312;23317:1;23312:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;23312:23:0::1;;;-1:-1:-1::0;;;;;23312:23:0::1;;;::::0;::::1;23356:9;;;;;;;;;-1:-1:-1::0;;;;;23356:9:0::1;-1:-1:-1::0;;;;;23356:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23346:4;23351:1;23346:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23346:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;23389:9:::1;::::0;:186:::1;::::0;-1:-1:-1;;;23389:186:0;;:9:::1;::::0;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:186:::1;::::0;23464:7;;23486:1:::1;::::0;23502:4;;23529::::1;::::0;23549:15:::1;::::0;23389:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;23385:233;;23600:7;;;;;;;23385:233;23630:18;23651:31;23675:7:::0;23651:21:::1;:31;:::i;:::-;23630:52:::0;-1:-1:-1;23693:24:0::1;23747:7:::0;23721:22:::1;23734:9:::0;23630:52;23721:22:::1;:::i;:::-;23720:34;;;;:::i;:::-;23693:61:::0;-1:-1:-1;23771:13:0;;23767:400:::1;;23805:9;::::0;:222:::1;::::0;-1:-1:-1;;;23805:222:0;;23882:4:::1;23805:222;::::0;::::1;29674:34:1::0;29724:18;;;29717:34;;;23934:1:0::1;29767:18:1::0;;;29760:34;;;29810:18;;;29803:34;6087:42:0::1;29853:19:1::0;;;29846:44;23997:15:0::1;29906:19:1::0;;;29899:35;23805:9:0::1;::::0;;::::1;-1:-1:-1::0;;;;;23805:9:0::1;::::0;:25:::1;::::0;23838:16;;29585:19:1;;23805:222:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23805:222:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;23805:222:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;23801:355;;24134:7;;;;;;;;;23801:355;-1:-1:-1::0;;24052:40:0::1;::::0;;30430:25:1;;;30486:2;30471:18;;30464:34;;;24052:40:0::1;::::0;-1:-1:-1;30403:18:1;24052:40:0::1;;;;;;;23801:355;24179:30;24193:16:::0;24179:30;::::1;:::i;:::-;;;24240:6;:16;;;24220:6;:16;;:36;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;24347:16:::1;::::0;::::1;::::0;24329:14:::1;::::0;::::1;::::0;24267:12:::1;::::0;-1:-1:-1;24267:12:0;;24315:48;;::::1;::::0;24316:27:::1;::::0;::::1;:10:::0;:27:::1;:::i;:::-;24315:48;;;;:::i;:::-;24290:73:::0;-1:-1:-1;24374:24:0::1;24401:27;24290:73:::0;24401:10;:27:::1;:::i;:::-;24443:16;::::0;::::1;::::0;24374:54;;-1:-1:-1;24443:20:0::1;;::::0;24439:132:::1;;24493:15;::::0;:66:::1;::::0;-1:-1:-1;;;;;24493:15:0;;::::1;::::0;24549:5:::1;::::0;24521:21:::1;::::0;24493:66:::1;::::0;;;24521:21;24493:15;24549:5;24493:66:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;24480:79:0;;-1:-1:-1;;24439:132:0::1;22741:1837;;;;;;;;;;7004:1;-1:-1:-1::0;7016:6:0;:14;;-1:-1:-1;;;;7016:14:0;;;22669:1909::o;27914:370::-;27991:16;;;28005:1;27991:16;;;;;;;;27967:21;;27991:16;;;;;;;;;;-1:-1:-1;27991:16:0;27967:40;;28028:9;;;;;;;;;-1:-1:-1;;;;;28028:9:0;-1:-1:-1;;;;;28028:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28018:4;28023:1;28018:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;28018:26:0;;;-1:-1:-1;;;;;28018:26:0;;;;;28073:4;28055;28060:1;28055:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28055:23:0;;;:7;;;;;;;;;:23;28095:9;;:170;;-1:-1:-1;;;28095:170:0;;:9;;;;;;;;:60;;28163:6;;28095:170;;28185:1;;28201:4;;6087:42;;28239:15;;28095:170;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28091:186;;;27956:328;27914:370;:::o;28292:804::-;28380:7;28400:18;28433:3;28429:205;;;-1:-1:-1;28466:9:0;:16;;;28429:205;;;28504:4;28500:134;;;-1:-1:-1;28538:9:0;:17;;;;;;28500:134;;;-1:-1:-1;28601:9:0;:21;;;;;;28500:134;28648:10;28662:1;28648:15;28644:39;;28674:6;28667:13;;;;;28644:39;28705:11;;;;;-1:-1:-1;;;;;28705:11:0;28729:4;28697:37;:110;;;;;28752:13;28769:1;28752:18;:54;;;;28787:13;28804:2;28787:19;28752:54;28693:138;;;-1:-1:-1;28824:4:0;28693:138;28841:17;5948:5;28861:19;28870:10;28861:6;:19;:::i;:::-;:38;;;;:::i;:::-;28841:58;-1:-1:-1;28914:13:0;;28910:141;;28960:4;28944:22;;;;:7;:22;;;;;:35;;28970:9;;28944:22;:35;;28970:9;;28944:35;:::i;:::-;;;;-1:-1:-1;;28999:40:0;;391:25:1;;;29022:4:0;;-1:-1:-1;;;;;28999:40:0;;;;;379:2:1;364:18;28999:40:0;;;;;;;28910:141;29070:18;29079:9;29070:6;:18;:::i;24586:563::-;24669:16;;;;;;;24668:17;24660:65;;;;-1:-1:-1;;;24660:65:0;;31635:2:1;24660:65:0;;;31617:21:1;31674:2;31654:18;;;31647:30;31713:34;31693:18;;;31686:62;-1:-1:-1;;;31764:18:1;;;31757:33;31807:19;;24660:65:0;31433:399:1;24660:65:0;24741:20;24752:4;24758:2;24741:10;:20::i;:::-;24740:21;:37;;;;-1:-1:-1;24771:6:0;;-1:-1:-1;;;;;24765:12:0;;;24771:6;;24765:12;24740:37;24736:406;;;-1:-1:-1;;;;;24794:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;24794:30:0;;;24820:4;24794:30;;;;;;24839:19;:25;;;;;:32;;;;;;;;;;24886:16;:23;;-1:-1:-1;;24886:23:0;24794:30;24886:23;;;;;24936:11;;;;24924:114;;24982:11;:40;;-1:-1:-1;;;;;;24982:40:0;25016:4;24982:40;;;;;24924:114;25052:19;:26;;-1:-1:-1;;;;25052:26:0;-1:-1:-1;;;25052:26:0;;;25098:32;;-1:-1:-1;2242:41:1;;25098:32:0;;2230:2:1;2215:18;25098: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;6808:159::-;6875:20;;6935:6;6924:18;;6914:29;;6904:57;;6957:1;6954;6947:12;6904:57;6808:159;;;:::o;6972:328::-;7046:6;7054;7062;7115:2;7103:9;7094:7;7090:23;7086:32;7083:52;;;7131:1;7128;7121:12;7083:52;7154:28;7172:9;7154:28;:::i;:::-;7144:38;;7201:37;7234:2;7223:9;7219:18;7201:37;:::i;:::-;7191:47;;7257:37;7290:2;7279:9;7275:18;7257:37;:::i;:::-;7247:47;;6972:328;;;;;:::o;7305:382::-;7370:6;7378;7431:2;7419:9;7410:7;7406:23;7402:32;7399:52;;;7447:1;7444;7437:12;7399:52;7486:9;7473:23;7505:31;7530:5;7505:31;:::i;7692:180::-;7751:6;7804:2;7792:9;7783:7;7779:23;7775:32;7772:52;;;7820:1;7817;7810:12;7772:52;-1:-1:-1;7843:23:1;;7692:180;-1:-1:-1;7692:180:1:o;8124:241::-;8180:6;8233:2;8221:9;8212:7;8208:23;8204:32;8201:52;;;8249:1;8246;8239:12;8201:52;8288:9;8275:23;8307:28;8329:5;8307:28;:::i;8819:385::-;8905:6;8913;8921;8929;8982:3;8970:9;8961:7;8957:23;8953:33;8950:53;;;8999:1;8996;8989:12;8950:53;-1:-1:-1;;9022:23:1;;;9092:2;9077:18;;9064:32;;-1:-1:-1;9143:2:1;9128:18;;9115:32;;9194:2;9179:18;9166:32;;-1:-1:-1;8819:385:1;-1:-1:-1;8819:385:1:o;10088:127::-;10149:10;10144:3;10140:20;10137:1;10130:31;10180:4;10177:1;10170:15;10204:4;10201:1;10194:15;10220:422;10309:1;10352:5;10309:1;10366:270;10387:7;10377:8;10374:21;10366:270;;;10446:4;10442:1;10438:6;10434:17;10428:4;10425:27;10422:53;;;10455:18;;:::i;:::-;10505:7;10495:8;10491:22;10488:55;;;10525:16;;;;10488:55;10604:22;;;;10564:15;;;;10366:270;;;10370:3;10220:422;;;;;:::o;10647:806::-;10696:5;10726:8;10716:80;;-1:-1:-1;10767:1:1;10781:5;;10716:80;10815:4;10805:76;;-1:-1:-1;10852:1:1;10866:5;;10805:76;10897:4;10915:1;10910:59;;;;10983:1;10978:130;;;;10890:218;;10910:59;10940:1;10931:10;;10954:5;;;10978:130;11015:3;11005:8;11002:17;10999:43;;;11022:18;;:::i;:::-;-1:-1:-1;;11078:1:1;11064:16;;11093:5;;10890:218;;11192:2;11182:8;11179:16;11173:3;11167:4;11164:13;11160:36;11154:2;11144:8;11141:16;11136:2;11130:4;11127:12;11123:35;11120:77;11117:159;;;-1:-1:-1;11229:19:1;;;11261:5;;11117:159;11308:34;11333:8;11327:4;11308:34;:::i;:::-;11378:6;11374:1;11370:6;11366:19;11357:7;11354:32;11351:58;;;11389:18;;:::i;:::-;11427:20;;10647:806;-1:-1:-1;;;10647:806:1:o;11458:140::-;11516:5;11545:47;11586:4;11576:8;11572:19;11566:4;11545:47;:::i;11603:217::-;11643:1;11669;11659:132;;11713:10;11708:3;11704:20;11701:1;11694:31;11748:4;11745:1;11738:15;11776:4;11773:1;11766:15;11659:132;-1:-1:-1;11805:9:1;;11603:217::o;12165:168::-;12238:9;;;12269;;12286:15;;;12280:22;;12266:37;12256:71;;12307:18;;:::i;12338:128::-;12405:9;;;12426:11;;;12423:37;;;12440:18;;:::i;13238:127::-;13299:10;13294:3;13290:20;13287:1;13280:31;13330:4;13327:1;13320:15;13354:4;13351:1;13344:15;13717:197;13755:3;13783:6;13824:2;13817:5;13813:14;13851:2;13842:7;13839:15;13836:41;;13857:18;;:::i;:::-;13906:1;13893:15;;13717:197;-1:-1:-1;;;13717:197:1:o;13919:125::-;13984:9;;;14005:10;;;14002:36;;;14018:18;;:::i;16295:385::-;16374:6;16382;16435:2;16423:9;16414:7;16410:23;16406:32;16403:52;;;16451:1;16448;16441:12;16403:52;16483:9;16477:16;16502:31;16527:5;16502:31;:::i;:::-;16602:2;16587:18;;16581:25;16552:5;;-1:-1:-1;16615:33:1;16581:25;16615:33;:::i;19309:245::-;19388:6;19396;19449:2;19437:9;19428:7;19424:23;19420:32;19417:52;;;19465:1;19462;19455:12;19417:52;-1:-1:-1;;19488:16:1;;19544:2;19529:18;;;19523:25;19488:16;;19523:25;;-1:-1:-1;19309:245:1:o;19559:168::-;19626:6;19652:10;;;19664;;;19648:27;;19687:11;;;19684:37;;;19701:18;;:::i;:::-;19684:37;19559:168;;;;:::o;20496:184::-;20566:6;20619:2;20607:9;20598:7;20594:23;20590:32;20587:52;;;20635:1;20632;20625:12;20587:52;-1:-1:-1;20658:16:1;;20496:184;-1:-1:-1;20496:184:1:o;20987:245::-;21054:6;21107:2;21095:9;21086:7;21082:23;21078:32;21075:52;;;21123:1;21120;21113:12;21075:52;21155:9;21149:16;21174:28;21196:5;21174:28;:::i;21237:131::-;21297:5;21326:36;21353:8;21347:4;21326:36;:::i;21732:251::-;21802:6;21855:2;21843:9;21834:7;21830:23;21826:32;21823:52;;;21871:1;21868;21861:12;21823:52;21903:9;21897:16;21922:31;21947:5;21922:31;:::i;28211:484::-;28264:3;28302:5;28296:12;28329:6;28324:3;28317:19;28355:4;28384:2;28379:3;28375:12;28368:19;;28421:2;28414:5;28410:14;28442:1;28452:218;28466:6;28463:1;28460:13;28452:218;;;28531:13;;-1:-1:-1;;;;;28527:62:1;28515:75;;28610:12;;;;28645:15;;;;28488:1;28481:9;28452:218;;;-1:-1:-1;28686:3:1;;28211:484;-1:-1:-1;;;;;28211:484:1:o;28700:605::-;28999:6;28988:9;28981:25;29042:6;29037:2;29026:9;29022:18;29015:34;29085:3;29080:2;29069:9;29065:18;29058:31;28962:4;29106:57;29158:3;29147:9;29143:19;29135:6;29106:57;:::i;:::-;-1:-1:-1;;;;;29199:55:1;;;;29194:2;29179:18;;29172:83;-1:-1:-1;29286:3:1;29271:19;29264:35;29098:65;28700:605;-1:-1:-1;;;28700:605:1:o;29945:306::-;30033:6;30041;30049;30102:2;30090:9;30081:7;30077:23;30073:32;30070:52;;;30118:1;30115;30108:12;30070:52;30147:9;30141:16;30131:26;;30197:2;30186:9;30182:18;30176:25;30166:35;;30241:2;30230:9;30226:18;30220:25;30210:35;;29945:306;;;;;:::o;30509:171::-;30577:6;30616:10;;;30604;;;30600:27;;30639:12;;;30636:38;;;30654:18;;:::i;30895:533::-;31166:6;31155:9;31148:25;31209:3;31204:2;31193:9;31189:18;31182:31;31129:4;31230:57;31282:3;31271:9;31267:19;31259:6;31230:57;:::i;:::-;-1:-1:-1;;;;;31323:55:1;;;;31318:2;31303:18;;31296:83;-1:-1:-1;31410:2:1;31395:18;31388:34;31222:65;30895:533;-1:-1:-1;;30895:533:1:o

Swarm Source

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