ETH Price: $3,243.72 (-1.10%)
Gas: 8.91 Gwei
 

Overview

Max Total Supply

10,000,000 RUCKUS

Holders

84

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
The_Disturbance

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-09
*/

// SPDX-License-Identifier: UNLICENSED
// ALL RIGHTS RESERVED
// 5th Web Development reserves all rights on this code. You may NOT copy this contract.

pragma solidity =0.8.15;

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 IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
}

interface IUniswapV2Pair {
    function factory() external view returns (address);
}

interface IUniswapV2Router01 {
    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);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract Ownable {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), msg.sender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }
    function transferOwner(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != address(0xdead), "Call renounceOwnership to transfer owner to the zero address.");
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
    }
    function renounceOwnership() public virtual onlyOwner {
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
}

contract The_Disturbance is IERC20, Ownable {
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) public lpPairs;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    mapping (address => bool) private _isBot;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply = 10000000;//

    string private _name = "The Disturbance";//
    string private _symbol = "RUCKUS";//
    uint256 private _reflectFee = 0;//Do Not Touch
    uint256 private _liquidityFee = 0;//Do Not Touch
    uint256 private _devFee = 0;//Do Not Touch
    uint256 private _marketingFee = 0;//Do Not Touch
    uint256 private _burnFee = 0;//Do Not Touch
    uint256 public _buyReflectFee = 200;//
    uint256 public _buyLiquidityFee = 200;//
    uint256 public _buyDevFee = 300;//
    uint256 public _buyMarketingFee = 200;//
    uint256 public _buyBurnFee = 100;//
    uint256 public _sellReflectFee = 200;//
    uint256 public _sellLiquidityFee = 1000;//
    uint256 public _sellDevFee = 400;//
    uint256 public _sellMarketingFee = 100;//
    uint256 public _sellBurnFee = 100;//
    uint256 constant private maxReflectFee = 1000;
    uint256 constant private maxLiquidityFee = 1000;
    uint256 constant private maxDevFee = 1000;
    uint256 constant private maxMarketingFee = 1000;
    uint256 constant private maxBurnFee = 1000;
    uint256 constant private masterTaxDivisor = 10000;

    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals = 18;
    uint256 private _decimalsMul = _decimals;
    uint256 private _tTotal = startingSupply * 10**_decimalsMul;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;
    address private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address public constant burnAddress = address(0xdead);
    address public constant ZERO = address(0);
    address payable private _devWallet = payable(0x512169012E0b654d45e35f3f78948f9bC36c1120);//
    address payable private _marketingWallet = payable(0x94c9afF2c81730157E8d856d990aED27a47ff00a);//
    
    bool public inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private buyMaxTxPercent = 5;
    uint256 private buyMaxTxDivisor = 100;
    uint256 private _buyMaxTxAmount = (_tTotal * buyMaxTxPercent) / buyMaxTxDivisor;
    uint256 private _buyPreviousBuyMaxTxAmount = _buyMaxTxAmount;
    uint256 public buyMaxTxAmountUI = (startingSupply * buyMaxTxPercent) / buyMaxTxDivisor;
    uint256 private sellMaxTxPercent = 5;
    uint256 private sellMaxTxDivisor = 100;
    uint256 private _sellMaxTxAmount = (_tTotal * sellMaxTxPercent) / sellMaxTxDivisor;
    uint256 private _sellPreviousMaxTxAmount = _sellMaxTxAmount;
    uint256 public sellMaxTxAmountUI = (startingSupply * sellMaxTxPercent) / sellMaxTxDivisor;

    uint256 private maxWalletPercent = 5;
    uint256 private maxWalletDivisor = 100;
    uint256 private _maxWalletSize = (_tTotal * maxWalletPercent) / maxWalletDivisor;
    uint256 private _previousMaxWalletSize = _maxWalletSize;
    uint256 public maxWalletSizeUI = (startingSupply * maxWalletPercent) / maxWalletDivisor;

    uint256 private swapThreshold = (_tTotal * 5) / 10000;
    uint256 private swapAmount = (_tTotal * 5) / 1000;

    bool private tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    bool public getTokens = true;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private snipeBlockAmt = 0;
    uint256 public botsCaught = 0;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 ethReceived,uint256 tokensIntoLiqudity);
    event BotCaught(address botAddress);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor ()  {
        _rOwned[msg.sender] = _rTotal;
        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[_marketingWallet] = true;
        _isExcludedFromFee[_devWallet] = true;
        _isExcludedFromFee[address(this)] = true;
        _liquidityHolders[owner()] = true;

        _approve(msg.sender, _routerAddress, _tTotal);

        emit Transfer(address(0), msg.sender, _tTotal);
    }

    receive() external payable {}

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    function balanceOf(address account) public view override returns (uint256) {if (_isExcluded[account]) return _tOwned[account];return tokenFromReflect(_rOwned[account]);}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount);return true;}
    function approveMax(address spender) public returns (bool) {return approve(spender, type(uint256).max);}

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender] - amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) public onlyOwner {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
        } else {
            lpPairs[pair] = true;
        }
    }

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

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function isBot(address account) public view returns (bool) {
        return _isBot[account];
    }

    function removeBot(address account) external onlyOwner {
        require(_isBot[account], "Account is not a recorded bot.");
        _isBot[account] = false;
    }

    function setTaxesBuy(uint256 liquidityFee, uint256 reflectionFee, uint256 devFee, uint256 marketingFee, uint256 burnFee) external onlyOwner {
        require(liquidityFee <= maxLiquidityFee
                && reflectionFee <= maxReflectFee
                && devFee <= maxDevFee
                && marketingFee <= maxMarketingFee
                && burnFee <= maxBurnFee);
        require(liquidityFee + reflectionFee + devFee + marketingFee + burnFee <= 5000);
        _buyLiquidityFee = liquidityFee;
        _buyReflectFee = reflectionFee;
        _buyDevFee = devFee;
        _buyMarketingFee = marketingFee;
        _buyBurnFee = burnFee;
    }

    function setTaxesSell(uint256 liquidityFee, uint256 reflectionFee, uint256 devFee, uint256 marketingFee, uint256 burnFee) external onlyOwner {
        require(liquidityFee <= maxLiquidityFee
                && reflectionFee <= maxReflectFee
                && devFee <= maxDevFee
                && marketingFee <= maxMarketingFee
                && burnFee <= maxBurnFee);
        require(liquidityFee + reflectionFee + devFee + marketingFee + burnFee <= 5000);
        _sellLiquidityFee = liquidityFee;
        _sellReflectFee = reflectionFee;
        _sellDevFee = devFee;
        _sellMarketingFee = marketingFee;
        _sellBurnFee = burnFee;
    }

    function setMaxTxPercents(uint256 buyPercent, uint256 buyDivisor, uint256 sellPercent, uint256 sellDivisor) external onlyOwner {
        _buyMaxTxAmount = (_tTotal * buyPercent) / buyDivisor;
        buyMaxTxAmountUI = (startingSupply * buyPercent) / buyDivisor;
        _sellMaxTxAmount = (_tTotal * sellPercent) / sellDivisor;
        sellMaxTxAmountUI = (startingSupply * sellPercent) / sellDivisor;
        require(_sellMaxTxAmount >= (_tTotal / 1000) 
                && _buyMaxTxAmount >= (_tTotal / 1000), 
                "Max Transaction amts must be above 0.1% of total supply."
                );
    }

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

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }
    //@dev
    //Used to toggle getting 50% taxes in Tokens and 50% taxes in ETH to tax receivers.
    function setgetTokens(bool onoff) external onlyOwner {
        getTokens = onoff;
    }

    function setWallets(address payable newDevWallet, address payable newMarketingWallet) external onlyOwner {
        require(newDevWallet != _devWallet && newDevWallet != address(0xdead));
        require(newMarketingWallet != _marketingWallet && newMarketingWallet != address(0xdead));
        _devWallet = payable(newDevWallet);
        _marketingWallet = payable(newMarketingWallet);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

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

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != burnAddress
            && to != address(0)
            && from != address(this);
    }

    function tokenFromReflect(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }
    
    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[sender][spender] = amount;
        emit Approval(sender, spender, amount);
    }

    function adjustTaxes(address from, address to) internal {
        if (lpPairs[from]) {
            _reflectFee = _buyReflectFee;
            _liquidityFee = _buyLiquidityFee;
            _devFee = _buyDevFee;
            _marketingFee = _buyMarketingFee;
            _burnFee = _buyBurnFee;
        } else if (lpPairs[to]) {
            _reflectFee = _sellReflectFee;
            _liquidityFee = _sellLiquidityFee;
            _devFee = _sellDevFee;
            _marketingFee = _sellMarketingFee;
            _burnFee = _sellBurnFee;
        } else {
            _reflectFee = 0;
            _liquidityFee = 0;
            _devFee = 0;
            _marketingFee = 0;
            _burnFee = 0;
        }
    }

    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");
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(lpPairs[to]) {
                require(amount <= _sellMaxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            } else {
                require(amount <= _buyMaxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }
            if(to != _routerAddress && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
            }
        }

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

        if (lpPairs[to]) {
            if (!inSwapAndLiquify
                && swapAndLiquifyEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapAndLiquify(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 totalFee = _sellLiquidityFee + _sellDevFee + _sellMarketingFee;
        if (totalFee == 0)
            return;
        uint256 toLiquify = (contractTokenBalance * _sellLiquidityFee) / (totalFee);
        uint256 toDev = ((contractTokenBalance * _sellDevFee) / (totalFee)) / 2;
        uint256 toMarketing = ((contractTokenBalance * _sellMarketingFee) / (totalFee)) / 2;
        if(!getTokens){
            toDev = 0;
            toMarketing = 0;
        }
        uint256 ethOut = contractTokenBalance - toLiquify - toDev - toMarketing;
        uint256 half = toLiquify / 2;
        uint256 otherHalf = toLiquify - half;
        uint256 initialBalance = address(this).balance;
        uint256 toSwapForEth = half + ethOut;
        swapTokensForEth(toSwapForEth);

        uint256 fromSwap = address(this).balance - initialBalance;
        uint256 liquidityBalance = (fromSwap * half) / toSwapForEth;

        if (toLiquify > 0) {
            addLiquidity(otherHalf, liquidityBalance);
            emit SwapAndLiquify(half, liquidityBalance, otherHalf);
        }
        if (toDev > 0) {
            _transfer(address(this), _devWallet, toMarketing);
        }
        if (toMarketing > 0) {
            _transfer(address(this), _marketingWallet, toMarketing);
        }
        if (ethOut > 0) {
            transferETHOut(fromSwap - liquidityBalance);
        }
    }

    function transferETHOut(uint256 amt) internal {
        uint256 toDev = (amt * _sellDevFee) / (_sellDevFee + _sellMarketingFee);
        uint256 toMarketing = amt - toDev;
        bool success;
        if (toDev > 0) {
            (success,) = address(_devWallet).call{value: toDev}("");
        }
        if (toMarketing > 0) {
            (success,) = address(_marketingWallet).call{value: toMarketing}("");
        }
    }

    function swapTokensForEth(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();
        _approve(address(this), address(dexRouter), tokenAmount);
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(dexRouter), tokenAmount);
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0, 
            address(this),
            block.timestamp
        );
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            if (snipeBlockAmt == 0 || snipeBlockAmt > 2) {
                _liqAddBlock = block.number + 2;
            } else {
                _liqAddBlock = block.number;
            }

            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;
            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    function enableTrading(uint8 _block) external onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require (snipeBlockAmt == 0 && !_hasLiqBeenAdded);
        snipeBlockAmt = _block;
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(owner(), true);
        setExcludedFromReward(burnAddress, true);
        setExcludedFromReward(lpPair, true);
        setExcludedFromReward(_devWallet, true);
        setExcludedFromReward(_marketingWallet, true);
        _liqAddBlock = block.number;
        tradingEnabled = true;
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;
        uint256 tBurn;
        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee) private returns (bool) {
            if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
            } else {
                if (_liqAddBlock > 0 
                    && lpPairs[from] 
                    && _hasLimits(from, to)
                ) {
                    if (block.number - _liqAddBlock < snipeBlockAmt) {
                        _isBot[to] = true;
                        botsCaught ++;
                        emit BotCaught(to);
                    }
                }
            }
        
        adjustTaxes(from, to);
        ExtraValues memory values = _getValues(tAmount, takeFee);

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

        if (_isExcluded[from] && !_isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
        } else if (!_isExcluded[from] && _isExcluded[to]) {
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;  
        } else if (_isExcluded[from] && _isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;
        }
        if (values.tLiquidity > 0)
            _takeLiquidity(from, values.tLiquidity);
        if (values.tBurn > 0)
            _takeBurn(from, values.tBurn);
        if (values.rFee > 0 || values.tFee > 0)
            _takeReflect(values.rFee, values.tFee);

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

    function getETHFee() internal view returns (uint256) {
        return _liquidityFee + _devFee;
    }

    function _getValues(uint256 tAmount, bool takeFee) private view returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

        if(takeFee) {
            values.tFee = (tAmount * _reflectFee) / masterTaxDivisor;
            values.tLiquidity = (tAmount * (getETHFee())) / masterTaxDivisor;
            values.tBurn = (tAmount * _burnFee) / masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity + values.tBurn);

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

            values.rFee = 0;
        }
        values.rTransferAmount = values.rAmount - (values.rFee + (values.tLiquidity * currentRate) + (values.tBurn * currentRate));
        return values;
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / tSupply;
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeReflect(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity);
    }

    function _takeBurn(address sender, uint256 tBurn) private {
        uint256 currentRate =  _getRate();
        uint256 rBurn = tBurn * currentRate;
        _rOwned[burnAddress] = _rOwned[burnAddress] + rBurn;
        if(_isExcluded[burnAddress])
            _tOwned[burnAddress] = _tOwned[burnAddress] + tBurn;
        emit Transfer(sender, burnAddress, tBurn);
    }

    function sweepTokens(address token) external onlyOwner {
        IERC20 toTransfer = IERC20(token);
        toTransfer.transfer(msg.sender, toTransfer.balanceOf(address(this)));
    }

    function sweepETH() external onlyOwner{
        uint256 bal = address(this).balance;
        bool success;
        (success,) = address(msg.sender).call{value: bal}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","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":"address","name":"botAddress","type":"address"}],"name":"BotCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","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":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMaxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_block","type":"uint8"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellMaxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyPercent","type":"uint256"},{"internalType":"uint256","name":"buyDivisor","type":"uint256"},{"internalType":"uint256","name":"sellPercent","type":"uint256"},{"internalType":"uint256","name":"sellDivisor","type":"uint256"}],"name":"setMaxTxPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","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":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"reflectionFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"reflectionFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDevWallet","type":"address"},{"internalType":"address payable","name":"newMarketingWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setgetTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"sweepTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflect","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}]

62989680600a5560c0604052600f60809081526e5468652044697374757262616e636560881b60a052600b9062000037908262000811565b506040805180820190915260068152655255434b555360d01b6020820152600c9062000064908262000811565b506000600d819055600e819055600f819055601081905560115560c86012818155601382905561012c6014556015829055606460168190556017929092556103e8601855610190601955601a829055601b91909155601c805460ff191682179055601d819055620000d790600a620009f2565b600a54620000e6919062000a07565b601e819055620000f99060001962000a3f565b620001079060001962000a56565b601f55602380546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d179091556024805490911673512169012e0b654d45e35f3f78948f9bc36c112017905560258054600161ff0160a01b0319167394c9aff2c81730157e8d856d990aed27a47ff00a1790556005602681905560646027819055601e549091620001979162000a07565b620001a3919062000a70565b602855602854602955602754602654600a54620001c1919062000a07565b620001cd919062000a70565b602a556005602b556064602c55602c54602b54601e54620001ef919062000a07565b620001fb919062000a70565b602d55602d54602e55602c54602b54600a5462000219919062000a07565b62000225919062000a70565b602f5560056030556064603155603154603054601e5462000247919062000a07565b62000253919062000a70565b603255603254603355603154603054600a5462000271919062000a07565b6200027d919062000a70565b603455612710601e54600562000294919062000a07565b620002a0919062000a70565b6035556103e8601e546005620002b7919062000a07565b620002c3919062000a70565b6036556037805462ffffff191662010000179055600060388190556039819055603a819055603b55348015620002f857600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3601f543360009081526001602090815260409182902092909255602354602180546001600160a01b0319166001600160a01b03929092169182179055815163c45a015560e01b81529151909263c45a015592600480820193918290030181865afa158015620003ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d1919062000a87565b6001600160a01b031663c9c65396602160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000433573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000459919062000a87565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620004a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004cc919062000a87565b602280546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600190811790915530845260048352818420602154909516845293909152812060001990556005906200053d6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556025548216815260059093528183208054851660019081179091556024549091168352818320805485168217905530835290822080549093168117909255600990620005bf6000546001600160a01b031690565b6001600160a01b0390811682526020820192909252604001600020805460ff191692151592909217909155602354601e54620005ff923392169062000640565b601e5460405190815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a362000ab2565b6001600160a01b038316620006a85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200070b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200069f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200079757607f821691505b602082108103620007b857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200080c57600081815260208120601f850160051c81016020861015620007e75750805b601f850160051c820191505b818110156200080857828155600101620007f3565b5050505b505050565b81516001600160401b038111156200082d576200082d6200076c565b62000845816200083e845462000782565b84620007be565b602080601f8311600181146200087d5760008415620008645750858301515b600019600386901b1c1916600185901b17855562000808565b600085815260208120601f198616915b82811015620008ae578886015182559484019460019091019084016200088d565b5085821015620008cd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000934578160001904821115620009185762000918620008dd565b808516156200092657918102915b93841c9390800290620008f8565b509250929050565b6000826200094d57506001620009ec565b816200095c57506000620009ec565b81600181146200097557600281146200098057620009a0565b6001915050620009ec565b60ff841115620009945762000994620008dd565b50506001821b620009ec565b5060208310610133831016604e8410600b8410161715620009c5575081810a620009ec565b620009d18383620008f3565b8060001904821115620009e857620009e8620008dd565b0290505b92915050565b600062000a0083836200093c565b9392505050565b600081600019048311821515161562000a245762000a24620008dd565b500290565b634e487b7160e01b600052601260045260246000fd5b60008262000a515762000a5162000a29565b500690565b60008282101562000a6b5762000a6b620008dd565b500390565b60008262000a825762000a8262000a29565b500490565b60006020828403121562000a9a57600080fd5b81516001600160a01b038116811462000a0057600080fd5b613a848062000ac26000396000f3fe60806040526004361061039b5760003560e01c806370d5ae05116101dc578063bdfd93ee11610102578063d3f6a157116100a0578063eafb5a3c1161006f578063eafb5a3c14610a7a578063f5f6d3af14610a9a578063f6540ec714610aba578063fb78680d14610ad057600080fd5b8063d3f6a157146109e9578063d47f687714610a09578063dc44b6a014610a1e578063dd62ed3e14610a3457600080fd5b8063c5d24189116100dc578063c5d2418914610991578063c8607952146109a7578063c9cf7789146109bd578063d038b07e146109d357600080fd5b8063bdfd93ee1461093b578063c0488b5614610951578063c49b9a801461097157600080fd5b80638da5cb5b1161017a578063a9059cbb11610149578063a9059cbb146108cf578063aa6ca808146108ef578063b3e150c01461090f578063bbcea6bf1461092557600080fd5b80638da5cb5b1461085c57806395d89b411461087a578063a3b84b6b1461088f578063a457c2d7146108af57600080fd5b806380c581d1116101b657806380c581d1146107ed57806388790a681461080d57806388f8202014610823578063893d20e81461085c57600080fd5b806370d5ae05146107ac578063715018a6146107c25780637abdc1ca146107d757600080fd5b80634a74bb02116102c1578063571ac8b01161025f578063620158521161022e57806362015852146107405780636612e66f146107565780636b0a894c1461077657806370a082311461078c57600080fd5b8063571ac8b0146106cb57806358fa63ca146106eb5780635c6d4835146107005780635fecd9261461072057600080fd5b806350a8e0161161029b57806350a8e016146106335780635342acb4146106525780635424a10a1461068b578063546dbf91146106ab57600080fd5b80634a74bb02146105d25780634b3c59a9146105f35780634fb2e45d1461061357600080fd5b8063220f669611610339578063395093511161030857806339509351146105295780633bbac5791461054957806343cc8c2a14610582578063452ed4f1146105b257600080fd5b8063220f6696146104a657806323b872dd146104c757806326003957146104e7578063313ce5671461050757600080fd5b806313114a9d1161037557806313114a9d1461043a57806313e461921461045957806316f2f1a81461047b57806318160ddd1461049157600080fd5b806306fdde03146103a75780630758d924146103d2578063095ea7b31461040a57600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610af0565b6040516103c99190613529565b60405180910390f35b3480156103de57600080fd5b506021546103f2906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b34801561041657600080fd5b5061042a610425366004613596565b610b82565b60405190151581526020016103c9565b34801561044657600080fd5b506020545b6040519081526020016103c9565b34801561046557600080fd5b506104796104743660046135d0565b610b98565b005b34801561048757600080fd5b5061044b60165481565b34801561049d57600080fd5b50601e5461044b565b3480156104b257600080fd5b5060255461042a90600160a01b900460ff1681565b3480156104d357600080fd5b5061042a6104e2366004613609565b610e98565b3480156104f357600080fd5b5061047961050236600461364a565b610eeb565b34801561051357600080fd5b50601c5460405160ff90911681526020016103c9565b34801561053557600080fd5b5061042a610544366004613596565b610fd3565b34801561055557600080fd5b5061042a61056436600461366c565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561058e57600080fd5b5061042a61059d36600461366c565b60036020526000908152604090205460ff1681565b3480156105be57600080fd5b506022546103f2906001600160a01b031681565b3480156105de57600080fd5b5060255461042a90600160a81b900460ff1681565b3480156105ff57600080fd5b5061044b61060e366004613689565b61100a565b34801561061f57600080fd5b5061047961062e36600461366c565b61108e565b34801561063f57600080fd5b5060375461042a90610100900460ff1681565b34801561065e57600080fd5b5061042a61066d36600461366c565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561069757600080fd5b506104796106a63660046136a2565b611154565b3480156106b757600080fd5b506104796106c63660046136c5565b611286565b3480156106d757600080fd5b5061042a6106e636600461366c565b6112cc565b3480156106f757600080fd5b506103f2600081565b34801561070c57600080fd5b5061047961071b3660046136e2565b6112e0565b34801561072c57600080fd5b5061047961073b36600461366c565b6113a1565b34801561074c57600080fd5b5061044b60145481565b34801561076257600080fd5b506104796107713660046135d0565b611454565b34801561078257600080fd5b5061044b603b5481565b34801561079857600080fd5b5061044b6107a736600461366c565b6114a9565b3480156107b857600080fd5b506103f261dead81565b3480156107ce57600080fd5b50610479611508565b3480156107e357600080fd5b5061044b601b5481565b3480156107f957600080fd5b506104796108083660046135d0565b61156e565b34801561081957600080fd5b5061044b60185481565b34801561082f57600080fd5b5061042a61083e36600461366c565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561086857600080fd5b506000546001600160a01b03166103f2565b34801561088657600080fd5b506103bc6115f0565b34801561089b57600080fd5b506104796108aa3660046136e2565b6115ff565b3480156108bb57600080fd5b5061042a6108ca366004613596565b6116c0565b3480156108db57600080fd5b5061042a6108ea366004613596565b6116f7565b3480156108fb57600080fd5b5060375461042a9062010000900460ff1681565b34801561091b57600080fd5b5061044b602a5481565b34801561093157600080fd5b5061044b60175481565b34801561094757600080fd5b5061044b602f5481565b34801561095d57600080fd5b5061047961096c36600461371d565b611704565b34801561097d57600080fd5b5061047961098c3660046136c5565b61184b565b34801561099d57600080fd5b5061044b60155481565b3480156109b357600080fd5b5061044b601a5481565b3480156109c957600080fd5b5061044b60195481565b3480156109df57600080fd5b5061044b60125481565b3480156109f557600080fd5b50610479610a0436600461374f565b6118cd565b348015610a1557600080fd5b50610479611989565b348015610a2a57600080fd5b5061044b60135481565b348015610a4057600080fd5b5061044b610a4f36600461374f565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610a8657600080fd5b50610479610a9536600461366c565b611a03565b348015610aa657600080fd5b50610479610ab536600461366c565b611d2f565b348015610ac657600080fd5b5061044b60345481565b348015610adc57600080fd5b50610479610aeb36600461371d565b611e3c565b6060600b8054610aff9061377d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2b9061377d565b8015610b785780601f10610b4d57610100808354040283529160200191610b78565b820191906000526020600020905b815481529060010190602001808311610b5b57829003601f168201915b5050505050905090565b6000610b8f338484611ea5565b50600192915050565b6000546001600160a01b03163314610bcb5760405162461bcd60e51b8152600401610bc2906137b7565b60405180910390fd5b801515600103610cff576001600160a01b03821660009081526006602052604090205460ff1615610c3e5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610bc2565b6001600160a01b03821660009081526001602052604090205415610c98576001600160a01b038216600090815260016020526040902054610c7e9061100a565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b801515600003610e94576001600160a01b03821660009081526006602052604090205460ff16610d715760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610bc2565b60005b600754811015610e9257826001600160a01b031660078281548110610d9b57610d9b6137ec565b6000918252602090912001546001600160a01b031603610e805760078054610dc590600190613818565b81548110610dd557610dd56137ec565b600091825260209091200154600780546001600160a01b039092169183908110610e0157610e016137ec565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600690925220805460ff191690556007805480610e5957610e5961382f565b600082815260209020810160001990810180546001600160a01b0319169055019055610e92565b80610e8a81613845565b915050610d74565b505b5050565b6000610ea5848484611fc9565b506001600160a01b038416600090815260046020908152604080832033808552925290912054610ee1918691610edc908690613818565b611ea5565b5060019392505050565b6000546001600160a01b03163314610f155760405162461bcd60e51b8152600401610bc2906137b7565b60008183601e54610f26919061385e565b610f30919061387d565b90506103e8601e54610f42919061387d565b811015610fac5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e31604482015271129037b3103a37ba30b61039bab838363c9760711b6064820152608401610bc2565b6032819055600a548290610fc190859061385e565b610fcb919061387d565b603455505050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b8f918590610edc90869061389f565b6000601f548211156110715760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bc2565b600061107b61234a565b9050611087818461387d565b9392505050565b6000546001600160a01b031633146110b85760405162461bcd60e51b8152600401610bc2906137b7565b6001600160a01b0381166110de5760405162461bcd60e51b8152600401610bc2906138b7565b61deac196001600160a01b038216016111095760405162461bcd60e51b8152600401610bc2906138b7565b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b0316331461117e5760405162461bcd60e51b8152600401610bc2906137b7565b60375460ff16156111d15760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610bc2565b603a541580156111e95750603754610100900460ff16155b6111f257600080fd5b60ff8116603a55611204306001610b98565b6112206112196000546001600160a01b031690565b6001610b98565b61122d61dead6001610b98565b602254611244906001600160a01b03166001610b98565b60245461125b906001600160a01b03166001610b98565b602554611272906001600160a01b03166001610b98565b50436038556037805460ff19166001179055565b6000546001600160a01b031633146112b05760405162461bcd60e51b8152600401610bc2906137b7565b60378054911515620100000262ff000019909216919091179055565b60006112da82600019610b82565b92915050565b6000546001600160a01b0316331461130a5760405162461bcd60e51b8152600401610bc2906137b7565b6103e8851115801561131e57506103e88411155b801561132c57506103e88311155b801561133a57506103e88211155b801561134857506103e88111155b61135157600080fd5b611388818385611361888a61389f565b61136b919061389f565b611375919061389f565b61137f919061389f565b111561138a57600080fd5b601894909455601792909255601955601a55601b55565b6000546001600160a01b031633146113cb5760405162461bcd60e51b8152600401610bc2906137b7565b6001600160a01b03811660009081526008602052604090205460ff166114335760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e74206973206e6f742061207265636f7264656420626f742e00006044820152606401610bc2565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b0316331461147e5760405162461bcd60e51b8152600401610bc2906137b7565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b03811660009081526006602052604081205460ff16156114e657506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546112da9061100a565b6000546001600160a01b031633146115325760405162461bcd60e51b8152600401610bc2906137b7565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146115985760405162461bcd60e51b8152600401610bc2906137b7565b8015156000036115c457506001600160a01b03166000908152600360205260409020805460ff19169055565b6001600160a01b0382166000908152600360205260409020805460ff191660011790555050565b905090565b6060600c8054610aff9061377d565b6000546001600160a01b031633146116295760405162461bcd60e51b8152600401610bc2906137b7565b6103e8851115801561163d57506103e88411155b801561164b57506103e88311155b801561165957506103e88211155b801561166757506103e88111155b61167057600080fd5b611388818385611680888a61389f565b61168a919061389f565b611694919061389f565b61169e919061389f565b11156116a957600080fd5b601394909455601292909255601455601555601655565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b8f918590610edc908690613818565b6000610ee1338484611fc9565b6000546001600160a01b0316331461172e5760405162461bcd60e51b8152600401610bc2906137b7565b8284601e5461173d919061385e565b611747919061387d565b602855600a54839061175a90869061385e565b611764919061387d565b602a55601e54819061177790849061385e565b611781919061387d565b602d55600a54819061179490849061385e565b61179e919061387d565b602f55601e546117b1906103e89061387d565b602d54101580156117d357506103e8601e546117cd919061387d565b60285410155b6118455760405162461bcd60e51b815260206004820152603860248201527f4d6178205472616e73616374696f6e20616d7473206d7573742062652061626f60448201527f766520302e3125206f6620746f74616c20737570706c792e00000000000000006064820152608401610bc2565b50505050565b6000546001600160a01b031633146118755760405162461bcd60e51b8152600401610bc2906137b7565b60258054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906118c290831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118f75760405162461bcd60e51b8152600401610bc2906137b7565b6024546001600160a01b0383811691161480159061192057506001600160a01b03821661dead14155b61192957600080fd5b6025546001600160a01b0382811691161480159061195257506001600160a01b03811661dead14155b61195b57600080fd5b602480546001600160a01b039384166001600160a01b03199182161790915560258054929093169116179055565b6000546001600160a01b031633146119b35760405162461bcd60e51b8152600401610bc2906137b7565b6040514790600090339083908381818185875af1925050503d80600081146119f7576040519150601f19603f3d011682016040523d82523d6000602084013e6119fc565b606091505b5050505050565b6000546001600160a01b03163314611a2d5760405162461bcd60e51b8152600401610bc2906137b7565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a969190613914565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b079190613914565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611b52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b769190613914565b90506001600160a01b038116611cef57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be89190613914565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c599190613914565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611ca6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cca9190613914565b602280546001600160a01b0319166001600160a01b0392909216919091179055611d0b565b602280546001600160a01b0319166001600160a01b0383161790555b50602180546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611d595760405162461bcd60e51b8152600401610bc2906137b7565b6040516370a0823160e01b815230600482015281906001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015611da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcd9190613931565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e92919061394a565b6000546001600160a01b03163314611e665760405162461bcd60e51b8152600401610bc2906137b7565b8284601e54611e75919061385e565b611e7f919061387d565b603555601e548190611e9290849061385e565b611e9c919061387d565b60365550505050565b6001600160a01b038316611f075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bc2565b6001600160a01b038216611f685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bc2565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661202f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bc2565b6001600160a01b0383166120915760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bc2565b600082116120f35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bc2565b6120fd848461236d565b156122725760375460ff166121545760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610bc2565b6001600160a01b03831660009081526003602052604090205460ff161561219c57602d548211156121975760405162461bcd60e51b8152600401610bc290613967565b6121be565b6028548211156121be5760405162461bcd60e51b8152600401610bc290613967565b6023546001600160a01b038481169116148015906121f557506001600160a01b03831660009081526003602052604090205460ff16155b156122725760325482612207856114a9565b612211919061389f565b11156122725760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610bc2565b6001600160a01b03841660009081526005602052604090205460019060ff16806122b457506001600160a01b03841660009081526005602052604090205460ff165b156122bd575060005b6001600160a01b03841660009081526003602052604090205460ff161561233557602554600160a01b900460ff161580156123015750602554600160a81b900460ff165b15612335576000612311306114a9565b9050603554811061233357603654811061232a57506036545b6123338161242a565b505b6123418585858461263a565b95945050505050565b6000806000612357612aa9565b9092509050612366818361387d565b9250505090565b600080546001600160a01b0384811691161480159061239a57506000546001600160a01b03838116911614155b80156123bf57506001600160a01b03821660009081526009602052604090205460ff16155b80156123e457506001600160a01b03831660009081526009602052604090205460ff16155b80156123fb57506001600160a01b03821661dead14155b801561240f57506001600160a01b03821615155b801561108757506001600160a01b0383163014159392505050565b6025805460ff60a01b1916600160a01b179055601a54601954601854600092916124539161389f565b61245d919061389f565b90508060000361246d575061262a565b6000816018548461247e919061385e565b612488919061387d565b905060006002836019548661249d919061385e565b6124a7919061387d565b6124b1919061387d565b90506000600284601a54876124c6919061385e565b6124d0919061387d565b6124da919061387d565b60375490915062010000900460ff166124f4575060009050805b600081836125028689613818565b61250c9190613818565b6125169190613818565b9050600061252560028661387d565b905060006125338287613818565b9050476000612542858561389f565b905061254d81612c2c565b60006125598347613818565b9050600082612568878461385e565b612572919061387d565b905089156125c6576125848582612d86565b60408051878152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b88156125e6576024546125e49030906001600160a01b03168a611fc9565b505b8715612606576025546126049030906001600160a01b03168a611fc9565b505b861561261e5761261e6126198284613818565b612e30565b50505050505050505050505b506025805460ff60a01b19169055565b603754600090610100900460ff166126d3576126568585612f2a565b603754610100900460ff161580156126735750612673858561236d565b156126ce5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610bc2565b61279c565b60006038541180156126fd57506001600160a01b03851660009081526003602052604090205460ff165b801561270e575061270e858561236d565b1561279c57603a546038546127239043613818565b101561279c576001600160a01b0384166000908152600860205260408120805460ff19166001179055603b80549161275a83613845565b90915550506040516001600160a01b03851681527f83f3ba6ccfab035b4d0e02cbd3348d17e3fae04af10d16e650758656c8f2c2289060200160405180910390a15b6127a68585613072565b60006127b28484613115565b60a08101516001600160a01b0388166000908152600160205260409020549192506127dc91613818565b6001600160a01b0380881660009081526001602052604080822093909355608084015191881681529190912054612813919061389f565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526006909152205460ff16801561286757506001600160a01b03851660009081526006602052604090205460ff16155b156128ae576001600160a01b038616600090815260026020526040902054612890908590613818565b6001600160a01b0387166000908152600260205260409020556129ee565b6001600160a01b03861660009081526006602052604090205460ff161580156128ef57506001600160a01b03851660009081526006602052604090205460ff165b156129375780516001600160a01b038616600090815260026020526040902054612919919061389f565b6001600160a01b0386166000908152600260205260409020556129ee565b6001600160a01b03861660009081526006602052604090205460ff16801561297757506001600160a01b03851660009081526006602052604090205460ff165b156129ee576001600160a01b0386166000908152600260205260409020546129a0908590613818565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546129d4919061389f565b6001600160a01b0386166000908152600260205260409020555b604081015115612a0657612a068682604001516132d5565b606081015115612a1e57612a1e8682606001516133a2565b60008160c001511180612a35575060008160200151115b15612a4c57612a4c8160c0015182602001516134f1565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051612a9591815260200190565b60405180910390a350600195945050505050565b601f54601e546000918291825b600754811015612bfb57826001600060078481548110612ad857612ad86137ec565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b435750816002600060078481548110612b1c57612b1c6137ec565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b5957601f54601e54945094505050509091565b6001600060078381548110612b7057612b706137ec565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612b9f9084613818565b92506002600060078381548110612bb857612bb86137ec565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612be79083613818565b915080612bf381613845565b915050612ab6565b50601e54601f54612c0c919061387d565b821015612c2357601f54601e549350935050509091565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c6157612c616137ec565b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cde9190613914565b81600181518110612cf157612cf16137ec565b6001600160a01b039283166020918202929092010152602154612d179130911684611ea5565b60215460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d509085906000908690309042906004016139af565b600060405180830381600087803b158015612d6a57600080fd5b505af1158015612d7e573d6000803e3d6000fd5b505050505050565b602154612d9e9030906001600160a01b031684611ea5565b60215460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612e0b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119fc9190613a20565b6000601a54601954612e42919061389f565b601954612e4f908461385e565b612e59919061387d565b90506000612e678284613818565b905060008215612ec9576024546040516001600160a01b03909116908490600081818185875af1925050503d8060008114612ebe576040519150601f19603f3d011682016040523d82523d6000602084013e612ec3565b606091505b50909150505b8115611845576025546040516001600160a01b03909116908390600081818185875af1925050503d8060008114612f1c576040519150601f19603f3d011682016040523d82523d6000602084013e612f21565b606091505b50505050505050565b603754610100900460ff1615612f8e5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610bc2565b612f98828261236d565b158015612fb257506022546001600160a01b038281169116145b15610e9457603a541580612fc857506002603a54115b15612fe057612fd843600261389f565b603855612fe5565b436038555b6001600160a01b03821660009081526009602052604090819020805460ff191660019081179091556037805461ff001916610100179055426039556025805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161306691901515815260200190565b60405180910390a15050565b6001600160a01b03821660009081526003602052604090205460ff16156130b557601254600d55601354600e55601454600f556015546010556016546011555050565b6001600160a01b03811660009081526003602052604090205460ff16156130f857601754600d55601854600e55601954600f55601a54601055601b546011555050565b6000600d819055600e819055600f81905560108190556011555050565b6131556040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6131956040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600061319f61234a565b90506131ab818661385e565b60a0830152831561326057612710600d54866131c7919061385e565b6131d1919061387d565b60208301526127106131e1613517565b6131eb908761385e565b6131f5919061387d565b60408301526011546127109061320b908761385e565b613215919061387d565b6060830181905260408301516020840151613230919061389f565b61323a919061389f565b6132449086613818565b8252602082015161325690829061385e565b60c0830152613280565b600060208301819052604083018190526060830181905285835260c08301525b808260600151613290919061385e565b8183604001516132a0919061385e565b8360c001516132af919061389f565b6132b9919061389f565b8260a001516132c89190613818565b6080830152509392505050565b60006132df61234a565b905060006132ed828461385e565b3060009081526001602052604090205490915061330b90829061389f565b3060009081526001602090815260408083209390935560069052205460ff161561335b573060009081526002602052604090205461334a90849061389f565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a350505050565b60006133ac61234a565b905060006133ba828461385e565b61dead60005260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d549091506133f590829061389f565b61dead6000527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5560066020527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e225460ff16156134b25761dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc5461348490849061389f565b61dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc555b60405183815261dead906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001613394565b81601f546134ff9190613818565b601f5560205461351090829061389f565b6020555050565b6000600f54600e546115eb919061389f565b600060208083528351808285015260005b818110156135565785810183015185820160400152820161353a565b81811115613568576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461359357600080fd5b50565b600080604083850312156135a957600080fd5b82356135b48161357e565b946020939093013593505050565b801515811461359357600080fd5b600080604083850312156135e357600080fd5b82356135ee8161357e565b915060208301356135fe816135c2565b809150509250929050565b60008060006060848603121561361e57600080fd5b83356136298161357e565b925060208401356136398161357e565b929592945050506040919091013590565b6000806040838503121561365d57600080fd5b50508035926020909101359150565b60006020828403121561367e57600080fd5b81356110878161357e565b60006020828403121561369b57600080fd5b5035919050565b6000602082840312156136b457600080fd5b813560ff8116811461108757600080fd5b6000602082840312156136d757600080fd5b8135611087816135c2565b600080600080600060a086880312156136fa57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806000806080858703121561373357600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561376257600080fd5b823561376d8161357e565b915060208301356135fe8161357e565b600181811c9082168061379157607f821691505b6020821081036137b157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561382a5761382a613802565b500390565b634e487b7160e01b600052603160045260246000fd5b60006001820161385757613857613802565b5060010190565b600081600019048311821515161561387857613878613802565b500290565b60008261389a57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156138b2576138b2613802565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b60006020828403121561392657600080fd5b81516110878161357e565b60006020828403121561394357600080fd5b5051919050565b60006020828403121561395c57600080fd5b8151611087816135c2565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139ff5784516001600160a01b0316835293830193918301916001016139da565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613a3557600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212203a7580f46fccb8a39e23636b733f74348a9a706d663d6160057a4d41942fd5b264736f6c634300080f0033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c806370d5ae05116101dc578063bdfd93ee11610102578063d3f6a157116100a0578063eafb5a3c1161006f578063eafb5a3c14610a7a578063f5f6d3af14610a9a578063f6540ec714610aba578063fb78680d14610ad057600080fd5b8063d3f6a157146109e9578063d47f687714610a09578063dc44b6a014610a1e578063dd62ed3e14610a3457600080fd5b8063c5d24189116100dc578063c5d2418914610991578063c8607952146109a7578063c9cf7789146109bd578063d038b07e146109d357600080fd5b8063bdfd93ee1461093b578063c0488b5614610951578063c49b9a801461097157600080fd5b80638da5cb5b1161017a578063a9059cbb11610149578063a9059cbb146108cf578063aa6ca808146108ef578063b3e150c01461090f578063bbcea6bf1461092557600080fd5b80638da5cb5b1461085c57806395d89b411461087a578063a3b84b6b1461088f578063a457c2d7146108af57600080fd5b806380c581d1116101b657806380c581d1146107ed57806388790a681461080d57806388f8202014610823578063893d20e81461085c57600080fd5b806370d5ae05146107ac578063715018a6146107c25780637abdc1ca146107d757600080fd5b80634a74bb02116102c1578063571ac8b01161025f578063620158521161022e57806362015852146107405780636612e66f146107565780636b0a894c1461077657806370a082311461078c57600080fd5b8063571ac8b0146106cb57806358fa63ca146106eb5780635c6d4835146107005780635fecd9261461072057600080fd5b806350a8e0161161029b57806350a8e016146106335780635342acb4146106525780635424a10a1461068b578063546dbf91146106ab57600080fd5b80634a74bb02146105d25780634b3c59a9146105f35780634fb2e45d1461061357600080fd5b8063220f669611610339578063395093511161030857806339509351146105295780633bbac5791461054957806343cc8c2a14610582578063452ed4f1146105b257600080fd5b8063220f6696146104a657806323b872dd146104c757806326003957146104e7578063313ce5671461050757600080fd5b806313114a9d1161037557806313114a9d1461043a57806313e461921461045957806316f2f1a81461047b57806318160ddd1461049157600080fd5b806306fdde03146103a75780630758d924146103d2578063095ea7b31461040a57600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610af0565b6040516103c99190613529565b60405180910390f35b3480156103de57600080fd5b506021546103f2906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b34801561041657600080fd5b5061042a610425366004613596565b610b82565b60405190151581526020016103c9565b34801561044657600080fd5b506020545b6040519081526020016103c9565b34801561046557600080fd5b506104796104743660046135d0565b610b98565b005b34801561048757600080fd5b5061044b60165481565b34801561049d57600080fd5b50601e5461044b565b3480156104b257600080fd5b5060255461042a90600160a01b900460ff1681565b3480156104d357600080fd5b5061042a6104e2366004613609565b610e98565b3480156104f357600080fd5b5061047961050236600461364a565b610eeb565b34801561051357600080fd5b50601c5460405160ff90911681526020016103c9565b34801561053557600080fd5b5061042a610544366004613596565b610fd3565b34801561055557600080fd5b5061042a61056436600461366c565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561058e57600080fd5b5061042a61059d36600461366c565b60036020526000908152604090205460ff1681565b3480156105be57600080fd5b506022546103f2906001600160a01b031681565b3480156105de57600080fd5b5060255461042a90600160a81b900460ff1681565b3480156105ff57600080fd5b5061044b61060e366004613689565b61100a565b34801561061f57600080fd5b5061047961062e36600461366c565b61108e565b34801561063f57600080fd5b5060375461042a90610100900460ff1681565b34801561065e57600080fd5b5061042a61066d36600461366c565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561069757600080fd5b506104796106a63660046136a2565b611154565b3480156106b757600080fd5b506104796106c63660046136c5565b611286565b3480156106d757600080fd5b5061042a6106e636600461366c565b6112cc565b3480156106f757600080fd5b506103f2600081565b34801561070c57600080fd5b5061047961071b3660046136e2565b6112e0565b34801561072c57600080fd5b5061047961073b36600461366c565b6113a1565b34801561074c57600080fd5b5061044b60145481565b34801561076257600080fd5b506104796107713660046135d0565b611454565b34801561078257600080fd5b5061044b603b5481565b34801561079857600080fd5b5061044b6107a736600461366c565b6114a9565b3480156107b857600080fd5b506103f261dead81565b3480156107ce57600080fd5b50610479611508565b3480156107e357600080fd5b5061044b601b5481565b3480156107f957600080fd5b506104796108083660046135d0565b61156e565b34801561081957600080fd5b5061044b60185481565b34801561082f57600080fd5b5061042a61083e36600461366c565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561086857600080fd5b506000546001600160a01b03166103f2565b34801561088657600080fd5b506103bc6115f0565b34801561089b57600080fd5b506104796108aa3660046136e2565b6115ff565b3480156108bb57600080fd5b5061042a6108ca366004613596565b6116c0565b3480156108db57600080fd5b5061042a6108ea366004613596565b6116f7565b3480156108fb57600080fd5b5060375461042a9062010000900460ff1681565b34801561091b57600080fd5b5061044b602a5481565b34801561093157600080fd5b5061044b60175481565b34801561094757600080fd5b5061044b602f5481565b34801561095d57600080fd5b5061047961096c36600461371d565b611704565b34801561097d57600080fd5b5061047961098c3660046136c5565b61184b565b34801561099d57600080fd5b5061044b60155481565b3480156109b357600080fd5b5061044b601a5481565b3480156109c957600080fd5b5061044b60195481565b3480156109df57600080fd5b5061044b60125481565b3480156109f557600080fd5b50610479610a0436600461374f565b6118cd565b348015610a1557600080fd5b50610479611989565b348015610a2a57600080fd5b5061044b60135481565b348015610a4057600080fd5b5061044b610a4f36600461374f565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610a8657600080fd5b50610479610a9536600461366c565b611a03565b348015610aa657600080fd5b50610479610ab536600461366c565b611d2f565b348015610ac657600080fd5b5061044b60345481565b348015610adc57600080fd5b50610479610aeb36600461371d565b611e3c565b6060600b8054610aff9061377d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2b9061377d565b8015610b785780601f10610b4d57610100808354040283529160200191610b78565b820191906000526020600020905b815481529060010190602001808311610b5b57829003601f168201915b5050505050905090565b6000610b8f338484611ea5565b50600192915050565b6000546001600160a01b03163314610bcb5760405162461bcd60e51b8152600401610bc2906137b7565b60405180910390fd5b801515600103610cff576001600160a01b03821660009081526006602052604090205460ff1615610c3e5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610bc2565b6001600160a01b03821660009081526001602052604090205415610c98576001600160a01b038216600090815260016020526040902054610c7e9061100a565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b801515600003610e94576001600160a01b03821660009081526006602052604090205460ff16610d715760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610bc2565b60005b600754811015610e9257826001600160a01b031660078281548110610d9b57610d9b6137ec565b6000918252602090912001546001600160a01b031603610e805760078054610dc590600190613818565b81548110610dd557610dd56137ec565b600091825260209091200154600780546001600160a01b039092169183908110610e0157610e016137ec565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600690925220805460ff191690556007805480610e5957610e5961382f565b600082815260209020810160001990810180546001600160a01b0319169055019055610e92565b80610e8a81613845565b915050610d74565b505b5050565b6000610ea5848484611fc9565b506001600160a01b038416600090815260046020908152604080832033808552925290912054610ee1918691610edc908690613818565b611ea5565b5060019392505050565b6000546001600160a01b03163314610f155760405162461bcd60e51b8152600401610bc2906137b7565b60008183601e54610f26919061385e565b610f30919061387d565b90506103e8601e54610f42919061387d565b811015610fac5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e31604482015271129037b3103a37ba30b61039bab838363c9760711b6064820152608401610bc2565b6032819055600a548290610fc190859061385e565b610fcb919061387d565b603455505050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b8f918590610edc90869061389f565b6000601f548211156110715760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bc2565b600061107b61234a565b9050611087818461387d565b9392505050565b6000546001600160a01b031633146110b85760405162461bcd60e51b8152600401610bc2906137b7565b6001600160a01b0381166110de5760405162461bcd60e51b8152600401610bc2906138b7565b61deac196001600160a01b038216016111095760405162461bcd60e51b8152600401610bc2906138b7565b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b0316331461117e5760405162461bcd60e51b8152600401610bc2906137b7565b60375460ff16156111d15760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610bc2565b603a541580156111e95750603754610100900460ff16155b6111f257600080fd5b60ff8116603a55611204306001610b98565b6112206112196000546001600160a01b031690565b6001610b98565b61122d61dead6001610b98565b602254611244906001600160a01b03166001610b98565b60245461125b906001600160a01b03166001610b98565b602554611272906001600160a01b03166001610b98565b50436038556037805460ff19166001179055565b6000546001600160a01b031633146112b05760405162461bcd60e51b8152600401610bc2906137b7565b60378054911515620100000262ff000019909216919091179055565b60006112da82600019610b82565b92915050565b6000546001600160a01b0316331461130a5760405162461bcd60e51b8152600401610bc2906137b7565b6103e8851115801561131e57506103e88411155b801561132c57506103e88311155b801561133a57506103e88211155b801561134857506103e88111155b61135157600080fd5b611388818385611361888a61389f565b61136b919061389f565b611375919061389f565b61137f919061389f565b111561138a57600080fd5b601894909455601792909255601955601a55601b55565b6000546001600160a01b031633146113cb5760405162461bcd60e51b8152600401610bc2906137b7565b6001600160a01b03811660009081526008602052604090205460ff166114335760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e74206973206e6f742061207265636f7264656420626f742e00006044820152606401610bc2565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b0316331461147e5760405162461bcd60e51b8152600401610bc2906137b7565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b03811660009081526006602052604081205460ff16156114e657506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546112da9061100a565b6000546001600160a01b031633146115325760405162461bcd60e51b8152600401610bc2906137b7565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146115985760405162461bcd60e51b8152600401610bc2906137b7565b8015156000036115c457506001600160a01b03166000908152600360205260409020805460ff19169055565b6001600160a01b0382166000908152600360205260409020805460ff191660011790555050565b905090565b6060600c8054610aff9061377d565b6000546001600160a01b031633146116295760405162461bcd60e51b8152600401610bc2906137b7565b6103e8851115801561163d57506103e88411155b801561164b57506103e88311155b801561165957506103e88211155b801561166757506103e88111155b61167057600080fd5b611388818385611680888a61389f565b61168a919061389f565b611694919061389f565b61169e919061389f565b11156116a957600080fd5b601394909455601292909255601455601555601655565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610b8f918590610edc908690613818565b6000610ee1338484611fc9565b6000546001600160a01b0316331461172e5760405162461bcd60e51b8152600401610bc2906137b7565b8284601e5461173d919061385e565b611747919061387d565b602855600a54839061175a90869061385e565b611764919061387d565b602a55601e54819061177790849061385e565b611781919061387d565b602d55600a54819061179490849061385e565b61179e919061387d565b602f55601e546117b1906103e89061387d565b602d54101580156117d357506103e8601e546117cd919061387d565b60285410155b6118455760405162461bcd60e51b815260206004820152603860248201527f4d6178205472616e73616374696f6e20616d7473206d7573742062652061626f60448201527f766520302e3125206f6620746f74616c20737570706c792e00000000000000006064820152608401610bc2565b50505050565b6000546001600160a01b031633146118755760405162461bcd60e51b8152600401610bc2906137b7565b60258054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906118c290831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118f75760405162461bcd60e51b8152600401610bc2906137b7565b6024546001600160a01b0383811691161480159061192057506001600160a01b03821661dead14155b61192957600080fd5b6025546001600160a01b0382811691161480159061195257506001600160a01b03811661dead14155b61195b57600080fd5b602480546001600160a01b039384166001600160a01b03199182161790915560258054929093169116179055565b6000546001600160a01b031633146119b35760405162461bcd60e51b8152600401610bc2906137b7565b6040514790600090339083908381818185875af1925050503d80600081146119f7576040519150601f19603f3d011682016040523d82523d6000602084013e6119fc565b606091505b5050505050565b6000546001600160a01b03163314611a2d5760405162461bcd60e51b8152600401610bc2906137b7565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a969190613914565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b079190613914565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611b52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b769190613914565b90506001600160a01b038116611cef57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be89190613914565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c599190613914565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611ca6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cca9190613914565b602280546001600160a01b0319166001600160a01b0392909216919091179055611d0b565b602280546001600160a01b0319166001600160a01b0383161790555b50602180546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611d595760405162461bcd60e51b8152600401610bc2906137b7565b6040516370a0823160e01b815230600482015281906001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015611da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcd9190613931565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e92919061394a565b6000546001600160a01b03163314611e665760405162461bcd60e51b8152600401610bc2906137b7565b8284601e54611e75919061385e565b611e7f919061387d565b603555601e548190611e9290849061385e565b611e9c919061387d565b60365550505050565b6001600160a01b038316611f075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bc2565b6001600160a01b038216611f685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bc2565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661202f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bc2565b6001600160a01b0383166120915760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bc2565b600082116120f35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bc2565b6120fd848461236d565b156122725760375460ff166121545760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610bc2565b6001600160a01b03831660009081526003602052604090205460ff161561219c57602d548211156121975760405162461bcd60e51b8152600401610bc290613967565b6121be565b6028548211156121be5760405162461bcd60e51b8152600401610bc290613967565b6023546001600160a01b038481169116148015906121f557506001600160a01b03831660009081526003602052604090205460ff16155b156122725760325482612207856114a9565b612211919061389f565b11156122725760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610bc2565b6001600160a01b03841660009081526005602052604090205460019060ff16806122b457506001600160a01b03841660009081526005602052604090205460ff165b156122bd575060005b6001600160a01b03841660009081526003602052604090205460ff161561233557602554600160a01b900460ff161580156123015750602554600160a81b900460ff165b15612335576000612311306114a9565b9050603554811061233357603654811061232a57506036545b6123338161242a565b505b6123418585858461263a565b95945050505050565b6000806000612357612aa9565b9092509050612366818361387d565b9250505090565b600080546001600160a01b0384811691161480159061239a57506000546001600160a01b03838116911614155b80156123bf57506001600160a01b03821660009081526009602052604090205460ff16155b80156123e457506001600160a01b03831660009081526009602052604090205460ff16155b80156123fb57506001600160a01b03821661dead14155b801561240f57506001600160a01b03821615155b801561108757506001600160a01b0383163014159392505050565b6025805460ff60a01b1916600160a01b179055601a54601954601854600092916124539161389f565b61245d919061389f565b90508060000361246d575061262a565b6000816018548461247e919061385e565b612488919061387d565b905060006002836019548661249d919061385e565b6124a7919061387d565b6124b1919061387d565b90506000600284601a54876124c6919061385e565b6124d0919061387d565b6124da919061387d565b60375490915062010000900460ff166124f4575060009050805b600081836125028689613818565b61250c9190613818565b6125169190613818565b9050600061252560028661387d565b905060006125338287613818565b9050476000612542858561389f565b905061254d81612c2c565b60006125598347613818565b9050600082612568878461385e565b612572919061387d565b905089156125c6576125848582612d86565b60408051878152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b88156125e6576024546125e49030906001600160a01b03168a611fc9565b505b8715612606576025546126049030906001600160a01b03168a611fc9565b505b861561261e5761261e6126198284613818565b612e30565b50505050505050505050505b506025805460ff60a01b19169055565b603754600090610100900460ff166126d3576126568585612f2a565b603754610100900460ff161580156126735750612673858561236d565b156126ce5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610bc2565b61279c565b60006038541180156126fd57506001600160a01b03851660009081526003602052604090205460ff165b801561270e575061270e858561236d565b1561279c57603a546038546127239043613818565b101561279c576001600160a01b0384166000908152600860205260408120805460ff19166001179055603b80549161275a83613845565b90915550506040516001600160a01b03851681527f83f3ba6ccfab035b4d0e02cbd3348d17e3fae04af10d16e650758656c8f2c2289060200160405180910390a15b6127a68585613072565b60006127b28484613115565b60a08101516001600160a01b0388166000908152600160205260409020549192506127dc91613818565b6001600160a01b0380881660009081526001602052604080822093909355608084015191881681529190912054612813919061389f565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526006909152205460ff16801561286757506001600160a01b03851660009081526006602052604090205460ff16155b156128ae576001600160a01b038616600090815260026020526040902054612890908590613818565b6001600160a01b0387166000908152600260205260409020556129ee565b6001600160a01b03861660009081526006602052604090205460ff161580156128ef57506001600160a01b03851660009081526006602052604090205460ff165b156129375780516001600160a01b038616600090815260026020526040902054612919919061389f565b6001600160a01b0386166000908152600260205260409020556129ee565b6001600160a01b03861660009081526006602052604090205460ff16801561297757506001600160a01b03851660009081526006602052604090205460ff165b156129ee576001600160a01b0386166000908152600260205260409020546129a0908590613818565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546129d4919061389f565b6001600160a01b0386166000908152600260205260409020555b604081015115612a0657612a068682604001516132d5565b606081015115612a1e57612a1e8682606001516133a2565b60008160c001511180612a35575060008160200151115b15612a4c57612a4c8160c0015182602001516134f1565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051612a9591815260200190565b60405180910390a350600195945050505050565b601f54601e546000918291825b600754811015612bfb57826001600060078481548110612ad857612ad86137ec565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b435750816002600060078481548110612b1c57612b1c6137ec565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b5957601f54601e54945094505050509091565b6001600060078381548110612b7057612b706137ec565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612b9f9084613818565b92506002600060078381548110612bb857612bb86137ec565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612be79083613818565b915080612bf381613845565b915050612ab6565b50601e54601f54612c0c919061387d565b821015612c2357601f54601e549350935050509091565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c6157612c616137ec565b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cde9190613914565b81600181518110612cf157612cf16137ec565b6001600160a01b039283166020918202929092010152602154612d179130911684611ea5565b60215460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d509085906000908690309042906004016139af565b600060405180830381600087803b158015612d6a57600080fd5b505af1158015612d7e573d6000803e3d6000fd5b505050505050565b602154612d9e9030906001600160a01b031684611ea5565b60215460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612e0b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119fc9190613a20565b6000601a54601954612e42919061389f565b601954612e4f908461385e565b612e59919061387d565b90506000612e678284613818565b905060008215612ec9576024546040516001600160a01b03909116908490600081818185875af1925050503d8060008114612ebe576040519150601f19603f3d011682016040523d82523d6000602084013e612ec3565b606091505b50909150505b8115611845576025546040516001600160a01b03909116908390600081818185875af1925050503d8060008114612f1c576040519150601f19603f3d011682016040523d82523d6000602084013e612f21565b606091505b50505050505050565b603754610100900460ff1615612f8e5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610bc2565b612f98828261236d565b158015612fb257506022546001600160a01b038281169116145b15610e9457603a541580612fc857506002603a54115b15612fe057612fd843600261389f565b603855612fe5565b436038555b6001600160a01b03821660009081526009602052604090819020805460ff191660019081179091556037805461ff001916610100179055426039556025805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161306691901515815260200190565b60405180910390a15050565b6001600160a01b03821660009081526003602052604090205460ff16156130b557601254600d55601354600e55601454600f556015546010556016546011555050565b6001600160a01b03811660009081526003602052604090205460ff16156130f857601754600d55601854600e55601954600f55601a54601055601b546011555050565b6000600d819055600e819055600f81905560108190556011555050565b6131556040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6131956040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600061319f61234a565b90506131ab818661385e565b60a0830152831561326057612710600d54866131c7919061385e565b6131d1919061387d565b60208301526127106131e1613517565b6131eb908761385e565b6131f5919061387d565b60408301526011546127109061320b908761385e565b613215919061387d565b6060830181905260408301516020840151613230919061389f565b61323a919061389f565b6132449086613818565b8252602082015161325690829061385e565b60c0830152613280565b600060208301819052604083018190526060830181905285835260c08301525b808260600151613290919061385e565b8183604001516132a0919061385e565b8360c001516132af919061389f565b6132b9919061389f565b8260a001516132c89190613818565b6080830152509392505050565b60006132df61234a565b905060006132ed828461385e565b3060009081526001602052604090205490915061330b90829061389f565b3060009081526001602090815260408083209390935560069052205460ff161561335b573060009081526002602052604090205461334a90849061389f565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a350505050565b60006133ac61234a565b905060006133ba828461385e565b61dead60005260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d549091506133f590829061389f565b61dead6000527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d5560066020527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e225460ff16156134b25761dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc5461348490849061389f565b61dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc555b60405183815261dead906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001613394565b81601f546134ff9190613818565b601f5560205461351090829061389f565b6020555050565b6000600f54600e546115eb919061389f565b600060208083528351808285015260005b818110156135565785810183015185820160400152820161353a565b81811115613568576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461359357600080fd5b50565b600080604083850312156135a957600080fd5b82356135b48161357e565b946020939093013593505050565b801515811461359357600080fd5b600080604083850312156135e357600080fd5b82356135ee8161357e565b915060208301356135fe816135c2565b809150509250929050565b60008060006060848603121561361e57600080fd5b83356136298161357e565b925060208401356136398161357e565b929592945050506040919091013590565b6000806040838503121561365d57600080fd5b50508035926020909101359150565b60006020828403121561367e57600080fd5b81356110878161357e565b60006020828403121561369b57600080fd5b5035919050565b6000602082840312156136b457600080fd5b813560ff8116811461108757600080fd5b6000602082840312156136d757600080fd5b8135611087816135c2565b600080600080600060a086880312156136fa57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806000806080858703121561373357600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561376257600080fd5b823561376d8161357e565b915060208301356135fe8161357e565b600181811c9082168061379157607f821691505b6020821081036137b157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561382a5761382a613802565b500390565b634e487b7160e01b600052603160045260246000fd5b60006001820161385757613857613802565b5060010190565b600081600019048311821515161561387857613878613802565b500290565b60008261389a57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156138b2576138b2613802565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b60006020828403121561392657600080fd5b81516110878161357e565b60006020828403121561394357600080fd5b5051919050565b60006020828403121561395c57600080fd5b8151611087816135c2565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139ff5784516001600160a01b0316835293830193918301916001016139da565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613a3557600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212203a7580f46fccb8a39e23636b733f74348a9a706d663d6160057a4d41942fd5b264736f6c634300080f0033

Deployed Bytecode Sourcemap

3181:25215:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8504:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5155:35;;;;;;;;;;-1:-1:-1;5155:35:0;;;;-1:-1:-1;;;;;5155:35:0;;;;;;-1:-1:-1;;;;;806:32:1;;;788:51;;776:2;761:18;5155:35:0;616:229:1;9135:133:0;;;;;;;;;;-1:-1:-1;9135:133:0;;;;;:::i;:::-;;:::i;:::-;;;1471:14:1;;1464:22;1446:41;;1434:2;1419:18;9135:133:0;1306:187:1;15815:87:0;;;;;;;;;;-1:-1:-1;15884:10:0;;15815:87;;;1644:25:1;;;1632:2;1617:18;15815:87:0;1498:177:1;14904:903:0;;;;;;;;;;-1:-1:-1;14904:903:0;;;;;:::i;:::-;;:::i;:::-;;4288:32;;;;;;;;;;;;;;;;8239:83;;;;;;;;;;-1:-1:-1;8312:7:0;;8239:83;;5621:28;;;;;;;;;;-1:-1:-1;5621:28:0;;;;-1:-1:-1;;;5621:28:0;;;;;;9386:262;;;;;;;;;;-1:-1:-1;9386:262:0;;;;;:::i;:::-;;:::i;13341:340::-;;;;;;;;;;-1:-1:-1;13341:340:0;;;;;:::i;:::-;;:::i;8328:80::-;;;;;;;;;;-1:-1:-1;8396:9:0;;8328:80;;8396:9;;;;3046:36:1;;3034:2;3019:18;8328:80:0;2904:184:1;9656:211:0;;;;;;;;;;-1:-1:-1;9656:211:0;;;;;:::i;:::-;;:::i;11085:100::-;;;;;;;;;;-1:-1:-1;11085:100:0;;;;;:::i;:::-;-1:-1:-1;;;;;11162:15:0;11138:4;11162:15;;;:6;:15;;;;;;;;;11085:100;3334:40;;;;;;;;;;-1:-1:-1;3334:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5197:21;;;;;;;;;;-1:-1:-1;5197:21:0;;;;-1:-1:-1;;;;;5197:21:0;;;5656:41;;;;;;;;;;-1:-1:-1;5656:41:0;;;;-1:-1:-1;;;5656:41:0;;;;;;16248:247;;;;;;;;;;-1:-1:-1;16248:247:0;;;;;:::i;:::-;;:::i;2645:375::-;;;;;;;;;;-1:-1:-1;2645:375:0;;;;;:::i;:::-;;:::i;6876:36::-;;;;;;;;;;-1:-1:-1;6876:36:0;;;;;;;;;;;10954:123;;;;;;;;;;-1:-1:-1;10954:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;11042:27:0;11018:4;11042:27;;;:18;:27;;;;;;;;;10954:123;22598:593;;;;;;;;;;-1:-1:-1;22598:593:0;;;;;:::i;:::-;;:::i;14085:89::-;;;;;;;;;;-1:-1:-1;14085:89:0;;;;;:::i;:::-;;:::i;9274:104::-;;;;;;;;;;-1:-1:-1;9274:104:0;;;;;:::i;:::-;;:::i;5367:41::-;;;;;;;;;;;;5406:1;5367:41;;12036:667;;;;;;;;;;-1:-1:-1;12036:667:0;;;;;:::i;:::-;;:::i;11193:166::-;;;;;;;;;;-1:-1:-1;11193:166:0;;;;;:::i;:::-;;:::i;4202:31::-;;;;;;;;;;;;;;;;14764:132;;;;;;;;;;-1:-1:-1;14764:132:0;;;;;:::i;:::-;;:::i;7072:29::-;;;;;;;;;;;;;;;;8815:169;;;;;;;;;;-1:-1:-1;8815:169:0;;;;;:::i;:::-;;:::i;5307:53::-;;;;;;;;;;;;5353:6;5307:53;;3026:148;;;;;;;;;;;;;:::i;4510:33::-;;;;;;;;;;;;;;;;10611:207;;;;;;;;;;-1:-1:-1;10611:207:0;;;;;:::i;:::-;;:::i;4374:39::-;;;;;;;;;;;;;;;;10826:120;;;;;;;;;;-1:-1:-1;10826:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;10918:20:0;10894:4;10918:20;;;:11;:20;;;;;;;;;10826:120;8590:80;;;;;;;;;;-1:-1:-1;8642:7:0;2502:6;-1:-1:-1;;;;;2502:6:0;8590:80;;8414:84;;;;;;;;;;;;;:::i;11367:661::-;;;;;;;;;;-1:-1:-1;11367:661:0;;;;;:::i;:::-;;:::i;9875:221::-;;;;;;;;;;-1:-1:-1;9875:221:0;;;;;:::i;:::-;;:::i;8990:139::-;;;;;;;;;;-1:-1:-1;8990:139:0;;;;;:::i;:::-;;:::i;6919:28::-;;;;;;;;;;-1:-1:-1;6919:28:0;;;;;;;;;;;5949:86;;;;;;;;;;;;;;;;4329:36;;;;;;;;;;;;;;;;6285:89;;;;;;;;;;;;;;;;12711:622;;;;;;;;;;-1:-1:-1;12711:622:0;;;;;:::i;:::-;;:::i;14585:171::-;;;;;;;;;;-1:-1:-1;14585:171:0;;;;;:::i;:::-;;:::i;4242:37::-;;;;;;;;;;;;;;;;4463:38;;;;;;;;;;;;;;;;4422:32;;;;;;;;;;;;;;;;4112:35;;;;;;;;;;;;;;;;14182:395;;;;;;;;;;-1:-1:-1;14182:395:0;;;;;:::i;:::-;;:::i;28214:179::-;;;;;;;;;;;;;:::i;4156:37::-;;;;;;;;;;;;;;;;8676:133;;;;;;;;;;-1:-1:-1;8676:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;8778:19:0;;;8760:7;8778:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;8676:133;10104:499;;;;;;;;;;-1:-1:-1;10104:499:0;;;;;:::i;:::-;;:::i;28020:186::-;;;;;;;;;;-1:-1:-1;28020:186:0;;;;;:::i;:::-;;:::i;6620:87::-;;;;;;;;;;;;;;;;13689:289;;;;;;;;;;-1:-1:-1;13689:289:0;;;;;:::i;:::-;;:::i;8504:80::-;8552:13;8576:5;8569:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8504:80;:::o;9135:133::-;9210:4;9217:37;9226:10;9238:7;9247:6;9217:8;:37::i;:::-;-1:-1:-1;9262:4:0;9135:133;;;;:::o;14904:903::-;2562:6;;-1:-1:-1;;;;;2562:6:0;2572:10;2562:20;2554:65;;;;-1:-1:-1;;;2554:65:0;;;;;;;:::i;:::-;;;;;;;;;14998:15;::::1;;15009:4;14998:15:::0;14994:806:::1;;-1:-1:-1::0;;;;;15039:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;15038:21;15030:62;;;::::0;-1:-1:-1;;;15030:62:0;;6857:2:1;15030:62:0::1;::::0;::::1;6839:21:1::0;6896:2;6876:18;;;6869:30;6935;6915:18;;;6908:58;6983:18;;15030:62:0::1;6655:352:1::0;15030:62:0::1;-1:-1:-1::0;;;;;15110:16:0;::::1;15129:1;15110:16:::0;;;:7:::1;:16;::::0;;;;;:20;15107:113:::1;;-1:-1:-1::0;;;;;15187:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;15170:34:::1;::::0;:16:::1;:34::i;:::-;-1:-1:-1::0;;;;;15151:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:53;15107:113:::1;-1:-1:-1::0;;;;;;15234:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;15234:27:0::1;15257:4;15234:27:::0;;::::1;::::0;;;15276:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;15276:23:0::1;::::0;;::::1;::::0;;14904:903::o;14994:806::-:1;15321:16:::0;::::1;;15332:5;15321:16:::0;15317:483:::1;;-1:-1:-1::0;;;;;15362:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;15354:61;;;::::0;-1:-1:-1;;;15354:61:0;;7214:2:1;15354:61:0::1;::::0;::::1;7196:21:1::0;7253:2;7233:18;;;7226:30;7292;7272:18;;;7265:58;7340:18;;15354:61:0::1;7012:352:1::0;15354:61:0::1;15435:9;15430:359;15454:9;:16:::0;15450:20;::::1;15430:359;;;15516:7;-1:-1:-1::0;;;;;15500:23:0::1;:9;15510:1;15500:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;15500:12:0::1;:23:::0;15496:278:::1;;15563:9;15573:16:::0;;:20:::1;::::0;15592:1:::1;::::0;15573:20:::1;:::i;:::-;15563:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;15548:9:::1;:12:::0;;-1:-1:-1;;;;;15563:31:0;;::::1;::::0;15558:1;;15548:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;15548:46:0::1;-1:-1:-1::0;;;;;15548:46:0;;::::1;;::::0;;15617:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;15660:11:::1;:20:::0;;;;:28;;-1:-1:-1;;15660:28:0::1;::::0;;15711:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;15711:15:0;;;;;-1:-1:-1;;;;;;15711:15:0::1;::::0;;;;;15749:5:::1;;15496:278;15472:3:::0;::::1;::::0;::::1;:::i;:::-;;;;15430:359;;;;15317:483;14904:903:::0;;:::o;9386:262::-;9484:4;9501:36;9511:6;9519:9;9530:6;9501:9;:36::i;:::-;-1:-1:-1;;;;;;9577:19:0;;;;;;:11;:19;;;;;;;;9565:10;9577:31;;;;;;;;;9548:70;;9557:6;;9577:40;;9611:6;;9577:40;:::i;:::-;9548:8;:70::i;:::-;-1:-1:-1;9636:4:0;9386:262;;;;;:::o;13341:340::-;2562:6;;-1:-1:-1;;;;;2562:6:0;2572:10;2562:20;2554:65;;;;-1:-1:-1;;;2554:65:0;;;;;;;:::i;:::-;13431:13:::1;13469:7;13458;13448;;:17;;;;:::i;:::-;13447:29;;;;:::i;:::-;13431:45;;13515:4;13505:7;;:14;;;;:::i;:::-;13495:5;:25;;13487:88;;;::::0;-1:-1:-1;;;13487:88:0;;8632:2:1;13487:88:0::1;::::0;::::1;8614:21:1::0;8671:2;8651:18;;;8644:30;8710:34;8690:18;;;8683:62;-1:-1:-1;;;8761:18:1;;;8754:48;8819:19;;13487:88:0::1;8430:414:1::0;13487:88:0::1;13586:14;:22:::0;;;13638:14:::1;::::0;13666:7;;13638:24:::1;::::0;13655:7;;13638:24:::1;:::i;:::-;13637:36;;;;:::i;:::-;13619:15;:54:::0;-1:-1:-1;;;13341:340:0:o;9656:211::-;9770:10;9744:4;9791:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;9791:32:0;;;;;;;;;;9744:4;;9761:76;;9782:7;;9791:45;;9826:10;;9791:45;:::i;16248:247::-;16311:7;16350;;16339;:18;;16331:73;;;;-1:-1:-1;;;16331:73:0;;9184:2:1;16331:73:0;;;9166:21:1;9223:2;9203:18;;;9196:30;9262:34;9242:18;;;9235:62;-1:-1:-1;;;9313:18:1;;;9306:40;9363:19;;16331:73:0;8982:406:1;16331:73:0;16415:19;16438:10;:8;:10::i;:::-;16415:33;-1:-1:-1;16466:21:0;16415:33;16466:7;:21;:::i;:::-;16459:28;16248:247;-1:-1:-1;;;16248:247:0:o;2645:375::-;2562:6;;-1:-1:-1;;;;;2562:6:0;2572:10;2562:20;2554:65;;;;-1:-1:-1;;;2554:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2730:22:0;::::1;2722:96;;;;-1:-1:-1::0;;;2722:96:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;2837:27:0;::::1;::::0;2829:101:::1;;;;-1:-1:-1::0;;;2829:101:0::1;;;;;;;:::i;:::-;2941:6;:17:::0;;-1:-1:-1;;;;;;2941:17:0::1;-1:-1:-1::0;;;;;2941:17:0;::::1;::::0;;::::1;::::0;;2974:38:::1;::::0;2941:17;;;;2974:38:::1;::::0;2941:6;2974:38:::1;2645:375:::0;:::o;22598:593::-;2562:6;;-1:-1:-1;;;;;2562:6:0;2572:10;2562:20;2554:65;;;;-1:-1:-1;;;2554:65:0;;;;;;;:::i;:::-;22674:14:::1;::::0;::::1;;22673:15;22665:52;;;::::0;-1:-1:-1;;;22665:52:0;;10025:2:1;22665:52:0::1;::::0;::::1;10007:21:1::0;10064:2;10044:18;;;10037:30;10103:26;10083:18;;;10076:54;10147:18;;22665:52:0::1;9823:348:1::0;22665:52:0::1;22737:13;::::0;:18;:39;::::1;;;-1:-1:-1::0;22760:16:0::1;::::0;::::1;::::0;::::1;;;22759:17;22737:39;22728:49;;;::::0;::::1;;22788:22;::::0;::::1;:13;:22:::0;22821:42:::1;22851:4;22858;22821:21;:42::i;:::-;22874:36;22896:7;2475::::0;2502:6;-1:-1:-1;;;;;2502:6:0;;2437:79;22896:7:::1;22905:4;22874:21;:36::i;:::-;22921:40;5353:6;22956:4;22921:21;:40::i;:::-;22994:6;::::0;22972:35:::1;::::0;-1:-1:-1;;;;;22994:6:0::1;::::0;22972:21:::1;:35::i;:::-;23040:10;::::0;23018:39:::1;::::0;-1:-1:-1;;;;;23040:10:0::1;::::0;23018:21:::1;:39::i;:::-;23090:16;::::0;23068:45:::1;::::0;-1:-1:-1;;;;;23090:16:0::1;::::0;23068:21:::1;:45::i;:::-;-1:-1:-1::0;23139:12:0::1;23124;:27:::0;23162:14:::1;:21:::0;;-1:-1:-1;;23162:21:0::1;23179:4;23162:21;::::0;;22598:593::o;14085:89::-;2562:6;;-1:-1:-1;;;;;2562:6:0;2572:10;2562:20;2554:65;;;;-1:-1:-1;;;2554:65:0;;;;;;;:::i;:::-;14149:9:::1;:17:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;14149:17:0;;::::1;::::0;;;::::1;::::0;;14085:89::o;9274:104::-;9327:4;9341:35;9349:7;-1:-1:-1;;9341:7:0;:35::i;:::-;9334:42;9274:104;-1:-1:-1;;9274:104:0:o;12036:667::-;2562:6;;-1:-1:-1;;;;;2562:6:0;2572:10;2562:20;2554:65;;;;-1:-1:-1;;;2554:65:0;;;;;;;:::i;:::-;4647:4:::1;12196:12;:31;;:82;;;;;4593:4;12248:13;:30;;12196:82;:122;;;;;4695:4;12299:6;:19;;12196:122;:174;;;;;4749:4;12339:12;:31;;12196:174;:216;;;;;4798:4;12391:7;:21;;12196:216;12188:225;;;::::0;::::1;;12498:4;12487:7:::0;12472:12;12463:6;12432:28:::1;12447:13:::0;12432:12;:28:::1;:::i;:::-;:37;;;;:::i;:::-;:52;;;;:::i;:::-;:62;;;;:::i;:::-;:70;;12424:79;;;::::0;::::1;;12514:17;:32:::0;;;;12557:15:::1;:31:::0;;;;12599:11:::1;:20:::0;12630:17:::1;:32:::0;12673:12:::1;:22:::0;12036:667::o;11193:166::-;2562:6;;-1:-1:-1;;;;;2562:6:0;2572:10;2562:20;2554:65;;;;-1:-1:-1;;;2554:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11267:15:0;::::1;;::::0;;;:6:::1;:15;::::0;;;;;::::1;;11259:58;;;::::0;-1:-1:-1;;;11259:58:0;;10378:2:1;11259:58:0::1;::::0;::::1;10360:21:1::0;10417:2;10397:18;;;10390:30;10456:32;10436:18;;;10429:60;10506:18;;11259:58:0::1;10176:354:1::0;11259:58:0::1;-1:-1:-1::0;;;;;11328:15:0::1;11346:5;11328:15:::0;;;:6:::1;:15;::::0;;;;:23;;-1:-1:-1;;11328:23:0::1;::::0;;11193:166::o;14764:132::-;2562:6;;-1:-1:-1;;;;;2562:6:0;2572:10;2562:20;2554:65;;;;-1:-1:-1;;;2554:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14851:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:37;;-1:-1:-1;;14851:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14764:132::o;8815:169::-;-1:-1:-1;;;;;8895:20:0;;8881:7;8895:20;;;:11;:20;;;;;;;;8891:49;;;-1:-1:-1;;;;;;8924:16:0;;;;;:7;:16;;;;;;;8815:169::o;8891:49::-;-1:-1:-1;;;;;8965:16:0;;;;;;:7;:16;;;;;;8948:34;;:16;:34::i;3026:148::-;2562:6;;-1:-1:-1;;;;;2562:6:0;2572:10;2562:20;2554:65;;;;-1:-1:-1;;;2554:65:0;;;;;;;:::i;:::-;3108:1:::1;3091:19:::0;;-1:-1:-1;;;;;;3091:19:0::1;::::0;;3126:40:::1;::::0;3108:1;;3126:40:::1;::::0;3108:1;;3126:40:::1;3026:148::o:0;10611:207::-;2562:6;;-1:-1:-1;;;;;2562:6:0;2572:10;2562:20;2554:65;;;;-1:-1:-1;;;2554:65:0;;;;;;;:::i;:::-;10692:16;::::1;;10703:5;10692:16:::0;10688:123:::1;;-1:-1:-1::0;;;;;;10725:13:0::1;10741:5;10725:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;10725:21:0::1;::::0;;14904:903::o;10688:123::-:1;-1:-1:-1::0;;;;;10779:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;10779:20:0::1;10795:4;10779:20;::::0;;10611:207;;:::o;8660:7::-;8653:14;;8590:80;:::o;8414:84::-;8464:13;8488:7;8481:14;;;;;:::i;11367:661::-;2562:6;;-1:-1:-1;;;;;2562:6:0;2572:10;2562:20;2554:65;;;;-1:-1:-1;;;2554:65:0;;;;;;;:::i;:::-;4647:4:::1;11526:12;:31;;:82;;;;;4593:4;11578:13;:30;;11526:82;:122;;;;;4695:4;11629:6;:19;;11526:122;:174;;;;;4749:4;11669:12;:31;;11526:174;:216;;;;;4798:4;11721:7;:21;;11526:216;11518:225;;;::::0;::::1;;11828:4;11817:7:::0;11802:12;11793:6;11762:28:::1;11777:13:::0;11762:12;:28:::1;:::i;:::-;:37;;;;:::i;:::-;:52;;;;:::i;:::-;:62;;;;:::i;:::-;:70;;11754:79;;;::::0;::::1;;11844:16;:31:::0;;;;11886:14:::1;:30:::0;;;;11927:10:::1;:19:::0;11957:16:::1;:31:::0;11999:11:::1;:21:::0;11367:661::o;9875:221::-;9994:10;9968:4;10015:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;10015:32:0;;;;;;;;;;9968:4;;9985:81;;10006:7;;10015:50;;10050:15;;10015:50;:::i;8990:139::-;9068:4;9075:40;9085:10;9097:9;9108:6;9075:9;:40::i;12711:622::-;2562:6;;-1:-1:-1;;;;;2562:6:0;2572:10;2562:20;2554:65;;;;-1:-1:-1;;;2554:65:0;;;;;;;:::i;:::-;12892:10:::1;12878;12868:7;;:20;;;;:::i;:::-;12867:35;;;;:::i;:::-;12849:15;:53:::0;12933:14:::1;::::0;12964:10;;12933:27:::1;::::0;12950:10;;12933:27:::1;:::i;:::-;12932:42;;;;:::i;:::-;12913:16;:61:::0;13005:7:::1;::::0;13030:11;;13005:21:::1;::::0;13015:11;;13005:21:::1;:::i;:::-;13004:37;;;;:::i;:::-;12985:16;:56:::0;13073:14:::1;::::0;13105:11;;13073:28:::1;::::0;13090:11;;13073:28:::1;:::i;:::-;13072:44;;;;:::i;:::-;13052:17;:64:::0;13156:7:::1;::::0;:14:::1;::::0;13166:4:::1;::::0;13156:14:::1;:::i;:::-;13135:16;;:36;;:93;;;;;13223:4;13213:7;;:14;;;;:::i;:::-;13193:15;;:35;;13135:93;13127:198;;;::::0;-1:-1:-1;;;13127:198:0;;10737:2:1;13127:198:0::1;::::0;::::1;10719:21:1::0;10776:2;10756:18;;;10749:30;10815:34;10795:18;;;10788:62;10886:26;10866:18;;;10859:54;10930:19;;13127:198:0::1;10535:420:1::0;13127:198:0::1;12711:622:::0;;;;:::o;14585:171::-;2562:6;;-1:-1:-1;;;;;2562:6:0;2572:10;2562:20;2554:65;;;;-1:-1:-1;;;2554:65:0;;;;;;;:::i;:::-;14662:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;14662:32:0::1;-1:-1:-1::0;;;;14662:32:0;;::::1;;::::0;;14710:38:::1;::::0;::::1;::::0;::::1;::::0;14686:8;1471:14:1;1464:22;1446:41;;1434:2;1419:18;;1306:187;14710:38:0::1;;;;;;;;14585:171:::0;:::o;14182:395::-;2562:6;;-1:-1:-1;;;;;2562:6:0;2572:10;2562:20;2554:65;;;;-1:-1:-1;;;2554:65:0;;;;;;;:::i;:::-;14322:10:::1;::::0;-1:-1:-1;;;;;14306:26:0;;::::1;14322:10:::0;::::1;14306:26;::::0;::::1;::::0;:61:::1;;-1:-1:-1::0;;;;;;14336:31:0;::::1;14360:6;14336:31;;14306:61;14298:70;;;::::0;::::1;;14409:16;::::0;-1:-1:-1;;;;;14387:38:0;;::::1;14409:16:::0;::::1;14387:38;::::0;::::1;::::0;:79:::1;;-1:-1:-1::0;;;;;;14429:37:0;::::1;14459:6;14429:37;;14387:79;14379:88;;;::::0;::::1;;14478:10;:34:::0;;-1:-1:-1;;;;;14478:34:0;;::::1;-1:-1:-1::0;;;;;;14478:34:0;;::::1;;::::0;;;14523:16:::1;:46:::0;;;;;::::1;::::0;::::1;;::::0;;14182:395::o;28214:179::-;2562:6;;-1:-1:-1;;;;;2562:6:0;2572:10;2562:20;2554:65;;;;-1:-1:-1;;;2554:65:0;;;;;;;:::i;:::-;28345:40:::1;::::0;28277:21:::1;::::0;28263:11:::1;::::0;28353:10:::1;::::0;28277:21;;28263:11;28345:40;28263:11;28345:40;28277:21;28353:10;28345:40:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;28214:179:0:o;10104:499::-;2562:6;;-1:-1:-1;;;;;2562:6:0;2572:10;2562:20;2554:65;;;;-1:-1:-1;;;2554:65:0;;;;;;;:::i;:::-;10173:29:::1;10224:9;10173:61;;10245:16;10282:10;-1:-1:-1::0;;;;;10282:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10264:47:0::1;;10320:4;10327:10;-1:-1:-1::0;;;;;10327:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10264:81;::::0;-1:-1:-1;;;;;;10264:81:0::1;::::0;;;;;;-1:-1:-1;;;;;11656:15:1;;;10264:81:0::1;::::0;::::1;11638:34:1::0;11708:15;;11688:18;;;11681:43;11573:18;;10264:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10245:100:::0;-1:-1:-1;;;;;;10360:22:0;::::1;10356:207;;10426:10;-1:-1:-1::0;;;;;10426:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10408:50:0::1;;10467:4;10474:10;-1:-1:-1::0;;;;;10474:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10408:84;::::0;-1:-1:-1;;;;;;10408:84:0::1;::::0;;;;;;-1:-1:-1;;;;;11656:15:1;;;10408:84:0::1;::::0;::::1;11638:34:1::0;11708:15;;11688:18;;;11681:43;11573:18;;10408:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10399:6;:93:::0;;-1:-1:-1;;;;;;10399:93:0::1;-1:-1:-1::0;;;;;10399:93:0;;;::::1;::::0;;;::::1;::::0;;10356:207:::1;;;10534:6;:17:::0;;-1:-1:-1;;;;;;10534:17:0::1;-1:-1:-1::0;;;;;10534:17:0;::::1;;::::0;;10356:207:::1;-1:-1:-1::0;10573:9:0::1;:22:::0;;-1:-1:-1;;;;;;10573:22:0::1;-1:-1:-1::0;;;;;10573:22:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;10104:499:0:o;28020:186::-;2562:6;;-1:-1:-1;;;;;2562:6:0;2572:10;2562:20;2554:65;;;;-1:-1:-1;;;2554:65:0;;;;;;;:::i;:::-;28162:35:::1;::::0;-1:-1:-1;;;28162:35:0;;28191:4:::1;28162:35;::::0;::::1;788:51:1::0;28113:5:0;;-1:-1:-1;;;;;28130:19:0;::::1;::::0;::::1;::::0;28150:10:::1;::::0;28130:19;;28162:20:::1;::::0;761:18:1;;28162:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28130:68;::::0;-1:-1:-1;;;;;;28130:68:0::1;::::0;;;;;;-1:-1:-1;;;;;12116:32:1;;;28130:68:0::1;::::0;::::1;12098:51:1::0;12165:18;;;12158:34;12071:18;;28130:68:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13689:289::-:0;2562:6;;-1:-1:-1;;;;;2562:6:0;2572:10;2562:20;2554:65;;;;-1:-1:-1;;;2554:65:0;;;;;;;:::i;:::-;13889:16:::1;13869;13859:7;;:26;;;;:::i;:::-;13858:47;;;;:::i;:::-;13842:13;:63:::0;13930:7:::1;::::0;13957:13;;13930:23:::1;::::0;13940:13;;13930:23:::1;:::i;:::-;13929:41;;;;:::i;:::-;13916:10;:54:::0;-1:-1:-1;;;;13689:289:0:o;16507:339::-;-1:-1:-1;;;;;16601:20:0;;16593:69;;;;-1:-1:-1;;;16593:69:0;;12655:2:1;16593:69:0;;;12637:21:1;12694:2;12674:18;;;12667:30;12733:34;12713:18;;;12706:62;-1:-1:-1;;;12784:18:1;;;12777:34;12828:19;;16593:69:0;12453:400:1;16593:69:0;-1:-1:-1;;;;;16681:21:0;;16673:68;;;;-1:-1:-1;;;16673:68:0;;13060:2:1;16673:68:0;;;13042:21:1;13099:2;13079:18;;;13072:30;13138:34;13118:18;;;13111:62;-1:-1:-1;;;13189:18:1;;;13182:32;13231:19;;16673:68:0;12858:398:1;16673:68:0;-1:-1:-1;;;;;16752:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;16805:33;;1644:25:1;;;16805:33:0;;1617:18:1;16805:33:0;;;;;;;16507:339;;;:::o;17590:1590::-;17669:4;-1:-1:-1;;;;;17694:18:0;;17686:68;;;;-1:-1:-1;;;17686:68:0;;13463:2:1;17686:68:0;;;13445:21:1;13502:2;13482:18;;;13475:30;13541:34;13521:18;;;13514:62;-1:-1:-1;;;13592:18:1;;;13585:35;13637:19;;17686:68:0;13261:401:1;17686:68:0;-1:-1:-1;;;;;17773:16:0;;17765:64;;;;-1:-1:-1;;;17765:64:0;;13869:2:1;17765:64:0;;;13851:21:1;13908:2;13888:18;;;13881:30;13947:34;13927:18;;;13920:62;-1:-1:-1;;;13998:18:1;;;13991:33;14041:19;;17765:64:0;13667:399:1;17765:64:0;17857:1;17848:6;:10;17840:64;;;;-1:-1:-1;;;17840:64:0;;14273:2:1;17840:64:0;;;14255:21:1;14312:2;14292:18;;;14285:30;14351:34;14331:18;;;14324:62;-1:-1:-1;;;14402:18:1;;;14395:39;14451:19;;17840:64:0;14071:405:1;17840:64:0;17918:20;17929:4;17935:2;17918:10;:20::i;:::-;17915:588;;;17959:14;;;;17955:89;;17994:34;;-1:-1:-1;;;17994:34:0;;14683:2:1;17994:34:0;;;14665:21:1;14722:2;14702:18;;;14695:30;14761:26;14741:18;;;14734:54;14805:18;;17994:34:0;14481:348:1;17955:89:0;-1:-1:-1;;;;;18061:11:0;;;;;;:7;:11;;;;;;;;18058:249;;;18111:16;;18101:6;:26;;18093:79;;;;-1:-1:-1;;;18093:79:0;;;;;;;:::i;:::-;18058:249;;;18231:15;;18221:6;:25;;18213:78;;;;-1:-1:-1;;;18213:78:0;;;;;;;:::i;:::-;18330:14;;-1:-1:-1;;;;;18324:20:0;;;18330:14;;18324:20;;;;:36;;-1:-1:-1;;;;;;18349:11:0;;;;;;:7;:11;;;;;;;;18348:12;18324:36;18321:171;;;18415:14;;18405:6;18389:13;18399:2;18389:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;18381:95;;;;-1:-1:-1;;;18381:95:0;;15445:2:1;18381:95:0;;;15427:21:1;15484:2;15464:18;;;15457:30;15523:34;15503:18;;;15496:62;-1:-1:-1;;;15574:18:1;;;15567:40;15624:19;;18381:95:0;15243:406:1;18381:95:0;-1:-1:-1;;;;;18548:24:0;;18515:12;18548:24;;;:18;:24;;;;;;18530:4;;18548:24;;;:50;;-1:-1:-1;;;;;;18576:22:0;;;;;;:18;:22;;;;;;;;18548:50;18545:96;;;-1:-1:-1;18624:5:0;18545:96;-1:-1:-1;;;;;18657:11:0;;;;;;:7;:11;;;;;;;;18653:457;;;18690:16;;-1:-1:-1;;;18690:16:0;;;;18689:17;:59;;;;-1:-1:-1;18727:21:0;;-1:-1:-1;;;18727:21:0;;;;18689:59;18685:408;;;18783:28;18814:24;18832:4;18814:9;:24::i;:::-;18783:55;;18885:13;;18861:20;:37;18857:221;;18950:10;;18926:20;:34;18923:77;;-1:-1:-1;18987:10:0;;18923:77;19022:36;19037:20;19022:14;:36::i;:::-;18764:329;18685:408;19128:44;19146:4;19152:2;19156:6;19164:7;19128:17;:44::i;:::-;19121:51;17590:1590;-1:-1:-1;;;;;17590:1590:0:o;26329:160::-;26370:7;26391:15;26408;26427:19;:17;:19::i;:::-;26390:56;;-1:-1:-1;26390:56:0;-1:-1:-1;26464:17:0;26390:56;;26464:17;:::i;:::-;26457:24;;;;26329:160;:::o;15910:330::-;15978:4;2502:6;;-1:-1:-1;;;;;16002:15:0;;;2502:6;;16002:15;;;;:45;;-1:-1:-1;2475:7:0;2502:6;-1:-1:-1;;;;;16034:13:0;;;2502:6;;16034:13;;16002:45;:84;;;;-1:-1:-1;;;;;;16065:21:0;;;;;;:17;:21;;;;;;;;16064:22;16002:84;:125;;;;-1:-1:-1;;;;;;16104:23:0;;;;;;:17;:23;;;;;;;;16103:24;16002:125;:159;;;;-1:-1:-1;;;;;;16144:17:0;;5353:6;16144:17;;16002:159;:192;;;;-1:-1:-1;;;;;;16178:16:0;;;;16002:192;:230;;;;-1:-1:-1;;;;;;16211:21:0;;16227:4;16211:21;;15995:237;15910:330;-1:-1:-1;;;15910:330:0:o;19188:1495::-;7410:16;:23;;-1:-1:-1;;;;7410:23:0;-1:-1:-1;;;7410:23:0;;;19326:17:::1;::::0;19312:11:::1;::::0;19292:17:::1;::::0;7410:23;;19326:17;19292:31:::1;::::0;::::1;:::i;:::-;:51;;;;:::i;:::-;19273:70;;19358:8;19370:1;19358:13:::0;19354:39:::1;;19386:7;;;19354:39;19403:17;19469:8;19447:17;;19424:20;:40;;;;:::i;:::-;19423:55;;;;:::i;:::-;19403:75;;19489:13;19559:1;19546:8;19530:11;;19507:20;:34;;;;:::i;:::-;19506:49;;;;:::i;:::-;19505:55;;;;:::i;:::-;19489:71;;19571:19;19653:1;19640:8;19618:17;;19595:20;:40;;;;:::i;:::-;19594:55;;;;:::i;:::-;19593:61;;;;:::i;:::-;19669:9;::::0;19571:83;;-1:-1:-1;19669:9:0;;::::1;;;19665:80;;-1:-1:-1::0;19702:1:0::1;::::0;-1:-1:-1;19702:1:0;19665:80:::1;19755:14;19815:11:::0;19807:5;19772:32:::1;19795:9:::0;19772:20;:32:::1;:::i;:::-;:40;;;;:::i;:::-;:54;;;;:::i;:::-;19755:71:::0;-1:-1:-1;19837:12:0::1;19852:13;19864:1;19852:9:::0;:13:::1;:::i;:::-;19837:28:::0;-1:-1:-1;19876:17:0::1;19896:16;19837:28:::0;19896:9;:16:::1;:::i;:::-;19876:36:::0;-1:-1:-1;19948:21:0::1;19923:22;20003:13;20010:6:::0;20003:4;:13:::1;:::i;:::-;19980:36;;20027:30;20044:12;20027:16;:30::i;:::-;20070:16;20089:38;20113:14:::0;20089:21:::1;:38;:::i;:::-;20070:57:::0;-1:-1:-1;20138:24:0::1;20185:12:::0;20166:15:::1;20177:4:::0;20070:57;20166:15:::1;:::i;:::-;20165:32;;;;:::i;:::-;20138:59:::0;-1:-1:-1;20214:13:0;;20210:156:::1;;20244:41;20257:9;20268:16;20244:12;:41::i;:::-;20305:49;::::0;;15856:25:1;;;15912:2;15897:18;;15890:34;;;15940:18;;;15933:34;;;20305:49:0::1;::::0;15844:2:1;15829:18;20305:49:0::1;;;;;;;20210:156;20380:9:::0;;20376:91:::1;;20431:10;::::0;20406:49:::1;::::0;20424:4:::1;::::0;-1:-1:-1;;;;;20431:10:0::1;20443:11:::0;20406:9:::1;:49::i;:::-;;20376:91;20481:15:::0;;20477:103:::1;;20538:16;::::0;20513:55:::1;::::0;20531:4:::1;::::0;-1:-1:-1;;;;;20538:16:0::1;20556:11:::0;20513:9:::1;:55::i;:::-;;20477:103;20594:10:::0;;20590:86:::1;;20621:43;20636:27;20647:16:::0;20636:8;:27:::1;:::i;:::-;20621:14;:43::i;:::-;19262:1421;;;;;;;;;;;7444:1;-1:-1:-1::0;7456:16:0;:24;;-1:-1:-1;;;;7456:24:0;;;19188:1495::o;23427:1785::-;23554:16;;23528:4;;23554:16;;;;;23549:650;;23591:28;23610:4;23616:2;23591:18;:28::i;:::-;23643:16;;;;;;;23642:17;:41;;;;;23663:20;23674:4;23680:2;23663:10;:20::i;:::-;23638:137;;;23708:47;;-1:-1:-1;;;23708:47:0;;16180:2:1;23708:47:0;;;16162:21:1;16219:2;16199:18;;;16192:30;16258:34;16238:18;;;16231:62;-1:-1:-1;;;16309:18:1;;;16302:35;16354:19;;23708:47:0;15978:401:1;23638:137:0;23549:650;;;23834:1;23819:12;;:16;:55;;;;-1:-1:-1;;;;;;23861:13:0;;;;;;:7;:13;;;;;;;;23819:55;:101;;;;;23900:20;23911:4;23917:2;23900:10;:20::i;:::-;23815:369;;;23997:13;;23982:12;;23967:27;;:12;:27;:::i;:::-;:43;23963:202;;;-1:-1:-1;;;;;24039:10:0;;;;;;:6;:10;;;;;:17;;-1:-1:-1;;24039:17:0;24052:4;24039:17;;;24083:10;:13;;;;;;:::i;:::-;;;;-1:-1:-1;;24128:13:0;;-1:-1:-1;;;;;806:32:1;;788:51;;24128:13:0;;776:2:1;761:18;24128:13:0;;;;;;;23963:202;24219:21;24231:4;24237:2;24219:11;:21::i;:::-;24251:25;24279:28;24290:7;24299;24279:10;:28::i;:::-;24352:14;;;;-1:-1:-1;;;;;24336:13:0;;;;;;:7;:13;;;;;;24251:56;;-1:-1:-1;24336:30:0;;;:::i;:::-;-1:-1:-1;;;;;24320:13:0;;;;;;;:7;:13;;;;;;:46;;;;24405:22;;;;24391:11;;;;;;;;;;:36;;24405:22;24391:36;:::i;:::-;-1:-1:-1;;;;;24377:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;24444:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;24466:15:0;;;;;;:11;:15;;;;;;;;24465:16;24444:37;24440:416;;;-1:-1:-1;;;;;24514:13:0;;;;;;:7;:13;;;;;;:23;;24530:7;;24514:23;:::i;:::-;-1:-1:-1;;;;;24498:13:0;;;;;;:7;:13;;;;;:39;24440:416;;;-1:-1:-1;;;;;24560:17:0;;;;;;:11;:17;;;;;;;;24559:18;:37;;;;-1:-1:-1;;;;;;24581:15:0;;;;;;:11;:15;;;;;;;;24559:37;24555:301;;;24641:22;;-1:-1:-1;;;;;24627:11:0;;24641:22;24627:11;;;:7;:11;;;;;;:36;;24641:22;24627:36;:::i;:::-;-1:-1:-1;;;;;24613:11:0;;;;;;:7;:11;;;;;:50;24555:301;;;-1:-1:-1;;;;;24687:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;24708:15:0;;;;;;:11;:15;;;;;;;;24687:36;24683:173;;;-1:-1:-1;;;;;24756:13:0;;;;;;:7;:13;;;;;;:23;;24772:7;;24756:23;:::i;:::-;-1:-1:-1;;;;;24740:13:0;;;;;;;:7;:13;;;;;;:39;;;;24822:22;;24808:11;;;;;;;;;;:36;;24822:22;24808:36;:::i;:::-;-1:-1:-1;;;;;24794:11:0;;;;;;:7;:11;;;;;:50;24683:173;24870:17;;;;:21;24866:79;;24906:39;24921:4;24927:6;:17;;;24906:14;:39::i;:::-;24960:12;;;;:16;24956:64;;24991:29;25001:4;25007:6;:12;;;24991:9;:29::i;:::-;25049:1;25035:6;:11;;;:15;:34;;;;25068:1;25054:6;:11;;;:15;25035:34;25031:91;;;25084:38;25097:6;:11;;;25110:6;:11;;;25084:12;:38::i;:::-;25155:2;-1:-1:-1;;;;;25140:42:0;25149:4;-1:-1:-1;;;;;25140:42:0;;25159:6;:22;;;25140:42;;;;1644:25:1;;1632:2;1617:18;;1498:177;25140:42:0;;;;;;;;-1:-1:-1;25200:4:0;;23427:1785;-1:-1:-1;;;;;23427:1785:0:o;26497:546::-;26594:7;;26630;;26547;;;;;26648:283;26672:9;:16;26668:20;;26648:283;;;26738:7;26714;:21;26722:9;26732:1;26722:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26722:12:0;26714:21;;;;;;;;;;;;;:31;;:66;;;26773:7;26749;:21;26757:9;26767:1;26757:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26757:12:0;26749:21;;;;;;;;;;;;;:31;26714:66;26710:97;;;26790:7;;26799;;26782:25;;;;;;;26497:546;;:::o;26710:97::-;26842:7;:21;26850:9;26860:1;26850:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26850:12:0;26842:21;;;;;;;;;;;;;26832:31;;:7;:31;:::i;:::-;26822:41;;26898:7;:21;26906:9;26916:1;26906:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26906:12:0;26898:21;;;;;;;;;;;;;26888:31;;:7;:31;:::i;:::-;26878:41;-1:-1:-1;26690:3:0;;;;:::i;:::-;;;;26648:283;;;;26965:7;;26955;;:17;;;;:::i;:::-;26945:7;:27;26941:58;;;26982:7;;26991;;26974:25;;;;;;26497:546;;:::o;26941:58::-;27018:7;;27027;;-1:-1:-1;26497:546:0;-1:-1:-1;26497:546:0:o;21134:454::-;21225:16;;;21239:1;21225:16;;;;;;;;21201:21;;21225:16;;;;;;;;;;-1:-1:-1;21225:16:0;21201:40;;21270:4;21252;21257:1;21252:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21252:23:0;;;:7;;;;;;;;;;:23;;;;21296:9;;:16;;;-1:-1:-1;;;21296:16:0;;;;:9;;;;;:14;;:16;;;;;21252:7;;21296:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21286:4;21291:1;21286:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21286:26:0;;;:7;;;;;;;;;:26;21355:9;;21323:56;;21340:4;;21355:9;21367:11;21323:8;:56::i;:::-;21390:9;;:190;;-1:-1:-1;;;21390:190:0;;-1:-1:-1;;;;;21390:9:0;;;;:60;;:190;;21465:11;;21390:9;;21507:4;;21534;;21554:15;;21390:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21190:398;21134:454;:::o;21596:355::-;21709:9;;21677:56;;21694:4;;-1:-1:-1;;;;;21709:9:0;21721:11;21677:8;:56::i;:::-;21744:9;;:199;;-1:-1:-1;;;21744:199:0;;21810:4;21744:199;;;17842:34:1;;;17892:18;;;17885:34;;;21744:9:0;17935:18:1;;;17928:34;;;17978:18;;;17971:34;18021:19;;;18014:44;21917:15:0;18074:19:1;;;18067:35;-1:-1:-1;;;;;21744:9:0;;;;:25;;21777:9;;17776:19:1;;21744:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20691:435::-;20748:13;20801:17;;20787:11;;:31;;;;:::i;:::-;20771:11;;20765:17;;:3;:17;:::i;:::-;20764:55;;;;:::i;:::-;20748:71;-1:-1:-1;20830:19:0;20852:11;20748:71;20852:3;:11;:::i;:::-;20830:33;-1:-1:-1;20874:12:0;20901:9;;20897:97;;20948:10;;20940:42;;-1:-1:-1;;;;;20948:10:0;;;;20972:5;;20940:42;;;;20972:5;20948:10;20940:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20927:55:0;;-1:-1:-1;;20897:97:0;21008:15;;21004:115;;21061:16;;21053:54;;-1:-1:-1;;;;;21061:16:0;;;;21091:11;;21053:54;;;;21091:11;21061:16;21053:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;20691:435:0:o;21959:631::-;22041:16;;;;;;;22040:17;22032:65;;;;-1:-1:-1;;;22032:65:0;;18626:2:1;22032:65:0;;;18608:21:1;18665:2;18645:18;;;18638:30;18704:34;18684:18;;;18677:62;-1:-1:-1;;;18755:18:1;;;18748:33;18798:19;;22032:65:0;18424:399:1;22032:65:0;22113:20;22124:4;22130:2;22113:10;:20::i;:::-;22112:21;:37;;;;-1:-1:-1;22143:6:0;;-1:-1:-1;;;;;22137:12:0;;;22143:6;;22137:12;22112:37;22108:475;;;22170:13;;:18;;:39;;;22208:1;22192:13;;:17;22170:39;22166:179;;;22245:16;:12;22260:1;22245:16;:::i;:::-;22230:12;:31;22166:179;;;22317:12;22302;:27;22166:179;-1:-1:-1;;;;;22361:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;22361:30:0;22387:4;22361:30;;;;;;22406:16;:23;;-1:-1:-1;;22406:23:0;22361:30;22406:23;;;22459:15;22444:12;:30;22489:21;:28;;-1:-1:-1;;;;22489:28:0;-1:-1:-1;;;22489:28:0;;;22537:34;;;;;;1471:14:1;;1464:22;1446:41;;1434:2;1419:18;;1306:187;22537:34:0;;;;;;;;21959:631;;:::o;16854:728::-;-1:-1:-1;;;;;16925:13:0;;;;;;:7;:13;;;;;;;;16921:654;;;16969:14;;16955:11;:28;17014:16;;16998:13;:32;17055:10;;17045:7;:20;17096:16;;17080:13;:32;17138:11;;17127:8;:22;14904:903;;:::o;16921:654::-;-1:-1:-1;;;;;17171:11:0;;;;;;:7;:11;;;;;;;;17167:408;;;17213:15;;17199:11;:29;17259:17;;17243:13;:33;17301:11;;17291:7;:21;17343:17;;17327:13;:33;17386:12;;17375:8;:23;14904:903;;:::o;17167:408::-;17445:1;17431:11;:15;;;17461:13;:17;;;17493:7;:11;;;17519:13;:17;;;17551:8;:12;16854:728;;:::o;25330:991::-;25403:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25403:18:0;25434:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25434:25:0;25470:19;25492:10;:8;:10::i;:::-;25470:32;-1:-1:-1;25532:21:0;25470:32;25532:7;:21;:::i;:::-;25515:14;;;:38;25566:591;;;;4853:5;25618:11;;25608:7;:21;;;;:::i;:::-;25607:42;;;;:::i;:::-;25593:11;;;:56;4853:5;25696:11;:9;:11::i;:::-;25685:23;;:7;:23;:::i;:::-;25684:44;;;;:::i;:::-;25664:17;;;:64;25769:8;;4853:5;;25759:18;;:7;:18;:::i;:::-;25758:39;;;;:::i;:::-;25743:12;;;:54;;;25862:17;;;;25848:11;;;;:31;;25862:17;25848:31;:::i;:::-;:46;;;;:::i;:::-;25837:58;;:7;:58;:::i;:::-;25812:83;;25926:11;;;;:25;;25940:11;;25926:25;:::i;:::-;25912:11;;;:39;25566:591;;;25998:1;25984:11;;;:15;;;26014:17;;;:21;;;26050:12;;;:16;;;26081:32;;;26130:11;;;:15;25566:591;26276:11;26261:6;:12;;;:26;;;;:::i;:::-;26245:11;26225:6;:17;;;:31;;;;:::i;:::-;26210:6;:11;;;:47;;;;:::i;:::-;:78;;;;:::i;:::-;26192:6;:14;;;:97;;;;:::i;:::-;26167:22;;;:122;-1:-1:-1;26167:22:0;25330:991;-1:-1:-1;;;25330:991:0:o;27209:421::-;27288:19;27311:10;:8;:10::i;:::-;27288:33;-1:-1:-1;27332:18:0;27353:24;27288:33;27353:10;:24;:::i;:::-;27429:4;27413:22;;;;:7;:22;;;;;;27332:45;;-1:-1:-1;27413:35:0;;27332:45;;27413:35;:::i;:::-;27404:4;27388:22;;;;:7;:22;;;;;;;;:60;;;;27462:11;:26;;;;;;27459:104;;;27544:4;27528:22;;;;:7;:22;;;;;;:35;;27553:10;;27528:35;:::i;:::-;27519:4;27503:22;;;;:7;:22;;;;;:60;27459:104;27579:43;;1644:25:1;;;27604:4:0;;-1:-1:-1;;;;;27579:43:0;;;;;1632:2:1;1617:18;27579:43:0;;;;;;;;27277:353;;27209:421;;:::o;27638:374::-;27707:19;27730:10;:8;:10::i;:::-;27707:33;-1:-1:-1;27751:13:0;27767:19;27707:33;27767:5;:19;:::i;:::-;5353:6;27820:20;;:7;:20;;;;27751:35;;-1:-1:-1;27820:28:0;;27751:35;;27820:28;:::i;:::-;5353:6;27797:20;;;:51;27862:11;27797:20;27862:24;;;;;27859:93;;;5353:6;27924:20;;:7;:20;;;;:28;;27947:5;;27924:28;:::i;:::-;5353:6;27901:20;;:7;:20;;;:51;27859:93;27968:36;;1644:25:1;;;5353:6:0;;-1:-1:-1;;;;;27968:36:0;;;;;1632:2:1;1617:18;27968:36:0;1498:177:1;27055:142:0;27144:4;27134:7;;:14;;;;:::i;:::-;27124:7;:24;27172:10;;:17;;27185:4;;27172:17;:::i;:::-;27159:10;:30;-1:-1:-1;;27055:142:0:o;25220:102::-;25264:7;25307;;25291:13;;:23;;;;:::i;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;850:131::-;-1:-1:-1;;;;;925:31:1;;915:42;;905:70;;971:1;968;961:12;905:70;850:131;:::o;986:315::-;1054:6;1062;1115:2;1103:9;1094:7;1090:23;1086:32;1083:52;;;1131:1;1128;1121:12;1083:52;1170:9;1157:23;1189:31;1214:5;1189:31;:::i;:::-;1239:5;1291:2;1276:18;;;;1263:32;;-1:-1:-1;;;986:315:1:o;1680:118::-;1766:5;1759:13;1752:21;1745:5;1742:32;1732:60;;1788:1;1785;1778:12;1803:382;1868:6;1876;1929:2;1917:9;1908:7;1904:23;1900:32;1897:52;;;1945:1;1942;1935:12;1897:52;1984:9;1971:23;2003:31;2028:5;2003:31;:::i;:::-;2053:5;-1:-1:-1;2110:2:1;2095:18;;2082:32;2123:30;2082:32;2123:30;:::i;:::-;2172:7;2162:17;;;1803:382;;;;;:::o;2190:456::-;2267:6;2275;2283;2336:2;2324:9;2315:7;2311:23;2307:32;2304:52;;;2352:1;2349;2342:12;2304:52;2391:9;2378:23;2410:31;2435:5;2410:31;:::i;:::-;2460:5;-1:-1:-1;2517:2:1;2502:18;;2489:32;2530:33;2489:32;2530:33;:::i;:::-;2190:456;;2582:7;;-1:-1:-1;;;2636:2:1;2621:18;;;;2608:32;;2190:456::o;2651:248::-;2719:6;2727;2780:2;2768:9;2759:7;2755:23;2751:32;2748:52;;;2796:1;2793;2786:12;2748:52;-1:-1:-1;;2819:23:1;;;2889:2;2874:18;;;2861:32;;-1:-1:-1;2651:248:1:o;3093:247::-;3152:6;3205:2;3193:9;3184:7;3180:23;3176:32;3173:52;;;3221:1;3218;3211:12;3173:52;3260:9;3247:23;3279:31;3304:5;3279:31;:::i;3553:180::-;3612:6;3665:2;3653:9;3644:7;3640:23;3636:32;3633:52;;;3681:1;3678;3671:12;3633:52;-1:-1:-1;3704:23:1;;3553:180;-1:-1:-1;3553:180:1:o;3738:269::-;3795:6;3848:2;3836:9;3827:7;3823:23;3819:32;3816:52;;;3864:1;3861;3854:12;3816:52;3903:9;3890:23;3953:4;3946:5;3942:16;3935:5;3932:27;3922:55;;3973:1;3970;3963:12;4012:241;4068:6;4121:2;4109:9;4100:7;4096:23;4092:32;4089:52;;;4137:1;4134;4127:12;4089:52;4176:9;4163:23;4195:28;4217:5;4195:28;:::i;4258:454::-;4353:6;4361;4369;4377;4385;4438:3;4426:9;4417:7;4413:23;4409:33;4406:53;;;4455:1;4452;4445:12;4406:53;-1:-1:-1;;4478:23:1;;;4548:2;4533:18;;4520:32;;-1:-1:-1;4599:2:1;4584:18;;4571:32;;4650:2;4635:18;;4622:32;;-1:-1:-1;4701:3:1;4686:19;4673:33;;-1:-1:-1;4258:454:1;-1:-1:-1;4258:454:1:o;4717:385::-;4803:6;4811;4819;4827;4880:3;4868:9;4859:7;4855:23;4851:33;4848:53;;;4897:1;4894;4887:12;4848:53;-1:-1:-1;;4920:23:1;;;4990:2;4975:18;;4962:32;;-1:-1:-1;5041:2:1;5026:18;;5013:32;;5092:2;5077:18;5064:32;;-1:-1:-1;4717:385:1;-1:-1:-1;4717:385:1:o;5107:404::-;5191:6;5199;5252:2;5240:9;5231:7;5227:23;5223:32;5220:52;;;5268:1;5265;5258:12;5220:52;5307:9;5294:23;5326:31;5351:5;5326:31;:::i;:::-;5376:5;-1:-1:-1;5433:2:1;5418:18;;5405:32;5446:33;5405:32;5446:33;:::i;5909:380::-;5988:1;5984:12;;;;6031;;;6052:61;;6106:4;6098:6;6094:17;6084:27;;6052:61;6159:2;6151:6;6148:14;6128:18;6125:38;6122:161;;6205:10;6200:3;6196:20;6193:1;6186:31;6240:4;6237:1;6230:15;6268:4;6265:1;6258:15;6122:161;;5909:380;;;:::o;6294:356::-;6496:2;6478:21;;;6515:18;;;6508:30;6574:34;6569:2;6554:18;;6547:62;6641:2;6626:18;;6294:356::o;7369:127::-;7430:10;7425:3;7421:20;7418:1;7411:31;7461:4;7458:1;7451:15;7485:4;7482:1;7475:15;7501:127;7562:10;7557:3;7553:20;7550:1;7543:31;7593:4;7590:1;7583:15;7617:4;7614:1;7607:15;7633:125;7673:4;7701:1;7698;7695:8;7692:34;;;7706:18;;:::i;:::-;-1:-1:-1;7743:9:1;;7633:125::o;7763:127::-;7824:10;7819:3;7815:20;7812:1;7805:31;7855:4;7852:1;7845:15;7879:4;7876:1;7869:15;7895:135;7934:3;7955:17;;;7952:43;;7975:18;;:::i;:::-;-1:-1:-1;8022:1:1;8011:13;;7895:135::o;8035:168::-;8075:7;8141:1;8137;8133:6;8129:14;8126:1;8123:21;8118:1;8111:9;8104:17;8100:45;8097:71;;;8148:18;;:::i;:::-;-1:-1:-1;8188:9:1;;8035:168::o;8208:217::-;8248:1;8274;8264:132;;8318:10;8313:3;8309:20;8306:1;8299:31;8353:4;8350:1;8343:15;8381:4;8378:1;8371:15;8264:132;-1:-1:-1;8410:9:1;;8208:217::o;8849:128::-;8889:3;8920:1;8916:6;8913:1;8910:13;8907:39;;;8926:18;;:::i;:::-;-1:-1:-1;8962:9:1;;8849:128::o;9393:425::-;9595:2;9577:21;;;9634:2;9614:18;;;9607:30;9673:34;9668:2;9653:18;;9646:62;9744:31;9739:2;9724:18;;9717:59;9808:3;9793:19;;9393:425::o;11170:251::-;11240:6;11293:2;11281:9;11272:7;11268:23;11264:32;11261:52;;;11309:1;11306;11299:12;11261:52;11341:9;11335:16;11360:31;11385:5;11360:31;:::i;11735:184::-;11805:6;11858:2;11846:9;11837:7;11833:23;11829:32;11826:52;;;11874:1;11871;11864:12;11826:52;-1:-1:-1;11897:16:1;;11735:184;-1:-1:-1;11735:184:1:o;12203:245::-;12270:6;12323:2;12311:9;12302:7;12298:23;12294:32;12291:52;;;12339:1;12336;12329:12;12291:52;12371:9;12365:16;12390:28;12412:5;12390:28;:::i;14834:404::-;15036:2;15018:21;;;15075:2;15055:18;;;15048:30;15114:34;15109:2;15094:18;;15087:62;-1:-1:-1;;;15180:2:1;15165:18;;15158:38;15228:3;15213:19;;14834:404::o;16516:980::-;16778:4;16826:3;16815:9;16811:19;16857:6;16846:9;16839:25;16883:2;16921:6;16916:2;16905:9;16901:18;16894:34;16964:3;16959:2;16948:9;16944:18;16937:31;16988:6;17023;17017:13;17054:6;17046;17039:22;17092:3;17081:9;17077:19;17070:26;;17131:2;17123:6;17119:15;17105:29;;17152:1;17162:195;17176:6;17173:1;17170:13;17162:195;;;17241:13;;-1:-1:-1;;;;;17237:39:1;17225:52;;17332:15;;;;17297:12;;;;17273:1;17191:9;17162:195;;;-1:-1:-1;;;;;;;17413:32:1;;;;17408:2;17393:18;;17386:60;-1:-1:-1;;;17477:3:1;17462:19;17455:35;17374:3;16516:980;-1:-1:-1;;;16516:980:1:o;18113:306::-;18201:6;18209;18217;18270:2;18258:9;18249:7;18245:23;18241:32;18238:52;;;18286:1;18283;18276:12;18238:52;18315:9;18309:16;18299:26;;18365:2;18354:9;18350:18;18344:25;18334:35;;18409:2;18398:9;18394:18;18388:25;18378:35;;18113:306;;;;;:::o

Swarm Source

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