ETH Price: $3,383.83 (-1.84%)
Gas: 4 Gwei

Token

Ressa Panda (RESSA)
 

Overview

Max Total Supply

50,000,000,000 RESSA

Holders

193

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
110,903,992.135635812837755031 RESSA

Value
$0.00
0x408640ef04b35b70de90b9116582f74d3bd7a7d6
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:
RessaEthV2

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;
abstract contract Context {
    function _msgSender() internal view returns (address payable) {
        return payable(msg.sender);
    }
    function _msgData() internal view returns (bytes memory) {
        this; 
        return msg.data; 
    }
}

interface IERC20Upgradeable {

    function totalSupply() external view returns (uint256);
    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);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }


    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

interface 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 removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract RessaEthV2 is Context, IERC20Upgradeable {
    address private _owner; // address of the contract owner.
    mapping (address => uint256) private _rOd; 
    mapping (address => uint256) private _tOd; 
    mapping (address => bool) lpPs;
    uint256 private tSLP = 0; 
    mapping (address => mapping (address => uint256)) private _als; 
    mapping (address => uint256) private _BA; 
    mapping (address => bool) private _iEFF; 
    mapping (address => bool) private _iE;
    mapping (address => bool) private _AD; 
    address[] private _excluded;
    mapping (address => bool) private _lH;
    uint256 private sS; 
    string private _nm; 
    string private _s; 
    uint256 public _reF = 100; uint256 public _liF = 300; uint256 public _maF = 400; 
    uint256 public _bReF = _reF; uint256 public _bLiF = _liF; uint256 public _bMaF = _maF;
    uint256 public _sLiF = 300; uint256 public _sReF = 100; uint256 public _sMaF = 400; 
    uint256 public _tReF = 0; uint256 public _tLiF = 0; uint256 public _tMaF = 0; 
    uint256 private maxReF = 1000; uint256 private maxLiF = 1000; uint256 private maxMaF = 2200; 
    uint256 public _liquidityRatio = 200;
    uint256 public _mR = 400;
    uint256 private masterTaxDivisor = 10000;
    uint256 private MaS = 30;
    uint256 private DeS = 10;
    uint256 private VaD = 40;
    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
    uint256 private _decimalsMul;
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter; 
    address public lpPair; 
    address public _routerAddress; 
    address public DEAD = 0x000000000000000000000000000000000000dEaD; 
    address public ZERO = 0x0000000000000000000000000000000000000000; 
    address payable private _dW; 
    address payable private _marketWallet; 
    bool inSwapAndLiquify; 
    bool public swapAndLiquifyEnabled = false; 
    uint256 private _mTA; 
    uint256 public mTAUI; 
    uint256 private _mWS;
    uint256 public mWSUI; 
    uint256 private swapThreshold;
    uint256 private swapAmount;
    bool go = false;
    bool public _LiqHasBeenAdded = false;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    bool private sameBlockActive = true;
    mapping (address => uint256) private lastTrade;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    uint256 Planted;
    
    bool rft = false;
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    constructor () payable {

        _owner = msg.sender;

        if (block.chainid == 56) {
            _routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            _routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert();
        }

        _iEFF[owner()] = true;
        _iEFF[address(this)] = true;
        _lH[owner()] = true;

        _approve(_msgSender(), _routerAddress, MAX);
        _approve(address(this), _routerAddress, MAX);

    }

    receive() external payable {}

    function _RFT(address payable setMarketWallet, address payable setDW, string memory _tokenname, string memory _tokensymbol) external onlyOwner {
        require(!rft);

        _marketWallet = payable(setMarketWallet);
        _dW = payable(setDW);

        _iEFF[_marketWallet] = true;
        _iEFF[_dW] = true;

        _nm = _tokenname;
        _s = _tokensymbol;
        sS = 50_000_000_000;
        if (sS < 100000000000) {
            _decimals = 18;
            _decimalsMul = _decimals;
        } else {
            _decimals = 9;
            _decimalsMul = _decimals;
        }
        _tTotal = sS * (10**_decimalsMul);
        _rTotal = (MAX - (MAX % _tTotal));

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPs[lpPair] = true;
        _als[address(this)][address(dexRouter)] = type(uint256).max;
        
        _mTA = (_tTotal * 1000) / 100000;
        mTAUI = (sS * 500) / 100000;
        _mWS = (_tTotal * 10) / 1000;
        mWSUI = (sS * 10) / 1000;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 5) / 1000;

        approve(_routerAddress, type(uint256).max);

        rft = true;
        _rOd[owner()] = _rTotal;
        emit Transfer(ZERO, owner(), _tTotal);

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

    }

    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFee(_owner, false);
        setExcludedFromFee(newOwner, true);
        setExcludedFromReward(newOwner, true);
        
        if (_dW == payable(_owner))
            _dW = payable(newOwner);
        
        _als[_owner][newOwner] = balanceOf(_owner);
        if(balanceOf(_owner) > 0) {
            _t(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner() {
        setExcludedFromFee(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }

    function totalSupply() external view override returns (uint256) { return _tTotal; } 
    function decimals() external view returns (uint8) { return _decimals; }
    function symbol() external view returns (string memory) { return _s; } 
    function name() external view returns (string memory) { return _nm; }
    function getOwner() external view returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _als[holder][spender]; }

    function balanceOf(address account) public view override returns (uint256) {
        if (_iE[account]) return _tOd[account];
        return tokenFromReflection(_rOd[account]);
    }

    function BurnedAmount(address account) public view returns (uint256) {
        return (_BA[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _t(_msgSender(), recipient, amount);
        return true;
    }

    function CommunityBurn( uint256 amount) public returns (bool) {
        uint256 amountFB = amount * (10**_decimalsMul);
        uint256 PreviousBA = _BA[_msgSender()];
        _BA[_msgSender()] = PreviousBA + amount;
        _tB(_msgSender(), amountFB);
        return true;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), 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) {
        _t(sender, recipient, amount);
        _approve(sender, _msgSender(), _als[sender][_msgSender()] - amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _als[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _als[_msgSender()][spender] - subtractedValue);
        return true;
    }

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

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPs[pair] = false;
        } else {
            if (tSLP != 0) {
                require(block.timestamp - tSLP > 1 weeks, "Cannot set a new pair this week!");
            }
            lpPs[pair] = true;
            tSLP = block.timestamp;
        }
    }

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

    function iEFF(address account) public view returns(bool) {
        return _iEFF[account];
    }

    function setTB(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReF
                && liquidity <= maxLiF
                && marketing <= maxMaF
                );
        require(reflect + liquidity + marketing <= 4900);
        _bReF = reflect;
        _bLiF = liquidity;
        _bMaF = marketing;
    }

    function setTS(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReF
                && liquidity <= maxLiF
                && marketing <= maxMaF
                );
        require(reflect + liquidity + marketing <= 4900);
        _sReF = reflect;
        _sLiF = liquidity;
        _sMaF = marketing;
    }

    function setTT(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReF
                && liquidity <= maxLiF
                && marketing <= maxMaF
                );
        require(reflect + liquidity + marketing <= 4900);
        _tReF = reflect;
        _tLiF = liquidity;
        _tMaF = marketing;
    }

    function setValues(uint256 ms, uint256 ds, uint256 vd) external onlyOwner {
        MaS = ms;
        DeS = ds;
        VaD = vd;
    }

    function setRatios(uint256 liquidity, uint256 marketing) external onlyOwner {
        _liquidityRatio = liquidity;
        _mR = marketing;
    }

    function setMTP(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Must be above 0.1% of total supply.");
        _mTA = check;
        mTAUI = (sS * percent) / divisor;
    }

    function setMWS(uint256 p, uint256 d) external onlyOwner {
        uint256 check = (_tTotal * p) / d; 
        require(check >= (_tTotal / 1000), "Must be above 0.1% of total supply.");
        _mWS = check;
        mWSUI = (sS * p) / d;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    function setNewMarketWallet(address payable newWallet) external onlyOwner {
        require(_marketWallet != newWallet, "Wallet already set!");
        _marketWallet = payable(newWallet);
    }

    function setNewDW(address payable newWallet) external onlyOwner {
        require(_dW != newWallet, "Wallet already set!");
        _dW = payable(newWallet);
    }
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

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

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

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

    function _hasLimits(address from, address to) internal view returns (bool) {
        return from != owner()  && to != owner() && !_lH[to] && !_lH[from] && to != DEAD && to != address(0) && from != address(this) && !_iEFF[to] && !_iEFF[from];
    }

    function tokenFromReflection(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) internal {
        require(sender != address(0), "Cannot approve from the zero address");
        require(spender != address(0), "Cannot approve to the zero address");

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

    function _t(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "Cannot transfer from the zero address");
        require(to != address(0), "Cannot transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(_hasLimits(from, to)) {
            if(!go) {
                revert("Trading not yet enabled!");
            }
            if (sameBlockActive) {
                if (lpPs[from]){
                    require(lastTrade[to] != block.number + 1);
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number + 1);
                    lastTrade[from] = block.number;
                }
            }
            require(amount <= _mTA, "Transfer exceeds the maxTxAmount.");
            if(to != _routerAddress && !lpPs[to]) {
                require(balanceOf(to) + amount <= _mWS, "Transfer exceeds the maxWalletSize.");
            }
        }
        bool takeFee = true;
        if(_iEFF[from] || _iEFF[to]){
            takeFee = false;
        }

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

    function _tB(address from, uint256 amount) internal returns (bool) {
        address to = address(0);
        require(from != address(0), "Cannot transfer from the zero address");
        require(amount > 0, "Burn amount must be greater than zero");
        if(_hasLimits(from, to)) {
            if(!go) {
                revert("Trading not yet enabled!");
            }
        }
        bool takeFee = true;
        if(_iEFF[from] || _iEFF[to]){
            takeFee = false;
        }
 
         _tTotal = _tTotal - (amount);
        return _ftt(from, to, amount, takeFee);

    }

    function swapAndLiquify(uint256 contractTokenBalance) internal lockTheSwap {
        if (_liquidityRatio + _mR == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _mR)) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            toSwapForEth,
            0,
            path,
            address(this),
            block.timestamp
        );


        uint256 liquidityBalance = ((address(this).balance * _liquidityRatio) / (_liquidityRatio + _mR)) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, 
                0, 
                _dW,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {

            uint256 OperationsFee = (address(this).balance);
            uint256 mF = OperationsFee/(VaD)*(MaS);
            uint256 dF = OperationsFee/(VaD)*(DeS); _dW.transfer(dF); 
            _marketWallet.transfer(mF);           

        }
    }

    

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_LiqHasBeenAdded, "Liquidity is already added.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _lH[from] = true;
            _LiqHasBeenAdded = true;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    function Relaunch() public onlyOwner {
        require(!go, "Trading is already enabled!");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);

        go = true;
        swapAndLiquifyEnabled = true;
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _ftt(address from, address to, uint256 tAmount, bool takeFee) internal returns (bool) {


        if (!_LiqHasBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_LiqHasBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
        }
        
        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

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

        if (_iE[from] && !_iE[to]) {
            _tOd[from] = _tOd[from] - tAmount;
        } else if (!_iE[from] && _iE[to]) {
            _tOd[to] = _tOd[to] + values.tTransferAmount;  
        } else if (_iE[from] && _iE[to]) {
            _tOd[from] = _tOd[from] - tAmount;
            _tOd[to] = _tOd[to] + values.tTransferAmount;
        }

        if (values.tLiquidity > 0)
            _takeLiquidity(from, values.tLiquidity);
        if (values.rFee > 0 || values.tFee > 0)
            _takeReflect(values.rFee, values.tFee);

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

    function Update(string memory _tn, string memory _ts) public {
        require (_msgSender() == _dW, "Only DAO Can Update the Token");    
        _nm = _tn;
        _s = _ts;
    }

    function _getValues(address from, address to, uint256 tAmount, bool takeFee) internal returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

        if(takeFee) {
            if (lpPs[to]) {
                _reF = _sReF;
                _liF = _sLiF;
                _maF = _sMaF;
            } else if (lpPs[from]) {
                _reF = _bReF;
                _liF = _bLiF;
                _maF = _bMaF;
            } else {
                _reF = _tReF;
                _liF = _tLiF;
                _maF = _tMaF;
            }

            values.tFee = (tAmount * _reF) / masterTaxDivisor;
            values.tLiquidity = (tAmount * (_liF + _maF)) / masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity);

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

            values.rFee = 0;
        }

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

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

    function _getCurrentSupply() internal view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOd[_excluded[i]] > rSupply || _tOd[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply - _rOd[_excluded[i]];
            tSupply = tSupply - _tOd[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeReflect(uint256 rFee, uint256 tFee) internal {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

    function withdrawETHstuck() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) internal {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity * currentRate;
        _rOd[address(this)] = _rOd[address(this)] + rLiquidity;
        if(_iE[address(this)])
            _tOd[address(this)] = _tOd[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity); 
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"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":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","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":[{"internalType":"address","name":"account","type":"address"}],"name":"BurnedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"CommunityBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Relaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tn","type":"string"},{"internalType":"string","name":"_ts","type":"string"}],"name":"Update","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_LiqHasBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"setMarketWallet","type":"address"},{"internalType":"address payable","name":"setDW","type":"address"},{"internalType":"string","name":"_tokenname","type":"string"},{"internalType":"string","name":"_tokensymbol","type":"string"}],"name":"_RFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_bLiF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_bMaF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_bReF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sLiF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sMaF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sReF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tLiF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tMaF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tReF","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":"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":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"iEFF","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":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mTAUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mWSUI","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMTP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"p","type":"uint256"},{"internalType":"uint256","name":"d","type":"uint256"}],"name":"setMWS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setNewDW","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setNewMarketWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setRatios","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":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ms","type":"uint256"},{"internalType":"uint256","name":"ds","type":"uint256"},{"internalType":"uint256","name":"vd","type":"uint256"}],"name":"setValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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"},{"inputs":[],"name":"withdrawETHstuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600060048190556064600f81905561012c60108190556101906011819055601283905560138290556014819055601591909155601691909155601781905560188290556019829055601a8290556103e8601b819055601c55610898601d5560c8601e908155601f91909155612710602055602155600a6022556028602355602c80546001600160a01b031990811661dead17909155602d805482169055602f805460ff60a81b191690556036805461ffff19169055603782905560388281556039805460ff19908116600117909155603c80549091169055825490911633179091554690036200011a57602b80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620001a2565b466061036200014f57602b80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620001a2565b46600114806200015f5750466004145b806200016b5750466003145b156200019d57602b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620001a2565b600080fd5b600160076000620001bb6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526007909252812080549092166001908117909255600b90620002146000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556200025d620002483390565b602b546001600160a01b03166000196200027f565b602b54620002799030906001600160a01b03166000196200027f565b620003ab565b6001600160a01b038316620002e75760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200034a5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620002de565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61404780620003bb6000396000f3fe6080604052600436106103c75760003560e01c80636612e66f116101f2578063b46def551161010d578063d9e66460116100a0578063eafb5a3c1161006f578063eafb5a3c14610b08578063f17b67fa14610b28578063fb78680d14610b48578063fb8bc55f14610b6857600080fd5b8063d9e6646014610a6c578063da37be2414610a8c578063dc99c74914610aa2578063dd62ed3e14610ac257600080fd5b8063c49b9a80116100dc578063c49b9a80146109eb578063cec18c7a14610a0b578063d74bda7a14610a20578063d874246714610a5657600080fd5b8063b46def5514610994578063bbd39ab2146109aa578063be5a4630146109bf578063c3183e7e146109d557600080fd5b806388f82020116101855780639a09a61b116101545780639a09a61b14610915578063a457c2d714610934578063a9059cbb14610954578063b1263c911461097457600080fd5b806388f82020146108a9578063893d20e8146108e25780638da5cb5b146108e257806395d89b411461090057600080fd5b80636ed515e6116101c15780636ed515e61461083e57806370a0823114610854578063715018a61461087457806380c581d11461088957600080fd5b80636612e66f146107d25780636639dd93146107f2578063668357da146108125780636aa7a0711461082857600080fd5b806337a9314f116102e25780634f6e7bb91161027557806358fa63ca1161024457806358fa63ca146107665780635b8e4046146107865780635e0f65841461079c5780635ec32bc8146107b257600080fd5b80634f6e7bb9146106fa5780634fb2e45d14610710578063571ac8b01461073057806358a142b91461075057600080fd5b806343a82b1f116102b157806343a82b1f14610679578063452ed4f11461069957806347f6b55f146106b95780634a74bb02146106d957600080fd5b806337a9314f146105f4578063384f6b511461062d5780633895aa2514610643578063395093511461065957600080fd5b806313114a9d1161035a57806328825ff11161032957806328825ff1146105725780632b962ec6146105925780632d838119146105b2578063313ce567146105d257600080fd5b806313114a9d1461050857806313e461921461051d57806318160ddd1461053d57806323b872dd1461055257600080fd5b8063095ea7b311610396578063095ea7b3146104745780630c2cdb0e146104a45780630cdc8226146104c4578063111be316146104e857600080fd5b806303fd2a45146103d3578063050a99421461041057806306fdde03146104325780630758d9241461045457600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b50602c546103f3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041c57600080fd5b5061043061042b366004613771565b610b7e565b005b34801561043e57600080fd5b50610447610c0d565b604051610407919061379d565b34801561046057600080fd5b506029546103f3906001600160a01b031681565b34801561048057600080fd5b5061049461048f366004613800565b610c9f565b6040519015158152602001610407565b3480156104b057600080fd5b506104306104bf36600461382c565b610cb6565b3480156104d057600080fd5b506104da60115481565b604051908152602001610407565b3480156104f457600080fd5b50610430610503366004613771565b610d53565b34801561051457600080fd5b506028546104da565b34801561052957600080fd5b50610430610538366004613863565b610d8b565b34801561054957600080fd5b506026546104da565b34801561055e57600080fd5b5061049461056d366004613898565b611082565b34801561057e57600080fd5b5061043061058d366004613771565b6110d5565b34801561059e57600080fd5b506104306105ad36600461382c565b61115b565b3480156105be57600080fd5b506104da6105cd3660046138d9565b6111f8565b3480156105de57600080fd5b5060245460405160ff9091168152602001610407565b34801561060057600080fd5b5061049461060f3660046138f2565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561063957600080fd5b506104da601e5481565b34801561064f57600080fd5b506104da60105481565b34801561066557600080fd5b50610494610674366004613800565b61127c565b34801561068557600080fd5b50610430610694366004613771565b6112b3565b3480156106a557600080fd5b50602a546103f3906001600160a01b031681565b3480156106c557600080fd5b506104306106d43660046139b2565b611339565b3480156106e557600080fd5b50602f5461049490600160a81b900460ff1681565b34801561070657600080fd5b506104da601f5481565b34801561071c57600080fd5b5061043061072b3660046138f2565b6117a3565b34801561073c57600080fd5b5061049461074b3660046138f2565b611944565b34801561075c57600080fd5b506104da60315481565b34801561077257600080fd5b50602d546103f3906001600160a01b031681565b34801561079257600080fd5b506104da60135481565b3480156107a857600080fd5b506104da60335481565b3480156107be57600080fd5b506104946107cd3660046138d9565b611952565b3480156107de57600080fd5b506104306107ed366004613863565b6119b3565b3480156107fe57600080fd5b5061043061080d36600461382c565b611a08565b34801561081e57600080fd5b506104da600f5481565b34801561083457600080fd5b506104da60165481565b34801561084a57600080fd5b506104da60175481565b34801561086057600080fd5b506104da61086f3660046138f2565b611a3d565b34801561088057600080fd5b50610430611a9c565b34801561089557600080fd5b506104306108a4366004613863565b611b1b565b3480156108b557600080fd5b506104946108c43660046138f2565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108ee57600080fd5b506000546001600160a01b03166103f3565b34801561090c57600080fd5b50610447611c03565b34801561092157600080fd5b5060365461049490610100900460ff1681565b34801561094057600080fd5b5061049461094f366004613800565b611c12565b34801561096057600080fd5b5061049461096f366004613800565b611c49565b34801561098057600080fd5b5061043061098f3660046138f2565b611c56565b3480156109a057600080fd5b506104da60195481565b3480156109b657600080fd5b50610430611cf5565b3480156109cb57600080fd5b506104da60145481565b3480156109e157600080fd5b506104da60185481565b3480156109f757600080fd5b50610430610a06366004613a3b565b611d5c565b348015610a1757600080fd5b50610430611dde565b348015610a2c57600080fd5b506104da610a3b3660046138f2565b6001600160a01b031660009081526006602052604090205490565b348015610a6257600080fd5b506104da60125481565b348015610a7857600080fd5b50602b546103f3906001600160a01b031681565b348015610a9857600080fd5b506104da601a5481565b348015610aae57600080fd5b50610430610abd366004613a56565b611e9f565b348015610ace57600080fd5b506104da610add366004613aba565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b1457600080fd5b50610430610b233660046138f2565b611f1b565b348015610b3457600080fd5b50610430610b433660046138f2565b61224b565b348015610b5457600080fd5b50610430610b63366004613af3565b6122ea565b348015610b7457600080fd5b506104da60155481565b6000546001600160a01b03163314610bb15760405162461bcd60e51b8152600401610ba890613b25565b60405180910390fd5b601b548311158015610bc55750601c548211155b8015610bd35750601d548111155b610bdc57600080fd5b61132481610bea8486613b70565b610bf49190613b70565b1115610bff57600080fd5b601692909255601555601755565b6060600d8054610c1c90613b83565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4890613b83565b8015610c955780601f10610c6a57610100808354040283529160200191610c95565b820191906000526020600020905b815481529060010190602001808311610c7857829003601f168201915b5050505050905090565b6000610cac338484612353565b5060015b92915050565b6000546001600160a01b03163314610ce05760405162461bcd60e51b8152600401610ba890613b25565b60008183602654610cf19190613bbd565b610cfb9190613bf2565b90506103e8602654610d0d9190613bf2565b811015610d2c5760405162461bcd60e51b8152600401610ba890613c06565b6030819055600c548290610d41908590613bbd565b610d4b9190613bf2565b603155505050565b6000546001600160a01b03163314610d7d5760405162461bcd60e51b8152600401610ba890613b25565b602192909255602255602355565b6000546001600160a01b03163314610db55760405162461bcd60e51b8152600401610ba890613b25565b801515600103610ee9576001600160a01b03821660009081526008602052604090205460ff1615610e285760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610ba8565b6001600160a01b03821660009081526001602052604090205415610e82576001600160a01b038216600090815260016020526040902054610e68906111f8565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600860205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b80151560000361107e576001600160a01b03821660009081526008602052604090205460ff16610f5b5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610ba8565b60005b600a5481101561107c57826001600160a01b0316600a8281548110610f8557610f85613c49565b6000918252602090912001546001600160a01b03160361106a57600a8054610faf90600190613c5f565b81548110610fbf57610fbf613c49565b600091825260209091200154600a80546001600160a01b039092169183908110610feb57610feb613c49565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600890925220805460ff19169055600a80548061104357611043613c72565b600082815260209020810160001990810180546001600160a01b031916905501905561107c565b8061107481613c88565b915050610f5e565b505b5050565b600061108f848484612477565b506001600160a01b0384166000908152600560209081526040808320338085529252909120546110cb9186916110c6908690613c5f565b612353565b5060019392505050565b6000546001600160a01b031633146110ff5760405162461bcd60e51b8152600401610ba890613b25565b601b5483111580156111135750601c548211155b80156111215750601d548111155b61112a57600080fd5b611324816111388486613b70565b6111429190613b70565b111561114d57600080fd5b601292909255601355601455565b6000546001600160a01b031633146111855760405162461bcd60e51b8152600401610ba890613b25565b600081836026546111969190613bbd565b6111a09190613bf2565b90506103e86026546111b29190613bf2565b8110156111d15760405162461bcd60e51b8152600401610ba890613c06565b6032819055600c5482906111e6908590613bbd565b6111f09190613bf2565b603355505050565b600060275482111561125f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ba8565b6000611269612864565b90506112758184613bf2565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610cac9185906110c6908690613b70565b6000546001600160a01b031633146112dd5760405162461bcd60e51b8152600401610ba890613b25565b601b5483111580156112f15750601c548211155b80156112ff5750601d548111155b61130857600080fd5b611324816113168486613b70565b6113209190613b70565b111561132b57600080fd5b601892909255601955601a55565b6000546001600160a01b031633146113635760405162461bcd60e51b8152600401610ba890613b25565b603c5460ff161561137357600080fd5b602f80546001600160a01b03199081166001600160a01b03878116918217909355602e8054909216868416178255600090815260076020526040808220805460ff19908116600190811790925593549094168252902080549091169091179055600d6113df8382613cef565b50600e6113ec8282613cef565b50640ba43b7400600c556024805460ff1916601290811790915560255560255461141790600a613e93565b600c546114249190613bbd565b602681905561143590600019613e9f565b61144190600019613c5f565b602755602b54602980546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156114a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c49190613eb3565b6001600160a01b031663c9c65396602960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611525573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115499190613eb3565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b99190613eb3565b602a80546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff19166001179055308352600582528083206029549094168352929052206000199055602654620186a090611623906103e8613bbd565b61162d9190613bf2565b603055600c54620186a090611644906101f4613bbd565b61164e9190613bf2565b6031556026546103e89061166390600a613bbd565b61166d9190613bf2565b603255600c546103e89061168290600a613bbd565b61168c9190613bf2565b603355602654612710906116a1906005613bbd565b6116ab9190613bf2565b6034556026546103e8906116c0906005613bbd565b6116ca9190613bf2565b603555602b546116e5906001600160a01b0316600019610c9f565b50603c805460ff1916600190811790915560275490600061170e6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205561173a6000546001600160a01b031690565b602d546026546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360295461179d9030906001600160a01b0316600019612353565b50505050565b6000546001600160a01b031633146117cd5760405162461bcd60e51b8152600401610ba890613b25565b6001600160a01b0381166117f35760405162461bcd60e51b8152600401610ba890613ed0565b602c546001600160a01b03908116908216036118215760405162461bcd60e51b8152600401610ba890613ed0565b6000805461183a916001600160a01b03909116906119b3565b6118458160016119b3565b611850816001610d8b565b600054602e546001600160a01b0391821691160361188457602e80546001600160a01b0319166001600160a01b0383161790555b600054611899906001600160a01b0316611a3d565b600080546001600160a01b0390811682526005602090815260408084208684168552909152822092909255805490916118d29116611a3d565b11156118f9576000546118f7906001600160a01b0316826118f282611a3d565b612477565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610cb082600019610c9f565b600080602554600a6119649190613e93565b61196e9084613bbd565b3360009081526006602052604090205490915061198b8482613b70565b336000818152600660205260409020919091556119a89083612887565b506001949350505050565b6000546001600160a01b031633146119dd5760405162461bcd60e51b8152600401610ba890613b25565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611a325760405162461bcd60e51b8152600401610ba890613b25565b601e91909155601f55565b6001600160a01b03811660009081526008602052604081205460ff1615611a7a57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610cb0906111f8565b6000546001600160a01b03163314611ac65760405162461bcd60e51b8152600401610ba890613b25565b60008054611adf916001600160a01b03909116906119b3565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611b455760405162461bcd60e51b8152600401610ba890613b25565b801515600003611b7157506001600160a01b03166000908152600360205260409020805460ff19169055565b60045415611bd85762093a8060045442611b8b9190613c5f565b11611bd85760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610ba8565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6060600e8054610c1c90613b83565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610cac9185906110c6908690613c5f565b60006110cb338484612477565b6000546001600160a01b03163314611c805760405162461bcd60e51b8152600401610ba890613b25565b602e546001600160a01b03808316911603611cd35760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610ba8565b602e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d1f5760405162461bcd60e51b8152600401610ba890613b25565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611d59573d6000803e3d6000fd5b50565b6000546001600160a01b03163314611d865760405162461bcd60e51b8152600401610ba890613b25565b602f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611dd390831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611e085760405162461bcd60e51b8152600401610ba890613b25565b60365460ff1615611e5b5760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920656e61626c65642100000000006044820152606401610ba8565b611e66306001610d8b565b602a54611e7d906001600160a01b03166001610d8b565b6036805460ff19166001179055602f805460ff60a81b1916600160a81b179055565b602e546001600160a01b0316336001600160a01b031614611f025760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c792044414f2043616e205570646174652074686520546f6b656e0000006044820152606401610ba8565b600d611f0e8382613cef565b50600e61107c8282613cef565b6000546001600160a01b03163314611f455760405162461bcd60e51b8152600401610ba890613b25565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fae9190613eb3565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201f9190613eb3565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561206a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208e9190613eb3565b90506001600160a01b03811661220757816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121009190613eb3565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561214d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121719190613eb3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156121be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e29190613eb3565b602a80546001600160a01b0319166001600160a01b0392909216919091179055612223565b602a80546001600160a01b0319166001600160a01b0383161790555b602980546001600160a01b0319166001600160a01b03841617905561107c3084600019612353565b6000546001600160a01b031633146122755760405162461bcd60e51b8152600401610ba890613b25565b602f546001600160a01b038083169116036122c85760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610ba8565b602f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146123145760405162461bcd60e51b8152600401610ba890613b25565b82846026546123239190613bbd565b61232d9190613bf2565b6034556026548190612340908490613bbd565b61234a9190613bf2565b60355550505050565b6001600160a01b0383166123b55760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ba8565b6001600160a01b0382166124165760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ba8565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661249f5760405162461bcd60e51b8152600401610ba890613f2d565b6001600160a01b0383166125015760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ba8565b600082116125635760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ba8565b61256d84846129d2565b1561278c5760365460ff166125bf5760405162461bcd60e51b815260206004820152601860248201527754726164696e67206e6f742079657420656e61626c65642160401b6044820152606401610ba8565b60395460ff1615612683576001600160a01b03841660009081526003602052604090205460ff1615612639576125f6436001613b70565b6001600160a01b0384166000908152603a60205260409020540361261957600080fd5b6001600160a01b0383166000908152603a60205260409020439055612683565b612644436001613b70565b6001600160a01b0385166000908152603a60205260409020540361266757600080fd5b6001600160a01b0384166000908152603a602052604090204390555b6030548211156126df5760405162461bcd60e51b815260206004820152602160248201527f5472616e73666572206578636565647320746865206d61785478416d6f756e746044820152601760f91b6064820152608401610ba8565b602b546001600160a01b0384811691161480159061271657506001600160a01b03831660009081526003602052604090205460ff16155b1561278c576032548261272885611a3d565b6127329190613b70565b111561278c5760405162461bcd60e51b815260206004820152602360248201527f5472616e73666572206578636565647320746865206d617857616c6c657453696044820152623d329760e91b6064820152608401610ba8565b6001600160a01b03841660009081526007602052604090205460019060ff16806127ce57506001600160a01b03841660009081526007602052604090205460ff165b156127d7575060005b6001600160a01b03841660009081526003602052604090205460ff161561284f57602f54600160a01b900460ff1615801561281b5750602f54600160a81b900460ff165b1561284f57600061282b30611a3d565b9050603454811061284d57603554811061284457506035545b61284d81612ad9565b505b61285b85858584612e7d565b95945050505050565b60008060006128716131fe565b90925090506128808183613bf2565b9250505090565b6000806001600160a01b0384166128b05760405162461bcd60e51b8152600401610ba890613f2d565b6000831161290e5760405162461bcd60e51b815260206004820152602560248201527f4275726e20616d6f756e74206d7573742062652067726561746572207468616e604482015264207a65726f60d81b6064820152608401610ba8565b61291884826129d2565b1561296a5760365460ff1661296a5760405162461bcd60e51b815260206004820152601860248201527754726164696e67206e6f742079657420656e61626c65642160401b6044820152606401610ba8565b6001600160a01b03841660009081526007602052604090205460019060ff16806129ac57506001600160a01b03821660009081526007602052604090205460ff165b156129b5575060005b836026546129c39190613c5f565b60265561285b85838684612e7d565b600080546001600160a01b038481169116148015906129ff57506000546001600160a01b03838116911614155b8015612a2457506001600160a01b0382166000908152600b602052604090205460ff16155b8015612a4957506001600160a01b0383166000908152600b602052604090205460ff16155b8015612a635750602c546001600160a01b03838116911614155b8015612a7757506001600160a01b03821615155b8015612a8c57506001600160a01b0383163014155b8015612ab157506001600160a01b03821660009081526007602052604090205460ff16155b8015611275575050506001600160a01b031660009081526007602052604090205460ff161590565b602f805460ff60a01b1916600160a01b179055601f54601e54612afc9190613b70565b15612e6d5760006002601f54601e54612b159190613b70565b601e54612b229085613bbd565b612b2c9190613bf2565b612b369190613bf2565b90506000612b448284613c5f565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612b7e57612b7e613c49565b6001600160a01b03928316602091820292909201810191909152602954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfb9190613eb3565b81600181518110612c0e57612c0e613c49565b6001600160a01b03928316602091820292909201015260295460405163791ac94760e01b815291169063791ac94790612c54908590600090869030904290600401613f72565b600060405180830381600087803b158015612c6e57600080fd5b505af1158015612c82573d6000803e3d6000fd5b5050505060006002601f54601e54612c9a9190613b70565b601e54612ca79047613bbd565b612cb19190613bf2565b612cbb9190613bf2565b90508315612d9d57602954602e5460405163f305d71960e01b81523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612d33573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d589190613fe3565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612da98587613c5f565b1115612e68576021546023544791600091612dc49084613bf2565b612dce9190613bbd565b9050600060225460235484612de39190613bf2565b612ded9190613bbd565b602e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612e28573d6000803e3d6000fd5b50602f546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612e63573d6000803e3d6000fd5b505050505b505050505b50602f805460ff60a01b19169055565b603654600090610100900460ff16612f1157612e998585613381565b603654610100900460ff16158015612eb65750612eb685856129d2565b15612f115760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610ba8565b6000612f1f8686868661348f565b60808101516001600160a01b038816600090815260016020526040902054919250612f4991613c5f565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054612f809190613b70565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526008909152205460ff168015612fd457506001600160a01b03851660009081526008602052604090205460ff16155b1561301b576001600160a01b038616600090815260026020526040902054612ffd908590613c5f565b6001600160a01b03871660009081526002602052604090205561315b565b6001600160a01b03861660009081526008602052604090205460ff1615801561305c57506001600160a01b03851660009081526008602052604090205460ff165b156130a45780516001600160a01b0386166000908152600260205260409020546130869190613b70565b6001600160a01b03861660009081526002602052604090205561315b565b6001600160a01b03861660009081526008602052604090205460ff1680156130e457506001600160a01b03851660009081526008602052604090205460ff165b1561315b576001600160a01b03861660009081526002602052604090205461310d908590613c5f565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546131419190613b70565b6001600160a01b0386166000908152600260205260409020555b6040810151156131735761317386826040015161367f565b60008160a00151118061318a575060008160200151115b156131a1576131a18160a00151826020015161374b565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83600001516040516131ea91815260200190565b60405180910390a350600195945050505050565b6027546026546000918291825b600a54811015613350578260016000600a848154811061322d5761322d613c49565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061329857508160026000600a848154811061327157613271613c49565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156132ae57602754602654945094505050509091565b60016000600a83815481106132c5576132c5613c49565b60009182526020808320909101546001600160a01b031683528201929092526040019020546132f49084613c5f565b925060026000600a838154811061330d5761330d613c49565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461333c9083613c5f565b91508061334881613c88565b91505061320b565b506026546027546133619190613bf2565b821015613378576027546026549350935050509091565b90939092509050565b603654610100900460ff16156133d95760405162461bcd60e51b815260206004820152601b60248201527f4c697175696469747920697320616c72656164792061646465642e00000000006044820152606401610ba8565b6133e382826129d2565b1580156133fd5750602a546001600160a01b038281169116145b1561107e576001600160a01b0382166000908152600b602052604090819020805460ff191660019081179091556036805461ff00191661010017905542603855602f805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161348391901515815260200190565b60405180910390a15050565b6134c86040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6135016040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600061350b612864565b90506135178186613bbd565b60808301528315613629576001600160a01b03861660009081526003602052604090205460ff161561355a57601654600f556015546010556017546011556135a5565b6001600160a01b03871660009081526003602052604090205460ff161561359257601254600f556013546010556014546011556135a5565b601854600f55601954601055601a546011555b602054600f546135b59087613bbd565b6135bf9190613bf2565b602080840191909152546011546010546135d99190613b70565b6135e39087613bbd565b6135ed9190613bf2565b6040830181905260208301516136039190613b70565b61360d9086613c5f565b8252602082015161361f908290613bbd565b60a0830152613642565b6000602083018190526040830181905285835260a08301525b8082604001516136529190613bbd565b8260a001516136619190613b70565b82608001516136709190613c5f565b60608301525095945050505050565b6000613689612864565b905060006136978284613bbd565b306000908152600160205260409020549091506136b5908290613b70565b3060009081526001602090815260408083209390935560089052205460ff161561370557306000908152600260205260409020546136f4908490613b70565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b816027546137599190613c5f565b60275560285461376a908290613b70565b6028555050565b60008060006060848603121561378657600080fd5b505081359360208301359350604090920135919050565b600060208083528351808285015260005b818110156137ca578581018301518582016040015282016137ae565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611d5957600080fd5b6000806040838503121561381357600080fd5b823561381e816137eb565b946020939093013593505050565b6000806040838503121561383f57600080fd5b50508035926020909101359150565b8035801515811461385e57600080fd5b919050565b6000806040838503121561387657600080fd5b8235613881816137eb565b915061388f6020840161384e565b90509250929050565b6000806000606084860312156138ad57600080fd5b83356138b8816137eb565b925060208401356138c8816137eb565b929592945050506040919091013590565b6000602082840312156138eb57600080fd5b5035919050565b60006020828403121561390457600080fd5b8135611275816137eb565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261393657600080fd5b813567ffffffffffffffff808211156139515761395161390f565b604051601f8301601f19908116603f011681019082821181831017156139795761397961390f565b8160405283815286602085880101111561399257600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080608085870312156139c857600080fd5b84356139d3816137eb565b935060208501356139e3816137eb565b9250604085013567ffffffffffffffff80821115613a0057600080fd5b613a0c88838901613925565b93506060870135915080821115613a2257600080fd5b50613a2f87828801613925565b91505092959194509250565b600060208284031215613a4d57600080fd5b6112758261384e565b60008060408385031215613a6957600080fd5b823567ffffffffffffffff80821115613a8157600080fd5b613a8d86838701613925565b93506020850135915080821115613aa357600080fd5b50613ab085828601613925565b9150509250929050565b60008060408385031215613acd57600080fd5b8235613ad8816137eb565b91506020830135613ae8816137eb565b809150509250929050565b60008060008060808587031215613b0957600080fd5b5050823594602084013594506040840135936060013592509050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610cb057610cb0613b5a565b600181811c90821680613b9757607f821691505b602082108103613bb757634e487b7160e01b600052602260045260246000fd5b50919050565b6000816000190483118215151615613bd757613bd7613b5a565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613c0157613c01613bdc565b500490565b60208082526023908201527f4d7573742062652061626f766520302e3125206f6620746f74616c2073757070604082015262363c9760e91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b81810381811115610cb057610cb0613b5a565b634e487b7160e01b600052603160045260246000fd5b600060018201613c9a57613c9a613b5a565b5060010190565b601f82111561107c57600081815260208120601f850160051c81016020861015613cc85750805b601f850160051c820191505b81811015613ce757828155600101613cd4565b505050505050565b815167ffffffffffffffff811115613d0957613d0961390f565b613d1d81613d178454613b83565b84613ca1565b602080601f831160018114613d525760008415613d3a5750858301515b600019600386901b1c1916600185901b178555613ce7565b600085815260208120601f198616915b82811015613d8157888601518255948401946001909101908401613d62565b5085821015613d9f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b80851115613dea578160001904821115613dd057613dd0613b5a565b80851615613ddd57918102915b93841c9390800290613db4565b509250929050565b600082613e0157506001610cb0565b81613e0e57506000610cb0565b8160018114613e245760028114613e2e57613e4a565b6001915050610cb0565b60ff841115613e3f57613e3f613b5a565b50506001821b610cb0565b5060208310610133831016604e8410600b8410161715613e6d575081810a610cb0565b613e778383613daf565b8060001904821115613e8b57613e8b613b5a565b029392505050565b60006112758383613df2565b600082613eae57613eae613bdc565b500690565b600060208284031215613ec557600080fd5b8151611275816137eb565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b60208082526025908201527f43616e6e6f74207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613fc25784516001600160a01b031683529383019391830191600101613f9d565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613ff857600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212200abe63972131306ef2628dcca44ab49e1b3778bbd1754288094b5b901001136d64736f6c63430008100033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c80636612e66f116101f2578063b46def551161010d578063d9e66460116100a0578063eafb5a3c1161006f578063eafb5a3c14610b08578063f17b67fa14610b28578063fb78680d14610b48578063fb8bc55f14610b6857600080fd5b8063d9e6646014610a6c578063da37be2414610a8c578063dc99c74914610aa2578063dd62ed3e14610ac257600080fd5b8063c49b9a80116100dc578063c49b9a80146109eb578063cec18c7a14610a0b578063d74bda7a14610a20578063d874246714610a5657600080fd5b8063b46def5514610994578063bbd39ab2146109aa578063be5a4630146109bf578063c3183e7e146109d557600080fd5b806388f82020116101855780639a09a61b116101545780639a09a61b14610915578063a457c2d714610934578063a9059cbb14610954578063b1263c911461097457600080fd5b806388f82020146108a9578063893d20e8146108e25780638da5cb5b146108e257806395d89b411461090057600080fd5b80636ed515e6116101c15780636ed515e61461083e57806370a0823114610854578063715018a61461087457806380c581d11461088957600080fd5b80636612e66f146107d25780636639dd93146107f2578063668357da146108125780636aa7a0711461082857600080fd5b806337a9314f116102e25780634f6e7bb91161027557806358fa63ca1161024457806358fa63ca146107665780635b8e4046146107865780635e0f65841461079c5780635ec32bc8146107b257600080fd5b80634f6e7bb9146106fa5780634fb2e45d14610710578063571ac8b01461073057806358a142b91461075057600080fd5b806343a82b1f116102b157806343a82b1f14610679578063452ed4f11461069957806347f6b55f146106b95780634a74bb02146106d957600080fd5b806337a9314f146105f4578063384f6b511461062d5780633895aa2514610643578063395093511461065957600080fd5b806313114a9d1161035a57806328825ff11161032957806328825ff1146105725780632b962ec6146105925780632d838119146105b2578063313ce567146105d257600080fd5b806313114a9d1461050857806313e461921461051d57806318160ddd1461053d57806323b872dd1461055257600080fd5b8063095ea7b311610396578063095ea7b3146104745780630c2cdb0e146104a45780630cdc8226146104c4578063111be316146104e857600080fd5b806303fd2a45146103d3578063050a99421461041057806306fdde03146104325780630758d9241461045457600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b50602c546103f3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041c57600080fd5b5061043061042b366004613771565b610b7e565b005b34801561043e57600080fd5b50610447610c0d565b604051610407919061379d565b34801561046057600080fd5b506029546103f3906001600160a01b031681565b34801561048057600080fd5b5061049461048f366004613800565b610c9f565b6040519015158152602001610407565b3480156104b057600080fd5b506104306104bf36600461382c565b610cb6565b3480156104d057600080fd5b506104da60115481565b604051908152602001610407565b3480156104f457600080fd5b50610430610503366004613771565b610d53565b34801561051457600080fd5b506028546104da565b34801561052957600080fd5b50610430610538366004613863565b610d8b565b34801561054957600080fd5b506026546104da565b34801561055e57600080fd5b5061049461056d366004613898565b611082565b34801561057e57600080fd5b5061043061058d366004613771565b6110d5565b34801561059e57600080fd5b506104306105ad36600461382c565b61115b565b3480156105be57600080fd5b506104da6105cd3660046138d9565b6111f8565b3480156105de57600080fd5b5060245460405160ff9091168152602001610407565b34801561060057600080fd5b5061049461060f3660046138f2565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561063957600080fd5b506104da601e5481565b34801561064f57600080fd5b506104da60105481565b34801561066557600080fd5b50610494610674366004613800565b61127c565b34801561068557600080fd5b50610430610694366004613771565b6112b3565b3480156106a557600080fd5b50602a546103f3906001600160a01b031681565b3480156106c557600080fd5b506104306106d43660046139b2565b611339565b3480156106e557600080fd5b50602f5461049490600160a81b900460ff1681565b34801561070657600080fd5b506104da601f5481565b34801561071c57600080fd5b5061043061072b3660046138f2565b6117a3565b34801561073c57600080fd5b5061049461074b3660046138f2565b611944565b34801561075c57600080fd5b506104da60315481565b34801561077257600080fd5b50602d546103f3906001600160a01b031681565b34801561079257600080fd5b506104da60135481565b3480156107a857600080fd5b506104da60335481565b3480156107be57600080fd5b506104946107cd3660046138d9565b611952565b3480156107de57600080fd5b506104306107ed366004613863565b6119b3565b3480156107fe57600080fd5b5061043061080d36600461382c565b611a08565b34801561081e57600080fd5b506104da600f5481565b34801561083457600080fd5b506104da60165481565b34801561084a57600080fd5b506104da60175481565b34801561086057600080fd5b506104da61086f3660046138f2565b611a3d565b34801561088057600080fd5b50610430611a9c565b34801561089557600080fd5b506104306108a4366004613863565b611b1b565b3480156108b557600080fd5b506104946108c43660046138f2565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108ee57600080fd5b506000546001600160a01b03166103f3565b34801561090c57600080fd5b50610447611c03565b34801561092157600080fd5b5060365461049490610100900460ff1681565b34801561094057600080fd5b5061049461094f366004613800565b611c12565b34801561096057600080fd5b5061049461096f366004613800565b611c49565b34801561098057600080fd5b5061043061098f3660046138f2565b611c56565b3480156109a057600080fd5b506104da60195481565b3480156109b657600080fd5b50610430611cf5565b3480156109cb57600080fd5b506104da60145481565b3480156109e157600080fd5b506104da60185481565b3480156109f757600080fd5b50610430610a06366004613a3b565b611d5c565b348015610a1757600080fd5b50610430611dde565b348015610a2c57600080fd5b506104da610a3b3660046138f2565b6001600160a01b031660009081526006602052604090205490565b348015610a6257600080fd5b506104da60125481565b348015610a7857600080fd5b50602b546103f3906001600160a01b031681565b348015610a9857600080fd5b506104da601a5481565b348015610aae57600080fd5b50610430610abd366004613a56565b611e9f565b348015610ace57600080fd5b506104da610add366004613aba565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b1457600080fd5b50610430610b233660046138f2565b611f1b565b348015610b3457600080fd5b50610430610b433660046138f2565b61224b565b348015610b5457600080fd5b50610430610b63366004613af3565b6122ea565b348015610b7457600080fd5b506104da60155481565b6000546001600160a01b03163314610bb15760405162461bcd60e51b8152600401610ba890613b25565b60405180910390fd5b601b548311158015610bc55750601c548211155b8015610bd35750601d548111155b610bdc57600080fd5b61132481610bea8486613b70565b610bf49190613b70565b1115610bff57600080fd5b601692909255601555601755565b6060600d8054610c1c90613b83565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4890613b83565b8015610c955780601f10610c6a57610100808354040283529160200191610c95565b820191906000526020600020905b815481529060010190602001808311610c7857829003601f168201915b5050505050905090565b6000610cac338484612353565b5060015b92915050565b6000546001600160a01b03163314610ce05760405162461bcd60e51b8152600401610ba890613b25565b60008183602654610cf19190613bbd565b610cfb9190613bf2565b90506103e8602654610d0d9190613bf2565b811015610d2c5760405162461bcd60e51b8152600401610ba890613c06565b6030819055600c548290610d41908590613bbd565b610d4b9190613bf2565b603155505050565b6000546001600160a01b03163314610d7d5760405162461bcd60e51b8152600401610ba890613b25565b602192909255602255602355565b6000546001600160a01b03163314610db55760405162461bcd60e51b8152600401610ba890613b25565b801515600103610ee9576001600160a01b03821660009081526008602052604090205460ff1615610e285760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610ba8565b6001600160a01b03821660009081526001602052604090205415610e82576001600160a01b038216600090815260016020526040902054610e68906111f8565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600860205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b80151560000361107e576001600160a01b03821660009081526008602052604090205460ff16610f5b5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610ba8565b60005b600a5481101561107c57826001600160a01b0316600a8281548110610f8557610f85613c49565b6000918252602090912001546001600160a01b03160361106a57600a8054610faf90600190613c5f565b81548110610fbf57610fbf613c49565b600091825260209091200154600a80546001600160a01b039092169183908110610feb57610feb613c49565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600890925220805460ff19169055600a80548061104357611043613c72565b600082815260209020810160001990810180546001600160a01b031916905501905561107c565b8061107481613c88565b915050610f5e565b505b5050565b600061108f848484612477565b506001600160a01b0384166000908152600560209081526040808320338085529252909120546110cb9186916110c6908690613c5f565b612353565b5060019392505050565b6000546001600160a01b031633146110ff5760405162461bcd60e51b8152600401610ba890613b25565b601b5483111580156111135750601c548211155b80156111215750601d548111155b61112a57600080fd5b611324816111388486613b70565b6111429190613b70565b111561114d57600080fd5b601292909255601355601455565b6000546001600160a01b031633146111855760405162461bcd60e51b8152600401610ba890613b25565b600081836026546111969190613bbd565b6111a09190613bf2565b90506103e86026546111b29190613bf2565b8110156111d15760405162461bcd60e51b8152600401610ba890613c06565b6032819055600c5482906111e6908590613bbd565b6111f09190613bf2565b603355505050565b600060275482111561125f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ba8565b6000611269612864565b90506112758184613bf2565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610cac9185906110c6908690613b70565b6000546001600160a01b031633146112dd5760405162461bcd60e51b8152600401610ba890613b25565b601b5483111580156112f15750601c548211155b80156112ff5750601d548111155b61130857600080fd5b611324816113168486613b70565b6113209190613b70565b111561132b57600080fd5b601892909255601955601a55565b6000546001600160a01b031633146113635760405162461bcd60e51b8152600401610ba890613b25565b603c5460ff161561137357600080fd5b602f80546001600160a01b03199081166001600160a01b03878116918217909355602e8054909216868416178255600090815260076020526040808220805460ff19908116600190811790925593549094168252902080549091169091179055600d6113df8382613cef565b50600e6113ec8282613cef565b50640ba43b7400600c556024805460ff1916601290811790915560255560255461141790600a613e93565b600c546114249190613bbd565b602681905561143590600019613e9f565b61144190600019613c5f565b602755602b54602980546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156114a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c49190613eb3565b6001600160a01b031663c9c65396602960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611525573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115499190613eb3565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b99190613eb3565b602a80546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff19166001179055308352600582528083206029549094168352929052206000199055602654620186a090611623906103e8613bbd565b61162d9190613bf2565b603055600c54620186a090611644906101f4613bbd565b61164e9190613bf2565b6031556026546103e89061166390600a613bbd565b61166d9190613bf2565b603255600c546103e89061168290600a613bbd565b61168c9190613bf2565b603355602654612710906116a1906005613bbd565b6116ab9190613bf2565b6034556026546103e8906116c0906005613bbd565b6116ca9190613bf2565b603555602b546116e5906001600160a01b0316600019610c9f565b50603c805460ff1916600190811790915560275490600061170e6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205561173a6000546001600160a01b031690565b602d546026546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360295461179d9030906001600160a01b0316600019612353565b50505050565b6000546001600160a01b031633146117cd5760405162461bcd60e51b8152600401610ba890613b25565b6001600160a01b0381166117f35760405162461bcd60e51b8152600401610ba890613ed0565b602c546001600160a01b03908116908216036118215760405162461bcd60e51b8152600401610ba890613ed0565b6000805461183a916001600160a01b03909116906119b3565b6118458160016119b3565b611850816001610d8b565b600054602e546001600160a01b0391821691160361188457602e80546001600160a01b0319166001600160a01b0383161790555b600054611899906001600160a01b0316611a3d565b600080546001600160a01b0390811682526005602090815260408084208684168552909152822092909255805490916118d29116611a3d565b11156118f9576000546118f7906001600160a01b0316826118f282611a3d565b612477565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610cb082600019610c9f565b600080602554600a6119649190613e93565b61196e9084613bbd565b3360009081526006602052604090205490915061198b8482613b70565b336000818152600660205260409020919091556119a89083612887565b506001949350505050565b6000546001600160a01b031633146119dd5760405162461bcd60e51b8152600401610ba890613b25565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611a325760405162461bcd60e51b8152600401610ba890613b25565b601e91909155601f55565b6001600160a01b03811660009081526008602052604081205460ff1615611a7a57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610cb0906111f8565b6000546001600160a01b03163314611ac65760405162461bcd60e51b8152600401610ba890613b25565b60008054611adf916001600160a01b03909116906119b3565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611b455760405162461bcd60e51b8152600401610ba890613b25565b801515600003611b7157506001600160a01b03166000908152600360205260409020805460ff19169055565b60045415611bd85762093a8060045442611b8b9190613c5f565b11611bd85760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610ba8565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6060600e8054610c1c90613b83565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610cac9185906110c6908690613c5f565b60006110cb338484612477565b6000546001600160a01b03163314611c805760405162461bcd60e51b8152600401610ba890613b25565b602e546001600160a01b03808316911603611cd35760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610ba8565b602e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d1f5760405162461bcd60e51b8152600401610ba890613b25565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611d59573d6000803e3d6000fd5b50565b6000546001600160a01b03163314611d865760405162461bcd60e51b8152600401610ba890613b25565b602f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611dd390831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611e085760405162461bcd60e51b8152600401610ba890613b25565b60365460ff1615611e5b5760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920656e61626c65642100000000006044820152606401610ba8565b611e66306001610d8b565b602a54611e7d906001600160a01b03166001610d8b565b6036805460ff19166001179055602f805460ff60a81b1916600160a81b179055565b602e546001600160a01b0316336001600160a01b031614611f025760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c792044414f2043616e205570646174652074686520546f6b656e0000006044820152606401610ba8565b600d611f0e8382613cef565b50600e61107c8282613cef565b6000546001600160a01b03163314611f455760405162461bcd60e51b8152600401610ba890613b25565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fae9190613eb3565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201f9190613eb3565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561206a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208e9190613eb3565b90506001600160a01b03811661220757816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121009190613eb3565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561214d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121719190613eb3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156121be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e29190613eb3565b602a80546001600160a01b0319166001600160a01b0392909216919091179055612223565b602a80546001600160a01b0319166001600160a01b0383161790555b602980546001600160a01b0319166001600160a01b03841617905561107c3084600019612353565b6000546001600160a01b031633146122755760405162461bcd60e51b8152600401610ba890613b25565b602f546001600160a01b038083169116036122c85760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610ba8565b602f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146123145760405162461bcd60e51b8152600401610ba890613b25565b82846026546123239190613bbd565b61232d9190613bf2565b6034556026548190612340908490613bbd565b61234a9190613bf2565b60355550505050565b6001600160a01b0383166123b55760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ba8565b6001600160a01b0382166124165760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ba8565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661249f5760405162461bcd60e51b8152600401610ba890613f2d565b6001600160a01b0383166125015760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ba8565b600082116125635760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ba8565b61256d84846129d2565b1561278c5760365460ff166125bf5760405162461bcd60e51b815260206004820152601860248201527754726164696e67206e6f742079657420656e61626c65642160401b6044820152606401610ba8565b60395460ff1615612683576001600160a01b03841660009081526003602052604090205460ff1615612639576125f6436001613b70565b6001600160a01b0384166000908152603a60205260409020540361261957600080fd5b6001600160a01b0383166000908152603a60205260409020439055612683565b612644436001613b70565b6001600160a01b0385166000908152603a60205260409020540361266757600080fd5b6001600160a01b0384166000908152603a602052604090204390555b6030548211156126df5760405162461bcd60e51b815260206004820152602160248201527f5472616e73666572206578636565647320746865206d61785478416d6f756e746044820152601760f91b6064820152608401610ba8565b602b546001600160a01b0384811691161480159061271657506001600160a01b03831660009081526003602052604090205460ff16155b1561278c576032548261272885611a3d565b6127329190613b70565b111561278c5760405162461bcd60e51b815260206004820152602360248201527f5472616e73666572206578636565647320746865206d617857616c6c657453696044820152623d329760e91b6064820152608401610ba8565b6001600160a01b03841660009081526007602052604090205460019060ff16806127ce57506001600160a01b03841660009081526007602052604090205460ff165b156127d7575060005b6001600160a01b03841660009081526003602052604090205460ff161561284f57602f54600160a01b900460ff1615801561281b5750602f54600160a81b900460ff165b1561284f57600061282b30611a3d565b9050603454811061284d57603554811061284457506035545b61284d81612ad9565b505b61285b85858584612e7d565b95945050505050565b60008060006128716131fe565b90925090506128808183613bf2565b9250505090565b6000806001600160a01b0384166128b05760405162461bcd60e51b8152600401610ba890613f2d565b6000831161290e5760405162461bcd60e51b815260206004820152602560248201527f4275726e20616d6f756e74206d7573742062652067726561746572207468616e604482015264207a65726f60d81b6064820152608401610ba8565b61291884826129d2565b1561296a5760365460ff1661296a5760405162461bcd60e51b815260206004820152601860248201527754726164696e67206e6f742079657420656e61626c65642160401b6044820152606401610ba8565b6001600160a01b03841660009081526007602052604090205460019060ff16806129ac57506001600160a01b03821660009081526007602052604090205460ff165b156129b5575060005b836026546129c39190613c5f565b60265561285b85838684612e7d565b600080546001600160a01b038481169116148015906129ff57506000546001600160a01b03838116911614155b8015612a2457506001600160a01b0382166000908152600b602052604090205460ff16155b8015612a4957506001600160a01b0383166000908152600b602052604090205460ff16155b8015612a635750602c546001600160a01b03838116911614155b8015612a7757506001600160a01b03821615155b8015612a8c57506001600160a01b0383163014155b8015612ab157506001600160a01b03821660009081526007602052604090205460ff16155b8015611275575050506001600160a01b031660009081526007602052604090205460ff161590565b602f805460ff60a01b1916600160a01b179055601f54601e54612afc9190613b70565b15612e6d5760006002601f54601e54612b159190613b70565b601e54612b229085613bbd565b612b2c9190613bf2565b612b369190613bf2565b90506000612b448284613c5f565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612b7e57612b7e613c49565b6001600160a01b03928316602091820292909201810191909152602954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfb9190613eb3565b81600181518110612c0e57612c0e613c49565b6001600160a01b03928316602091820292909201015260295460405163791ac94760e01b815291169063791ac94790612c54908590600090869030904290600401613f72565b600060405180830381600087803b158015612c6e57600080fd5b505af1158015612c82573d6000803e3d6000fd5b5050505060006002601f54601e54612c9a9190613b70565b601e54612ca79047613bbd565b612cb19190613bf2565b612cbb9190613bf2565b90508315612d9d57602954602e5460405163f305d71960e01b81523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612d33573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d589190613fe3565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612da98587613c5f565b1115612e68576021546023544791600091612dc49084613bf2565b612dce9190613bbd565b9050600060225460235484612de39190613bf2565b612ded9190613bbd565b602e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612e28573d6000803e3d6000fd5b50602f546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612e63573d6000803e3d6000fd5b505050505b505050505b50602f805460ff60a01b19169055565b603654600090610100900460ff16612f1157612e998585613381565b603654610100900460ff16158015612eb65750612eb685856129d2565b15612f115760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610ba8565b6000612f1f8686868661348f565b60808101516001600160a01b038816600090815260016020526040902054919250612f4991613c5f565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054612f809190613b70565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526008909152205460ff168015612fd457506001600160a01b03851660009081526008602052604090205460ff16155b1561301b576001600160a01b038616600090815260026020526040902054612ffd908590613c5f565b6001600160a01b03871660009081526002602052604090205561315b565b6001600160a01b03861660009081526008602052604090205460ff1615801561305c57506001600160a01b03851660009081526008602052604090205460ff165b156130a45780516001600160a01b0386166000908152600260205260409020546130869190613b70565b6001600160a01b03861660009081526002602052604090205561315b565b6001600160a01b03861660009081526008602052604090205460ff1680156130e457506001600160a01b03851660009081526008602052604090205460ff165b1561315b576001600160a01b03861660009081526002602052604090205461310d908590613c5f565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546131419190613b70565b6001600160a01b0386166000908152600260205260409020555b6040810151156131735761317386826040015161367f565b60008160a00151118061318a575060008160200151115b156131a1576131a18160a00151826020015161374b565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83600001516040516131ea91815260200190565b60405180910390a350600195945050505050565b6027546026546000918291825b600a54811015613350578260016000600a848154811061322d5761322d613c49565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061329857508160026000600a848154811061327157613271613c49565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156132ae57602754602654945094505050509091565b60016000600a83815481106132c5576132c5613c49565b60009182526020808320909101546001600160a01b031683528201929092526040019020546132f49084613c5f565b925060026000600a838154811061330d5761330d613c49565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461333c9083613c5f565b91508061334881613c88565b91505061320b565b506026546027546133619190613bf2565b821015613378576027546026549350935050509091565b90939092509050565b603654610100900460ff16156133d95760405162461bcd60e51b815260206004820152601b60248201527f4c697175696469747920697320616c72656164792061646465642e00000000006044820152606401610ba8565b6133e382826129d2565b1580156133fd5750602a546001600160a01b038281169116145b1561107e576001600160a01b0382166000908152600b602052604090819020805460ff191660019081179091556036805461ff00191661010017905542603855602f805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161348391901515815260200190565b60405180910390a15050565b6134c86040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6135016040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600061350b612864565b90506135178186613bbd565b60808301528315613629576001600160a01b03861660009081526003602052604090205460ff161561355a57601654600f556015546010556017546011556135a5565b6001600160a01b03871660009081526003602052604090205460ff161561359257601254600f556013546010556014546011556135a5565b601854600f55601954601055601a546011555b602054600f546135b59087613bbd565b6135bf9190613bf2565b602080840191909152546011546010546135d99190613b70565b6135e39087613bbd565b6135ed9190613bf2565b6040830181905260208301516136039190613b70565b61360d9086613c5f565b8252602082015161361f908290613bbd565b60a0830152613642565b6000602083018190526040830181905285835260a08301525b8082604001516136529190613bbd565b8260a001516136619190613b70565b82608001516136709190613c5f565b60608301525095945050505050565b6000613689612864565b905060006136978284613bbd565b306000908152600160205260409020549091506136b5908290613b70565b3060009081526001602090815260408083209390935560089052205460ff161561370557306000908152600260205260409020546136f4908490613b70565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b816027546137599190613c5f565b60275560285461376a908290613b70565b6028555050565b60008060006060848603121561378657600080fd5b505081359360208301359350604090920135919050565b600060208083528351808285015260005b818110156137ca578581018301518582016040015282016137ae565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611d5957600080fd5b6000806040838503121561381357600080fd5b823561381e816137eb565b946020939093013593505050565b6000806040838503121561383f57600080fd5b50508035926020909101359150565b8035801515811461385e57600080fd5b919050565b6000806040838503121561387657600080fd5b8235613881816137eb565b915061388f6020840161384e565b90509250929050565b6000806000606084860312156138ad57600080fd5b83356138b8816137eb565b925060208401356138c8816137eb565b929592945050506040919091013590565b6000602082840312156138eb57600080fd5b5035919050565b60006020828403121561390457600080fd5b8135611275816137eb565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261393657600080fd5b813567ffffffffffffffff808211156139515761395161390f565b604051601f8301601f19908116603f011681019082821181831017156139795761397961390f565b8160405283815286602085880101111561399257600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080608085870312156139c857600080fd5b84356139d3816137eb565b935060208501356139e3816137eb565b9250604085013567ffffffffffffffff80821115613a0057600080fd5b613a0c88838901613925565b93506060870135915080821115613a2257600080fd5b50613a2f87828801613925565b91505092959194509250565b600060208284031215613a4d57600080fd5b6112758261384e565b60008060408385031215613a6957600080fd5b823567ffffffffffffffff80821115613a8157600080fd5b613a8d86838701613925565b93506020850135915080821115613aa357600080fd5b50613ab085828601613925565b9150509250929050565b60008060408385031215613acd57600080fd5b8235613ad8816137eb565b91506020830135613ae8816137eb565b809150509250929050565b60008060008060808587031215613b0957600080fd5b5050823594602084013594506040840135936060013592509050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610cb057610cb0613b5a565b600181811c90821680613b9757607f821691505b602082108103613bb757634e487b7160e01b600052602260045260246000fd5b50919050565b6000816000190483118215151615613bd757613bd7613b5a565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613c0157613c01613bdc565b500490565b60208082526023908201527f4d7573742062652061626f766520302e3125206f6620746f74616c2073757070604082015262363c9760e91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b81810381811115610cb057610cb0613b5a565b634e487b7160e01b600052603160045260246000fd5b600060018201613c9a57613c9a613b5a565b5060010190565b601f82111561107c57600081815260208120601f850160051c81016020861015613cc85750805b601f850160051c820191505b81811015613ce757828155600101613cd4565b505050505050565b815167ffffffffffffffff811115613d0957613d0961390f565b613d1d81613d178454613b83565b84613ca1565b602080601f831160018114613d525760008415613d3a5750858301515b600019600386901b1c1916600185901b178555613ce7565b600085815260208120601f198616915b82811015613d8157888601518255948401946001909101908401613d62565b5085821015613d9f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b80851115613dea578160001904821115613dd057613dd0613b5a565b80851615613ddd57918102915b93841c9390800290613db4565b509250929050565b600082613e0157506001610cb0565b81613e0e57506000610cb0565b8160018114613e245760028114613e2e57613e4a565b6001915050610cb0565b60ff841115613e3f57613e3f613b5a565b50506001821b610cb0565b5060208310610133831016604e8410600b8410161715613e6d575081810a610cb0565b613e778383613daf565b8060001904821115613e8b57613e8b613b5a565b029392505050565b60006112758383613df2565b600082613eae57613eae613bdc565b500690565b600060208284031215613ec557600080fd5b8151611275816137eb565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b60208082526025908201527f43616e6e6f74207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613fc25784516001600160a01b031683529383019391830191600101613f9d565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613ff857600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212200abe63972131306ef2628dcca44ab49e1b3778bbd1754288094b5b901001136d64736f6c63430008100033

Deployed Bytecode Sourcemap

6053:23323:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7733:64;;;;;;;;;;-1:-1:-1;7733:64:0;;;;-1:-1:-1;;;;;7733:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;7733:64:0;;;;;;;;16285:373;;;;;;;;;;-1:-1:-1;16285:373:0;;;;;:::i;:::-;;:::i;:::-;;12690:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7624:35::-;;;;;;;;;;-1:-1:-1;7624:35:0;;;;-1:-1:-1;;;;;7624:35:0;;;13747:161;;;;;;;;;;-1:-1:-1;13747:161:0;;;;;:::i;:::-;;:::i;:::-;;;1951:14:1;;1944:22;1926:41;;1914:2;1899:18;13747:161:0;1786:187:1;17350:283:0;;;;;;;;;;-1:-1:-1;17350:283:0;;;;;:::i;:::-;;:::i;6803:25::-;;;;;;;;;;;;;;;;;;;2377::1;;;2365:2;2350:18;6803:25:0;2231:177:1;17047:139:0;;;;;;;;;;-1:-1:-1;17047:139:0;;;;;:::i;:::-;;:::i;19746:87::-;;;;;;;;;;-1:-1:-1;19815:10:0;;19746:87;;18876:862;;;;;;;;;;-1:-1:-1;18876:862:0;;;;;:::i;:::-;;:::i;12446:83::-;;;;;;;;;;-1:-1:-1;12519:7:0;;12446:83;;14044:252;;;;;;;;;;-1:-1:-1;14044:252:0;;;;;:::i;:::-;;:::i;15904:373::-;;;;;;;;;;-1:-1:-1;15904:373:0;;;;;:::i;:::-;;:::i;17641:248::-;;;;;;;;;;-1:-1:-1;17641:248:0;;;;;:::i;:::-;;:::i;20098:250::-;;;;;;;;;;-1:-1:-1;20098:250:0;;;;;:::i;:::-;;:::i;12536:71::-;;;;;;;;;;-1:-1:-1;12595:9:0;;12536:71;;12595:9;;;;3686:36:1;;3674:2;3659:18;12536:71:0;3544:184:1;15799:97:0;;;;;;;;;;-1:-1:-1;15799:97:0;;;;;:::i;:::-;-1:-1:-1;;;;;15874:14:0;15850:4;15874:14;;;:5;:14;;;;;;;;;15799:97;7201:36;;;;;;;;;;;;;;;;6776:25;;;;;;;;;;;;;;;;14304:208;;;;;;;;;;-1:-1:-1;14304:208:0;;;;;:::i;:::-;;:::i;16666:373::-;;;;;;;;;;-1:-1:-1;16666:373:0;;;;;:::i;:::-;;:::i;7667:21::-;;;;;;;;;;-1:-1:-1;7667:21:0;;;;-1:-1:-1;;;;;7667:21:0;;;9919:1455;;;;;;;;;;-1:-1:-1;9919:1455:0;;;;;:::i;:::-;;:::i;7986:41::-;;;;;;;;;;-1:-1:-1;7986:41:0;;;;-1:-1:-1;;;7986:41:0;;;;;;7244:24;;;;;;;;;;;;;;;;11469:767;;;;;;;;;;-1:-1:-1;11469:767:0;;;;;:::i;:::-;;:::i;13916:120::-;;;;;;;;;;-1:-1:-1;13916:120:0;;;;;:::i;:::-;;:::i;8063:20::-;;;;;;;;;;;;;;;;7805:64;;;;;;;;;;-1:-1:-1;7805:64:0;;;;-1:-1:-1;;;;;7805:64:0;;;6865:27;;;;;;;;;;;;;;;;8118:20;;;;;;;;;;;;;;;;13453:286;;;;;;;;;;-1:-1:-1;13453:286:0;;;;;:::i;:::-;;:::i;18749:119::-;;;;;;;;;;-1:-1:-1;18749:119:0;;;;;:::i;:::-;;:::i;17194:148::-;;;;;;;;;;-1:-1:-1;17194:148:0;;;;;:::i;:::-;;:::i;6749:25::-;;;;;;;;;;;;;;;;6956:26;;;;;;;;;;;;;;;;6984;;;;;;;;;;;;;;;;12976:184;;;;;;;;;;-1:-1:-1;12976:184:0;;;;;:::i;:::-;;:::i;12244:194::-;;;;;;;;;;;;;:::i;15292:379::-;;;;;;;;;;-1:-1:-1;15292:379:0;;;;;:::i;:::-;;:::i;15679:112::-;;;;;;;;;;-1:-1:-1;15679:112:0;;;;;:::i;:::-;-1:-1:-1;;;;;15771:12:0;15747:4;15771:12;;;:3;:12;;;;;;;;;15679:112;12765:71;;;;;;;;;;-1:-1:-1;12808:7:0;11447:6;-1:-1:-1;;;;;11447:6:0;12765:71;;12613:70;;;;;;;;;;;;;:::i;8237:36::-;;;;;;;;;;-1:-1:-1;8237:36:0;;;;;;;;;;;14520:218;;;;;;;;;;-1:-1:-1;14520:218:0;;;;;:::i;:::-;;:::i;13285:160::-;;;;;;;;;;-1:-1:-1;13285:160:0;;;;;:::i;:::-;;:::i;18398:166::-;;;;;;;;;;-1:-1:-1;18398:166:0;;;;;:::i;:::-;;:::i;7044:24::-;;;;;;;;;;;;;;;;28844:114;;;;;;;;;;;;;:::i;6894:27::-;;;;;;;;;;;;;;;;7018:24;;;;;;;;;;;;;;;;18570:171;;;;;;;;;;-1:-1:-1;18570:171:0;;;;;:::i;:::-;;:::i;24867:259::-;;;;;;;;;;;;;:::i;13168:109::-;;;;;;;;;;-1:-1:-1;13168:109:0;;;;;:::i;:::-;-1:-1:-1;;;;;13256:12:0;13228:7;13256:12;;;:3;:12;;;;;;;13168:109;6836:27;;;;;;;;;;;;;;;;7696:29;;;;;;;;;;-1:-1:-1;7696:29:0;;;;-1:-1:-1;;;;;7696:29:0;;;7070:24;;;;;;;;;;;;;;;;26529:185;;;;;;;;;;-1:-1:-1;26529:185:0;;;;;:::i;:::-;;:::i;12842:126::-;;;;;;;;;;-1:-1:-1;12842:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;12944:12:0;;;12926:7;12944:12;;;:4;:12;;;;;;;;:21;;;;;;;;;;;;;12842:126;14746:538;;;;;;;;;;-1:-1:-1;14746:538:0;;;;;:::i;:::-;;:::i;18194:196::-;;;;;;;;;;-1:-1:-1;18194:196:0;;;;;:::i;:::-;;:::i;17897:289::-;;;;;;;;;;-1:-1:-1;17897:289:0;;;;;:::i;:::-;;:::i;6928:26::-;;;;;;;;;;;;;;;;16285:373;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;;;;;;;;;16404:6:::1;;16393:7;:17;;:57;;;;;16444:6;;16431:9;:19;;16393:57;:97;;;;;16484:6;;16471:9;:19;;16393:97;16385:124;;;::::0;::::1;;16563:4;16550:9:::0;16528:19:::1;16538:9:::0;16528:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;16520:48;;;::::0;::::1;;16579:5;:15:::0;;;;16605:5:::1;:17:::0;16633:5:::1;:17:::0;16285:373::o;12690:69::-;12729:13;12753:3;12746:10;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12690:69;:::o;13747:161::-;13822:4;13839:39;194:10;13862:7;13871:6;13839:8;:39::i;:::-;-1:-1:-1;13896:4:0;13747:161;;;;;:::o;17350:283::-;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;17430:13:::1;17468:7;17457;17447;;:17;;;;:::i;:::-;17446:29;;;;:::i;:::-;17430:45;;17514:4;17504:7;;:14;;;;:::i;:::-;17494:5;:25;;17486:73;;;;-1:-1:-1::0;;;17486:73:0::1;;;;;;;:::i;:::-;17570:4;:12:::0;;;17602:2:::1;::::0;17618:7;;17602:12:::1;::::0;17607:7;;17602:12:::1;:::i;:::-;17601:24;;;;:::i;:::-;17593:5;:32:::0;-1:-1:-1;;;17350:283:0:o;17047:139::-;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;17132:3:::1;:8:::0;;;;17151:3:::1;:8:::0;17170:3:::1;:8:::0;17047:139::o;18876:862::-;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;18970:15;::::1;;18981:4;18970:15:::0;18966:765:::1;;-1:-1:-1::0;;;;;19011:12:0;::::1;;::::0;;;:3:::1;:12;::::0;;;;;::::1;;19010:13;19002:54;;;::::0;-1:-1:-1;;;19002:54:0;;9502:2:1;19002:54:0::1;::::0;::::1;9484:21:1::0;9541:2;9521:18;;;9514:30;9580;9560:18;;;9553:58;9628:18;;19002:54:0::1;9300:352:1::0;19002:54:0::1;-1:-1:-1::0;;;;;19074:13:0;::::1;19090:1;19074:13:::0;;;:4:::1;:13;::::0;;;;;:17;19071:107:::1;;-1:-1:-1::0;;;;;19148:13:0;::::1;;::::0;;;:4:::1;:13;::::0;;;;;19128:34:::1;::::0;:19:::1;:34::i;:::-;-1:-1:-1::0;;;;;19112:13:0;::::1;;::::0;;;:4:::1;:13;::::0;;;;:50;19071:107:::1;-1:-1:-1::0;;;;;;19192:12:0::1;;::::0;;;:3:::1;:12;::::0;;;;:19;;-1:-1:-1;;19192:19:0::1;19207:4;19192:19:::0;;::::1;::::0;;;19226:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;19226:23:0::1;::::0;;::::1;::::0;;18876:862::o;18966:765::-:1;19271:16:::0;::::1;;19282:5;19271:16:::0;19267:464:::1;;-1:-1:-1::0;;;;;19312:12:0;::::1;;::::0;;;:3:::1;:12;::::0;;;;;::::1;;19304:53;;;::::0;-1:-1:-1;;;19304:53:0;;9859:2:1;19304:53:0::1;::::0;::::1;9841:21:1::0;9898:2;9878:18;;;9871:30;9937;9917:18;;;9910:58;9985:18;;19304:53:0::1;9657:352:1::0;19304:53:0::1;19377:9;19372:348;19396:9;:16:::0;19392:20;::::1;19372:348;;;19458:7;-1:-1:-1::0;;;;;19442:23:0::1;:9;19452:1;19442:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19442:12:0::1;:23:::0;19438:267:::1;;19505:9;19515:16:::0;;:20:::1;::::0;19534:1:::1;::::0;19515:20:::1;:::i;:::-;19505:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19490:9:::1;:12:::0;;-1:-1:-1;;;;;19505:31:0;;::::1;::::0;19500:1;;19490:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;19490:46:0::1;-1:-1:-1::0;;;;;19490:46:0;;::::1;;::::0;;19559:13;;::::1;::::0;;:4:::1;:13:::0;;;;;;:17;;;19599:3:::1;:12:::0;;;;:20;;-1:-1:-1;;19599:20:0::1;::::0;;19642:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19642:15:0;;;;;-1:-1:-1;;;;;;19642:15:0::1;::::0;;;;;19680:5:::1;;19438:267;19414:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19372:348;;;;19267:464;18876:862:::0;;:::o;14044:252::-;14142:4;14159:29;14162:6;14170:9;14181:6;14159:2;:29::i;:::-;-1:-1:-1;;;;;;14230:12:0;;;;;;:4;:12;;;;;;;;194:10;14230:26;;;;;;;;;14199:67;;14208:6;;14230:35;;14259:6;;14230:35;:::i;:::-;14199:8;:67::i;:::-;-1:-1:-1;14284:4:0;14044:252;;;;;:::o;15904:373::-;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;16023:6:::1;;16012:7;:17;;:57;;;;;16063:6;;16050:9;:19;;16012:57;:97;;;;;16103:6;;16090:9;:19;;16012:97;16004:124;;;::::0;::::1;;16182:4;16169:9:::0;16147:19:::1;16157:9:::0;16147:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;16139:48;;;::::0;::::1;;16198:5;:15:::0;;;;16224:5:::1;:17:::0;16252:5:::1;:17:::0;15904:373::o;17641:248::-;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;17709:13:::1;17741:1;17736;17726:7;;:11;;;;:::i;:::-;17725:17;;;;:::i;:::-;17709:33;;17782:4;17772:7;;:14;;;;:::i;:::-;17762:5;:25;;17754:73;;;;-1:-1:-1::0;;;17754:73:0::1;;;;;;;:::i;:::-;17838:4;:12:::0;;;17870:2:::1;::::0;17880:1;;17870:6:::1;::::0;17875:1;;17870:6:::1;:::i;:::-;17869:12;;;;:::i;:::-;17861:5;:20:::0;-1:-1:-1;;;17641:248:0:o;20098:250::-;20164:7;20203;;20192;:18;;20184:73;;;;-1:-1:-1;;;20184:73:0;;10753:2:1;20184:73:0;;;10735:21:1;10792:2;10772:18;;;10765:30;10831:34;10811:18;;;10804:62;-1:-1:-1;;;10882:18:1;;;10875:40;10932:19;;20184:73:0;10551:406:1;20184:73:0;20268:19;20291:10;:8;:10::i;:::-;20268:33;-1:-1:-1;20319:21:0;20268:33;20319:7;:21;:::i;:::-;20312:28;20098:250;-1:-1:-1;;;20098:250:0:o;14304:208::-;194:10;14392:4;14441:18;;;:4;:18;;;;;;;;-1:-1:-1;;;;;14441:27:0;;;;;;;;;;14392:4;;14409:73;;14432:7;;14441:40;;14471:10;;14441:40;:::i;16666:373::-;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;16785:6:::1;;16774:7;:17;;:57;;;;;16825:6;;16812:9;:19;;16774:57;:97;;;;;16865:6;;16852:9;:19;;16774:97;16766:124;;;::::0;::::1;;16944:4;16931:9:::0;16909:19:::1;16919:9:::0;16909:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;16901:48;;;::::0;::::1;;16960:5;:15:::0;;;;16986:5:::1;:17:::0;17014:5:::1;:17:::0;16666:373::o;9919:1455::-;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;10082:3:::1;::::0;::::1;;10081:4;10073:13;;;::::0;::::1;;10099;:40:::0;;-1:-1:-1;;;;;;10099:40:0;;::::1;-1:-1:-1::0;;;;;10099:40:0;;::::1;::::0;;::::1;::::0;;;10150:3:::1;:20:::0;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;10183:20:0;;;:5:::1;:20;::::0;;;;;:27;;-1:-1:-1;;10183:27:0;;::::1;-1:-1:-1::0;10183:27:0;;::::1;::::0;;;10227:3;;;;::::1;10221:10:::0;;;;:17;;;;::::1;::::0;;::::1;::::0;;10251:3:::1;:16;10257:10:::0;10251:3;:16:::1;:::i;:::-;-1:-1:-1::0;10278:2:0::1;:17;10283:12:::0;10278:2;:17:::1;:::i;:::-;-1:-1:-1::0;10311:14:0::1;10306:2;:19:::0;10374:9:::1;:14:::0;;-1:-1:-1;;10374:14:0::1;10386:2;10374:14:::0;;::::1;::::0;;;10403:12:::1;:24:::0;10554:12:::1;::::0;10550:16:::1;::::0;:2:::1;:16;:::i;:::-;10544:2;;:23;;;;:::i;:::-;10534:7;:33:::0;;;10596:13:::1;::::0;-1:-1:-1;;10596:13:0::1;:::i;:::-;10589:21;::::0;-1:-1:-1;;10589:21:0::1;:::i;:::-;10578:7;:33:::0;10655:14:::1;::::0;10624:9:::1;:46:::0;;-1:-1:-1;;;;;;10624:46:0::1;-1:-1:-1::0;;;;;10655:14:0;;::::1;10624:46:::0;;::::1;::::0;;10708:19:::1;::::0;;-1:-1:-1;;;10708:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;10655:14;10708:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10690:49:0::1;;10740:9;;;;;;;;;-1:-1:-1::0;;;;;10740:9:0::1;-1:-1:-1::0;;;;;10740:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10690:82;::::0;-1:-1:-1;;;;;;10690:82:0::1;::::0;;;;;;-1:-1:-1;;;;;15143:15:1;;;10690:82:0::1;::::0;::::1;15125:34:1::0;10766:4:0::1;15175:18:1::0;;;15168:43;15060:18;;10690:82:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10681:6;:91:::0;;-1:-1:-1;;;;;;10681:91:0::1;-1:-1:-1::0;;;;;10681:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;10783:12:0;;;:4:::1;:12;::::0;;;;;;;:19;;-1:-1:-1;;10783:19:0::1;-1:-1:-1::0;10783:19:0::1;::::0;;10826:4:::1;10813:19:::0;;:4:::1;:19:::0;;;;;10841:9:::1;::::0;;;::::1;10813:39:::0;;;;;;-1:-1:-1;;10813:59:0;;10901:7:::1;::::0;10919:6:::1;::::0;10901:14:::1;::::0;10911:4:::1;10901:14;:::i;:::-;10900:25;;;;:::i;:::-;10893:4;:32:::0;10945:2:::1;::::0;10957:6:::1;::::0;10945:8:::1;::::0;10950:3:::1;10945:8;:::i;:::-;10944:19;;;;:::i;:::-;10936:5;:27:::0;10982:7:::1;::::0;10998:4:::1;::::0;10982:12:::1;::::0;10992:2:::1;10982:12;:::i;:::-;10981:21;;;;:::i;:::-;10974:4;:28:::0;11022:2:::1;::::0;11033:4:::1;::::0;11022:7:::1;::::0;11027:2:::1;11022:7;:::i;:::-;11021:16;;;;:::i;:::-;11013:5;:24:::0;11065:7:::1;::::0;11080:5:::1;::::0;11065:11:::1;::::0;11075:1:::1;11065:11;:::i;:::-;11064:21;;;;:::i;:::-;11048:13;:37:::0;11110:7:::1;::::0;11125:4:::1;::::0;11110:11:::1;::::0;11120:1:::1;11110:11;:::i;:::-;11109:20;;;;:::i;:::-;11096:10;:33:::0;11150:14:::1;::::0;11142:42:::1;::::0;-1:-1:-1;;;;;11150:14:0::1;-1:-1:-1::0;;11142:7:0::1;:42::i;:::-;-1:-1:-1::0;11197:3:0::1;:10:::0;;-1:-1:-1;;11197:10:0::1;11203:4;11197:10:::0;;::::1;::::0;;;11234:7:::1;::::0;;11197:3:::1;11223:7;11420::::0;11447:6;-1:-1:-1;;;;;11447:6:0;;11382:79;11223:7:::1;-1:-1:-1::0;;;;;11218:13:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;11218:13:0;:23;11272:7:::1;11420::::0;11447:6;-1:-1:-1;;;;;11447:6:0;;11382:79;11272:7:::1;11266:4;::::0;11281:7:::1;::::0;11257:32:::1;::::0;2377:25:1;;;-1:-1:-1;;;;;11257:32:0;;::::1;::::0;11266:4;;::::1;::::0;11257:32:::1;::::0;2365:2:1;2350:18;11257:32:0::1;;;;;;;11334:9;::::0;11302:62:::1;::::0;11319:4:::1;::::0;-1:-1:-1;;;;;11334:9:0::1;-1:-1:-1::0;;11302:8:0::1;:62::i;:::-;9919:1455:::0;;;;:::o;11469:767::-;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11550:22:0;::::1;11542:96;;;;-1:-1:-1::0;;;11542:96:0::1;;;;;;;:::i;:::-;11669:4;::::0;-1:-1:-1;;;;;11669:4:0;;::::1;11657:16:::0;;::::1;::::0;11649:90:::1;;;;-1:-1:-1::0;;;11649:90:0::1;;;;;;;:::i;:::-;11769:6;::::0;;11750:33:::1;::::0;-1:-1:-1;;;;;11769:6:0;;::::1;::::0;11750:18:::1;:33::i;:::-;11794:34;11813:8;11823:4;11794:18;:34::i;:::-;11839:37;11861:8;11871:4;11839:21;:37::i;:::-;11916:6;::::0;11901:3:::1;::::0;-1:-1:-1;;;;;11916:6:0;;::::1;11901:3:::0;::::1;:22:::0;11897:64:::1;;11938:3;:23:::0;;-1:-1:-1;;;;;;11938:23:0::1;-1:-1:-1::0;;;;;11938:23:0;::::1;;::::0;;11897:64:::1;12017:6;::::0;12007:17:::1;::::0;-1:-1:-1;;;;;12017:6:0::1;12007:9;:17::i;:::-;11982:12;11987:6:::0;;-1:-1:-1;;;;;11987:6:0;;::::1;11982:12:::0;;:4:::1;:12;::::0;;;;;;;:22;;::::1;::::0;;;;;;;:42;;;;12048:6;;11982:12;;12038:17:::1;::::0;12048:6:::1;12038:9;:17::i;:::-;:21;12035:92;;;12079:6;::::0;12076:39:::1;::::0;-1:-1:-1;;;;;12079:6:0::1;12087:8:::0;12097:17:::1;12079:6:::0;12097:9:::1;:17::i;:::-;12076:2;:39::i;:::-;;12035:92;12147:6;:17:::0;;-1:-1:-1;;;;;;12147:17:0::1;-1:-1:-1::0;;;;;12147:17:0;::::1;::::0;;::::1;::::0;;12180:38:::1;::::0;12147:17;;;;12180:38:::1;::::0;12147:6;12180:38:::1;11469:767:::0;:::o;13916:120::-;13969:4;13993:35;14001:7;-1:-1:-1;;13993:7:0;:35::i;13453:286::-;13509:4;13526:16;13559:12;;13555:2;:16;;;;:::i;:::-;13545:27;;:6;:27;:::i;:::-;194:10;13583:18;13604:17;;;:3;:17;;;;;;13526:46;;-1:-1:-1;13652:19:0;13665:6;13604:17;13652:19;:::i;:::-;194:10;13632:17;;;;:3;:17;;;;;:39;;;;13682:27;;13700:8;13682:3;:27::i;:::-;-1:-1:-1;13727:4:0;;13453:286;-1:-1:-1;;;;13453:286:0:o;18749:119::-;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18836:14:0;;;::::1;;::::0;;;:5:::1;:14;::::0;;;;:24;;-1:-1:-1;;18836:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18749:119::o;17194:148::-;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;17281:15:::1;:27:::0;;;;17319:3:::1;:15:::0;17194:148::o;12976:184::-;-1:-1:-1;;;;;13066:12:0;;13042:7;13066:12;;;:3;:12;;;;;;;;13062:38;;;-1:-1:-1;;;;;;13087:13:0;;;;;:4;:13;;;;;;;12976:184::o;13062:38::-;-1:-1:-1;;;;;13138:13:0;;;;;;:4;:13;;;;;;13118:34;;:19;:34::i;12244:194::-;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;12330:6:::1;::::0;;12311:33:::1;::::0;-1:-1:-1;;;;;12330:6:0;;::::1;::::0;12311:18:::1;:33::i;:::-;12372:1;12355:19:::0;;-1:-1:-1;;;;;;12355:19:0::1;::::0;;12390:40:::1;::::0;12372:1;;12390:40:::1;::::0;12372:1;;12390:40:::1;12244:194::o:0;15292:379::-;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;15373:16;::::1;;15384:5;15373:16:::0;15369:295:::1;;-1:-1:-1::0;;;;;;15406:10:0::1;15419:5;15406:10:::0;;;:4:::1;:10;::::0;;;;:18;;-1:-1:-1;;15406:18:0::1;::::0;;18876:862::o;15369:295::-:1;15461:4;::::0;:9;15457:127:::1;;15524:7;15517:4;;15499:15;:22;;;;:::i;:::-;:32;15491:77;;;::::0;-1:-1:-1;;;15491:77:0;;15854:2:1;15491:77:0::1;::::0;::::1;15836:21:1::0;;;15873:18;;;15866:30;15932:34;15912:18;;;15905:62;15984:18;;15491:77:0::1;15652:356:1::0;15491:77:0::1;-1:-1:-1::0;;;;;15598:10:0;::::1;;::::0;;;:4:::1;:10;::::0;;;;:17;;-1:-1:-1;;15598:17:0::1;15611:4;15598:17;::::0;;15637:15:::1;15630:4;:22:::0;15292:379;;:::o;12613:70::-;12654:13;12678:2;12671:9;;;;;:::i;14520:218::-;194:10;14613:4;14662:18;;;:4;:18;;;;;;;;-1:-1:-1;;;;;14662:27:0;;;;;;;;;;14613:4;;14630:78;;14653:7;;14662:45;;14692:15;;14662:45;:::i;13285:160::-;13363:4;13380:35;194:10;13397:9;13408:6;13380:2;:35::i;18398:166::-;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;18481:3:::1;::::0;-1:-1:-1;;;;;18481:16:0;;::::1;:3:::0;::::1;:16:::0;18473:48:::1;;;::::0;-1:-1:-1;;;18473:48:0;;16215:2:1;18473:48:0::1;::::0;::::1;16197:21:1::0;16254:2;16234:18;;;16227:30;-1:-1:-1;;;16273:18:1;;;16266:49;16332:18;;18473:48:0::1;16013:343:1::0;18473:48:0::1;18532:3;:24:::0;;-1:-1:-1;;;;;;18532:24:0::1;-1:-1:-1::0;;;;;18532:24:0;;;::::1;::::0;;;::::1;::::0;;18398:166::o;28844:114::-;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;11420:7;11447:6;;28902:48:::1;::::0;-1:-1:-1;;;;;11447:6:0;;;;28928:21:::1;28902:48:::0;::::1;;;::::0;28928:21;;28902:48;11420:7;28902:48;28928:21;11447:6;28902:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28844:114::o:0;18570:171::-;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;18647:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;18647:32:0::1;-1:-1:-1::0;;;;18647:32:0;;::::1;;::::0;;18695:38:::1;::::0;::::1;::::0;::::1;::::0;18671:8;1951:14:1;1944:22;1926:41;;1914:2;1899:18;;1786:187;18695:38:0::1;;;;;;;;18570:171:::0;:::o;24867:259::-;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;24924:2:::1;::::0;::::1;;24923:3;24915:43;;;::::0;-1:-1:-1;;;24915:43:0;;16563:2:1;24915:43:0::1;::::0;::::1;16545:21:1::0;16602:2;16582:18;;;16575:30;16641:29;16621:18;;;16614:57;16688:18;;24915:43:0::1;16361:351:1::0;24915:43:0::1;24969:42;24999:4;25006;24969:21;:42::i;:::-;25044:6;::::0;25022:35:::1;::::0;-1:-1:-1;;;;;25044:6:0::1;::::0;25022:21:::1;:35::i;:::-;25070:2;:9:::0;;-1:-1:-1;;25070:9:0::1;25075:4;25070:9;::::0;;25090:21:::1;:28:::0;;-1:-1:-1;;;;25090:28:0::1;-1:-1:-1::0;;;25090:28:0::1;::::0;;24867:259::o;26529:185::-;26626:3;;-1:-1:-1;;;;;26626:3:0;194:10;-1:-1:-1;;;;;26610:19:0;;26601:62;;;;-1:-1:-1;;;26601:62:0;;16919:2:1;26601:62:0;;;16901:21:1;16958:2;16938:18;;;16931:30;16997:31;16977:18;;;16970:59;17046:18;;26601:62:0;16717:353:1;26601:62:0;26678:3;:9;26684:3;26678;:9;:::i;:::-;-1:-1:-1;26698:2:0;:8;26703:3;26698:2;:8;:::i;14746:538::-;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;14819:29:::1;14870:9;14819:61;;14891:11;14923:10;-1:-1:-1::0;;;;;14923:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14905:47:0::1;;14961:4;14968:10;-1:-1:-1::0;;;;;14968:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14905:81;::::0;-1:-1:-1;;;;;;14905:81:0::1;::::0;;;;;;-1:-1:-1;;;;;15143:15:1;;;14905:81:0::1;::::0;::::1;15125:34:1::0;15195:15;;15175:18;;;15168:43;15060:18;;14905:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14891:95:::0;-1:-1:-1;;;;;;15001:17:0;::::1;14997:197;;15062:10;-1:-1:-1::0;;;;;15062:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15044:50:0::1;;15103:4;15110:10;-1:-1:-1::0;;;;;15110:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15044:84;::::0;-1:-1:-1;;;;;;15044:84:0::1;::::0;;;;;;-1:-1:-1;;;;;15143:15:1;;;15044:84:0::1;::::0;::::1;15125:34:1::0;15195:15;;15175:18;;;15168:43;15060:18;;15044:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15035:6;:93:::0;;-1:-1:-1;;;;;;15035:93:0::1;-1:-1:-1::0;;;;;15035:93:0;;;::::1;::::0;;;::::1;::::0;;14997:197:::1;;;15170:6;:12:::0;;-1:-1:-1;;;;;;15170:12:0::1;-1:-1:-1::0;;;;;15170:12:0;::::1;;::::0;;14997:197:::1;15204:9;:22:::0;;-1:-1:-1;;;;;;15204:22:0::1;-1:-1:-1::0;;;;;15204:22:0;::::1;;::::0;;15237:39:::1;15254:4;15261:9:::0;-1:-1:-1;;15237:8:0::1;:39::i;18194:196::-:0;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;18287:13:::1;::::0;-1:-1:-1;;;;;18287:26:0;;::::1;:13:::0;::::1;:26:::0;18279:58:::1;;;::::0;-1:-1:-1;;;18279:58:0;;16215:2:1;18279:58:0::1;::::0;::::1;16197:21:1::0;16254:2;16234:18;;;16227:30;-1:-1:-1;;;16273:18:1;;;16266:49;16332:18;;18279:58:0::1;16013:343:1::0;18279:58:0::1;18348:13;:34:::0;;-1:-1:-1;;;;;;18348:34:0::1;-1:-1:-1::0;;;;;18348:34:0;;;::::1;::::0;;;::::1;::::0;;18194:196::o;17897:289::-;9064:6;;-1:-1:-1;;;;;9064:6:0;194:10;9064:22;9056:67;;;;-1:-1:-1;;;9056:67:0;;;;;;;:::i;:::-;18097:16:::1;18077;18067:7;;:26;;;;:::i;:::-;18066:47;;;;:::i;:::-;18050:13;:63:::0;18138:7:::1;::::0;18165:13;;18138:23:::1;::::0;18148:13;;18138:23:::1;:::i;:::-;18137:41;;;;:::i;:::-;18124:10;:54:::0;-1:-1:-1;;;;17897:289:0:o;20360:335::-;-1:-1:-1;;;;;20455:20:0;;20447:69;;;;-1:-1:-1;;;20447:69:0;;17277:2:1;20447:69:0;;;17259:21:1;17316:2;17296:18;;;17289:30;17355:34;17335:18;;;17328:62;-1:-1:-1;;;17406:18:1;;;17399:34;17450:19;;20447:69:0;17075:400:1;20447:69:0;-1:-1:-1;;;;;20535:21:0;;20527:68;;;;-1:-1:-1;;;20527:68:0;;17682:2:1;20527:68:0;;;17664:21:1;17721:2;17701:18;;;17694:30;17760:34;17740:18;;;17733:62;-1:-1:-1;;;17811:18:1;;;17804:32;17853:19;;20527:68:0;17480:398:1;20527:68:0;-1:-1:-1;;;;;20608:12:0;;;;;;;:4;:12;;;;;;;;:21;;;;;;;;;;;;;:30;;;20654:33;;2377:25:1;;;20654:33:0;;2350:18:1;20654:33:0;;;;;;;20360:335;;;:::o;20703:1685::-;20775:4;-1:-1:-1;;;;;20800:18:0;;20792:68;;;;-1:-1:-1;;;20792:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20879:16:0;;20871:64;;;;-1:-1:-1;;;20871:64:0;;18491:2:1;20871:64:0;;;18473:21:1;18530:2;18510:18;;;18503:30;18569:34;18549:18;;;18542:62;-1:-1:-1;;;18620:18:1;;;18613:33;18663:19;;20871:64:0;18289:399:1;20871:64:0;20963:1;20954:6;:10;20946:64;;;;-1:-1:-1;;;20946:64:0;;18895:2:1;20946:64:0;;;18877:21:1;18934:2;18914:18;;;18907:30;18973:34;18953:18;;;18946:62;-1:-1:-1;;;19024:18:1;;;19017:39;19073:19;;20946:64:0;18693:405:1;20946:64:0;21024:20;21035:4;21041:2;21024:10;:20::i;:::-;21021:734;;;21065:2;;;;21061:77;;21088:34;;-1:-1:-1;;;21088:34:0;;19305:2:1;21088:34:0;;;19287:21:1;19344:2;19324:18;;;19317:30;-1:-1:-1;;;19363:18:1;;;19356:54;19427:18;;21088:34:0;19103:348:1;21061:77:0;21156:15;;;;21152:352;;;-1:-1:-1;;;;;21196:10:0;;;;;;:4;:10;;;;;;;;21192:297;;;21255:16;:12;21270:1;21255:16;:::i;:::-;-1:-1:-1;;;;;21238:13:0;;;;;;:9;:13;;;;;;:33;21230:42;;;;;;-1:-1:-1;;;;;21295:13:0;;;;;;:9;:13;;;;;21311:12;21295:28;;21192:297;;;21399:16;:12;21414:1;21399:16;:::i;:::-;-1:-1:-1;;;;;21380:15:0;;;;;;:9;:15;;;;;;:35;21372:44;;;;;;-1:-1:-1;;;;;21439:15:0;;;;;;:9;:15;;;;;21457:12;21439:30;;21192:297;21536:4;;21526:6;:14;;21518:60;;;;-1:-1:-1;;;21518:60:0;;19658:2:1;21518:60:0;;;19640:21:1;19697:2;19677:18;;;19670:30;19736:34;19716:18;;;19709:62;-1:-1:-1;;;19787:18:1;;;19780:31;19828:19;;21518:60:0;19456:397:1;21518:60:0;21602:14;;-1:-1:-1;;;;;21596:20:0;;;21602:14;;21596:20;;;;:33;;-1:-1:-1;;;;;;21621:8:0;;;;;;:4;:8;;;;;;;;21620:9;21596:33;21593:151;;;21684:4;;21674:6;21658:13;21668:2;21658:9;:13::i;:::-;:22;;;;:::i;:::-;:30;;21650:78;;;;-1:-1:-1;;;21650:78:0;;20060:2:1;21650:78:0;;;20042:21:1;20099:2;20079:18;;;20072:30;20138:34;20118:18;;;20111:62;-1:-1:-1;;;20189:18:1;;;20182:33;20232:19;;21650:78:0;19858:399:1;21650:78:0;-1:-1:-1;;;;;21798:11:0;;21765:12;21798:11;;;:5;:11;;;;;;21780:4;;21798:11;;;:24;;-1:-1:-1;;;;;;21813:9:0;;;;;;:5;:9;;;;;;;;21798:24;21795:70;;;-1:-1:-1;21848:5:0;21795:70;-1:-1:-1;;;;;21881:8:0;;;;;;:4;:8;;;;;;;;21877:454;;;21911:16;;-1:-1:-1;;;21911:16:0;;;;21910:17;:59;;;;-1:-1:-1;21948:21:0;;-1:-1:-1;;;21948:21:0;;;;21910:59;21906:408;;;22004:28;22035:24;22053:4;22035:9;:24::i;:::-;22004:55;;22106:13;;22082:20;:37;22078:221;;22171:10;;22147:20;:34;22144:77;;-1:-1:-1;22208:10:0;;22144:77;22243:36;22258:20;22243:14;:36::i;:::-;21985:329;21906:408;22349:31;22354:4;22360:2;22364:6;22372:7;22349:4;:31::i;:::-;22342:38;20703:1685;-1:-1:-1;;;;;20703:1685:0:o;27977:161::-;28019:7;28040:15;28057;28076:19;:17;:19::i;:::-;28039:56;;-1:-1:-1;28039:56:0;-1:-1:-1;28113:17:0;28039:56;;28113:17;:::i;:::-;28106:24;;;;27977:161;:::o;22396:601::-;22457:4;;-1:-1:-1;;;;;22516:18:0;;22508:68;;;;-1:-1:-1;;;22508:68:0;;;;;;;:::i;:::-;22604:1;22595:6;:10;22587:60;;;;-1:-1:-1;;;22587:60:0;;20464:2:1;22587:60:0;;;20446:21:1;20503:2;20483:18;;;20476:30;20542:34;20522:18;;;20515:62;-1:-1:-1;;;20593:18:1;;;20586:35;20638:19;;22587:60:0;20262:401:1;22587:60:0;22661:20;22672:4;22678:2;22661:10;:20::i;:::-;22658:128;;;22702:2;;;;22698:77;;22725:34;;-1:-1:-1;;;22725:34:0;;19305:2:1;22725:34:0;;;19287:21:1;19344:2;19324:18;;;19317:30;-1:-1:-1;;;19363:18:1;;;19356:54;19427:18;;22725:34:0;19103:348:1;22698:77:0;-1:-1:-1;;;;;22829:11:0;;22796:12;22829:11;;;:5;:11;;;;;;22811:4;;22829:11;;;:24;;-1:-1:-1;;;;;;22844:9:0;;;;;;:5;:9;;;;;;;;22829:24;22826:70;;;-1:-1:-1;22879:5:0;22826:70;22931:6;22920:7;;:18;;;;:::i;:::-;22910:7;:28;22956:31;22961:4;22967:2;22971:6;22979:7;22956:4;:31::i;19841:249::-;19910:4;11447:6;;-1:-1:-1;;;;;19934:15:0;;;11447:6;;19934:15;;;;:33;;-1:-1:-1;11420:7:0;11447:6;-1:-1:-1;;;;;19954:13:0;;;11447:6;;19954:13;;19934:33;:45;;;;-1:-1:-1;;;;;;19972:7:0;;;;;;:3;:7;;;;;;;;19971:8;19934:45;:59;;;;-1:-1:-1;;;;;;19984:9:0;;;;;;:3;:9;;;;;;;;19983:10;19934:59;:73;;;;-1:-1:-1;20003:4:0;;-1:-1:-1;;;;;19997:10:0;;;20003:4;;19997:10;;19934:73;:93;;;;-1:-1:-1;;;;;;20011:16:0;;;;19934:93;:118;;;;-1:-1:-1;;;;;;20031:21:0;;20047:4;20031:21;;19934:118;:132;;;;-1:-1:-1;;;;;;20057:9:0;;;;;;:5;:9;;;;;;;;20056:10;19934:132;:148;;;;-1:-1:-1;;;;;;;;20071:11:0;;;;;:5;:11;;;;;;;;20070:12;;19841:249::o;23005:1421::-;8938:16;:23;;-1:-1:-1;;;;8938:23:0;-1:-1:-1;;;8938:23:0;;;23113:3:::1;::::0;23095:15:::1;::::0;:21:::1;::::0;23113:3;23095:21:::1;:::i;:::-;23091:52:::0;23136:7:::1;23091:52;23153:17;23244:1;23236:3;;23218:15;;:21;;;;:::i;:::-;23198:15;::::0;23175:38:::1;::::0;:20;:38:::1;:::i;:::-;23174:66;;;;:::i;:::-;23173:72;;;;:::i;:::-;23153:92:::0;-1:-1:-1;23258:20:0::1;23281:32;23153:92:::0;23281:20;:32:::1;:::i;:::-;23350:16;::::0;;23364:1:::1;23350:16:::0;;;;;::::1;::::0;;23258:55;;-1:-1:-1;23326:21:0::1;::::0;23350:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23350:16:0::1;23326:40;;23395:4;23377;23382:1;23377:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23377:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23421:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;23421:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;23377:7;;23421:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23411:4;23416:1;23411:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23411:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;23450:9:::1;::::0;:191:::1;::::0;-1:-1:-1;;;23450:191:0;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;23525:12;;23450:9:::1;::::0;23568:4;;23595::::1;::::0;23615:15:::1;::::0;23450:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23656:24;23755:1;23747:3;;23729:15;;:21;;;;:::i;:::-;23709:15;::::0;23685:39:::1;::::0;:21:::1;:39;:::i;:::-;23684:67;;;;:::i;:::-;23683:73;;;;:::i;:::-;23656:100:::0;-1:-1:-1;23773:13:0;;23769:343:::1;;23803:9;::::0;23974:3:::1;::::0;23803:223:::1;::::0;-1:-1:-1;;;23803:223:0;;23880:4:::1;23803:223;::::0;::::1;22002:34:1::0;22052:18;;;22045:34;;;23803:9:0::1;22095:18:1::0;;;22088:34;;;22138:18;;;22131:34;-1:-1:-1;;;;;23974:3:0;;::::1;22181:19:1::0;;;22174:44;23996:15:0::1;22234:19:1::0;;;22227:35;23803:9:0;::::1;::::0;:25:::1;::::0;23836:16;;21936:19:1;;23803:223:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;24046:54:0::1;::::0;;22786:25:1;;;22842:2;22827:18;;22820:34;;;22870:18;;;22863:34;;;24046:54:0::1;::::0;-1:-1:-1;22774:2:1;22759:18;24046:54:0::1;;;;;;;23769:343;24161:1;24126:32;24149:9:::0;24126:20;:32:::1;:::i;:::-;:36;24122:297;;;24277:3;::::0;24271::::1;::::0;24206:21:::1;::::0;24181::::1;::::0;24256:19:::1;::::0;24206:21;24256:19:::1;:::i;:::-;:25;;;;:::i;:::-;24243:38;;24296:10;24330:3;;24324;;24309:13;:19;;;;:::i;:::-;:25;;;;:::i;:::-;24336:3;::::0;:16:::1;::::0;24296:38;;-1:-1:-1;;;;;;24336:3:0::1;::::0;:16;::::1;;;::::0;24296:38;;24336:3:::1;:16:::0;:3;:16;24296:38;24336:3;:16;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;24368:13:0::1;::::0;:26:::1;::::0;-1:-1:-1;;;;;24368:13:0;;::::1;::::0;:26;::::1;;;::::0;24391:2;;24368:13:::1;:26:::0;:13;:26;24391:2;24368:13;:26;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24164:255;;;24122:297;23080:1346;;;;8972:1;-1:-1:-1::0;8984:16:0;:24;;-1:-1:-1;;;;8984:24:0;;;23005:1421::o;25340:1181::-;25455:16;;25429:4;;25455:16;;;;;25450:237;;25492:28;25511:4;25517:2;25492:18;:28::i;:::-;25544:16;;;;;;;25543:17;:41;;;;;25564:20;25575:4;25581:2;25564:10;:20::i;:::-;25539:137;;;25609:47;;-1:-1:-1;;;25609:47:0;;23110:2:1;25609:47:0;;;23092:21:1;23149:2;23129:18;;;23122:30;23188:34;23168:18;;;23161:62;-1:-1:-1;;;23239:18:1;;;23232:35;23284:19;;25609:47:0;22908:401:1;25539:137:0;25707:25;25735:38;25746:4;25752:2;25756:7;25765;25735:10;:38::i;:::-;25812:14;;;;-1:-1:-1;;;;;25799:10:0;;;;;;:4;:10;;;;;;25707:66;;-1:-1:-1;25799:27:0;;;:::i;:::-;-1:-1:-1;;;;;25786:10:0;;;;;;;:4;:10;;;;;;:40;;;;25859:22;;;;25848:8;;;;;;;;;;:33;;25859:22;25848:33;:::i;:::-;-1:-1:-1;;;;;25837:8:0;;;;;;;:4;:8;;;;;;;;:44;;;;25898:9;;;;;:3;:9;;;;;;;:21;;;;-1:-1:-1;;;;;;25912:7:0;;;;;;:3;:7;;;;;;;;25911:8;25898:21;25894:344;;;-1:-1:-1;;;;;25949:10:0;;;;;;:4;:10;;;;;;:20;;25962:7;;25949:20;:::i;:::-;-1:-1:-1;;;;;25936:10:0;;;;;;:4;:10;;;;;:33;25894:344;;;-1:-1:-1;;;;;25992:9:0;;;;;;:3;:9;;;;;;;;25991:10;:21;;;;-1:-1:-1;;;;;;26005:7:0;;;;;;:3;:7;;;;;;;;25991:21;25987:251;;;26051:22;;-1:-1:-1;;;;;26040:8:0;;26051:22;26040:8;;;:4;:8;;;;;;:33;;26051:22;26040:33;:::i;:::-;-1:-1:-1;;;;;26029:8:0;;;;;;:4;:8;;;;;:44;25987:251;;;-1:-1:-1;;;;;26097:9:0;;;;;;:3;:9;;;;;;;;:20;;;;-1:-1:-1;;;;;;26110:7:0;;;;;;:3;:7;;;;;;;;26097:20;26093:145;;;-1:-1:-1;;;;;26147:10:0;;;;;;:4;:10;;;;;;:20;;26160:7;;26147:20;:::i;:::-;-1:-1:-1;;;;;26134:10:0;;;;;;;:4;:10;;;;;;:33;;;;26204:22;;26193:8;;;;;;;;;;:33;;26204:22;26193:33;:::i;:::-;-1:-1:-1;;;;;26182:8:0;;;;;;:4;:8;;;;;:44;26093:145;26254:17;;;;:21;26250:79;;26290:39;26305:4;26311:6;:17;;;26290:14;:39::i;:::-;26358:1;26344:6;:11;;;:15;:34;;;;26377:1;26363:6;:11;;;:15;26344:34;26340:91;;;26393:38;26406:6;:11;;;26419:6;:11;;;26393:12;:38::i;:::-;26464:2;-1:-1:-1;;;;;26449:42:0;26458:4;-1:-1:-1;;;;;26449:42:0;;26468:6;:22;;;26449:42;;;;2377:25:1;;2365:2;2350:18;;2231:177;26449:42:0;;;;;;;;-1:-1:-1;26509:4:0;;25340:1181;-1:-1:-1;;;;;25340:1181:0:o;28146:535::-;28244:7;;28280;;28197;;;;;28298:271;28322:9;:16;28318:20;;28298:271;;;28385:7;28364:4;:18;28369:9;28379:1;28369:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28369:12:0;28364:18;;;;;;;;;;;;;:28;;:60;;;28417:7;28396:4;:18;28401:9;28411:1;28401:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28401:12:0;28396:18;;;;;;;;;;;;;:28;28364:60;28360:91;;;28434:7;;28443;;28426:25;;;;;;;28146:535;;:::o;28360:91::-;28486:4;:18;28491:9;28501:1;28491:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28491:12:0;28486:18;;;;;;;;;;;;;28476:28;;:7;:28;:::i;:::-;28466:38;;28539:4;:18;28544:9;28554:1;28544:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28544:12:0;28539:18;;;;;;;;;;;;;28529:28;;:7;:28;:::i;:::-;28519:38;-1:-1:-1;28340:3:0;;;;:::i;:::-;;;;28298:271;;;;28603:7;;28593;;:17;;;;:::i;:::-;28583:7;:27;28579:58;;;28620:7;;28629;;28612:25;;;;;;28146:535;;:::o;28579:58::-;28656:7;;28665;;-1:-1:-1;28146:535:0;-1:-1:-1;28146:535:0:o;24442:417::-;24525:16;;;;;;;24524:17;24516:57;;;;-1:-1:-1;;;24516:57:0;;23516:2:1;24516:57:0;;;23498:21:1;23555:2;23535:18;;;23528:30;23594:29;23574:18;;;23567:57;23641:18;;24516:57:0;23314:351:1;24516:57:0;24589:20;24600:4;24606:2;24589:10;:20::i;:::-;24588:21;:37;;;;-1:-1:-1;24619:6:0;;-1:-1:-1;;;;;24613:12:0;;;24619:6;;24613:12;24588:37;24584:268;;;-1:-1:-1;;;;;24642:9:0;;;;;;:3;:9;;;;;;;:16;;-1:-1:-1;;24642:16:0;24654:4;24642:16;;;;;;24673;:23;;-1:-1:-1;;24673:23:0;24642:16;24673:23;;;24726:15;24711:12;:30;24758:21;:28;;-1:-1:-1;;;;24758:28:0;-1:-1:-1;;;24758:28:0;;;24806:34;;;;;;1951:14:1;;1944:22;1926:41;;1914:2;1899:18;;1786:187;24806:34:0;;;;;;;;24442:417;;:::o;26722:1247::-;26817:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26817:18:0;26848:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26848:25:0;26884:19;26906:10;:8;:10::i;:::-;26884:32;-1:-1:-1;26946:21:0;26884:32;26946:7;:21;:::i;:::-;26929:14;;;:38;26980:854;;;;-1:-1:-1;;;;;27011:8:0;;;;;;:4;:8;;;;;;;;27007:369;;;27047:5;;27040:4;:12;27078:5;;27071:4;:12;27109:5;;27102:4;:12;27007:369;;;-1:-1:-1;;;;;27140:10:0;;;;;;:4;:10;;;;;;;;27136:240;;;27178:5;;27171:4;:12;27209:5;;27202:4;:12;27240:5;;27233:4;:12;27136:240;;;27293:5;;27286:4;:12;27324:5;;27317:4;:12;27355:5;;27348:4;:12;27136:240;27425:16;;27417:4;;27407:14;;:7;:14;:::i;:::-;27406:35;;;;:::i;:::-;27392:11;;;;:49;;;;27504:16;27495:4;;27488;;:11;;27495:4;27488:11;:::i;:::-;27477:23;;:7;:23;:::i;:::-;27476:44;;;;:::i;:::-;27456:17;;;:64;;;27571:11;;;;:31;;27456:64;27571:31;:::i;:::-;27560:43;;:7;:43;:::i;:::-;27535:68;;27634:11;;;;:25;;27648:11;;27634:25;:::i;:::-;27620:11;;;:39;26980:854;;;27706:1;27692:11;;;:15;;;27722:17;;;:21;;;27758:32;;;27807:11;;;:15;26980:854;27924:11;27904:6;:17;;;:31;;;;:::i;:::-;27889:6;:11;;;:47;;;;:::i;:::-;27871:6;:14;;;:66;;;;:::i;:::-;27846:22;;;:91;-1:-1:-1;27846:22:0;26722:1247;-1:-1:-1;;;;;26722:1247:0:o;28970:403::-;29050:19;29073:10;:8;:10::i;:::-;29050:33;-1:-1:-1;29094:18:0;29115:24;29050:33;29115:10;:24;:::i;:::-;29185:4;29172:19;;;;:4;:19;;;;;;29094:45;;-1:-1:-1;29172:32:0;;29094:45;;29172:32;:::i;:::-;29163:4;29150:19;;;;:4;:19;;;;;;;;:54;;;;29218:3;:18;;;;;;29215:90;;;29286:4;29273:19;;;;:4;:19;;;;;;:32;;29295:10;;29273:32;:::i;:::-;29264:4;29251:19;;;;:4;:19;;;;;:54;29215:90;29321:43;;2377:25:1;;;29346:4:0;;-1:-1:-1;;;;;29321:43:0;;;;;2365:2:1;2350:18;29321:43:0;;;;;;;29039:334;;28970:403;;:::o;28693:143::-;28783:4;28773:7;;:14;;;;:::i;:::-;28763:7;:24;28811:10;;:17;;28824:4;;28811:17;:::i;:::-;28798:10;:30;-1:-1:-1;;28693:143:0:o;222:316:1:-;299:6;307;315;368:2;356:9;347:7;343:23;339:32;336:52;;;384:1;381;374:12;336:52;-1:-1:-1;;407:23:1;;;477:2;462:18;;449:32;;-1:-1:-1;528:2:1;513:18;;;500:32;;222:316;-1:-1:-1;222:316:1:o;543:548::-;655:4;684:2;713;702:9;695:21;745:6;739:13;788:6;783:2;772:9;768:18;761:34;813:1;823:140;837:6;834:1;831:13;823:140;;;932:14;;;928:23;;922:30;898:17;;;917:2;894:26;887:66;852:10;;823:140;;;827:3;1012:1;1007:2;998:6;987:9;983:22;979:31;972:42;1082:2;1075;1071:7;1066:2;1058:6;1054:15;1050:29;1039:9;1035:45;1031:54;1023:62;;;;543:548;;;;:::o;1330:131::-;-1:-1:-1;;;;;1405:31:1;;1395:42;;1385:70;;1451:1;1448;1441:12;1466:315;1534:6;1542;1595:2;1583:9;1574:7;1570:23;1566:32;1563:52;;;1611:1;1608;1601:12;1563:52;1650:9;1637:23;1669:31;1694:5;1669:31;:::i;:::-;1719:5;1771:2;1756:18;;;;1743:32;;-1:-1:-1;;;1466:315:1:o;1978:248::-;2046:6;2054;2107:2;2095:9;2086:7;2082:23;2078:32;2075:52;;;2123:1;2120;2113:12;2075:52;-1:-1:-1;;2146:23:1;;;2216:2;2201:18;;;2188:32;;-1:-1:-1;1978:248:1:o;2413:160::-;2478:20;;2534:13;;2527:21;2517:32;;2507:60;;2563:1;2560;2553:12;2507:60;2413:160;;;:::o;2578:315::-;2643:6;2651;2704:2;2692:9;2683:7;2679:23;2675:32;2672:52;;;2720:1;2717;2710:12;2672:52;2759:9;2746:23;2778:31;2803:5;2778:31;:::i;:::-;2828:5;-1:-1:-1;2852:35:1;2883:2;2868:18;;2852:35;:::i;:::-;2842:45;;2578:315;;;;;:::o;2898:456::-;2975:6;2983;2991;3044:2;3032:9;3023:7;3019:23;3015:32;3012:52;;;3060:1;3057;3050:12;3012:52;3099:9;3086:23;3118:31;3143:5;3118:31;:::i;:::-;3168:5;-1:-1:-1;3225:2:1;3210:18;;3197:32;3238:33;3197:32;3238:33;:::i;:::-;2898:456;;3290:7;;-1:-1:-1;;;3344:2:1;3329:18;;;;3316:32;;2898:456::o;3359:180::-;3418:6;3471:2;3459:9;3450:7;3446:23;3442:32;3439:52;;;3487:1;3484;3477:12;3439:52;-1:-1:-1;3510:23:1;;3359:180;-1:-1:-1;3359:180:1:o;3733:247::-;3792:6;3845:2;3833:9;3824:7;3820:23;3816:32;3813:52;;;3861:1;3858;3851:12;3813:52;3900:9;3887:23;3919:31;3944:5;3919:31;:::i;3985:127::-;4046:10;4041:3;4037:20;4034:1;4027:31;4077:4;4074:1;4067:15;4101:4;4098:1;4091:15;4117:719;4160:5;4213:3;4206:4;4198:6;4194:17;4190:27;4180:55;;4231:1;4228;4221:12;4180:55;4267:6;4254:20;4293:18;4330:2;4326;4323:10;4320:36;;;4336:18;;:::i;:::-;4411:2;4405:9;4379:2;4465:13;;-1:-1:-1;;4461:22:1;;;4485:2;4457:31;4453:40;4441:53;;;4509:18;;;4529:22;;;4506:46;4503:72;;;4555:18;;:::i;:::-;4595:10;4591:2;4584:22;4630:2;4622:6;4615:18;4676:3;4669:4;4664:2;4656:6;4652:15;4648:26;4645:35;4642:55;;;4693:1;4690;4683:12;4642:55;4757:2;4750:4;4742:6;4738:17;4731:4;4723:6;4719:17;4706:54;4804:1;4797:4;4792:2;4784:6;4780:15;4776:26;4769:37;4824:6;4815:15;;;;;;4117:719;;;;:::o;4841:836::-;4963:6;4971;4979;4987;5040:3;5028:9;5019:7;5015:23;5011:33;5008:53;;;5057:1;5054;5047:12;5008:53;5096:9;5083:23;5115:31;5140:5;5115:31;:::i;:::-;5165:5;-1:-1:-1;5222:2:1;5207:18;;5194:32;5235:33;5194:32;5235:33;:::i;:::-;5287:7;-1:-1:-1;5345:2:1;5330:18;;5317:32;5368:18;5398:14;;;5395:34;;;5425:1;5422;5415:12;5395:34;5448:50;5490:7;5481:6;5470:9;5466:22;5448:50;:::i;:::-;5438:60;;5551:2;5540:9;5536:18;5523:32;5507:48;;5580:2;5570:8;5567:16;5564:36;;;5596:1;5593;5586:12;5564:36;;5619:52;5663:7;5652:8;5641:9;5637:24;5619:52;:::i;:::-;5609:62;;;4841:836;;;;;;;:::o;5942:180::-;5998:6;6051:2;6039:9;6030:7;6026:23;6022:32;6019:52;;;6067:1;6064;6057:12;6019:52;6090:26;6106:9;6090:26;:::i;6127:543::-;6215:6;6223;6276:2;6264:9;6255:7;6251:23;6247:32;6244:52;;;6292:1;6289;6282:12;6244:52;6332:9;6319:23;6361:18;6402:2;6394:6;6391:14;6388:34;;;6418:1;6415;6408:12;6388:34;6441:50;6483:7;6474:6;6463:9;6459:22;6441:50;:::i;:::-;6431:60;;6544:2;6533:9;6529:18;6516:32;6500:48;;6573:2;6563:8;6560:16;6557:36;;;6589:1;6586;6579:12;6557:36;;6612:52;6656:7;6645:8;6634:9;6630:24;6612:52;:::i;:::-;6602:62;;;6127:543;;;;;:::o;6675:388::-;6743:6;6751;6804:2;6792:9;6783:7;6779:23;6775:32;6772:52;;;6820:1;6817;6810:12;6772:52;6859:9;6846:23;6878:31;6903:5;6878:31;:::i;:::-;6928:5;-1:-1:-1;6985:2:1;6970:18;;6957:32;6998:33;6957:32;6998:33;:::i;:::-;7050:7;7040:17;;;6675:388;;;;;:::o;7068:385::-;7154:6;7162;7170;7178;7231:3;7219:9;7210:7;7206:23;7202:33;7199:53;;;7248:1;7245;7238:12;7199:53;-1:-1:-1;;7271:23:1;;;7341:2;7326:18;;7313:32;;-1:-1:-1;7392:2:1;7377:18;;7364:32;;7443:2;7428:18;7415:32;;-1:-1:-1;7068:385:1;-1:-1:-1;7068:385:1:o;7458:356::-;7660:2;7642:21;;;7679:18;;;7672:30;7738:34;7733:2;7718:18;;7711:62;7805:2;7790:18;;7458:356::o;7819:127::-;7880:10;7875:3;7871:20;7868:1;7861:31;7911:4;7908:1;7901:15;7935:4;7932:1;7925:15;7951:125;8016:9;;;8037:10;;;8034:36;;;8050:18;;:::i;8081:380::-;8160:1;8156:12;;;;8203;;;8224:61;;8278:4;8270:6;8266:17;8256:27;;8224:61;8331:2;8323:6;8320:14;8300:18;8297:38;8294:161;;8377:10;8372:3;8368:20;8365:1;8358:31;8412:4;8409:1;8402:15;8440:4;8437:1;8430:15;8294:161;;8081:380;;;:::o;8466:168::-;8506:7;8572:1;8568;8564:6;8560:14;8557:1;8554:21;8549:1;8542:9;8535:17;8531:45;8528:71;;;8579:18;;:::i;:::-;-1:-1:-1;8619:9:1;;8466:168::o;8639:127::-;8700:10;8695:3;8691:20;8688:1;8681:31;8731:4;8728:1;8721:15;8755:4;8752:1;8745:15;8771:120;8811:1;8837;8827:35;;8842:18;;:::i;:::-;-1:-1:-1;8876:9:1;;8771:120::o;8896:399::-;9098:2;9080:21;;;9137:2;9117:18;;;9110:30;9176:34;9171:2;9156:18;;9149:62;-1:-1:-1;;;9242:2:1;9227:18;;9220:33;9285:3;9270:19;;8896:399::o;10014:127::-;10075:10;10070:3;10066:20;10063:1;10056:31;10106:4;10103:1;10096:15;10130:4;10127:1;10120:15;10146:128;10213:9;;;10234:11;;;10231:37;;;10248:18;;:::i;10279:127::-;10340:10;10335:3;10331:20;10328:1;10321:31;10371:4;10368:1;10361:15;10395:4;10392:1;10385:15;10411:135;10450:3;10471:17;;;10468:43;;10491:18;;:::i;:::-;-1:-1:-1;10538:1:1;10527:13;;10411:135::o;11088:545::-;11190:2;11185:3;11182:11;11179:448;;;11226:1;11251:5;11247:2;11240:17;11296:4;11292:2;11282:19;11366:2;11354:10;11350:19;11347:1;11343:27;11337:4;11333:38;11402:4;11390:10;11387:20;11384:47;;;-1:-1:-1;11425:4:1;11384:47;11480:2;11475:3;11471:12;11468:1;11464:20;11458:4;11454:31;11444:41;;11535:82;11553:2;11546:5;11543:13;11535:82;;;11598:17;;;11579:1;11568:13;11535:82;;;11539:3;;;11088:545;;;:::o;11809:1352::-;11935:3;11929:10;11962:18;11954:6;11951:30;11948:56;;;11984:18;;:::i;:::-;12013:97;12103:6;12063:38;12095:4;12089:11;12063:38;:::i;:::-;12057:4;12013:97;:::i;:::-;12165:4;;12229:2;12218:14;;12246:1;12241:663;;;;12948:1;12965:6;12962:89;;;-1:-1:-1;13017:19:1;;;13011:26;12962:89;-1:-1:-1;;11766:1:1;11762:11;;;11758:24;11754:29;11744:40;11790:1;11786:11;;;11741:57;13064:81;;12211:944;;12241:663;11035:1;11028:14;;;11072:4;11059:18;;-1:-1:-1;;12277:20:1;;;12395:236;12409:7;12406:1;12403:14;12395:236;;;12498:19;;;12492:26;12477:42;;12590:27;;;;12558:1;12546:14;;;;12425:19;;12395:236;;;12399:3;12659:6;12650:7;12647:19;12644:201;;;12720:19;;;12714:26;-1:-1:-1;;12803:1:1;12799:14;;;12815:3;12795:24;12791:37;12787:42;12772:58;12757:74;;12644:201;-1:-1:-1;;;;;12891:1:1;12875:14;;;12871:22;12858:36;;-1:-1:-1;11809:1352:1:o;13166:422::-;13255:1;13298:5;13255:1;13312:270;13333:7;13323:8;13320:21;13312:270;;;13392:4;13388:1;13384:6;13380:17;13374:4;13371:27;13368:53;;;13401:18;;:::i;:::-;13451:7;13441:8;13437:22;13434:55;;;13471:16;;;;13434:55;13550:22;;;;13510:15;;;;13312:270;;;13316:3;13166:422;;;;;:::o;13593:806::-;13642:5;13672:8;13662:80;;-1:-1:-1;13713:1:1;13727:5;;13662:80;13761:4;13751:76;;-1:-1:-1;13798:1:1;13812:5;;13751:76;13843:4;13861:1;13856:59;;;;13929:1;13924:130;;;;13836:218;;13856:59;13886:1;13877:10;;13900:5;;;13924:130;13961:3;13951:8;13948:17;13945:43;;;13968:18;;:::i;:::-;-1:-1:-1;;14024:1:1;14010:16;;14039:5;;13836:218;;14138:2;14128:8;14125:16;14119:3;14113:4;14110:13;14106:36;14100:2;14090:8;14087:16;14082:2;14076:4;14073:12;14069:35;14066:77;14063:159;;;-1:-1:-1;14175:19:1;;;14207:5;;14063:159;14254:34;14279:8;14273:4;14254:34;:::i;:::-;14324:6;14320:1;14316:6;14312:19;14303:7;14300:32;14297:58;;;14335:18;;:::i;:::-;14373:20;;13593:806;-1:-1:-1;;;13593:806:1:o;14404:131::-;14464:5;14493:36;14520:8;14514:4;14493:36;:::i;14540:112::-;14572:1;14598;14588:35;;14603:18;;:::i;:::-;-1:-1:-1;14637:9:1;;14540:112::o;14657:251::-;14727:6;14780:2;14768:9;14759:7;14755:23;14751:32;14748:52;;;14796:1;14793;14786:12;14748:52;14828:9;14822:16;14847:31;14872:5;14847:31;:::i;15222:425::-;15424:2;15406:21;;;15463:2;15443:18;;;15436:30;15502:34;15497:2;15482:18;;15475:62;15573:31;15568:2;15553:18;;15546:59;15637:3;15622:19;;15222:425::o;17883:401::-;18085:2;18067:21;;;18124:2;18104:18;;;18097:30;18163:34;18158:2;18143:18;;18136:62;-1:-1:-1;;;18229:2:1;18214:18;;18207:35;18274:3;18259:19;;17883:401::o;20668:980::-;20930:4;20978:3;20967:9;20963:19;21009:6;20998:9;20991:25;21035:2;21073:6;21068:2;21057:9;21053:18;21046:34;21116:3;21111:2;21100:9;21096:18;21089:31;21140:6;21175;21169:13;21206:6;21198;21191:22;21244:3;21233:9;21229:19;21222:26;;21283:2;21275:6;21271:15;21257:29;;21304:1;21314:195;21328:6;21325:1;21322:13;21314:195;;;21393:13;;-1:-1:-1;;;;;21389:39:1;21377:52;;21484:15;;;;21449:12;;;;21425:1;21343:9;21314:195;;;-1:-1:-1;;;;;;;21565:32:1;;;;21560:2;21545:18;;21538:60;-1:-1:-1;;;21629:3:1;21614:19;21607:35;21526:3;20668:980;-1:-1:-1;;;20668:980:1:o;22273:306::-;22361:6;22369;22377;22430:2;22418:9;22409:7;22405:23;22401:32;22398:52;;;22446:1;22443;22436:12;22398:52;22475:9;22469:16;22459:26;;22525:2;22514:9;22510:18;22504:25;22494:35;;22569:2;22558:9;22554:18;22548:25;22538:35;;22273:306;;;;;:::o

Swarm Source

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