ETH Price: $2,522.57 (+1.15%)

Token

SENSHI (SENSHI)
 

Overview

Max Total Supply

555,000,000,000 SENSHI

Holders

75

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
60,000 SENSHI

Value
$0.00
0x4228E18a9483124Ed12987560F3C6AeBdD8380d1
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:
SENSHI

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-11
*/

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IFactoryV2 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}

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

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

interface Protections {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ab) external;
    function removeSniper(address account) external;
}

contract SENSHI is IERC20 {
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private presaleAddresses;
    bool private allowedPresaleExclusion = true;
   
    uint256 constant private startingSupply = 555_000_000_000;
    string constant private _name = "SENSHI";
    string constant private _symbol = "SENSHI";
    uint8 constant private _decimals = 9;
    uint256 constant private _tTotal = startingSupply * 10**_decimals;

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

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 business;
        uint16 buyBack;
        uint16 totalSwap;
    }

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

    Ratios public _ratios = Ratios({
        liquidity: 550,
        marketing: 500,
        business: 250,
        buyBack: 200,
        totalSwap: 550 + 500 + 250 + 200
    });

    uint256 constant public maxBuyTaxes = 500;
    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;

    struct TaxWallets {
        address payable marketing;
        address payable business;
        address payable buyBack;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x8b37ecE74CbBe7Fe387f5613D29FB2cF9c92a304),
        business: payable(0x97b6fd5683ae86CBec5b47A3C3B6d2581787fA49),
        buyBack: payable(0x358CA910A6AdD665a5c991f3a9fD859519aD87FB)
    });
    
    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;
    Protections protections;
    uint256 public launchStamp;

    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
    
    modifier inSwapFlag {
        inSwap = true;
        _;
        inSwap = false;
    }

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

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

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

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

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

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

    receive() external payable {}

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

    address private _owner;
    address public originalDeployer;
    address public operator;

    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 {
        setExcludedFromFees(_owner, false);
        address oldOwner = _owner;
        _owner = address(0);
        emit OwnershipTransferred(oldOwner, address(0));
    }

    // Function to set an operator to allow someone other the deployer to create things such as launchpads.
    // Only callable by original deployer.
    function setOperator(address newOperator) public {
        require(msg.sender == originalDeployer, "Can only be called by original deployer.");
        address oldOperator = operator;
        if (oldOperator != address(0)) {
            _liquidityHolders[oldOperator] = false;
            setExcludedFromFees(oldOperator, false);
        }
        operator = newOperator;
        _liquidityHolders[newOperator] = true;
        setExcludedFromFees(newOperator, true);
    }

    function renounceOriginalDeployer() external {
        require(msg.sender == originalDeployer, "Can only be called by original deployer.");
        setOperator(address(0));
        originalDeployer = address(0);
    }

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

    function totalSupply() external pure override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external pure override returns (uint8) { if (_tTotal == 0) { revert(); } return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return _owner; }
    function 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());
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

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

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

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

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

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

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

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

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

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

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

    function setProtectionSettings(bool _antiSnipe, bool _antiBlock) external onlyOwner {
        protections.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 liquidity, uint16 marketing, uint16 business, uint16 buyBack) external onlyOwner {
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.business = business;
        _ratios.buyBack = buyBack;
        _ratios.totalSwap = liquidity + marketing + business + buyBack;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(_ratios.totalSwap <= total, "Cannot exceed sum of buy and sell fees.");
    }

    function setWallets(address payable marketing, address payable business, address payable buyBack) external onlyOwner {
        require(marketing != address(0) && business != address(0) && buyBack != address(0), "Cannot be zero address.");
        _taxWallets.marketing = payable(marketing);
        _taxWallets.business = payable(business);
        // If buyback wallet is altered, forward any tokens old wallet has so new wallet is also locked to only sending to burn.
        if (balanceOf(_taxWallets.buyBack) > 0) {
            finalizeTransfer(_taxWallets.buyBack, buyBack, balanceOf(_taxWallets.buyBack), false, false, true);
        }
        _taxWallets.buyBack = payable(buyBack);
    }

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

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

        if (from == _taxWallets.buyBack) {
            require(to == DEAD, "Buyback wallet can only send tokens to dead address.");
        }

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

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

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

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

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

        uint256 amtBalance = address(this).balance;
        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 businessBalance = (amtBalance * ratios.business) / ratios.totalSwap;
        uint256 buyBackBalance = (amtBalance * ratios.buyBack) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - (businessBalance + buyBackBalance);
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 35000}("");
        }
        if (ratios.business > 0) {
            (success,) = _taxWallets.business.call{value: businessBalance, gas: 35000}("");
        }
        if (ratios.buyBack > 0) {
            (success,) = _taxWallets.buyBack.call{value: buyBackBalance, gas: 35000}("");
        }
    }

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

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

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

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (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 protections.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, buy, sell, amount) : amount;
        _tOwned[to] += amountReceived;
        emit Transfer(from, to, amountReceived);
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }
        return true;
    }

    function takeTaxes(address from, bool buy, bool sell, uint256 amount) 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(protections) == 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":"business","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":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"business","type":"address"},{"internalType":"address payable","name":"buyBack","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"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":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originalDeployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOriginalDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOperator","type":"address"}],"name":"setOperator","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":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"business","type":"uint16"},{"internalType":"uint16","name":"buyBack","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"business","type":"address"},{"internalType":"address payable","name":"buyBack","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"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"}]

600060028190556009805460ff191660011781556101f460808190526103e860a05260c092909252600a805465ffffffffffff19166303e801f417815561022660e0526101009290925260fa6101205260c8610140526105dc61016052600b80546905dc00c800fa01f402266001600160501b03199091161790556101e0604052738b37ece74cbbe7fe387f5613d29fb2cf9c92a3046101808190527397b6fd5683ae86cbec5b47a3c3b6d2581787fa496101a081905273358ca910a6add665a5c991f3a9fd859519ad87fb6101c0819052600e80546001600160a01b03199081169094179055600f80548416909217909155601080549092161790556011805461ff001916905560158290556064916200011b919062000801565b6200012c9064813893ee0062000819565b6200013990600262000819565b62000145919062000833565b6016556064620001586009600a62000801565b620001699064813893ee0062000819565b6200017690600262000819565b62000182919062000833565b6017556018805461ffff19169055601a8054336001600160a01b03199182168117909255601b80549091169091179055620001c06009600a62000801565b620001d19064813893ee0062000819565b601a80546001600160a01b03908116600090815260208190526040812093909355905416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620002256009600a62000801565b620002369064813893ee0062000819565b60405190815260200160405180910390a3466038036200027e57600c8054610100600160a81b0319167410ed43c718714eb63d5aa57b78b54704e256024e0017905562000379565b46606103620002b557600c8054610100600160a81b03191674d99d1c33f9fc3444f8101754abc46c52416550d10017905562000379565b4660011480620002c55750466004145b80620002d15750466003145b156200030557600c8054610100600160a81b031916747a250d5630b4cf539739df2c5dacb4c659f2488d0017905562000379565b4661a86a036200033d57600c8054610100600160a81b0319167460ae616a2155ee3d9a68541ba4544862310933d40017905562000379565b4660fa036200037457600c8054610100600160a81b03191674f491e7b69e4244ad4002bc14e878a34207e38c290017905562000379565b600080fd5b600c60019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f3919062000856565b6001600160a01b031663c9c65396600c60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047b919062000856565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620004c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ee919062000856565b600d80546001600160a01b0319166001600160a01b039283169081179091556000908152600160208190526040909120805460ff19169091179055601a54600c5462000548929182169161010090910416600019620005eb565b600c546200056990309061010090046001600160a01b0316600019620005eb565b601a80546001600160a01b0390811660009081526006602090815260408083208054600160ff19918216811790925530855282852080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548216831790559554909416835260049091529020805490921617905562000881565b6001600160a01b0383166200063d5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b0382166200068b5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640162000634565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000743578160001904821115620007275762000727620006ec565b808516156200073557918102915b93841c939080029062000707565b509250929050565b6000826200075c57506001620007fb565b816200076b57506000620007fb565b81600181146200078457600281146200078f57620007af565b6001915050620007fb565b60ff841115620007a357620007a3620006ec565b50506001821b620007fb565b5060208310610133831016604e8410600b8410161715620007d4575081810a620007fb565b620007e0838362000702565b8060001904821115620007f757620007f7620006ec565b0290505b92915050565b60006200081260ff8416836200074b565b9392505050565b8082028115828204841417620007fb57620007fb620006ec565b6000826200085157634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200086957600080fd5b81516001600160a01b03811681146200081257600080fd5b614b3380620008916000396000f3fe6080604052600436106103bc5760003560e01c80634fbee193116101f25780638a8c523c1161010d578063cf847706116100a0578063f94aa1b41161006f578063f94aa1b414610bb3578063fb78680d14610c0a578063fdb78c0e14610c2a578063feadde9c14610c4957600080fd5b8063cf84770614610ab6578063dd62ed3e14610b38578063eafb5a3c14610b7e578063ee5d9c2d14610b9e57600080fd5b8063b3ab15fb116100dc578063b3ab15fb14610a5c578063b3d514fb14610a46578063b7df8b3614610a7c578063bfc2fc3514610a9657600080fd5b80638a8c523c14610a1157806395d89b4114610497578063a9059cbb14610a26578063b1b08f7114610a4657600080fd5b806370a082311161018557806380c581d11161015457806380c581d11461099e57806381cf58a9146109be578063893d20e8146109de5780638a63bd9b146109fc57600080fd5b806370a082311461091e578063715018a61461095457806375cb1bd11461096957806378648edf1461098957600080fd5b80635a6f0918116101c15780635a6f09181461089a5780635c24b074146108b05780635cce86cd146108d05780636ebd00781461090957600080fd5b80634fbee1931461080257806350a8e0161461083b578063570ca7351461085a578063590ffdce1461087a57600080fd5b80632610eaca116102e257806336fddb04116102755780634ada218b116102445780634ada218b146107885780634bbb93eb146107a25780634e718e48146107c25780634fb2e45d146107e257600080fd5b806336fddb041461071357806339a05902146107335780633f3cf56c14610748578063452ed4f11461076857600080fd5b80632e8fa821116102b15780632e8fa82114610696578063313ce567146106ac57806332cde664146106d357806333251a0b146106f357600080fd5b80632610eaca1461063557806328577751146106555780632b112e491461066b5780632b28fc7a1461068057600080fd5b806307dd79e01161035a57806313b4a7f41161032957806313b4a7f4146105c057806318160ddd146105e057806323b872dd146105f5578063260039571461061557600080fd5b806307dd79e014610528578063095ea7b3146105525780630dcbcf1c146105725780630fa604e4146105ab57600080fd5b8063069d955f11610396578063069d955f1461044157806306fdde03146104975780630712d165146104e35780630758d9241461050357600080fd5b806303fd2a45146103c85780630445b667146103fb578063044df7261461041f57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b5061041160125481565b6040519081526020016103f2565b34801561042b57600080fd5b5061043f61043a366004614374565b610c69565b005b34801561044d57600080fd5b50600a546104729061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103f2565b3480156104a357600080fd5b50604080518082018252600681527f53454e5348490000000000000000000000000000000000000000000000000000602082015290516103f291906143ad565b3480156104ef57600080fd5b5061043f6104fe366004614412565b610d46565b34801561050f57600080fd5b50600c546103de9061010090046001600160a01b031681565b34801561053457600080fd5b50600c546105429060ff1681565b60405190151581526020016103f2565b34801561055e57600080fd5b5061054261056d36600461447b565b610f37565b34801561057e57600080fd5b5061054261058d3660046144a7565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105b757600080fd5b50610411610f4e565b3480156105cc57600080fd5b5061043f6105db3660046144c4565b610f6e565b3480156105ec57600080fd5b50610411611144565b34801561060157600080fd5b506105426106103660046144f2565b611188565b34801561062157600080fd5b5061043f610630366004614533565b611200565b34801561064157600080fd5b5061043f610650366004614644565b611352565b34801561066157600080fd5b5061041160155481565b34801561067757600080fd5b5061041161150d565b34801561068c57600080fd5b506104116101f481565b3480156106a257600080fd5b5061041160135481565b3480156106b857600080fd5b506106c161158c565b60405160ff90911681526020016103f2565b3480156106df57600080fd5b5061043f6106ee366004614706565b6115bb565b3480156106ff57600080fd5b5061043f61070e3660046144a7565b611749565b34801561071f57600080fd5b5061043f61072e366004614749565b611812565b34801561073f57600080fd5b5061043f61188b565b34801561075457600080fd5b5061043f610763366004614533565b611934565b34801561077457600080fd5b50600d546103de906001600160a01b031681565b34801561079457600080fd5b506018546105429060ff1681565b3480156107ae57600080fd5b506104116107bd366004614767565b611a92565b3480156107ce57600080fd5b5061043f6107dd366004614767565b611ac6565b3480156107ee57600080fd5b5061043f6107fd3660046144a7565b611b6a565b34801561080e57600080fd5b5061054261081d3660046144a7565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561084757600080fd5b5060185461054290610100900460ff1681565b34801561086657600080fd5b50601c546103de906001600160a01b031681565b34801561088657600080fd5b5061043f610895366004614749565b611d9c565b3480156108a657600080fd5b5061041160195481565b3480156108bc57600080fd5b5061043f6108cb3660046144a7565b611e15565b3480156108dc57600080fd5b506105426108eb3660046144a7565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561091557600080fd5b50610411611f0b565b34801561092a57600080fd5b506104116109393660046144a7565b6001600160a01b031660009081526020819052604090205490565b34801561096057600080fd5b5061043f611f26565b34801561097557600080fd5b5061043f610984366004614780565b611fe6565b34801561099557600080fd5b5061043f612162565b3480156109aa57600080fd5b5061043f6109b9366004614749565b6121bf565b3480156109ca57600080fd5b50601b546103de906001600160a01b031681565b3480156109ea57600080fd5b50601a546001600160a01b03166103de565b348015610a0857600080fd5b50610542612378565b348015610a1d57600080fd5b5061043f6123ee565b348015610a3257600080fd5b50610542610a4136600461447b565b612656565b348015610a5257600080fd5b506104116103e881565b348015610a6857600080fd5b5061043f610a773660046144a7565b61266d565b348015610a8857600080fd5b506014546105429060ff1681565b348015610aa257600080fd5b5061043f610ab1366004614374565b61277c565b348015610ac257600080fd5b50600b54610b039061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103f2565b348015610b4457600080fd5b50610411610b533660046144c4565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b8a57600080fd5b5061043f610b993660046144a7565b612829565b348015610baa57600080fd5b5061043f612c47565b348015610bbf57600080fd5b50600e54600f54601054610be0926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103f2565b348015610c1657600080fd5b5061043f610c253660046147cb565b612d29565b348015610c3657600080fd5b5060115461054290610100900460ff1681565b348015610c5557600080fd5b5061043f610c64366004614749565b613049565b601a546001600160a01b03163314610cbc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6018546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610d2a57600080fd5b505af1158015610d3e573d6000803e3d6000fd5b505050505050565b601a546001600160a01b03163314610d945760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b600b805461ffff8681167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216919091176201000086831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000858316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16176601000000000000918416919091021790558082610e3c858761482c565b610e46919061482c565b610e50919061482c565b600b80547fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff166801000000000000000061ffff93841602179055600a54600091610ea3916201000081048216911661482c565b600b5461ffff918216925068010000000000000000900416811015610f305760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610cb3565b5050505050565b6000610f443384846130c2565b5060015b92915050565b6000610f5c6009600a614932565b601754610f699190614941565b905090565b601a546001600160a01b03163314610fbc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b60095460ff16610fcb57600080fd5b6001600160a01b0382163014801590610fed57506001600160a01b0381163014155b80156110075750600d546001600160a01b03838116911614155b80156110215750600d546001600160a01b03828116911614155b61106d5760405162461bcd60e51b815260206004820152600b60248201527f4a75737420646f6e27742e0000000000000000000000000000000000000000006044820152606401610cb3565b806001600160a01b0316826001600160a01b0316036110cf576001600160a01b03811660009081526004602090815260408083208054600160ff199182168117909255600890935292208054909116821790556110cb908290611d9c565b5050565b6001600160a01b0382811660008181526004602090815260408083208054600160ff19918216811790925595871680855282852080548816831790559484526008909252808320805486168317905592825291902080549092168117909155611139908390611d9c565b6110cb816001611d9c565b60006111526009600a614932565b6111619064813893ee0061497c565b60000361116d57600080fd5b6111796009600a614932565b610f699064813893ee0061497c565b6001600160a01b0383166000908152600360209081526040808320338452909152812054600019146111ed576001600160a01b0384166000908152600360209081526040808320338452909152812080548492906111e7908490614993565b90915550505b6111f88484846131cf565b949350505050565b601a546001600160a01b0316331461124e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b606461125c6009600a614932565b61126b9064813893ee0061497c565b6112759190614941565b81836112836009600a614932565b6112929064813893ee0061497c565b61129c919061497c565b6112a69190614941565b101561131a5760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610cb3565b80826113286009600a614932565b6113379064813893ee0061497c565b611341919061497c565b61134b9190614941565b6017555050565b601a546001600160a01b031633146113a05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b80518251146113f15760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cb3565b60005b82518161ffff1610156115085761140d6009600a614932565b828261ffff1681518110611423576114236149a6565b6020026020010151611435919061497c565b3360009081526020819052604090205410156114935760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610cb3565b6114f533848361ffff16815181106114ad576114ad6149a6565b60200260200101516009600a6114c39190614932565b858561ffff16815181106114d9576114d96149a6565b60200260200101516114eb919061497c565b6000806001613740565b5080611500816149d5565b9150506113f4565b505050565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf835461156791906149f6565b6115736009600a614932565b6115829064813893ee0061497c565b610f699190614993565b600061159a6009600a614932565b6115a99064813893ee0061497c565b6000036115b557600080fd5b50600990565b601a546001600160a01b031633146116095760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b600c5460ff161561165c5760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610cb3565b6101f48361ffff161115801561167857506103e88261ffff1611155b801561168a57506103e88161ffff1611155b6116d65760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610cb3565b600a805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b601a546001600160a01b031633146117975760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b6018546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b1580156117fe57600080fd5b505af1158015610f30573d6000803e3d6000fd5b601a546001600160a01b031633146118605760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b601b546001600160a01b0316331461190b5760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201527f65706c6f7965722e0000000000000000000000000000000000000000000000006064820152608401610cb3565b611915600061266d565b601b805473ffffffffffffffffffffffffffffffffffffffff19169055565b601a546001600160a01b031633146119825760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b6103e86119916009600a614932565b6119a09064813893ee0061497c565b6119ab90600561497c565b6119b59190614941565b81836119c36009600a614932565b6119d29064813893ee0061497c565b6119dc919061497c565b6119e69190614941565b1015611a5a5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610cb3565b8082611a686009600a614932565b611a779064813893ee0061497c565b611a81919061497c565b611a8b9190614941565b6016555050565b600d546001600160a01b031660009081526020819052604081205461271090611abc90849061497c565b610f489190614941565b601a546001600160a01b03163314611b145760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b6096811115611b655760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610cb3565b601555565b601a546001600160a01b03163314611bb85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b6001600160a01b038116611c345760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cb3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b03821601611cd25760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cb3565b601a54611ce9906001600160a01b03166000611d9c565b611cf4816001611d9c565b601a546001600160a01b031660009081526020819052604090205415611d3d57601a546001600160a01b0316600081815260208190526040902054611d3b919083906114eb565b505b601a80546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601a546001600160a01b03163314611dea5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b601a546001600160a01b03163314611e635760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b60185460ff1615611e7357600080fd5b306001600160a01b03821603611ecb5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610cb3565b601880546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000611f196009600a614932565b601654610f699190614941565b601a546001600160a01b03163314611f745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b601a54611f8b906001600160a01b03166000611d9c565b601a805473ffffffffffffffffffffffffffffffffffffffff1981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601a546001600160a01b031633146120345760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b6001600160a01b0383161580159061205457506001600160a01b03821615155b801561206857506001600160a01b03811615155b6120b45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610cb3565b600e80546001600160a01b0385811673ffffffffffffffffffffffffffffffffffffffff1992831617909255600f80548584169216919091179055601054166000908152602081905260408120541115612131576010546001600160a01b031660008181526020819052604090205461212f919083906114eb565b505b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790555050565b601a546001600160a01b031633146121b05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b600c805460ff19166001179055565b601a546001600160a01b0316331461220d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b80612299576001600160a01b03828116600081815260016020526040808220805460ff1916905560185490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610d2a57600080fd5b60025415612300576203f480600254426122b39190614993565b116123005760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610cb3565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560185491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610d10565b601a546000906001600160a01b031633146123c95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b600c546123e890309061010090046001600160a01b03166000196130c2565b50600190565b601a546001600160a01b0316331461243c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b60185460ff161561248f5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cb3565b601854610100900460ff166124e65760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610cb3565b6018546201000090046001600160a01b031661252c57601880547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601854600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260096064820152620100009092041690636c115c3490608401600060405180830381600087803b1580156125b757600080fd5b505af19250505080156125c8575060015b5060188054600160ff1991821617909155600980549091169055600d546001600160a01b03166000908152602081905260409020546127109061260c90600a61497c565b6126169190614941565b601255600d546001600160a01b03166000908152602081905260409020546127109061264390601e61497c565b61264d9190614941565b60135542601955565b60006126633384846131cf565b5060019392505050565b601b546001600160a01b031633146126ed5760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201527f65706c6f7965722e0000000000000000000000000000000000000000000000006064820152608401610cb3565b601c546001600160a01b0316801561272a576001600160a01b0381166000908152600460205260408120805460ff1916905561272a908290611d9c565b601c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556000908152600460205260409020805460ff191660019081179091556110cb908390611d9c565b601a546001600160a01b031633146127ca5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b6011805461ff001916610100841515908102919091179091556014805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b601a546001600160a01b031633146128775760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b601854610100900460ff16156128cf5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610cb3565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612914573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129389190614a09565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a99190614a09565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a309190614a09565b90506001600160a01b038116612bce57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa29190614a09565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b139190614a09565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9c9190614a09565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612bf7565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600c80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0385811682029290921792839055611508923092919004166000196130c2565b601a546001600160a01b03163314612c955760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b601854610100900460ff1615612ced5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610cb3565b601a546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612d26573d6000803e3d6000fd5b50565b601a546001600160a01b03163314612d775760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b8284612d856009600a614932565b612d949064813893ee0061497c565b612d9e919061497c565b612da89190614941565b6012558082612db96009600a614932565b612dc89064813893ee0061497c565b612dd2919061497c565b612ddc9190614941565b60138190556012541115612e585760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610cb3565b600d546001600160a01b031660009081526020819052604090205461271090612e8290609661497c565b612e8c9190614941565b6013541115612f035760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201527f50492e00000000000000000000000000000000000000000000000000000000006064820152608401610cb3565b620f4240612f136009600a614932565b612f229064813893ee0061497c565b612f2c9190614941565b6013541015612fa35760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201527f20746f74616c20737570706c792e0000000000000000000000000000000000006064820152608401610cb3565b620f4240612fb36009600a614932565b612fc29064813893ee0061497c565b612fcc9190614941565b60125410156130435760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201527f20746f74616c20737570706c792e0000000000000000000000000000000000006064820152608401610cb3565b50505050565b601a546001600160a01b031633146130975760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b0383166131185760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cb3565b6001600160a01b03821661316e5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cb3565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661324d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cb3565b6001600160a01b0383166132c95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cb3565b6000821161333f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610cb3565b6001600160a01b0384166000908152600160205260408120548190819060ff161561336d576001925061339b565b6001600160a01b03861660009081526001602052604090205460ff1615613397576001915061339b565b5060015b6133a58787613a27565b156135b05760185460ff166133fc5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cb3565b82806134055750815b156134c9576001600160a01b03871660009081526007602052604090205460ff1615801561344c57506001600160a01b03861660009081526007602052604090205460ff16155b156134c9576016548511156134c95760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610cb3565b600c546001600160a01b0387811661010090920416148015906134ea575081155b156135b0576001600160a01b03861660009081526007602052604090205460ff166135b05760175485613532886001600160a01b031660009081526020819052604090205490565b61353c91906149f6565b11156135b05760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610cb3565b6010546001600160a01b0390811690881603613646576001600160a01b03861661dead146136465760405162461bcd60e51b815260206004820152603460248201527f4275796261636b2077616c6c65742063616e206f6e6c792073656e6420746f6b60448201527f656e7320746f206465616420616464726573732e0000000000000000000000006064820152608401610cb3565b81156137275760115460ff1661372757601154610100900460ff16801561368657506001600160a01b03861660009081526008602052604090205460ff16155b80156136ab57506001600160a01b03871660009081526008602052604090205460ff16155b15613727573060009081526020819052604090205460125481106137255760135460145460ff161561370f57601554600d546001600160a01b0316600090815260208190526040902054612710916137029161497c565b61370c9190614941565b90505b80821061371a578091505b61372382613b3e565b505b505b613735878787868686613740565b979650505050505050565b600061374c8787613a27565b156137ff576018546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156137e8575060408051601f3d908101601f191682019092526137e591810190614a26565b60015b6137f157600080fd5b9050806137fd57600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff168061384157506001600160a01b03871660009081526006602052604090205460ff165b1561384a575060005b6001600160a01b03881660009081526020819052604081208054889290613872908490614993565b9091555060009050816138855786613891565b6138918987878a6140e1565b9050806000808a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546138c791906149f6565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161391391815260200190565b60405180910390a3601854610100900460ff16613a185761393489896141f6565b601854610100900460ff1615801561395157506139518989613a27565b801561397657506001600160a01b03891660009081526005602052604090205460ff16155b801561399b57506001600160a01b03881660009081526005602052604090205460ff16155b80156139a5575083155b15613a185760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610cb3565b50600198975050505050505050565b601a546000906001600160a01b03848116911614801590613a565750601a546001600160a01b03838116911614155b8015613a6d5750601a546001600160a01b03163214155b8015613a9257506001600160a01b03821660009081526004602052604090205460ff16155b8015613ab757506001600160a01b03831660009081526004602052604090205460ff16155b8015613ace57506001600160a01b03821661dead14155b8015613ae257506001600160a01b03821615155b8015613af757506001600160a01b0383163014155b8015613b1757506018546001600160a01b03848116620100009092041614155b8015613b3757506018546001600160a01b03838116620100009092041614155b9392505050565b6011805460ff191660011790556040805160a081018252600b5461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000900490911660808201819052600003613bb257506140d4565b306000908152600360209081526040808320600c5461010090046001600160a01b0316845290915290205460001914613c1557306000908152600360209081526040808320600c5461010090046001600160a01b03168452909152902060001990555b60006002826080015161ffff16836000015161ffff1685613c36919061497c565b613c409190614941565b613c4a9190614941565b90506000613c588285614993565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613c9257613c926149a6565b60200260200101906001600160a01b031690816001600160a01b031681525050600c60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d299190614a09565b81600181518110613d3c57613d3c6149a6565b6001600160a01b039283166020918202929092010152600c546040517f791ac9470000000000000000000000000000000000000000000000000000000081526101009091049091169063791ac94790613da2908590600090869030904290600401614a43565b600060405180830381600087803b158015613dbc57600080fd5b505af1925050508015613dcd575060015b613dda57505050506140d4565b47600083613de8868461497c565b613df29190614941565b90508415613eee57600c546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015613ea2575060408051601f3d908101601f19168201909252613e9f91810190614ab4565b60015b613eb1575050505050506140d4565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613ef88183614993565b9150856000015186608001818151613f109190614ae2565b61ffff9081169091526080880151604089015160009350839291821691613f3891168661497c565b613f429190614941565b90506000886080015161ffff16896060015161ffff1686613f63919061497c565b613f6d9190614941565b90506000613f7b82846149f6565b613f859087614993565b60208b015190915061ffff1615613ff357600e546040516001600160a01b03909116906188b89083906000818181858888f193505050503d8060008114613fe8576040519150601f19603f3d011682016040523d82523d6000602084013e613fed565b606091505b50909450505b60408a015161ffff161561405e57600f546040516001600160a01b03909116906188b89085906000818181858888f193505050503d8060008114614053576040519150601f19603f3d011682016040523d82523d6000602084013e614058565b606091505b50909450505b60608a015161ffff16156140c9576010546040516001600160a01b03909116906188b89084906000818181858888f193505050503d80600081146140be576040519150601f19603f3d011682016040523d82523d6000602084013e6140c3565b606091505b50909450505b505050505050505050505b506011805460ff19169055565b60008084156140f75750600a5461ffff16614121565b83156141105750600a5462010000900461ffff16614121565b50600a54640100000000900461ffff165b8060000361413257829150506111f8565b6018546201000090046001600160a01b03163014801561415c5750466001148061415c5750466038145b1561416657506111945b6000612710614175838661497c565b61417f9190614941565b905080156141ec5730600090815260208190526040812080548392906141a69084906149f6565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6137358185614993565b601854610100900460ff16156142745760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610cb3565b61427e8282613a27565b1580156142985750600d546001600160a01b038281169116145b156110cb576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556018805461ff00191661010017908190556201000090041661432657601880547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6011805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200161281d565b8015158114612d2657600080fd5b6000806040838503121561438757600080fd5b823561439281614366565b915060208301356143a281614366565b809150509250929050565b600060208083528351808285015260005b818110156143da578581018301518582016040015282016143be565b506000604082860101526040601f19601f8301168501019250505092915050565b803561ffff8116811461440d57600080fd5b919050565b6000806000806080858703121561442857600080fd5b614431856143fb565b935061443f602086016143fb565b925061444d604086016143fb565b915061445b606086016143fb565b905092959194509250565b6001600160a01b0381168114612d2657600080fd5b6000806040838503121561448e57600080fd5b823561449981614466565b946020939093013593505050565b6000602082840312156144b957600080fd5b8135613b3781614466565b600080604083850312156144d757600080fd5b82356144e281614466565b915060208301356143a281614466565b60008060006060848603121561450757600080fd5b833561451281614466565b9250602084013561452281614466565b929592945050506040919091013590565b6000806040838503121561454657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156145ad576145ad614555565b604052919050565b600067ffffffffffffffff8211156145cf576145cf614555565b5060051b60200190565b600082601f8301126145ea57600080fd5b813560206145ff6145fa836145b5565b614584565b82815260059290921b8401810191818101908684111561461e57600080fd5b8286015b848110156146395780358352918301918301614622565b509695505050505050565b6000806040838503121561465757600080fd5b823567ffffffffffffffff8082111561466f57600080fd5b818501915085601f83011261468357600080fd5b813560206146936145fa836145b5565b82815260059290921b840181019181810190898411156146b257600080fd5b948201945b838610156146d95785356146ca81614466565b825294820194908201906146b7565b965050860135925050808211156146ef57600080fd5b506146fc858286016145d9565b9150509250929050565b60008060006060848603121561471b57600080fd5b614724846143fb565b9250614732602085016143fb565b9150614740604085016143fb565b90509250925092565b6000806040838503121561475c57600080fd5b823561439281614466565b60006020828403121561477957600080fd5b5035919050565b60008060006060848603121561479557600080fd5b83356147a081614466565b925060208401356147b081614466565b915060408401356147c081614466565b809150509250925092565b600080600080608085870312156147e157600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61ffff818116838216019080821115614847576148476147fd565b5092915050565b600181815b8085111561488957816000190482111561486f5761486f6147fd565b8085161561487c57918102915b93841c9390800290614853565b509250929050565b6000826148a057506001610f48565b816148ad57506000610f48565b81600181146148c357600281146148cd576148e9565b6001915050610f48565b60ff8411156148de576148de6147fd565b50506001821b610f48565b5060208310610133831016604e8410600b841016171561490c575081810a610f48565b614916838361484e565b806000190482111561492a5761492a6147fd565b029392505050565b6000613b3760ff841683614891565b600082614977577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082028115828204841417610f4857610f486147fd565b81810381811115610f4857610f486147fd565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff8083168181036149ec576149ec6147fd565b6001019392505050565b80820180821115610f4857610f486147fd565b600060208284031215614a1b57600080fd5b8151613b3781614466565b600060208284031215614a3857600080fd5b8151613b3781614366565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614a935784516001600160a01b031683529383019391830191600101614a6e565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215614ac957600080fd5b8351925060208401519150604084015190509250925092565b61ffff828116828216039080821115614847576148476147fd56fea26469706673582212207e1e12bd753e9b4048ff57e57ad8d7ad726e7c5b89f1f522f0f9d6464b2877ce64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c80634fbee193116101f25780638a8c523c1161010d578063cf847706116100a0578063f94aa1b41161006f578063f94aa1b414610bb3578063fb78680d14610c0a578063fdb78c0e14610c2a578063feadde9c14610c4957600080fd5b8063cf84770614610ab6578063dd62ed3e14610b38578063eafb5a3c14610b7e578063ee5d9c2d14610b9e57600080fd5b8063b3ab15fb116100dc578063b3ab15fb14610a5c578063b3d514fb14610a46578063b7df8b3614610a7c578063bfc2fc3514610a9657600080fd5b80638a8c523c14610a1157806395d89b4114610497578063a9059cbb14610a26578063b1b08f7114610a4657600080fd5b806370a082311161018557806380c581d11161015457806380c581d11461099e57806381cf58a9146109be578063893d20e8146109de5780638a63bd9b146109fc57600080fd5b806370a082311461091e578063715018a61461095457806375cb1bd11461096957806378648edf1461098957600080fd5b80635a6f0918116101c15780635a6f09181461089a5780635c24b074146108b05780635cce86cd146108d05780636ebd00781461090957600080fd5b80634fbee1931461080257806350a8e0161461083b578063570ca7351461085a578063590ffdce1461087a57600080fd5b80632610eaca116102e257806336fddb04116102755780634ada218b116102445780634ada218b146107885780634bbb93eb146107a25780634e718e48146107c25780634fb2e45d146107e257600080fd5b806336fddb041461071357806339a05902146107335780633f3cf56c14610748578063452ed4f11461076857600080fd5b80632e8fa821116102b15780632e8fa82114610696578063313ce567146106ac57806332cde664146106d357806333251a0b146106f357600080fd5b80632610eaca1461063557806328577751146106555780632b112e491461066b5780632b28fc7a1461068057600080fd5b806307dd79e01161035a57806313b4a7f41161032957806313b4a7f4146105c057806318160ddd146105e057806323b872dd146105f5578063260039571461061557600080fd5b806307dd79e014610528578063095ea7b3146105525780630dcbcf1c146105725780630fa604e4146105ab57600080fd5b8063069d955f11610396578063069d955f1461044157806306fdde03146104975780630712d165146104e35780630758d9241461050357600080fd5b806303fd2a45146103c85780630445b667146103fb578063044df7261461041f57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b5061041160125481565b6040519081526020016103f2565b34801561042b57600080fd5b5061043f61043a366004614374565b610c69565b005b34801561044d57600080fd5b50600a546104729061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103f2565b3480156104a357600080fd5b50604080518082018252600681527f53454e5348490000000000000000000000000000000000000000000000000000602082015290516103f291906143ad565b3480156104ef57600080fd5b5061043f6104fe366004614412565b610d46565b34801561050f57600080fd5b50600c546103de9061010090046001600160a01b031681565b34801561053457600080fd5b50600c546105429060ff1681565b60405190151581526020016103f2565b34801561055e57600080fd5b5061054261056d36600461447b565b610f37565b34801561057e57600080fd5b5061054261058d3660046144a7565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105b757600080fd5b50610411610f4e565b3480156105cc57600080fd5b5061043f6105db3660046144c4565b610f6e565b3480156105ec57600080fd5b50610411611144565b34801561060157600080fd5b506105426106103660046144f2565b611188565b34801561062157600080fd5b5061043f610630366004614533565b611200565b34801561064157600080fd5b5061043f610650366004614644565b611352565b34801561066157600080fd5b5061041160155481565b34801561067757600080fd5b5061041161150d565b34801561068c57600080fd5b506104116101f481565b3480156106a257600080fd5b5061041160135481565b3480156106b857600080fd5b506106c161158c565b60405160ff90911681526020016103f2565b3480156106df57600080fd5b5061043f6106ee366004614706565b6115bb565b3480156106ff57600080fd5b5061043f61070e3660046144a7565b611749565b34801561071f57600080fd5b5061043f61072e366004614749565b611812565b34801561073f57600080fd5b5061043f61188b565b34801561075457600080fd5b5061043f610763366004614533565b611934565b34801561077457600080fd5b50600d546103de906001600160a01b031681565b34801561079457600080fd5b506018546105429060ff1681565b3480156107ae57600080fd5b506104116107bd366004614767565b611a92565b3480156107ce57600080fd5b5061043f6107dd366004614767565b611ac6565b3480156107ee57600080fd5b5061043f6107fd3660046144a7565b611b6a565b34801561080e57600080fd5b5061054261081d3660046144a7565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561084757600080fd5b5060185461054290610100900460ff1681565b34801561086657600080fd5b50601c546103de906001600160a01b031681565b34801561088657600080fd5b5061043f610895366004614749565b611d9c565b3480156108a657600080fd5b5061041160195481565b3480156108bc57600080fd5b5061043f6108cb3660046144a7565b611e15565b3480156108dc57600080fd5b506105426108eb3660046144a7565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561091557600080fd5b50610411611f0b565b34801561092a57600080fd5b506104116109393660046144a7565b6001600160a01b031660009081526020819052604090205490565b34801561096057600080fd5b5061043f611f26565b34801561097557600080fd5b5061043f610984366004614780565b611fe6565b34801561099557600080fd5b5061043f612162565b3480156109aa57600080fd5b5061043f6109b9366004614749565b6121bf565b3480156109ca57600080fd5b50601b546103de906001600160a01b031681565b3480156109ea57600080fd5b50601a546001600160a01b03166103de565b348015610a0857600080fd5b50610542612378565b348015610a1d57600080fd5b5061043f6123ee565b348015610a3257600080fd5b50610542610a4136600461447b565b612656565b348015610a5257600080fd5b506104116103e881565b348015610a6857600080fd5b5061043f610a773660046144a7565b61266d565b348015610a8857600080fd5b506014546105429060ff1681565b348015610aa257600080fd5b5061043f610ab1366004614374565b61277c565b348015610ac257600080fd5b50600b54610b039061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103f2565b348015610b4457600080fd5b50610411610b533660046144c4565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b8a57600080fd5b5061043f610b993660046144a7565b612829565b348015610baa57600080fd5b5061043f612c47565b348015610bbf57600080fd5b50600e54600f54601054610be0926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103f2565b348015610c1657600080fd5b5061043f610c253660046147cb565b612d29565b348015610c3657600080fd5b5060115461054290610100900460ff1681565b348015610c5557600080fd5b5061043f610c64366004614749565b613049565b601a546001600160a01b03163314610cbc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6018546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610d2a57600080fd5b505af1158015610d3e573d6000803e3d6000fd5b505050505050565b601a546001600160a01b03163314610d945760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b600b805461ffff8681167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216919091176201000086831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000858316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16176601000000000000918416919091021790558082610e3c858761482c565b610e46919061482c565b610e50919061482c565b600b80547fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff166801000000000000000061ffff93841602179055600a54600091610ea3916201000081048216911661482c565b600b5461ffff918216925068010000000000000000900416811015610f305760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610cb3565b5050505050565b6000610f443384846130c2565b5060015b92915050565b6000610f5c6009600a614932565b601754610f699190614941565b905090565b601a546001600160a01b03163314610fbc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b60095460ff16610fcb57600080fd5b6001600160a01b0382163014801590610fed57506001600160a01b0381163014155b80156110075750600d546001600160a01b03838116911614155b80156110215750600d546001600160a01b03828116911614155b61106d5760405162461bcd60e51b815260206004820152600b60248201527f4a75737420646f6e27742e0000000000000000000000000000000000000000006044820152606401610cb3565b806001600160a01b0316826001600160a01b0316036110cf576001600160a01b03811660009081526004602090815260408083208054600160ff199182168117909255600890935292208054909116821790556110cb908290611d9c565b5050565b6001600160a01b0382811660008181526004602090815260408083208054600160ff19918216811790925595871680855282852080548816831790559484526008909252808320805486168317905592825291902080549092168117909155611139908390611d9c565b6110cb816001611d9c565b60006111526009600a614932565b6111619064813893ee0061497c565b60000361116d57600080fd5b6111796009600a614932565b610f699064813893ee0061497c565b6001600160a01b0383166000908152600360209081526040808320338452909152812054600019146111ed576001600160a01b0384166000908152600360209081526040808320338452909152812080548492906111e7908490614993565b90915550505b6111f88484846131cf565b949350505050565b601a546001600160a01b0316331461124e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b606461125c6009600a614932565b61126b9064813893ee0061497c565b6112759190614941565b81836112836009600a614932565b6112929064813893ee0061497c565b61129c919061497c565b6112a69190614941565b101561131a5760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610cb3565b80826113286009600a614932565b6113379064813893ee0061497c565b611341919061497c565b61134b9190614941565b6017555050565b601a546001600160a01b031633146113a05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b80518251146113f15760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cb3565b60005b82518161ffff1610156115085761140d6009600a614932565b828261ffff1681518110611423576114236149a6565b6020026020010151611435919061497c565b3360009081526020819052604090205410156114935760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610cb3565b6114f533848361ffff16815181106114ad576114ad6149a6565b60200260200101516009600a6114c39190614932565b858561ffff16815181106114d9576114d96149a6565b60200260200101516114eb919061497c565b6000806001613740565b5080611500816149d5565b9150506113f4565b505050565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf835461156791906149f6565b6115736009600a614932565b6115829064813893ee0061497c565b610f699190614993565b600061159a6009600a614932565b6115a99064813893ee0061497c565b6000036115b557600080fd5b50600990565b601a546001600160a01b031633146116095760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b600c5460ff161561165c5760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610cb3565b6101f48361ffff161115801561167857506103e88261ffff1611155b801561168a57506103e88161ffff1611155b6116d65760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610cb3565b600a805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b601a546001600160a01b031633146117975760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b6018546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b1580156117fe57600080fd5b505af1158015610f30573d6000803e3d6000fd5b601a546001600160a01b031633146118605760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b601b546001600160a01b0316331461190b5760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201527f65706c6f7965722e0000000000000000000000000000000000000000000000006064820152608401610cb3565b611915600061266d565b601b805473ffffffffffffffffffffffffffffffffffffffff19169055565b601a546001600160a01b031633146119825760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b6103e86119916009600a614932565b6119a09064813893ee0061497c565b6119ab90600561497c565b6119b59190614941565b81836119c36009600a614932565b6119d29064813893ee0061497c565b6119dc919061497c565b6119e69190614941565b1015611a5a5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610cb3565b8082611a686009600a614932565b611a779064813893ee0061497c565b611a81919061497c565b611a8b9190614941565b6016555050565b600d546001600160a01b031660009081526020819052604081205461271090611abc90849061497c565b610f489190614941565b601a546001600160a01b03163314611b145760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b6096811115611b655760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610cb3565b601555565b601a546001600160a01b03163314611bb85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b6001600160a01b038116611c345760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cb3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b03821601611cd25760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cb3565b601a54611ce9906001600160a01b03166000611d9c565b611cf4816001611d9c565b601a546001600160a01b031660009081526020819052604090205415611d3d57601a546001600160a01b0316600081815260208190526040902054611d3b919083906114eb565b505b601a80546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601a546001600160a01b03163314611dea5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b601a546001600160a01b03163314611e635760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b60185460ff1615611e7357600080fd5b306001600160a01b03821603611ecb5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610cb3565b601880546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000611f196009600a614932565b601654610f699190614941565b601a546001600160a01b03163314611f745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b601a54611f8b906001600160a01b03166000611d9c565b601a805473ffffffffffffffffffffffffffffffffffffffff1981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601a546001600160a01b031633146120345760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b6001600160a01b0383161580159061205457506001600160a01b03821615155b801561206857506001600160a01b03811615155b6120b45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610cb3565b600e80546001600160a01b0385811673ffffffffffffffffffffffffffffffffffffffff1992831617909255600f80548584169216919091179055601054166000908152602081905260408120541115612131576010546001600160a01b031660008181526020819052604090205461212f919083906114eb565b505b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790555050565b601a546001600160a01b031633146121b05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b600c805460ff19166001179055565b601a546001600160a01b0316331461220d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b80612299576001600160a01b03828116600081815260016020526040808220805460ff1916905560185490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610d2a57600080fd5b60025415612300576203f480600254426122b39190614993565b116123005760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610cb3565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560185491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610d10565b601a546000906001600160a01b031633146123c95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b600c546123e890309061010090046001600160a01b03166000196130c2565b50600190565b601a546001600160a01b0316331461243c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b60185460ff161561248f5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cb3565b601854610100900460ff166124e65760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610cb3565b6018546201000090046001600160a01b031661252c57601880547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601854600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260096064820152620100009092041690636c115c3490608401600060405180830381600087803b1580156125b757600080fd5b505af19250505080156125c8575060015b5060188054600160ff1991821617909155600980549091169055600d546001600160a01b03166000908152602081905260409020546127109061260c90600a61497c565b6126169190614941565b601255600d546001600160a01b03166000908152602081905260409020546127109061264390601e61497c565b61264d9190614941565b60135542601955565b60006126633384846131cf565b5060019392505050565b601b546001600160a01b031633146126ed5760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201527f65706c6f7965722e0000000000000000000000000000000000000000000000006064820152608401610cb3565b601c546001600160a01b0316801561272a576001600160a01b0381166000908152600460205260408120805460ff1916905561272a908290611d9c565b601c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556000908152600460205260409020805460ff191660019081179091556110cb908390611d9c565b601a546001600160a01b031633146127ca5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b6011805461ff001916610100841515908102919091179091556014805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b601a546001600160a01b031633146128775760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b601854610100900460ff16156128cf5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610cb3565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612914573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129389190614a09565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a99190614a09565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a309190614a09565b90506001600160a01b038116612bce57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa29190614a09565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b139190614a09565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9c9190614a09565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612bf7565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600c80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0385811682029290921792839055611508923092919004166000196130c2565b601a546001600160a01b03163314612c955760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b601854610100900460ff1615612ced5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610cb3565b601a546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612d26573d6000803e3d6000fd5b50565b601a546001600160a01b03163314612d775760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b8284612d856009600a614932565b612d949064813893ee0061497c565b612d9e919061497c565b612da89190614941565b6012558082612db96009600a614932565b612dc89064813893ee0061497c565b612dd2919061497c565b612ddc9190614941565b60138190556012541115612e585760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610cb3565b600d546001600160a01b031660009081526020819052604090205461271090612e8290609661497c565b612e8c9190614941565b6013541115612f035760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201527f50492e00000000000000000000000000000000000000000000000000000000006064820152608401610cb3565b620f4240612f136009600a614932565b612f229064813893ee0061497c565b612f2c9190614941565b6013541015612fa35760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201527f20746f74616c20737570706c792e0000000000000000000000000000000000006064820152608401610cb3565b620f4240612fb36009600a614932565b612fc29064813893ee0061497c565b612fcc9190614941565b60125410156130435760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201527f20746f74616c20737570706c792e0000000000000000000000000000000000006064820152608401610cb3565b50505050565b601a546001600160a01b031633146130975760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cb3565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b0383166131185760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cb3565b6001600160a01b03821661316e5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cb3565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661324d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cb3565b6001600160a01b0383166132c95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cb3565b6000821161333f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610cb3565b6001600160a01b0384166000908152600160205260408120548190819060ff161561336d576001925061339b565b6001600160a01b03861660009081526001602052604090205460ff1615613397576001915061339b565b5060015b6133a58787613a27565b156135b05760185460ff166133fc5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cb3565b82806134055750815b156134c9576001600160a01b03871660009081526007602052604090205460ff1615801561344c57506001600160a01b03861660009081526007602052604090205460ff16155b156134c9576016548511156134c95760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610cb3565b600c546001600160a01b0387811661010090920416148015906134ea575081155b156135b0576001600160a01b03861660009081526007602052604090205460ff166135b05760175485613532886001600160a01b031660009081526020819052604090205490565b61353c91906149f6565b11156135b05760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610cb3565b6010546001600160a01b0390811690881603613646576001600160a01b03861661dead146136465760405162461bcd60e51b815260206004820152603460248201527f4275796261636b2077616c6c65742063616e206f6e6c792073656e6420746f6b60448201527f656e7320746f206465616420616464726573732e0000000000000000000000006064820152608401610cb3565b81156137275760115460ff1661372757601154610100900460ff16801561368657506001600160a01b03861660009081526008602052604090205460ff16155b80156136ab57506001600160a01b03871660009081526008602052604090205460ff16155b15613727573060009081526020819052604090205460125481106137255760135460145460ff161561370f57601554600d546001600160a01b0316600090815260208190526040902054612710916137029161497c565b61370c9190614941565b90505b80821061371a578091505b61372382613b3e565b505b505b613735878787868686613740565b979650505050505050565b600061374c8787613a27565b156137ff576018546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156137e8575060408051601f3d908101601f191682019092526137e591810190614a26565b60015b6137f157600080fd5b9050806137fd57600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff168061384157506001600160a01b03871660009081526006602052604090205460ff165b1561384a575060005b6001600160a01b03881660009081526020819052604081208054889290613872908490614993565b9091555060009050816138855786613891565b6138918987878a6140e1565b9050806000808a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546138c791906149f6565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161391391815260200190565b60405180910390a3601854610100900460ff16613a185761393489896141f6565b601854610100900460ff1615801561395157506139518989613a27565b801561397657506001600160a01b03891660009081526005602052604090205460ff16155b801561399b57506001600160a01b03881660009081526005602052604090205460ff16155b80156139a5575083155b15613a185760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610cb3565b50600198975050505050505050565b601a546000906001600160a01b03848116911614801590613a565750601a546001600160a01b03838116911614155b8015613a6d5750601a546001600160a01b03163214155b8015613a9257506001600160a01b03821660009081526004602052604090205460ff16155b8015613ab757506001600160a01b03831660009081526004602052604090205460ff16155b8015613ace57506001600160a01b03821661dead14155b8015613ae257506001600160a01b03821615155b8015613af757506001600160a01b0383163014155b8015613b1757506018546001600160a01b03848116620100009092041614155b8015613b3757506018546001600160a01b03838116620100009092041614155b9392505050565b6011805460ff191660011790556040805160a081018252600b5461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000900490911660808201819052600003613bb257506140d4565b306000908152600360209081526040808320600c5461010090046001600160a01b0316845290915290205460001914613c1557306000908152600360209081526040808320600c5461010090046001600160a01b03168452909152902060001990555b60006002826080015161ffff16836000015161ffff1685613c36919061497c565b613c409190614941565b613c4a9190614941565b90506000613c588285614993565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613c9257613c926149a6565b60200260200101906001600160a01b031690816001600160a01b031681525050600c60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d299190614a09565b81600181518110613d3c57613d3c6149a6565b6001600160a01b039283166020918202929092010152600c546040517f791ac9470000000000000000000000000000000000000000000000000000000081526101009091049091169063791ac94790613da2908590600090869030904290600401614a43565b600060405180830381600087803b158015613dbc57600080fd5b505af1925050508015613dcd575060015b613dda57505050506140d4565b47600083613de8868461497c565b613df29190614941565b90508415613eee57600c546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015613ea2575060408051601f3d908101601f19168201909252613e9f91810190614ab4565b60015b613eb1575050505050506140d4565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613ef88183614993565b9150856000015186608001818151613f109190614ae2565b61ffff9081169091526080880151604089015160009350839291821691613f3891168661497c565b613f429190614941565b90506000886080015161ffff16896060015161ffff1686613f63919061497c565b613f6d9190614941565b90506000613f7b82846149f6565b613f859087614993565b60208b015190915061ffff1615613ff357600e546040516001600160a01b03909116906188b89083906000818181858888f193505050503d8060008114613fe8576040519150601f19603f3d011682016040523d82523d6000602084013e613fed565b606091505b50909450505b60408a015161ffff161561405e57600f546040516001600160a01b03909116906188b89085906000818181858888f193505050503d8060008114614053576040519150601f19603f3d011682016040523d82523d6000602084013e614058565b606091505b50909450505b60608a015161ffff16156140c9576010546040516001600160a01b03909116906188b89084906000818181858888f193505050503d80600081146140be576040519150601f19603f3d011682016040523d82523d6000602084013e6140c3565b606091505b50909450505b505050505050505050505b506011805460ff19169055565b60008084156140f75750600a5461ffff16614121565b83156141105750600a5462010000900461ffff16614121565b50600a54640100000000900461ffff165b8060000361413257829150506111f8565b6018546201000090046001600160a01b03163014801561415c5750466001148061415c5750466038145b1561416657506111945b6000612710614175838661497c565b61417f9190614941565b905080156141ec5730600090815260208190526040812080548392906141a69084906149f6565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6137358185614993565b601854610100900460ff16156142745760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610cb3565b61427e8282613a27565b1580156142985750600d546001600160a01b038281169116145b156110cb576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556018805461ff00191661010017908190556201000090041661432657601880547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6011805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200161281d565b8015158114612d2657600080fd5b6000806040838503121561438757600080fd5b823561439281614366565b915060208301356143a281614366565b809150509250929050565b600060208083528351808285015260005b818110156143da578581018301518582016040015282016143be565b506000604082860101526040601f19601f8301168501019250505092915050565b803561ffff8116811461440d57600080fd5b919050565b6000806000806080858703121561442857600080fd5b614431856143fb565b935061443f602086016143fb565b925061444d604086016143fb565b915061445b606086016143fb565b905092959194509250565b6001600160a01b0381168114612d2657600080fd5b6000806040838503121561448e57600080fd5b823561449981614466565b946020939093013593505050565b6000602082840312156144b957600080fd5b8135613b3781614466565b600080604083850312156144d757600080fd5b82356144e281614466565b915060208301356143a281614466565b60008060006060848603121561450757600080fd5b833561451281614466565b9250602084013561452281614466565b929592945050506040919091013590565b6000806040838503121561454657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156145ad576145ad614555565b604052919050565b600067ffffffffffffffff8211156145cf576145cf614555565b5060051b60200190565b600082601f8301126145ea57600080fd5b813560206145ff6145fa836145b5565b614584565b82815260059290921b8401810191818101908684111561461e57600080fd5b8286015b848110156146395780358352918301918301614622565b509695505050505050565b6000806040838503121561465757600080fd5b823567ffffffffffffffff8082111561466f57600080fd5b818501915085601f83011261468357600080fd5b813560206146936145fa836145b5565b82815260059290921b840181019181810190898411156146b257600080fd5b948201945b838610156146d95785356146ca81614466565b825294820194908201906146b7565b965050860135925050808211156146ef57600080fd5b506146fc858286016145d9565b9150509250929050565b60008060006060848603121561471b57600080fd5b614724846143fb565b9250614732602085016143fb565b9150614740604085016143fb565b90509250925092565b6000806040838503121561475c57600080fd5b823561439281614466565b60006020828403121561477957600080fd5b5035919050565b60008060006060848603121561479557600080fd5b83356147a081614466565b925060208401356147b081614466565b915060408401356147c081614466565b809150509250925092565b600080600080608085870312156147e157600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61ffff818116838216019080821115614847576148476147fd565b5092915050565b600181815b8085111561488957816000190482111561486f5761486f6147fd565b8085161561487c57918102915b93841c9390800290614853565b509250929050565b6000826148a057506001610f48565b816148ad57506000610f48565b81600181146148c357600281146148cd576148e9565b6001915050610f48565b60ff8411156148de576148de6147fd565b50506001821b610f48565b5060208310610133831016604e8410600b841016171561490c575081810a610f48565b614916838361484e565b806000190482111561492a5761492a6147fd565b029392505050565b6000613b3760ff841683614891565b600082614977577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082028115828204841417610f4857610f486147fd565b81810381811115610f4857610f486147fd565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff8083168181036149ec576149ec6147fd565b6001019392505050565b80820180821115610f4857610f486147fd565b600060208284031215614a1b57600080fd5b8151613b3781614466565b600060208284031215614a3857600080fd5b8151613b3781614366565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614a935784516001600160a01b031683529383019391830191600101614a6e565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215614ac957600080fd5b8351925060208401519150604084015190509250925092565b61ffff828116828216039080821115614847576148476147fd56fea26469706673582212207e1e12bd753e9b4048ff57e57ad8d7ad726e7c5b89f1f522f0f9d6464b2877ce64736f6c63430008110033

Deployed Bytecode Sourcemap

3951:25476:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5699:73;;;;;;;;;;;;5730:42;5699:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;5699:73:0;;;;;;;;6264:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;6264:28:0;245:177:1;15758:153:0;;;;;;;;;;-1:-1:-1;15758:153:0;;;;;:::i;:::-;;:::i;:::-;;5098:108;;;;;;;;;;-1:-1:-1;5098:108: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;5098:108:0;931:365:1;11676:80:0;;;;;;;;;;-1:-1:-1;11748:5:0;;;;;;;;;;;;;;;;11676:80;;;;11748:5;11676:80;:::i;16570:494::-;;;;;;;;;;-1:-1:-1;16570:494:0;;;;;:::i;:::-;;:::i;5638:26::-;;;;;;;;;;-1:-1:-1;5638:26:0;;;;;;;-1:-1:-1;;;;;5638:26:0;;;5605;;;;;;;;;;-1:-1:-1;5605:26:0;;;;;;;;;;;2896:14:1;;2889:22;2871:41;;2859:2;2844:18;5605:26:0;2731:187:1;12284:161:0;;;;;;;;;;-1:-1:-1;12284:161:0;;;;;:::i;:::-;;:::i;14897:140::-;;;;;;;;;;-1:-1:-1;14897:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;14995:34:0;14971:4;14995:34;;;:25;:34;;;;;;;;;14897:140;18453:114;;;;;;;;;;;;;:::i;19975:809::-;;;;;;;;;;-1:-1:-1;19975:809:0;;;;;:::i;:::-;;:::i;11347:115::-;;;;;;;;;;;;;:::i;12954:306::-;;;;;;;;;;-1:-1:-1;12954:306:0;;;;;:::i;:::-;;:::i;18065:264::-;;;;;;;;;;-1:-1:-1;18065:264:0;;;;;:::i;:::-;;:::i;27102:447::-;;;;;;;;;;-1:-1:-1;27102:447:0;;;;;:::i;:::-;;:::i;6372:33::-;;;;;;;;;;;;;;;;15491:141;;;;;;;;;;;;;:::i;5403:41::-;;;;;;;;;;;;5441:3;5403:41;;6299:25;;;;;;;;;;;;;;;;11468:112;;;;;;;;;;;;;:::i;:::-;;;7536:4:1;7524:17;;;7506:36;;7494:2;7479:18;11468:112:0;7364:184:1;16109:453:0;;;;;;;;;;-1:-1:-1;16109:453:0;;;;;:::i;:::-;;:::i;15640:110::-;;;;;;;;;;-1:-1:-1;15640:110:0;;;;;:::i;:::-;;:::i;15045:140::-;;;;;;;;;;-1:-1:-1;15045:140:0;;;;;:::i;:::-;;:::i;10771:221::-;;;;;;;;;;;;;:::i;17784:273::-;;;;;;;;;;-1:-1:-1;17784:273:0;;;;;:::i;:::-;;:::i;5671:21::-;;;;;;;;;;-1:-1:-1;5671:21:0;;;;-1:-1:-1;;;;;5671:21:0;;;6536:34;;;;;;;;;;-1:-1:-1;6536:34:0;;;;;;;;18575:189;;;;;;;;;;-1:-1:-1;18575:189:0;;;;;:::i;:::-;;:::i;19479:217::-;;;;;;;;;;-1:-1:-1;19479:217:0;;;;;:::i;:::-;;:::i;9233:654::-;;;;;;;;;;-1:-1:-1;9233:654:0;;;;;:::i;:::-;;:::i;14762:127::-;;;;;;;;;;-1:-1:-1;14762:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;14853:28:0;14829:4;14853:28;;;:19;:28;;;;;;;;;14762:127;6577:36;;;;;;;;;;-1:-1:-1;6577:36:0;;;;;;;;;;;9024:23;;;;;;;;;;-1:-1:-1;9024:23:0;;;;-1:-1:-1;;;;;9024:23:0;;;15193:134;;;;;;;;;;-1:-1:-1;15193:134:0;;;;;:::i;:::-;;:::i;6650:26::-;;;;;;;;;;;;;;;;14392:222;;;;;;;;;;-1:-1:-1;14392:222:0;;;;;:::i;:::-;;:::i;14622:132::-;;;;;;;;;;-1:-1:-1;14622:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;14716:30:0;14692:4;14716:30;;;:21;:30;;;;;;;;;14622:132;18337:108;;;;;;;;;;;;;:::i;11986:117::-;;;;;;;;;;-1:-1:-1;11986:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;12079:16:0;12052:7;12079:16;;;;;;;;;;;;11986:117;9895:225;;;;;;;;;;;;;:::i;17072:704::-;;;;;;;;;;-1:-1:-1;17072:704:0;;;;;:::i;:::-;;:::i;15919:182::-;;;;;;;;;;;;;:::i;13889:495::-;;;;;;;;;;-1:-1:-1;13889:495:0;;;;;:::i;:::-;;:::i;8986:31::-;;;;;;;;;;-1:-1:-1;8986:31:0;;;;-1:-1:-1;;;;;8986:31:0;;;11762:79;;;;;;;;;;-1:-1:-1;11832:6:0;;-1:-1:-1;;;;;11832:6:0;11762:79;;12771:175;;;;;;;;;;;;;:::i;26269:635::-;;;;;;;;;;;;;:::i;12111:165::-;;;;;;;;;;-1:-1:-1;12111:165:0;;;;;:::i;:::-;;:::i;5501:47::-;;;;;;;;;;;;5544:4;5501:47;;10281:482;;;;;;;;;;-1:-1:-1;10281:482:0;;;;;:::i;:::-;;:::i;6331:34::-;;;;;;;;;;-1:-1:-1;6331:34:0;;;;;;;;19704:263;;;;;;;;;;-1:-1:-1;19704:263:0;;;;;:::i;:::-;;:::i;5215:179::-;;;;;;;;;;-1:-1:-1;5215:179:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9275:6:1;9308:15;;;9290:34;;9360:15;;;9355:2;9340:18;;9333:43;9412:15;;;9392:18;;;9385:43;;;;9464:15;;9459:2;9444:18;;9437:43;9517:15;;;9511:3;9496:19;;9489:44;9252:3;9237:19;5215:179:0;9016:523:1;11847:133:0;;;;;;;;;;-1:-1:-1;11847:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;11949:19:0;;;11931:7;11949:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;11847:133;13268:613;;;;;;;;;;-1:-1:-1;13268:613:0;;;;;:::i;:::-;;:::i;26912:182::-;;;;;;;;;;;;;:::i;5920:267::-;;;;;;;;;;-1:-1:-1;5920:267:0;;;;;;;;-1:-1:-1;;;;;5920:267:0;;;;;;;;;;;;;;-1:-1:-1;;;;;9873:15:1;;;9855:34;;9925:15;;;9920:2;9905:18;;9898:43;9977:15;;9957:18;;;9950:43;;;;9782:2;9767:18;5920:267:0;9544:455:1;18772:699:0;;;;;;;;;;-1:-1:-1;18772:699:0;;;;;:::i;:::-;;:::i;6218:39::-;;;;;;;;;;-1:-1:-1;6218:39:0;;;;;;;;;;;15335:148;;;;;;;;;;-1:-1:-1;15335:148:0;;;;;:::i;:::-;;:::i;15758:153::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;;;;;;;;;15853:11:::1;::::0;:50:::1;::::0;;;;10927:14:1;;10920:22;15853:50:0::1;::::0;::::1;10902:41:1::0;10986:14;;10979:22;10959:18;;;10952:50;15853:11:0;;;::::1;-1:-1:-1::0;;;;;15853:11:0::1;::::0;:26:::1;::::0;10875:18:1;;15853:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15758:153:::0;;:::o;16570:494::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;16688:7:::1;:29:::0;;::::1;::::0;;::::1;16728::::0;;;;;;;;;;;::::1;;;16806:25:::0;;16768:27;;;::::1;;16806:25:::0;;;;;;::::1;::::0;;;::::1;;::::0;;;16768:27;16862:21:::1;16728:29:::0;16688;16862:21:::1;:::i;:::-;:32;;;;:::i;:::-;:42;;;;:::i;:::-;16842:7;:62:::0;;;::::1;::::0;::::1;::::0;;::::1;;;::::0;;16950:9:::1;:17:::0;-1:-1:-1;;16931:36:0::1;::::0;16950:17;;::::1;::::0;::::1;::::0;16931:16:::1;:36;:::i;:::-;16986:7;:17:::0;16915:52:::1;::::0;;::::1;::::0;-1:-1:-1;16986:17:0;;::::1;;:26:::0;-1:-1:-1;16986:26:0::1;16978:78;;;::::0;-1:-1:-1;;;16978:78:0;;11577:2:1;16978:78:0::1;::::0;::::1;11559:21:1::0;11616:2;11596:18;;;11589:30;11655:34;11635:18;;;11628:62;11726:9;11706:18;;;11699:37;11753:19;;16978:78:0::1;11375:403:1::0;16978:78:0::1;16677:387;16570:494:::0;;;;:::o;12284:161::-;12361:4;12378:37;12387:10;12399:7;12408:6;12378:8;:37::i;:::-;-1:-1:-1;12433:4:0;12284:161;;;;;:::o;18453:114::-;18500:7;18545:13;4748:1;18545:2;:13;:::i;:::-;18527:14;;:32;;;;:::i;:::-;18520:39;;18453:114;:::o;19975:809::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;20079:23:::1;::::0;::::1;;20071:32;;;::::0;::::1;;-1:-1:-1::0;;;;;20122:23:0;::::1;20140:4;20122:23;::::0;::::1;::::0;:69:::1;;-1:-1:-1::0;;;;;;20167:24:0;::::1;20186:4;20167:24;;20122:69;:107;;;;-1:-1:-1::0;20213:6:0::1;::::0;-1:-1:-1;;;;;20213:16:0;;::::1;:6:::0;::::1;:16;;20122:107;:146;;;;-1:-1:-1::0;20251:6:0::1;::::0;-1:-1:-1;;;;;20251:17:0;;::::1;:6:::0;::::1;:17;;20122:146;20114:170;;;::::0;-1:-1:-1;;;20114:170:0;;13767:2:1;20114:170:0::1;::::0;::::1;13749:21:1::0;13806:2;13786:18;;;13779:30;13845:13;13825:18;;;13818:41;13876:18;;20114:170:0::1;13565:335:1::0;20114:170:0::1;20309:7;-1:-1:-1::0;;;;;20299:17:0::1;:6;-1:-1:-1::0;;;;;20299:17:0::1;::::0;20295:482:::1;;-1:-1:-1::0;;;;;20333:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;:33;;20362:4:::1;-1:-1:-1::0;;20333:33:0;;::::1;::::0;::::1;::::0;;;20381:16:::1;:25:::0;;;;;:32;;;;::::1;::::0;::::1;::::0;;20428:34:::1;::::0;20333:26;;20428:19:::1;:34::i;:::-;19975:809:::0;;:::o;20295:482::-:1;-1:-1:-1::0;;;;;20495:25:0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;:32;;20523:4:::1;-1:-1:-1::0;;20495:32:0;;::::1;::::0;::::1;::::0;;;20542:26;;::::1;::::0;;;;;;:33;;;::::1;::::0;::::1;::::0;;20590:24;;;:16:::1;:24:::0;;;;;;:31;;;::::1;::::0;::::1;::::0;;20636:25;;;;;;:32;;;;::::1;::::0;::::1;::::0;;;20683:33:::1;::::0;20495:25;;20683:19:::1;:33::i;:::-;20731:34;20751:7;20760:4;20731:19;:34::i;11347:115::-:0;11402:7;4808:13;4748:1;4808:2;:13;:::i;:::-;4791:30;;4595:15;4791:30;:::i;:::-;11428:1;11417:12;11413:31;;11433:8;;;11413:31;4808:13;4748:1;4808:2;:13;:::i;:::-;4791:30;;4595:15;4791:30;:::i;12954:306::-;-1:-1:-1;;;;;13075:19:0;;13054:4;13075:19;;;:11;:19;;;;;;;;13095:10;13075:31;;;;;;;;-1:-1:-1;;13075:52:0;13071:126;;-1:-1:-1;;;;;13144:19:0;;;;;;:11;:19;;;;;;;;13164:10;13144:31;;;;;;;:41;;13179:6;;13144:19;:41;;13179:6;;13144:41;:::i;:::-;;;;-1:-1:-1;;13071:126:0;13216:36;13226:6;13234:9;13245:6;13216:9;:36::i;:::-;13209:43;12954:306;-1:-1:-1;;;;12954:306:0:o;18065:264::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;18207:3:::1;4808:13;4748:1;4808:2;:13;:::i;:::-;4791:30;::::0;4595:15:::1;4791:30;:::i;:::-;18197:13;;;;:::i;:::-;18185:7:::0;18174;4808:13:::1;4748:1;4808:2;:13;:::i;:::-;4791:30;::::0;4595:15:::1;4791:30;:::i;:::-;18164:17;;;;:::i;:::-;18163:29;;;;:::i;:::-;:48;;18155:109;;;::::0;-1:-1:-1;;;18155:109:0;;14413:2:1;18155:109:0::1;::::0;::::1;14395:21:1::0;14452:2;14432:18;;;14425:30;14491:34;14471:18;;;14464:62;14562:18;14542;;;14535:46;14598:19;;18155:109:0::1;14211:412:1::0;18155:109:0::1;18314:7:::0;18303;4808:13:::1;4748:1;4808:2;:13;:::i;:::-;4791:30;::::0;4595:15:::1;4791:30;:::i;:::-;18293:17;;;;:::i;:::-;18292:29;;;;:::i;:::-;18275:14;:46:::0;-1:-1:-1;;18065:264:0:o;27102:447::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;27237:7:::1;:14;27218:8;:15;:33;27210:67;;;::::0;-1:-1:-1;;;27210:67:0;;14830:2:1;27210:67:0::1;::::0;::::1;14812:21:1::0;14869:2;14849:18;;;14842:30;14908:23;14888:18;;;14881:51;14949:18;;27210:67:0::1;14628:345:1::0;27210:67:0::1;27293:8;27288:254;27311:8;:15;27307:1;:19;;;27288:254;;;27392:13;4748:1;27392:2;:13;:::i;:::-;27381:7;27389:1;27381:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;27366:10;12052:7:::0;12079:16;;;;;;;;;;;27356:49:::1;;27348:80;;;::::0;-1:-1:-1;;;27348:80:0;;15369:2:1;27348:80:0::1;::::0;::::1;15351:21:1::0;15408:2;15388:18;;;15381:30;15447:20;15427:18;;;15420:48;15485:18;;27348:80:0::1;15167:342:1::0;27348:80:0::1;27443:87;27460:10;27472:8;27481:1;27472:11;;;;;;;;;;:::i;:::-;;;;;;;4748:1;27496:2;:13;;;;:::i;:::-;27485:7;27493:1;27485:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;27511:5;27518::::0;27525:4:::1;27443:16;:87::i;:::-;-1:-1:-1::0;27328:3:0;::::1;::::0;::::1;:::i;:::-;;;;27288:254;;;;27102:447:::0;;:::o;15491:141::-;15544:7;12079:16;;;;;;5730:42;12079:16;;;;15583:39;;12079:16;15583:39;:::i;:::-;4808:13;4748:1;4808:2;:13;:::i;:::-;4791:30;;4595:15;4791:30;:::i;:::-;15572:51;;;;:::i;11468:112::-;11520:5;4808:13;4748:1;4808:2;:13;:::i;:::-;4791:30;;4595:15;4791:30;:::i;:::-;11544:1;11533:12;11529:31;;11549:8;;;11529:31;-1:-1:-1;4748:1:0;;11468:112::o;16109:453::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;16217:14:::1;::::0;::::1;;16216:15;16208:45;;;::::0;-1:-1:-1;;;16208:45:0;;16048:2:1;16208:45:0::1;::::0;::::1;16030:21:1::0;16087:2;16067:18;;;16060:30;16126:19;16106:18;;;16099:47;16163:18;;16208:45:0::1;15846:341:1::0;16208:45:0::1;5441:3;16272:6;:21;;;;:65;;;;;5490:4;16314:7;:23;;;;16272:65;:117;;;;;5544:4;16358:11;:31;;;;16272:117;16264:170;;;::::0;-1:-1:-1;;;16264:170:0;;16394:2:1;16264:170:0::1;::::0;::::1;16376:21:1::0;16433:2;16413:18;;;16406:30;16472:25;16452:18;;;16445:53;16515:18;;16264:170:0::1;16192:347:1::0;16264:170:0::1;16445:9;:25:::0;;::::1;::::0;;::::1;16481:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;16519:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;16109:453::o;15640:110::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;15709:11:::1;::::0;:33:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;15709:33:0::1;::::0;::::1;160:74:1::0;15709:11:0;;;::::1;::::0;;::::1;::::0;:24:::1;::::0;133:18:1;;15709:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;15045:140:::0;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;-1:-1:-1;;;;;15137:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;15137:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15045:140::o;10771:221::-;10849:16;;-1:-1:-1;;;;;10849:16:0;10835:10;:30;10827:83;;;;-1:-1:-1;;;10827:83:0;;16746:2:1;10827:83:0;;;16728:21:1;16785:2;16765:18;;;16758:30;16824:34;16804:18;;;16797:62;16895:10;16875:18;;;16868:38;16923:19;;10827:83:0;16544:404:1;10827:83:0;10921:23;10941:1;10921:11;:23::i;:::-;10955:16;:29;;-1:-1:-1;;10955:29:0;;;10771:221::o;17784:273::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;17929:4:::1;4808:13;4748:1;4808:2;:13;:::i;:::-;4791:30;::::0;4595:15:::1;4791:30;:::i;:::-;17915:11;::::0;17925:1:::1;17915:11;:::i;:::-;:18;;;;:::i;:::-;17903:7:::0;17892;4808:13:::1;4748:1;4808:2;:13;:::i;:::-;4791:30;::::0;4595:15:::1;4791:30;:::i;:::-;17882:17;;;;:::i;:::-;17881:29;;;;:::i;:::-;:53;;17873:121;;;::::0;-1:-1:-1;;;17873:121:0;;17155:2:1;17873:121:0::1;::::0;::::1;17137:21:1::0;17194:2;17174:18;;;17167:30;17233:34;17213:18;;;17206:62;17304:25;17284:18;;;17277:53;17347:19;;17873:121:0::1;16953:419:1::0;17873:121:0::1;18042:7:::0;18031;4808:13:::1;4748:1;4808:2;:13;:::i;:::-;4791:30;::::0;4595:15:::1;4791:30;:::i;:::-;18021:17;;;;:::i;:::-;18020:29;;;;:::i;:::-;18005:12;:44:::0;-1:-1:-1;;17784:273:0:o;18575:189::-;18704:6;;-1:-1:-1;;;;;18704:6:0;18666:7;12079:16;;;;;;;;;;;5591:5;;18694:41;;18714:21;;18694:41;:::i;:::-;18693:62;;;;:::i;19479:217::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;19609:3:::1;19583:22;:29;;19575:64;;;::::0;-1:-1:-1;;;19575:64:0;;17579:2:1;19575:64:0::1;::::0;::::1;17561:21:1::0;17618:2;17598:18;;;17591:30;17657:24;17637:18;;;17630:52;17699:18;;19575:64:0::1;17377:346:1::0;19575:64:0::1;19650:13;:38:::0;19479:217::o;9233:654::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;-1:-1:-1;;;;;9312:22:0;::::1;9304:96;;;::::0;-1:-1:-1;;;9304:96:0;;17930:2:1;9304:96:0::1;::::0;::::1;17912:21:1::0;17969:2;17949:18;;;17942:30;18008:34;17988:18;;;17981:62;18079:31;18059:18;;;18052:59;18128:19;;9304:96:0::1;17728:425:1::0;9304:96:0::1;9419:16:::0;-1:-1:-1;;;;;9419:16:0;::::1;::::0;9411:90:::1;;;::::0;-1:-1:-1;;;9411:90:0;;17930:2:1;9411:90:0::1;::::0;::::1;17912:21:1::0;17969:2;17949:18;;;17942:30;18008:34;17988:18;;;17981:62;18079:31;18059:18;;;18052:59;18128:19;;9411:90:0::1;17728:425:1::0;9411:90:0::1;9532:6;::::0;9512:34:::1;::::0;-1:-1:-1;;;;;9532:6:0::1;;9512:19;:34::i;:::-;9557:35;9577:8;9587:4;9557:19;:35::i;:::-;9627:6;::::0;-1:-1:-1;;;;;9627:6:0::1;9637:1;12079:16:::0;;;;;;;;;;;9617:21;9613:127:::1;;9672:6;::::0;-1:-1:-1;;;;;9672:6:0::1;12052:7:::0;12079:16;;;;;;;;;;;9655:73:::1;::::0;9672:6;9680:8;;9690:17:::1;11986:117:::0;9655:73:::1;;9613:127;9779:6;::::0;;-1:-1:-1;;;;;9796:17:0;;::::1;-1:-1:-1::0;;9796:17:0;::::1;::::0;::::1;::::0;;;9829:40:::1;::::0;9779:6;::::1;::::0;9796:17;9779:6;;9829:40:::1;::::0;9760:16:::1;::::0;9829:40:::1;9293:594;9233:654:::0;:::o;15193:134::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;-1:-1:-1;;;;;15281:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;15281:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15193:134::o;14392:222::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;14476:14:::1;::::0;::::1;;14475:15;14467:24;;;::::0;::::1;;14533:4;-1:-1:-1::0;;;;;14510:28:0;::::1;::::0;14502:55:::1;;;::::0;-1:-1:-1;;;14502:55:0;;18360:2:1;14502:55:0::1;::::0;::::1;18342:21:1::0;18399:2;18379:18;;;18372:30;18438:16;18418:18;;;18411:44;18472:18;;14502:55:0::1;18158:338:1::0;14502:55:0::1;14568:11;:38:::0;;-1:-1:-1;;;;;14568:38:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;14392:222::o;18337:108::-;18380:7;18423:13;4748:1;18423:2;:13;:::i;:::-;18407:12;;:30;;;;:::i;9895:225::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;9974:6:::1;::::0;9954:34:::1;::::0;-1:-1:-1;;;;;9974:6:0::1;;9954:19;:34::i;:::-;10018:6;::::0;;-1:-1:-1;;10035:19:0;::::1;::::0;;;10070:42:::1;::::0;-1:-1:-1;;;;;10018:6:0;;::::1;::::0;9999:16:::1;::::0;10018:6;;10070:42:::1;::::0;9999:16;;10070:42:::1;9943:177;9895:225::o:0;17072:704::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;-1:-1:-1;;;;;17208:23:0;::::1;::::0;;::::1;::::0;:49:::1;;-1:-1:-1::0;;;;;;17235:22:0;::::1;::::0;::::1;17208:49;:74;;;;-1:-1:-1::0;;;;;;17261:21:0;::::1;::::0;::::1;17208:74;17200:110;;;::::0;-1:-1:-1;;;17200:110:0;;18703:2:1;17200:110:0::1;::::0;::::1;18685:21:1::0;18742:2;18722:18;;;18715:30;18781:25;18761:18;;;18754:53;18824:18;;17200:110:0::1;18501:347:1::0;17200:110:0::1;17321:11;:42:::0;;-1:-1:-1;;;;;17321:42:0;;::::1;-1:-1:-1::0;;17321:42:0;;::::1;;::::0;;;17374:20;:40;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;17569:19;;::::1;-1:-1:-1::0;12079:16:0;;;;;;;;;;;17559:34:::1;17555:165;;;17627:19:::0;;-1:-1:-1;;;;;17627:19:0::1;12052:7:::0;12079:16;;;;;;;;;;;17610:98:::1;::::0;17627:19;17648:7;;17657:30:::1;11986:117:::0;17610:98:::1;;17555:165;17730:19:::0;:38;;-1:-1:-1;;17730:38:0::1;-1:-1:-1::0;;;;;17730:38:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;17072:704:0:o;15919:182::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;16072:14:::1;:21:::0;;-1:-1:-1;;16072:21:0::1;16089:4;16072:21;::::0;;15919:182::o;13889:495::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;13971:7:::1;13966:411;;-1:-1:-1::0;;;;;13995:13:0;;::::1;14011:5;13995:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;13995:21:0::1;::::0;;14031:11:::1;::::0;:34;;;;;::::1;::::0;::::1;19021:74:1::0;;;;19111:18;;;19104:50;;;;14031:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;18994:18:1;;14031:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;13966:411;14102:17;::::0;:22;14098:135:::1;;14191:6;14171:17;;14153:15;:35;;;;:::i;:::-;:44;14145:72;;;::::0;-1:-1:-1;;;14145:72:0;;19367:2:1;14145:72:0::1;::::0;::::1;19349:21:1::0;19406:2;19386:18;;;19379:30;19445:17;19425:18;;;19418:45;19480:18;;14145:72:0::1;19165:339:1::0;14145:72:0::1;-1:-1:-1::0;;;;;14247:13:0;;::::1;;::::0;;;14263:4:::1;14247:13;::::0;;;;;;;;:20;;-1:-1:-1;;14247:20:0::1;::::0;::::1;::::0;;14302:15:::1;14282:17;:35:::0;14332:11:::1;::::0;:33;;;;;::::1;::::0;::::1;19021:74:1::0;;;;19111:18;;;19104:50;14332:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;18994:18:1;;14332:33:0::1;18853:307:1::0;12771:175:0;9087:6;;12837:4;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;12886:9:::1;::::0;12854:62:::1;::::0;12871:4:::1;::::0;12886:9:::1;::::0;::::1;-1:-1:-1::0;;;;;12886:9:0::1;-1:-1:-1::0;;12854:8:0::1;:62::i;:::-;-1:-1:-1::0;12934:4:0::1;12771:175:::0;:::o;26269:635::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;26331:14:::1;::::0;::::1;;26330:15;26322:52;;;::::0;-1:-1:-1;;;26322:52:0;;19711:2:1;26322:52:0::1;::::0;::::1;19693:21:1::0;19750:2;19730:18;;;19723:30;19789:26;19769:18;;;19762:54;19833:18;;26322:52:0::1;19509:348:1::0;26322:52:0::1;26393:16;::::0;::::1;::::0;::::1;;;26385:53;;;::::0;-1:-1:-1;;;26385:53:0;;20064:2:1;26385:53:0::1;::::0;::::1;20046:21:1::0;20103:2;20083:18;;;20076:30;20142:26;20122:18;;;20115:54;20186:18;;26385:53:0::1;19862:348:1::0;26385:53:0::1;26461:11;::::0;;;::::1;-1:-1:-1::0;;;;;26461:11:0::1;26449:106;;26503:11;:40:::0;;;::::1;26537:4;26503:40:::0;::::1;;::::0;;26449:106:::1;26569:11;::::0;26591:6:::1;::::0;26569:87:::1;::::0;;;;-1:-1:-1;;;;;26591:6:0;;::::1;26569:87;::::0;::::1;20438:74:1::0;20560:10;26606:12:0::1;20548:23:1::0;20528:18;;;20521:51;20620:18;26628:15:0::1;20608:31:1::0;20588:18;;;20581:59;4748:1:0::1;20656:18:1::0;;;20649:45;26569:11:0;;;::::1;;::::0;:21:::1;::::0;20410:19:1;;26569:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;26565:103:::0;26678:14:::1;:21:::0;;26695:4:::1;-1:-1:-1::0;;26678:21:0;;::::1;;::::0;;;26710:23:::1;:31:::0;;;;::::1;::::0;;26779:6:::1;::::0;-1:-1:-1;;;;;26779:6:0::1;-1:-1:-1::0;12079:16:0;;;;;;;;;;;26795:5:::1;::::0;26769:22:::1;::::0;26789:2:::1;26769:22;:::i;:::-;26768:32;;;;:::i;:::-;26752:13;:48:::0;26835:6:::1;::::0;-1:-1:-1;;;;;26835:6:0::1;12052:7:::0;12079:16;;;;;;;;;;;26851:5:::1;::::0;26825:22:::1;::::0;26845:2:::1;26825:22;:::i;:::-;26824:32;;;;:::i;:::-;26811:10;:45:::0;26881:15:::1;26867:11;:29:::0;26269:635::o;12111:165::-;12189:4;12206:40;12216:10;12228:9;12239:6;12206:9;:40::i;:::-;-1:-1:-1;12264:4:0;;12111:165;-1:-1:-1;;;12111:165:0:o;10281:482::-;10363:16;;-1:-1:-1;;;;;10363:16:0;10349:10;:30;10341:83;;;;-1:-1:-1;;;10341:83:0;;16746:2:1;10341:83:0;;;16728:21:1;16785:2;16765:18;;;16758:30;16824:34;16804:18;;;16797:62;16895:10;16875:18;;;16868:38;16923:19;;10341:83:0;16544:404:1;10341:83:0;10457:8;;-1:-1:-1;;;;;10457:8:0;10480:25;;10476:150;;-1:-1:-1;;;;;10522:30:0;;10555:5;10522:30;;;:17;:30;;;;;:38;;-1:-1:-1;;10522:38:0;;;10575:39;;10540:11;;10575:19;:39::i;:::-;10636:8;:22;;-1:-1:-1;;10636:22:0;-1:-1:-1;;;;;10636:22:0;;;;;;;;-1:-1:-1;10669:30:0;;;:17;:30;;;;;:37;;-1:-1:-1;;10669:37:0;-1:-1:-1;10669:37:0;;;;;;10717:38;;10636:22;;10717:19;:38::i;19704:263::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;19813:19:::1;:33:::0;;-1:-1:-1;;19813:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;19857:22:::1;:47:::0;;-1:-1:-1;;19857:47:0::1;::::0;::::1;;;::::0;;19920:39:::1;::::0;2871:41:1;;;19920:39:0::1;::::0;2859:2:1;2844:18;19920:39:0::1;;;;;;;;19704:263:::0;;:::o;13268:613::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;13348:16:::1;::::0;::::1;::::0;::::1;;;13347:17;13339:60;;;::::0;-1:-1:-1;;;13339:60:0;;20907:2:1;13339:60:0::1;::::0;::::1;20889:21:1::0;20946:2;20926:18;;;20919:30;20985:32;20965:18;;;20958:60;21035:18;;13339:60:0::1;20705:354:1::0;13339:60:0::1;13410:20;13443:9;13410:43;;13464:16;13494:10;-1:-1:-1::0;;;;;13494:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13483:40:0::1;;13532:4;13539:10;-1:-1:-1::0;;;;;13539:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13483:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;21573:15:1;;;13483:74:0::1;::::0;::::1;21555:34:1::0;21625:15;;21605:18;;;21598:43;21467:18;;13483:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13464:93:::0;-1:-1:-1;;;;;;13572:22:0;::::1;13568:200;;13631:10;-1:-1:-1::0;;;;;13631:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13620:43:0::1;;13672:4;13679:10;-1:-1:-1::0;;;;;13679:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13620:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;21573:15:1;;;13620:77:0::1;::::0;::::1;21555:34:1::0;21625:15;;21605:18;;;21598:43;21467:18;;13620:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13611:6;:86:::0;;-1:-1:-1;;13611:86:0::1;-1:-1:-1::0;;;;;13611:86:0;;;::::1;::::0;;;::::1;::::0;;13568:200:::1;;;13739:6;:17:::0;;-1:-1:-1;;13739:17:0::1;-1:-1:-1::0;;;;;13739:17:0;::::1;;::::0;;13568:200:::1;13778:9;:22:::0;;;::::1;;-1:-1:-1::0;;;;;13778:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;13811:62:::1;::::0;13828:4:::1;::::0;13843:9;;::::1;;-1:-1:-1::0;;13811:8:0::1;:62::i;26912:182::-:0;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;26979:16:::1;::::0;::::1;::::0;::::1;;;26978:17;26970:58;;;::::0;-1:-1:-1;;;26970:58:0;;21854:2:1;26970:58:0::1;::::0;::::1;21836:21:1::0;21893:2;21873:18;;;21866:30;21932;21912:18;;;21905:58;21980:18;;26970:58:0::1;21652:352:1::0;26970:58:0::1;27047:6;::::0;27039:47:::1;::::0;-1:-1:-1;;;;;27047:6:0;;::::1;::::0;27064:21:::1;27039:47:::0;::::1;;;::::0;27047:6:::1;27039:47:::0;27047:6;27039:47;27064:21;27047:6;27039:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;26912:182::o:0;18772:699::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;18972:16;18952;4808:13:::1;4748:1;4808:2;:13;:::i;:::-;4791:30;::::0;4595:15:::1;4791:30;:::i;:::-;18942:26;;;;:::i;:::-;18941:47;;;;:::i;:::-;18925:13;:63:::0;19040:13;19023;4808::::1;4748:1;4808:2;:13;:::i;:::-;4791:30;::::0;4595:15:::1;4791:30;:::i;:::-;19013:23;;;;:::i;:::-;19012:41;;;;:::i;:::-;18999:10;:54:::0;;;19072:13:::1;::::0;:27:::1;;19064:73;;;::::0;-1:-1:-1;;;19064:73:0;;22211:2:1;19064:73:0::1;::::0;::::1;22193:21:1::0;22250:2;22230:18;;;22223:30;22289:34;22269:18;;;22262:62;22360:3;22340:18;;;22333:31;22381:19;;19064:73:0::1;22009:397:1::0;19064:73:0::1;19181:6;::::0;-1:-1:-1;;;;;19181:6:0::1;12052:7:::0;12079:16;;;;;;;;;;;5591:5:::1;::::0;19171:23:::1;::::0;19191:3:::1;19171:23;:::i;:::-;19170:44;;;;:::i;:::-;19156:10;;:58;;19148:106;;;::::0;-1:-1:-1;;;19148:106:0;;22613:2:1;19148:106:0::1;::::0;::::1;22595:21:1::0;22652:2;22632:18;;;22625:30;22691:34;22671:18;;;22664:62;22762:5;22742:18;;;22735:33;22785:19;;19148:106:0::1;22411:399:1::0;19148:106:0::1;19297:9;4808:13;4748:1;4808:2;:13;:::i;:::-;4791:30;::::0;4595:15:::1;4791:30;:::i;:::-;19287:19;;;;:::i;:::-;19273:10;;:33;;19265:92;;;::::0;-1:-1:-1;;;19265:92:0;;23017:2:1;19265:92:0::1;::::0;::::1;22999:21:1::0;23056:2;23036:18;;;23029:30;23095:34;23075:18;;;23068:62;23166:16;23146:18;;;23139:44;23200:19;;19265:92:0::1;22815:410:1::0;19265:92:0::1;19403:9;4808:13;4748:1;4808:2;:13;:::i;:::-;4791:30;::::0;4595:15:::1;4791:30;:::i;:::-;19393:19;;;;:::i;:::-;19376:13;;:36;;19368:95;;;::::0;-1:-1:-1;;;19368:95:0;;23017:2:1;19368:95:0::1;::::0;::::1;22999:21:1::0;23056:2;23036:18;;;23029:30;23095:34;23075:18;;;23068:62;23166:16;23146:18;;;23139:44;23200:19;;19368:95:0::1;22815:410:1::0;19368:95:0::1;18772:699:::0;;;;:::o;15335:148::-;9087:6;;-1:-1:-1;;;;;9087:6:0;9097:10;9087:20;9079:50;;;;-1:-1:-1;;;9079:50:0;;10596:2:1;9079:50:0;;;10578:21:1;10635:2;10615:18;;;10608:30;-1:-1:-1;;;10654:18:1;;;10647:47;10711:18;;9079:50:0;10394:341:1;9079:50:0;-1:-1:-1;;;;;15431:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;15431:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15335:148::o;12453:310::-;-1:-1:-1;;;;;12548:20:0;;12540:52;;;;-1:-1:-1;;;12540:52:0;;23432:2:1;12540:52:0;;;23414:21:1;23471:2;23451:18;;;23444:30;23510:21;23490:18;;;23483:49;23549:18;;12540:52:0;23230:343:1;12540:52:0;-1:-1:-1;;;;;12611:21:0;;12603:53;;;;-1:-1:-1;;;12603:53:0;;23432:2:1;12603:53:0;;;23414:21:1;23471:2;23451:18;;;23444:30;23510:21;23490:18;;;23483:49;23549:18;;12603:53:0;23230:343:1;12603:53:0;-1:-1:-1;;;;;12669:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;12722:33;;391:25:1;;;12722:33:0;;364:18:1;12722:33:0;;;;;;;12453:310;;;:::o;21246:2203::-;21325:4;-1:-1:-1;;;;;21350:18:0;;21342:68;;;;-1:-1:-1;;;21342:68:0;;23780:2:1;21342:68:0;;;23762:21:1;23819:2;23799:18;;;23792:30;23858:34;23838:18;;;23831:62;23929:7;23909:18;;;23902:35;23954:19;;21342:68:0;23578:401:1;21342:68:0;-1:-1:-1;;;;;21429:16:0;;21421:64;;;;-1:-1:-1;;;21421:64:0;;24186:2:1;21421:64:0;;;24168:21:1;24225:2;24205:18;;;24198:30;24264:34;24244:18;;;24237:62;24335:5;24315:18;;;24308:33;24358:19;;21421:64:0;23984:399:1;21421:64:0;21513:1;21504:6;:10;21496:64;;;;-1:-1:-1;;;21496:64:0;;24590:2:1;21496:64:0;;;24572:21:1;24629:2;24609:18;;;24602:30;24668:34;24648:18;;;24641:62;24739:11;24719:18;;;24712:39;24768:19;;21496:64:0;24388:405:1;21496:64:0;-1:-1:-1;;;;;21659:13:0;;21571:8;21659:13;;;:7;:13;;;;;;21571:8;;;;21659:13;;21655:162;;;21695:4;21689:10;;21655:162;;;-1:-1:-1;;;;;21721:11:0;;;;;;:7;:11;;;;;;;;21717:100;;;21756:4;21749:11;;21717:100;;;-1:-1:-1;21801:4:0;21717:100;21831:20;21842:4;21848:2;21831:10;:20::i;:::-;21827:644;;;21872:14;;;;21868:89;;21907:34;;-1:-1:-1;;;21907:34:0;;25000:2:1;21907:34:0;;;24982:21:1;25039:2;25019:18;;;25012:30;25078:26;25058:18;;;25051:54;25122:18;;21907:34:0;24798:348:1;21868:89:0;21975:3;:11;;;;21982:4;21975:11;21971:232;;;-1:-1:-1;;;;;22011:27:0;;;;;;:21;:27;;;;;;;;22010:28;:58;;;;-1:-1:-1;;;;;;22043:25:0;;;;;;:21;:25;;;;;;;;22042:26;22010:58;22006:182;;;22111:12;;22101:6;:22;;22093:75;;;;-1:-1:-1;;;22093:75:0;;25353:2:1;22093:75:0;;;25335:21:1;25392:2;25372:18;;;25365:30;25431:34;25411:18;;;25404:62;25502:10;25482:18;;;25475:38;25530:19;;22093:75:0;25151:404:1;22093:75:0;22235:9;;-1:-1:-1;;;;;22221:24:0;;;22235:9;;;;;22221:24;;;;:33;;;22250:4;22249:5;22221:33;22217:243;;;-1:-1:-1;;;;;22280:25:0;;;;;;:21;:25;;;;;;;;22275:170;;22364:14;;22354:6;22338:13;22348:2;-1:-1:-1;;;;;12079:16:0;12052:7;12079:16;;;;;;;;;;;;11986:117;22338:13;:22;;;;:::i;:::-;:40;;22330:95;;;;-1:-1:-1;;;22330:95:0;;25762:2:1;22330:95:0;;;25744:21:1;25801:2;25781:18;;;25774:30;25840:34;25820:18;;;25813:62;25911:12;25891:18;;;25884:40;25941:19;;22330:95:0;25560:406:1;22330:95:0;22495:19;;-1:-1:-1;;;;;22495:19:0;;;22487:27;;;;22483:135;;-1:-1:-1;;;;;22539:10:0;;5730:42;22539:10;22531:75;;;;-1:-1:-1;;;22531:75:0;;26173:2:1;22531:75:0;;;26155:21:1;26212:2;26192:18;;;26185:30;26251:34;26231:18;;;26224:62;26322:22;26302:18;;;26295:50;26362:19;;22531:75:0;25971:416:1;22531:75:0;22634:4;22630:742;;;22660:6;;;;22655:706;;22691:19;;;;;;;:64;;;;-1:-1:-1;;;;;;22735:20:0;;;;;;:16;:20;;;;;;;;22734:21;22691:64;:111;;;;-1:-1:-1;;;;;;22780:22:0;;;;;;:16;:22;;;;;;;;22779:23;22691:111;22687:659;;;22894:4;22845:28;12079:16;;;;;;;;;;;22951:13;;22927:37;;22923:404;;23011:10;;23052:22;;;;23048:97;;;23109:13;;23099:6;;-1:-1:-1;;;;;23099:6:0;12052:7;12079:16;;;;;;;;;;;5591:5;;23089:33;;;:::i;:::-;23088:54;;;;:::i;:::-;23078:64;;23048:97;23199:7;23175:20;:31;23171:72;;23233:7;23210:30;;23171:72;23269:34;23282:20;23269:12;:34::i;:::-;22966:361;22923:404;22822:524;22687:659;23389:52;23406:4;23412:2;23416:6;23424:3;23429:4;23435:5;23389:16;:52::i;:::-;23382:59;21246:2203;-1:-1:-1;;;;;;;21246:2203:0:o;27557:1055::-;27676:4;27697:20;27708:4;27714:2;27697:10;:20::i;:::-;27693:228;;;27752:11;;:39;;;;;-1:-1:-1;;;;;26673:15:1;;;27752:39:0;;;26655:34:1;26725:15;;;26705:18;;;26698:43;26757:18;;;26750:34;;;27721:12:0;;27752:11;;;;;:21;;26567:18:1;;27752:39:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;27752:39:0;;;;;;;;-1:-1:-1;;27752:39:0;;;;;;;;;;;;:::i;:::-;;;27748:122;;27859:8;;;27748:122;27842:5;-1:-1:-1;27888:7:0;27884:26;;27899:8;;;27884:26;27719:202;27693:228;-1:-1:-1;;;;;27965:25:0;;27931:12;27965:25;;;:19;:25;;;;;;27946:4;;27965:25;;;:52;;-1:-1:-1;;;;;;27994:23:0;;;;;;:19;:23;;;;;;;;27965:52;27961:99;;;-1:-1:-1;28043:5:0;27961:99;-1:-1:-1;;;;;28070:13:0;;:7;:13;;;;;;;;;;:23;;28087:6;;28070:7;:23;;28087:6;;28070:23;:::i;:::-;;;;-1:-1:-1;28104:22:0;;-1:-1:-1;28130:7:0;28129:55;;28178:6;28129:55;;;28141:34;28151:4;28157:3;28162:4;28168:6;28141:9;:34::i;:::-;28104:80;;28210:14;28195:7;:11;28203:2;-1:-1:-1;;;;;28195:11:0;-1:-1:-1;;;;;28195:11:0;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;28255:2;-1:-1:-1;;;;;28240:34:0;28249:4;-1:-1:-1;;;;;28240:34:0;;28259:14;28240:34;;;;391:25:1;;379:2;364:18;;245:177;28240:34:0;;;;;;;;28290:16;;;;;;;28285:298;;28323:28;28342:4;28348:2;28323:18;:28::i;:::-;28371:16;;;;;;;28370:17;:41;;;;;28391:20;28402:4;28408:2;28391:10;:20::i;:::-;28370:77;;;;-1:-1:-1;;;;;;28416:31:0;;;;;;:25;:31;;;;;;;;28415:32;28370:77;:111;;;;-1:-1:-1;;;;;;28452:29:0;;;;;;:25;:29;;;;;;;;28451:30;28370:111;:121;;;;;28486:5;28485:6;28370:121;28366:206;;;28512:44;;-1:-1:-1;;;28512:44:0;;27247:2:1;28512:44:0;;;27229:21:1;27286:2;27266:18;;;27259:30;27325:34;27305:18;;;27298:62;27396:4;27376:18;;;27369:32;27418:19;;28512:44:0;27045:398:1;28366:206:0;-1:-1:-1;28600:4:0;;27557:1055;-1:-1:-1;;;;;;;;27557:1055:0:o;20792:446::-;20893:6;;20861:4;;-1:-1:-1;;;;;20885:14:0;;;20893:6;;20885:14;;;;:43;;-1:-1:-1;20922:6:0;;-1:-1:-1;;;;;20916:12:0;;;20922:6;;20916:12;;20885:43;:79;;;;-1:-1:-1;20958:6:0;;-1:-1:-1;;;;;20958:6:0;20945:9;:19;;20885:79;:118;;;;-1:-1:-1;;;;;;20982:21:0;;;;;;:17;:21;;;;;;;;20981:22;20885:118;:159;;;;-1:-1:-1;;;;;;21021:23:0;;;;;;:17;:23;;;;;;;;21020:24;20885:159;:186;;;;-1:-1:-1;;;;;;21061:10:0;;5730:42;21061:10;;20885:186;:219;;;;-1:-1:-1;;;;;;21088:16:0;;;;20885:219;:257;;;;-1:-1:-1;;;;;;21121:21:0;;21137:4;21121:21;;20885:257;:302;;;;-1:-1:-1;21175:11:0;;-1:-1:-1;;;;;21159:28:0;;;21175:11;;;;;21159:28;;20885:302;:345;;;;-1:-1:-1;21218:11:0;;-1:-1:-1;;;;;21204:26:0;;;21218:11;;;;;21204:26;;20885:345;20878:352;20792:446;-1:-1:-1;;;20792:446:0:o;23457:2233::-;6845:6;:13;;-1:-1:-1;;6845:13:0;6854:4;6845:13;;;23540:30:::1;::::0;;::::1;::::0;::::1;::::0;;23563:7:::1;23540:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;;;;;6845:6;23585:21;23581:60:::1;;23623:7;;;23581:60;23677:4;23657:26;::::0;;;:11:::1;:26;::::0;;;;;;;23692:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;23692:9:0::1;23657:46:::0;;;;;;;;-1:-1:-1;;23657:67:0::1;23653:166;;23761:4;23741:26;::::0;;;:11:::1;:26;::::0;;;;;;;23776:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;23776:9:0::1;23741:46:::0;;;;;;;-1:-1:-1;;23741:66:0;;23653:166:::1;23831:17;23916:1;23896:6;:16;;;23852:60;;23876:6;:16;;;23853:39;;:20;:39;;;;:::i;:::-;23852:60;;;;:::i;:::-;23851:66;;;;:::i;:::-;23831:86:::0;-1:-1:-1;23928:15:0::1;23946:32;23831:86:::0;23946:20;:32:::1;:::i;:::-;24023:16;::::0;;24037:1:::1;24023:16:::0;;;;;::::1;::::0;;23928:50;;-1:-1:-1;23999:21:0::1;::::0;24023:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24023:16:0::1;23999:40;;24068:4;24050;24055:1;24050:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;24050:23:0::1;;;-1:-1:-1::0;;;;;24050:23:0::1;;;::::0;::::1;24094:9;;;;;;;;;-1:-1:-1::0;;;;;24094:9:0::1;-1:-1:-1::0;;;;;24094:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24084:4;24089:1;24084:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24084:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;24127:9:::1;::::0;:186:::1;::::0;;;;:9:::1;::::0;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:186:::1;::::0;24202:7;;24224:1:::1;::::0;24240:4;;24267::::1;::::0;24287:15:::1;::::0;24127:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;24123:233;;24338:7;;;;;;24123:233;24389:21;24368:18;24475:7:::0;24449:22:::1;24462:9:::0;24389:21;24449:22:::1;:::i;:::-;24448:34;;;;:::i;:::-;24421:61:::0;-1:-1:-1;24499:13:0;;24495:400:::1;;24533:9;::::0;:222:::1;::::0;;;;24610:4:::1;24533:222;::::0;::::1;28843:34:1::0;28893:18;;;28886:34;;;24662:1:0::1;28936:18:1::0;;;28929:34;;;28979:18;;;28972:34;5730:42:0::1;29022:19:1::0;;;29015:44;24725:15:0::1;29075:19:1::0;;;29068:35;24533:9:0::1;::::0;;::::1;-1:-1:-1::0;;;;;24533:9:0::1;::::0;:25:::1;::::0;24566:16;;28754:19:1;;24533:222:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;24533:222:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;24533:222:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;24529:355;;24862:7;;;;;;;;24529:355;-1:-1:-1::0;;24780:40:0::1;::::0;;29599:25:1;;;29655:2;29640:18;;29633:34;;;24780:40:0::1;::::0;-1:-1:-1;29572:18:1;24780:40:0::1;;;;;;;24529:355;24907:30;24921:16:::0;24907:30;::::1;:::i;:::-;;;24968:6;:16;;;24948:6;:16;;:36;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;25077:16:::1;::::0;::::1;::::0;25058:15:::1;::::0;::::1;::::0;24995:12:::1;::::0;-1:-1:-1;24995:12:0;;25044:49;;::::1;::::0;25045:28:::1;::::0;::::1;:10:::0;:28:::1;:::i;:::-;25044:49;;;;:::i;:::-;25018:75;;25104:22;25161:6;:16;;;25129:48;;25143:6;:14;;;25130:27;;:10;:27;;;;:::i;:::-;25129:48;;;;:::i;:::-;25104:73:::0;-1:-1:-1;25188:24:0::1;25229:32;25104:73:::0;25229:15;:32:::1;:::i;:::-;25215:47;::::0;:10;:47:::1;:::i;:::-;25277:16;::::0;::::1;::::0;25188:74;;-1:-1:-1;25277:20:0::1;;::::0;25273:133:::1;;25327:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;25327:21:0;;::::1;::::0;25384:5:::1;::::0;25361:16;;25327:67:::1;::::0;;;25361:16;25327:21;25384:5;25327:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25314:80:0;;-1:-1:-1;;25273:133:0::1;25420:15;::::0;::::1;::::0;:19:::1;;::::0;25416:130:::1;;25469:20:::0;;:65:::1;::::0;-1:-1:-1;;;;;25469:20:0;;::::1;::::0;25524:5:::1;::::0;25502:15;;25469:65:::1;::::0;;;25502:15;25469:20;25524:5;25469:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25456:78:0;;-1:-1:-1;;25416:130:0::1;25560:14;::::0;::::1;::::0;:18:::1;;::::0;25556:127:::1;;25608:19:::0;;:63:::1;::::0;-1:-1:-1;;;;;25608:19:0;;::::1;::::0;25661:5:::1;::::0;25640:14;;25608:63:::1;::::0;;;25640:14;25608:19;25661:5;25608:63:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25595:76:0;;-1:-1:-1;;25556:127:0::1;23529:2161;;;;;;;;;;6869:1;-1:-1:-1::0;6881:6:0;:14;;-1:-1:-1;;6881:14:0;;;23457:2233::o;28620:804::-;28708:7;28728:18;28761:3;28757:205;;;-1:-1:-1;28794:9:0;:16;;;28757:205;;;28832:4;28828:134;;;-1:-1:-1;28866:9:0;:17;;;;;;28828:134;;;-1:-1:-1;28929:9:0;:21;;;;;;28828:134;28976:10;28990:1;28976:15;28972:39;;29002:6;28995:13;;;;;28972:39;29033:11;;;;;-1:-1:-1;;;;;29033:11:0;29057:4;29025:37;:110;;;;;29080:13;29097:1;29080:18;:54;;;;29115:13;29132:2;29115:19;29080:54;29021:138;;;-1:-1:-1;29152:4:0;29021:138;29169:17;5591:5;29189:19;29198:10;29189:6;:19;:::i;:::-;:38;;;;:::i;:::-;29169:58;-1:-1:-1;29242:13:0;;29238:141;;29288:4;29272:7;:22;;;;;;;;;;:35;;29298:9;;29272:7;:35;;29298:9;;29272:35;:::i;:::-;;;;-1:-1:-1;;29327:40:0;;391:25:1;;;29350:4:0;;-1:-1:-1;;;;;29327:40:0;;;;;379:2:1;364:18;29327:40:0;;;;;;;29238:141;29398:18;29407:9;29398:6;:18;:::i;25698:563::-;25781:16;;;;;;;25780:17;25772:65;;;;-1:-1:-1;;;25772:65:0;;30266:2:1;25772:65:0;;;30248:21:1;30305:2;30285:18;;;30278:30;30344:34;30324:18;;;30317:62;30415:5;30395:18;;;30388:33;30438:19;;25772:65:0;30064:399:1;25772:65:0;25853:20;25864:4;25870:2;25853:10;:20::i;:::-;25852:21;:37;;;;-1:-1:-1;25883:6:0;;-1:-1:-1;;;;;25877:12:0;;;25883:6;;25877:12;25852:37;25848:406;;;-1:-1:-1;;;;;25906:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;25906:30:0;;;25932:4;25906:30;;;;;;25951:19;:25;;;;;:32;;;;;;;;;;25998:16;:23;;-1:-1:-1;;25998:23:0;25906:30;25998:23;;;;;26048:11;;;;26036:114;;26094:11;:40;;;;26128:4;26094:40;;;;;26036:114;26164:19;:26;;-1:-1:-1;;26164:26:0;;;;;26210:32;;-1:-1:-1;2871:41:1;;26210:32:0;;2859:2:1;2844:18;26210:32:0;2731: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:607::-;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;1899:2;-1:-1:-1;;1824:2:1;1816:6;1812:15;1808:88;1797:9;1793:104;1789:113;1781:121;;;;1301:607;;;;:::o;1913:159::-;1980:20;;2040:6;2029:18;;2019:29;;2009:57;;2062:1;2059;2052:12;2009:57;1913:159;;;:::o;2077:401::-;2159:6;2167;2175;2183;2236:3;2224:9;2215:7;2211:23;2207:33;2204:53;;;2253:1;2250;2243:12;2204:53;2276:28;2294:9;2276:28;:::i;:::-;2266:38;;2323:37;2356:2;2345:9;2341:18;2323:37;:::i;:::-;2313:47;;2379:37;2412:2;2401:9;2397:18;2379:37;:::i;:::-;2369:47;;2435:37;2468:2;2457:9;2453:18;2435:37;:::i;:::-;2425:47;;2077:401;;;;;;;:::o;2923:154::-;-1:-1:-1;;;;;3002:5:1;2998:54;2991:5;2988:65;2978:93;;3067:1;3064;3057:12;3082:315;3150:6;3158;3211:2;3199:9;3190:7;3186:23;3182:32;3179:52;;;3227:1;3224;3217:12;3179:52;3266:9;3253:23;3285:31;3310:5;3285:31;:::i;:::-;3335:5;3387:2;3372:18;;;;3359:32;;-1:-1:-1;;;3082:315:1:o;3402:247::-;3461:6;3514:2;3502:9;3493:7;3489:23;3485:32;3482:52;;;3530:1;3527;3520:12;3482:52;3569:9;3556:23;3588:31;3613:5;3588:31;:::i;3654:388::-;3722:6;3730;3783:2;3771:9;3762:7;3758:23;3754:32;3751:52;;;3799:1;3796;3789:12;3751:52;3838:9;3825:23;3857:31;3882:5;3857:31;:::i;:::-;3907:5;-1:-1:-1;3964:2:1;3949:18;;3936:32;3977:33;3936:32;3977:33;:::i;4047:456::-;4124:6;4132;4140;4193:2;4181:9;4172:7;4168:23;4164:32;4161:52;;;4209:1;4206;4199:12;4161:52;4248:9;4235:23;4267:31;4292:5;4267:31;:::i;:::-;4317:5;-1:-1:-1;4374:2:1;4359:18;;4346:32;4387:33;4346:32;4387:33;:::i;:::-;4047:456;;4439:7;;-1:-1:-1;;;4493:2:1;4478:18;;;;4465:32;;4047:456::o;4508:248::-;4576:6;4584;4637:2;4625:9;4616:7;4612:23;4608:32;4605:52;;;4653:1;4650;4643:12;4605:52;-1:-1:-1;;4676:23:1;;;4746:2;4731:18;;;4718:32;;-1:-1:-1;4508:248:1:o;4761:184::-;4813:77;4810:1;4803:88;4910:4;4907:1;4900:15;4934:4;4931:1;4924:15;4950:334;5021:2;5015:9;5077:2;5067:13;;-1:-1:-1;;5063:86:1;5051:99;;5180:18;5165:34;;5201:22;;;5162:62;5159:88;;;5227:18;;:::i;:::-;5263:2;5256:22;4950:334;;-1:-1:-1;4950:334:1:o;5289:183::-;5349:4;5382:18;5374:6;5371:30;5368:56;;;5404:18;;:::i;:::-;-1:-1:-1;5449:1:1;5445:14;5461:4;5441:25;;5289:183::o;5477:662::-;5531:5;5584:3;5577:4;5569:6;5565:17;5561:27;5551:55;;5602:1;5599;5592:12;5551:55;5638:6;5625:20;5664:4;5688:60;5704:43;5744:2;5704:43;:::i;:::-;5688:60;:::i;:::-;5782:15;;;5868:1;5864:10;;;;5852:23;;5848:32;;;5813:12;;;;5892:15;;;5889:35;;;5920:1;5917;5910:12;5889:35;5956:2;5948:6;5944:15;5968:142;5984:6;5979:3;5976:15;5968:142;;;6050:17;;6038:30;;6088:12;;;;6001;;5968:142;;;-1:-1:-1;6128:5:1;5477:662;-1:-1:-1;;;;;;5477:662:1:o;6144:1215::-;6262:6;6270;6323:2;6311:9;6302:7;6298:23;6294:32;6291:52;;;6339:1;6336;6329:12;6291:52;6379:9;6366:23;6408:18;6449:2;6441:6;6438:14;6435:34;;;6465:1;6462;6455:12;6435:34;6503:6;6492:9;6488:22;6478:32;;6548:7;6541:4;6537:2;6533:13;6529:27;6519:55;;6570:1;6567;6560:12;6519:55;6606:2;6593:16;6628:4;6652:60;6668:43;6708:2;6668:43;:::i;6652:60::-;6746:15;;;6828:1;6824:10;;;;6816:19;;6812:28;;;6777:12;;;;6852:19;;;6849:39;;;6884:1;6881;6874:12;6849:39;6908:11;;;;6928:217;6944:6;6939:3;6936:15;6928:217;;;7024:3;7011:17;7041:31;7066:5;7041:31;:::i;:::-;7085:18;;6961:12;;;;7123;;;;6928:217;;;7164:5;-1:-1:-1;;7207:18:1;;7194:32;;-1:-1:-1;;7238:16:1;;;7235:36;;;7267:1;7264;7257:12;7235:36;;7290:63;7345:7;7334:8;7323:9;7319:24;7290:63;:::i;:::-;7280:73;;;6144:1215;;;;;:::o;7553:328::-;7627:6;7635;7643;7696:2;7684:9;7675:7;7671:23;7667:32;7664:52;;;7712:1;7709;7702:12;7664:52;7735:28;7753:9;7735:28;:::i;:::-;7725:38;;7782:37;7815:2;7804:9;7800:18;7782:37;:::i;:::-;7772:47;;7838:37;7871:2;7860:9;7856:18;7838:37;:::i;:::-;7828:47;;7553:328;;;;;:::o;7886:382::-;7951:6;7959;8012:2;8000:9;7991:7;7987:23;7983:32;7980:52;;;8028:1;8025;8018:12;7980:52;8067:9;8054:23;8086:31;8111:5;8086:31;:::i;8273:180::-;8332:6;8385:2;8373:9;8364:7;8360:23;8356:32;8353:52;;;8401:1;8398;8391:12;8353:52;-1:-1:-1;8424:23:1;;8273:180;-1:-1:-1;8273:180:1:o;8458:553::-;8559:6;8567;8575;8628:2;8616:9;8607:7;8603:23;8599:32;8596:52;;;8644:1;8641;8634:12;8596:52;8683:9;8670:23;8702:31;8727:5;8702:31;:::i;:::-;8752:5;-1:-1:-1;8809:2:1;8794:18;;8781:32;8822:33;8781:32;8822:33;:::i;:::-;8874:7;-1:-1:-1;8933:2:1;8918:18;;8905:32;8946:33;8905:32;8946:33;:::i;:::-;8998:7;8988:17;;;8458:553;;;;;:::o;10004:385::-;10090:6;10098;10106;10114;10167:3;10155:9;10146:7;10142:23;10138:33;10135:53;;;10184:1;10181;10174:12;10135:53;-1:-1:-1;;10207:23:1;;;10277:2;10262:18;;10249:32;;-1:-1:-1;10328:2:1;10313:18;;10300:32;;10379:2;10364:18;10351:32;;-1:-1:-1;10004:385:1;-1:-1:-1;10004:385:1:o;11013:184::-;11065:77;11062:1;11055:88;11162:4;11159:1;11152:15;11186:4;11183:1;11176:15;11202:168;11269:6;11295:10;;;11307;;;11291:27;;11330:11;;;11327:37;;;11344:18;;:::i;:::-;11327:37;11202:168;;;;:::o;11783:482::-;11872:1;11915:5;11872:1;11929:330;11950:7;11940:8;11937:21;11929:330;;;12069:4;-1:-1:-1;;11997:77:1;11991:4;11988:87;11985:113;;;12078:18;;:::i;:::-;12128:7;12118:8;12114:22;12111:55;;;12148:16;;;;12111:55;12227:22;;;;12187:15;;;;11929:330;;;11933:3;11783:482;;;;;:::o;12270:866::-;12319:5;12349:8;12339:80;;-1:-1:-1;12390:1:1;12404:5;;12339:80;12438:4;12428:76;;-1:-1:-1;12475:1:1;12489:5;;12428:76;12520:4;12538:1;12533:59;;;;12606:1;12601:130;;;;12513:218;;12533:59;12563:1;12554:10;;12577:5;;;12601:130;12638:3;12628:8;12625:17;12622:43;;;12645:18;;:::i;:::-;-1:-1:-1;;12701:1:1;12687:16;;12716:5;;12513:218;;12815:2;12805:8;12802:16;12796:3;12790:4;12787:13;12783:36;12777:2;12767:8;12764:16;12759:2;12753:4;12750:12;12746:35;12743:77;12740:159;;;-1:-1:-1;12852:19:1;;;12884:5;;12740:159;12931:34;12956:8;12950:4;12931:34;:::i;:::-;13061:6;-1:-1:-1;;12989:79:1;12980:7;12977:92;12974:118;;;13072:18;;:::i;:::-;13110:20;;12270:866;-1:-1:-1;;;12270:866:1:o;13141:140::-;13199:5;13228:47;13269:4;13259:8;13255:19;13249:4;13228:47;:::i;13286:274::-;13326:1;13352;13342:189;;13387:77;13384:1;13377:88;13488:4;13485:1;13478:15;13516:4;13513:1;13506:15;13342:189;-1:-1:-1;13545:9:1;;13286:274::o;13905:168::-;13978:9;;;14009;;14026:15;;;14020:22;;14006:37;13996:71;;14047:18;;:::i;14078:128::-;14145:9;;;14166:11;;;14163:37;;;14180:18;;:::i;14978:184::-;15030:77;15027:1;15020:88;15127:4;15124:1;15117:15;15151:4;15148:1;15141:15;15514:197;15552:3;15580:6;15621:2;15614:5;15610:14;15648:2;15639:7;15636:15;15633:41;;15654:18;;:::i;:::-;15703:1;15690:15;;15514:197;-1:-1:-1;;;15514:197:1:o;15716:125::-;15781:9;;;15802:10;;;15799:36;;;15815:18;;:::i;21064:251::-;21134:6;21187:2;21175:9;21166:7;21162:23;21158:32;21155:52;;;21203:1;21200;21193:12;21155:52;21235:9;21229:16;21254:31;21279:5;21254:31;:::i;26795:245::-;26862:6;26915:2;26903:9;26894:7;26890:23;26886:32;26883:52;;;26931:1;26928;26921:12;26883:52;26963:9;26957:16;26982:28;27004:5;26982:28;:::i;27448:1026::-;27710:4;27758:3;27747:9;27743:19;27789:6;27778:9;27771:25;27815:2;27853:6;27848:2;27837:9;27833:18;27826:34;27896:3;27891:2;27880:9;27876:18;27869:31;27920:6;27955;27949:13;27986:6;27978;27971:22;28024:3;28013:9;28009:19;28002:26;;28063:2;28055:6;28051:15;28037:29;;28084:1;28094:218;28108:6;28105:1;28102:13;28094:218;;;28173:13;;-1:-1:-1;;;;;28169:62:1;28157:75;;28287:15;;;;28252:12;;;;28130:1;28123:9;28094:218;;;-1:-1:-1;;;;;;;28368:55:1;;;;28363:2;28348:18;;28341:83;-1:-1:-1;;;28455:3:1;28440:19;28433:35;28329:3;27448:1026;-1:-1:-1;;;27448:1026:1:o;29114:306::-;29202:6;29210;29218;29271:2;29259:9;29250:7;29246:23;29242:32;29239:52;;;29287:1;29284;29277:12;29239:52;29316:9;29310:16;29300:26;;29366:2;29355:9;29351:18;29345:25;29335:35;;29410:2;29399:9;29395:18;29389:25;29379:35;;29114:306;;;;;:::o;29678:171::-;29746:6;29785:10;;;29773;;;29769:27;;29808:12;;;29805:38;;;29823:18;;:::i

Swarm Source

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