ETH Price: $3,339.94 (-4.02%)

Token

SENPAI (SENPAI)
 

Overview

Max Total Supply

1,000,000,000 SENPAI

Holders

169

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,288,335.731138054324115027 SENPAI

Value
$0.00
0x2813d7166f7f5f32d6fa816ebae1f6b72b1a80fb
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:
SENPAI

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-15
*/

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

/*

SENPAI
Website: SenpaiVault.com 
Telegram: https://t.me/SENPAITokenETH

*/


abstract contract Context {
    function _msgSender() internal view returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
  /**
   * @dev Returns the amount of tokens in existence.
   */
  function totalSupply() external view returns (uint256);

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view returns (uint8);

  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view returns (string memory);

  /**
  * @dev Returns the token name.
  */
  function name() external view returns (string memory);

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

  /**
   * @dev Returns the amount of tokens owned by `account`.
   */
  function balanceOf(address account) external view returns (uint256);

  /**
   * @dev Moves `amount` tokens from the caller's account to `recipient`.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transfer(address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Returns the remaining number of tokens that `spender` will be
   * allowed to spend on behalf of `owner` through {transferFrom}. This is
   * zero by default.
   *
   * This value changes when {approve} or {transferFrom} are called.
   */
  function allowance(address _owner, address spender) external view returns (uint256);

  /**
   * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * IMPORTANT: Beware that changing an allowance with this method brings the risk
   * that someone may use both the old and the new allowance by unfortunate
   * transaction ordering. One possible solution to mitigate this race
   * condition is to first reduce the spender's allowance to 0 and set the
   * desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   *
   * Emits an {Approval} event.
   */
  function approve(address spender, uint256 amount) external returns (bool);

  /**
   * @dev Moves `amount` tokens from `sender` to `recipient` using the
   * allowance mechanism. `amount` is then deducted from the caller's
   * allowance.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Emitted when `value` tokens are moved from one account (`from`) to
   * another (`to`).
   *
   * Note that `value` may be zero.
   */
  event Transfer(address indexed from, address indexed to, uint256 value);

  /**
   * @dev Emitted when the allowance of a `spender` for an `owner` is set by
   * a call to {approve}. `value` is the new allowance.
   */
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

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 IUniswapV2Pair {
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function skim(address to) external;
    function sync() external;
}

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

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

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

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _algo) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function getSniperAmt() external view returns (uint256);
    function isBlacklisted(address account) external view returns (bool);
    function setBlacklistEnabled(address account, bool enabled) external;
}

contract SENPAI is Context, IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping (address => bool) private _liquidityHolders;

    uint256 private startingSupply = 1_000_000_000;
    string constant private _name = "SENPAI";
    string constant private _symbol = "SENPAI";

    struct FeesStruct {
        uint16 reflect;
        uint16 liquidity;
        uint16 marketing;
    }

    struct StaticValuesStruct {
        uint16 maxReflect;
        uint16 maxLiquidity;
        uint16 maxMarketing;
        uint16 masterTaxDivisor;
    }

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 total;
    }

    FeesStruct private currentTaxes = FeesStruct({
        reflect: 0,
        liquidity: 0,
        marketing: 0
        });

    FeesStruct public _buyTaxes = FeesStruct({
        reflect: 100,
        liquidity: 100,
        marketing: 2300
        });

    FeesStruct public _sellTaxes = FeesStruct({
        reflect: 100,
        liquidity: 100,
        marketing: 2300
        });

    FeesStruct public _transferTaxes = FeesStruct({
        reflect: 100,
        liquidity: 100,
        marketing: 2300
        });

    Ratios public _ratios = Ratios({
        liquidity: 1,
        marketing: 23,
        total: 24
        });

    StaticValuesStruct public staticVals = StaticValuesStruct({
        maxReflect: 800,
        maxLiquidity: 800,
        maxMarketing: 800,
        masterTaxDivisor: 10000
        });

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

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable private _marketingWallet = payable(0x3D4a4a3536099Ecb78250441f5919255821Ea493);
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    
    uint256 private maxTPercent = 5;
    uint256 private maxTDivisor = 1000;
    uint256 private _maxTxAmount = (_tTotal * maxTPercent) / maxTDivisor;
    uint256 public maxTxAmountUI = (startingSupply * maxTPercent) / maxTDivisor;

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

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    AntiSnipe antiSnipe;

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        _rOwned[_msgSender()] = _rTotal;

        // Set the owner.
        _owner = msg.sender;

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

        _approve(msg.sender, _routerAddress, type(uint256).max);
        _approve(address(this), _routerAddress, type(uint256).max);

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

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    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.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if (_marketingWallet == payable(_owner))
            _marketingWallet = payable(newOwner);
        
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

    function approveContractContingency() public onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

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

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

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

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

    function changeRouterContingency(address router) external onlyOwner {
        require(!_hasLiqBeenAdded);
        _routerAddress = router;
    }

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

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

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

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

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

    function setInitializer(address initializer) external onlyOwner {
        require(!_hasLiqBeenAdded, "Liquidity is already in.");
        require(initializer != address(this), "Can't be self.");
        antiSnipe = AntiSnipe(initializer);
    }

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabled(account, enabled);
    }

    function isBlacklisted(address account) public view returns (bool) {
        return antiSnipe.isBlacklisted(account);
    }

    function getSniperAmt() public view returns (uint256) {
        return antiSnipe.getSniperAmt();
    }

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

    function setProtectionSettings(bool _antiSnipe, bool _algo) external onlyOwner {
        antiSnipe.setProtections(_antiSnipe, _algo);
    }
    
    function setTaxesBuy(uint16 reflect, uint16 liquidity, uint16 marketing) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && liquidity <= staticVals.maxLiquidity
                && marketing <= staticVals.maxMarketing);
        require(liquidity + reflect + marketing <= 3450);
        _buyTaxes.liquidity = liquidity;
        _buyTaxes.reflect = reflect;
        _buyTaxes.marketing = marketing;
    }

    function setTaxesSell(uint16 reflect, uint16 liquidity, uint16 marketing) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && liquidity <= staticVals.maxLiquidity
                && marketing <= staticVals.maxMarketing);
        require(liquidity + reflect + marketing <= 3450);
        _sellTaxes.liquidity = liquidity;
        _sellTaxes.reflect = reflect;
        _sellTaxes.marketing = marketing;
    }

    function setTaxesTransfer(uint16 reflect, uint16 liquidity, uint16 marketing) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && liquidity <= staticVals.maxLiquidity
                && marketing <= staticVals.maxMarketing);
        require(liquidity + reflect + marketing <= 3450);
        _transferTaxes.liquidity = liquidity;
        _transferTaxes.reflect = reflect;
        _transferTaxes.marketing = marketing;
    }

    function setRatios(uint16 liquidity, uint16 marketing) external onlyOwner {
        require (liquidity + marketing >= 99, "Must add up to 100% or 99%.");
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.total = liquidity + marketing;
    }

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

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

    function setWallets(address payable marketingWallet) external onlyOwner {
        _marketingWallet = payable(marketingWallet);
    }

    function setContractSwapEnabled(bool _enabled) public onlyOwner {
        contractSwapEnabled = _enabled;
        emit ContractSwapEnabledUpdated(_enabled);
    }

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

    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 _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }
        }

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

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

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        if (_ratios.total == 0)
            return;

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

        uint256 toLiquify = ((contractTokenBalance * _ratios.liquidity) / _ratios.total) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            toSwapForEth,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

        uint256 liquidityBalance = ((address(this).balance * _ratios.liquidity) / _ratios.total) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
                DEAD,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            _marketingWallet.transfer(address(this).balance);
        }
    }

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

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp)) {} catch {}
        tradingEnabled = true;
    }

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

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

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee) private returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        }

        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

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

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

        if (values.tLiquidity > 0)
            _takeLiquidity(from, values.tLiquidity);
        if (values.rFee > 0 || values.tFee > 0)
            _rTotal -= values.rFee;
            _tFeeTotal += values.tFee;

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

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

        values.rAmount = tAmount * currentRate;

        if (_hasLimits(from, to)) {
            bool checked;
            try antiSnipe.checkUser(from, to, tAmount) returns (bool check) {
                checked = check;
            } catch {
                revert();
            }

            if(!checked) {
                revert();
            }
        }

        if(takeFee) {
            if (lpPairs[to]) {
                currentTaxes.reflect = _sellTaxes.reflect;
                currentTaxes.liquidity = _sellTaxes.liquidity;
                currentTaxes.marketing = _sellTaxes.marketing;
            } else if (lpPairs[from]) {
                currentTaxes.reflect = _buyTaxes.reflect;
                currentTaxes.liquidity = _buyTaxes.liquidity;
                currentTaxes.marketing = _buyTaxes.marketing;
            } else {
                currentTaxes.reflect = _transferTaxes.reflect;
                currentTaxes.liquidity = _transferTaxes.liquidity;
                currentTaxes.marketing = _transferTaxes.marketing;
            }

            values.tFee = (tAmount * currentTaxes.reflect) / staticVals.masterTaxDivisor;
            values.tLiquidity = (tAmount * (currentTaxes.liquidity + currentTaxes.marketing)) / staticVals.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 = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return _rTotal / _tTotal;
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return _rTotal / _tTotal;
        return rSupply / tSupply;
    }

    function _takeLiquidity(address sender, uint256 tLiquidity) private {
        _rOwned[address(this)] = _rOwned[address(this)] + (tLiquidity * _getRate());
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity); // Transparency is the key to success.
    }
    
    function _lower24HrTaxes() external onlyOwner {
        _buyTaxes.liquidity = 100;
        _buyTaxes.reflect = 100;
        _buyTaxes.marketing = 700;
        _sellTaxes.liquidity = 100;
        _sellTaxes.reflect = 100;
        _sellTaxes.marketing = 700;
        _transferTaxes.liquidity = 100;
        _transferTaxes.reflect = 100;
        _transferTaxes.marketing = 700;
        _ratios.liquidity = 13;
        _ratios.marketing = 87;
        _ratios.total = 100;
    }
}

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":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lower24HrTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"changeRouterContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSniperAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"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":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staticVals","outputs":[{"internalType":"uint16","name":"maxReflect","type":"uint16"},{"internalType":"uint16","name":"maxLiquidity","type":"uint16"},{"internalType":"uint16","name":"maxMarketing","type":"uint16"},{"internalType":"uint16","name":"masterTaxDivisor","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60006004819055633b9aca00600a908155608082905260a082905260c091909152600b805465ffffffffffff19908116909155606460e08190526101008190526108fc610120819052600c805484166508fc00640064908117909155610140839052610160839052610180829052600d80548516821790556101a08390526101c0929092526101e052600e805483169091179055600161020052601761022052601861024052600f80549091166418001700011790556102e06040526103206102608190526102808190526102a0526127106102c052601080546001600160401b03191667271003200320032017905560118054601260ff199190911681179091556200010c9162000786565b600a546200011b91906200079e565b60128190556200012e90600019620007d6565b6200013c90600019620007ed565b601355601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905560188054600161ff0160a01b031916733d4a4a3536099ecb78250441f5919255821ea493179055600560198190556103e8601a8190556012549091620001ab916200079e565b620001b7919062000807565b601b55601a54601954600a54620001cf91906200079e565b620001db919062000807565b601c556001601d556103e86012546005620001f791906200079e565b62000203919062000807565b601e55601f805461ffff191690556013543360008181526001602090815260408083209490945581546001600160a01b0319908116909317909155601754601580546001600160a01b03909216919093168117909255825163c45a015560e01b81529251919263c45a01559260048083019392829003018186803b1580156200028b57600080fd5b505afa158015620002a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c691906200081e565b6001600160a01b031663c9c65396601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032357600080fd5b505afa15801562000338573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035e91906200081e565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b158015620003a657600080fd5b505af1158015620003bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e191906200081e565b601680546001600160a01b0319166001600160a01b039283169081179091556000908152600360205260409020805460ff191660011790556017546200042d9133911660001962000570565b601754620004499030906001600160a01b031660001962000570565b600160066000620004626000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080548316600190811790915561dead82527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280549093168117909255600990620004ea6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556200051a3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012546040516200056291815260200190565b60405180910390a362000849565b6001600160a01b038316620005c25760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620006105760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401620005b9565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006c8578160001904821115620006ac57620006ac62000671565b80851615620006ba57918102915b93841c93908002906200068c565b509250929050565b600082620006e15750600162000780565b81620006f05750600062000780565b8160018114620007095760028114620007145762000734565b600191505062000780565b60ff84111562000728576200072862000671565b50506001821b62000780565b5060208310610133831016604e8410600b841016171562000759575081810a62000780565b62000765838362000687565b80600019048211156200077c576200077c62000671565b0290505b92915050565b60006200079760ff841683620006d0565b9392505050565b6000816000190483118215151615620007bb57620007bb62000671565b500290565b634e487b7160e01b600052601260045260246000fd5b600082620007e857620007e8620007c0565b500690565b60008282101562000802576200080262000671565b500390565b600082620008195762000819620007c0565b500490565b6000602082840312156200083157600080fd5b81516001600160a01b03811681146200079757600080fd5b6144bd80620008596000396000f3fe6080604052600436106103595760003560e01c806370a08231116101bb578063bcd96a25116100f7578063eb50e70e11610095578063eec2744e1161006f578063eec2744e14610a63578063fb78680d14610a83578063fdb78c0e14610aa3578063fe575a8714610ad657600080fd5b8063eb50e70e14610a19578063ecd7268f14610a39578063ee5d9c2d14610a4e57600080fd5b8063cab5ebea116100d1578063cab5ebea14610962578063cf84770614610982578063dd62ed3e146109b3578063eafb5a3c146109f957600080fd5b8063bcd96a25146108e0578063c2fa418f14610900578063c6831cd81461093157600080fd5b80638965b55d116101645780638da5cb5b1161013e5780638da5cb5b1461083857806395d89b41146103ba578063a457c2d7146108a0578063a9059cbb146108c057600080fd5b80638965b55d146108565780638a63bd9b146108765780638a8c523c1461088b57600080fd5b806380c581d11161019557806380c581d1146107df57806388f82020146107ff578063893d20e81461083857600080fd5b806370a0823114610754578063715018a6146107745780637b45d4311461078957600080fd5b806333251a0b116102955780634fbee1931161023357806355dbc3691161020d57806355dbc369146106e9578063590ffdce146106fe5780635c24b0741461071e578063640384091461073e57600080fd5b80634fbee1931461067157806350a8e016146106aa57806355d8ece6146106c957600080fd5b80633f3cf56c1161026f5780633f3cf56c146105f7578063452ed4f1146106175780634ada218b146106375780634fb2e45d1461065157600080fd5b806333251a0b14610597578063384f36b6146105b757806339509351146105d757600080fd5b806318160ddd1161030257806323b872dd116102dc57806323b872dd146105205780632b112e49146105405780632d83811914610555578063313ce5671461057557600080fd5b806318160ddd146104765780631b6afa2d146104955780631e90afe31461050057600080fd5b80630758d924116103335780630758d92414610406578063095ea7b31461042657806313e461921461045657600080fd5b806303fd2a4514610365578063044df7261461039857806306fdde03146103ba57600080fd5b3661036057005b600080fd5b34801561037157600080fd5b5061037b61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103a457600080fd5b506103b86103b3366004613f90565b610af6565b005b3480156103c657600080fd5b50604080518082018252600681527f53454e50414900000000000000000000000000000000000000000000000000006020820152905161038f9190613fc9565b34801561041257600080fd5b5060155461037b906001600160a01b031681565b34801561043257600080fd5b50610446610441366004614051565b610bd3565b604051901515815260200161038f565b34801561046257600080fd5b506103b861047136600461407d565b610be9565b34801561048257600080fd5b506012545b60405190815260200161038f565b3480156104a157600080fd5b506010546104d29061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff9586168152938516602085015291841691830191909152909116606082015260800161038f565b34801561050c57600080fd5b506103b861051b3660046140b2565b610fa4565b34801561052c57600080fd5b5061044661053b3660046140f5565b6110c1565b34801561054c57600080fd5b50610487611139565b34801561056157600080fd5b50610487610570366004614136565b61116c565b34801561058157600080fd5b5060115460405160ff909116815260200161038f565b3480156105a357600080fd5b506103b86105b236600461414f565b611203565b3480156105c357600080fd5b506103b86105d236600461414f565b6112d3565b3480156105e357600080fd5b506104466105f2366004614051565b611365565b34801561060357600080fd5b506103b861061236600461416c565b6113a1565b34801561062357600080fd5b5060165461037b906001600160a01b031681565b34801561064357600080fd5b50601f546104469060ff1681565b34801561065d57600080fd5b506103b861066c36600461414f565b6114b8565b34801561067d57600080fd5b5061044661068c36600461414f565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106b657600080fd5b50601f5461044690610100900460ff1681565b3480156106d557600080fd5b506103b86106e43660046140b2565b6116fe565b3480156106f557600080fd5b5061048761181b565b34801561070a57600080fd5b506103b861071936600461407d565b6118a3565b34801561072a57600080fd5b506103b861073936600461414f565b61191c565b34801561074a57600080fd5b50610487601c5481565b34801561076057600080fd5b5061048761076f36600461414f565b611a5b565b34801561078057600080fd5b506103b8611ac0565b34801561079557600080fd5b50600c546107ba9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161038f565b3480156107eb57600080fd5b506103b86107fa36600461407d565b611b70565b34801561080b57600080fd5b5061044661081a36600461414f565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561084457600080fd5b506000546001600160a01b031661037b565b34801561086257600080fd5b506103b86108713660046140b2565b611d2c565b34801561088257600080fd5b50610446611e49565b34801561089757600080fd5b506103b8611eb8565b3480156108ac57600080fd5b506104466108bb366004614051565b6120bd565b3480156108cc57600080fd5b506104466108db366004614051565b6120f4565b3480156108ec57600080fd5b506103b86108fb36600461418e565b61210b565b34801561090c57600080fd5b50600e546107ba9061ffff808216916201000081048216916401000000009091041683565b34801561093d57600080fd5b50600d546107ba9061ffff808216916201000081048216916401000000009091041683565b34801561096e57600080fd5b506103b861097d3660046141c1565b612207565b34801561098e57600080fd5b50600f546107ba9061ffff808216916201000081048216916401000000009091041683565b3480156109bf57600080fd5b506104876109ce3660046141de565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a0557600080fd5b506103b8610a1436600461414f565b6122da565b348015610a2557600080fd5b506103b8610a3436600461414f565b6126e3565b348015610a4557600080fd5b506103b8612760565b348015610a5a57600080fd5b506103b86127f2565b348015610a6f57600080fd5b506103b8610a7e36600461407d565b6128d5565b348015610a8f57600080fd5b506103b8610a9e36600461420c565b61297d565b348015610aaf57600080fd5b50601854610446907501000000000000000000000000000000000000000000900460ff1681565b348015610ae257600080fd5b50610446610af136600461414f565b612a0a565b6000546001600160a01b03163314610b495760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601f546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610bb757600080fd5b505af1158015610bcb573d6000803e3d6000fd5b505050505050565b6000610be0338484612aa7565b50600192915050565b6000546001600160a01b03163314610c375760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b60018115151415610d79576001600160a01b03821660009081526007602052604090205460ff1615610cab5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610b40565b6001600160a01b03821660009081526001602052604090205415610d05576001600160a01b038216600090815260016020526040902054610ceb9061116c565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b80610fa0576001600160a01b03821660009081526007602052604090205460ff16610de65760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610b40565b60085460011415610e62576001600160a01b038216600090815260026020908152604080832083905560079091529020805460ff191690556008805480610e2f57610e2f61423e565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b600854811015610f9e57826001600160a01b031660088281548110610e8c57610e8c61426d565b6000918252602090912001546001600160a01b03161415610f8c5760088054610eb7906001906142cb565b81548110610ec757610ec761426d565b600091825260209091200154600880546001600160a01b039092169183908110610ef357610ef361426d565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610f5857610f5861423e565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055610f9e565b80610f96816142e2565b915050610e65565b505b5050565b6000546001600160a01b03163314610ff25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b60105461ffff9081169084161180159061101c575060105461ffff62010000909104811690831611155b801561103a575060105461ffff640100000000909104811690821611155b61104357600080fd5b610d7a8161105185856142fd565b61105b91906142fd565b61ffff16111561106a57600080fd5b600e805461ffff928316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff000094841662010000029490941665ffffffffffff19909116179390911692909217179055565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914611126576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906111209084906142cb565b90915550505b611131848484612bb4565b949350505050565b60006111456000611a5b565b61115061dead611a5b565b61115a9190614323565b60125461116791906142cb565b905090565b60006013548211156111e65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610b40565b60006111f0612f3c565b90506111fc818461433b565b9392505050565b6000546001600160a01b031633146112515760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b601f546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b1580156112b857600080fd5b505af11580156112cc573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146113215760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b601f54610100900460ff161561133657600080fd5b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610be091859061139c908690614323565b612aa7565b6000546001600160a01b031633146113ef5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b600081836012546114009190614376565b61140a919061433b565b90506103e860125461141c919061433b565b8110156114915760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b40565b601b819055600a5482906114a6908590614376565b6114b0919061433b565b601c55505050565b6000546001600160a01b031633146115065760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b6001600160a01b0381166115825760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b40565b6001600160a01b03811661dead14156116035760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b40565b6000805461161c916001600160a01b03909116906118a3565b6116278160016118a3565b6000546018546001600160a01b0390811691161415611669576018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6000805461167f906001600160a01b0316611a5b565b11156116a6576000546116a4906001600160a01b03168261169f82611a5b565b612bb4565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b0316331461174c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b60105461ffff90811690841611801590611776575060105461ffff62010000909104811690831611155b8015611794575060105461ffff640100000000909104811690821611155b61179d57600080fd5b610d7a816117ab85856142fd565b6117b591906142fd565b61ffff1611156117c457600080fd5b600c805461ffff928316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff000094841662010000029490941665ffffffffffff19909116179390911692909217179055565b6000601f60029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b815260040160206040518083038186803b15801561186b57600080fd5b505afa15801561187f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111679190614395565b6000546001600160a01b031633146118f15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461196a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b601f54610100900460ff16156119c25760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610b40565b6001600160a01b038116301415611a1b5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610b40565b601f80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff1615611a9857506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054611aba9061116c565b92915050565b6000546001600160a01b03163314611b0e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b60008054611b27916001600160a01b03909116906118a3565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611bbe5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b80611c4a576001600160a01b03828116600081815260036020526040808220805460ff19169055601f5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610bb757600080fd5b60045415611cb1576203f48060045442611c6491906142cb565b11611cb15760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610b40565b6001600160a01b0382811660008181526003602052604090819020805460ff19166001908117909155426004908155601f5492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610b9d565b6000546001600160a01b03163314611d7a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b60105461ffff90811690841611801590611da4575060105461ffff62010000909104811690831611155b8015611dc2575060105461ffff640100000000909104811690821611155b611dcb57600080fd5b610d7a81611dd985856142fd565b611de391906142fd565b61ffff161115611df257600080fd5b600d805461ffff928316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff000094841662010000029490941665ffffffffffff19909116179390911692909217179055565b600080546001600160a01b03163314611e985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b601554611eb29030906001600160a01b0316600019612aa7565b50600190565b6000546001600160a01b03163314611f065760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b601f5460ff1615611f595760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b40565b601f54610100900460ff16611fb05760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610b40565b611fbb306001610be9565b601654611fd2906001600160a01b03166001610be9565b601f546201000090046001600160a01b031661201857601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601f546016546040517f4b38f1d40000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff42166044820152620100009092041690634b38f1d490606401600060405180830381600087803b15801561209c57600080fd5b505af19250505080156120ad575060015b50601f805460ff19166001179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610be091859061139c9086906142cb565b6000612101338484612bb4565b5060019392505050565b6000546001600160a01b031633146121595760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b606361216582846142fd565b61ffff1610156121b75760405162461bcd60e51b815260206004820152601b60248201527f4d7573742061646420757020746f2031303025206f72203939252e00000000006044820152606401610b40565b600f805461ffff838116620100000263ffffffff19909216908516171790556121e081836142fd565b600f805461ffff929092166401000000000265ffff00000000199092169190911790555050565b6000546001600160a01b031633146122555760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b601880548215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906122cf90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146123285760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561236857600080fd5b505afa15801561237c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a091906143ae565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156123e857600080fd5b505afa1580156123fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242091906143ae565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561247e57600080fd5b505afa158015612492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b691906143ae565b90506001600160a01b03811661268157816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156124ff57600080fd5b505afa158015612513573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253791906143ae565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561257f57600080fd5b505afa158015612593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b791906143ae565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561261757600080fd5b505af115801561262b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264f91906143ae565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556126aa565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155610f9e903090600019612aa7565b6000546001600160a01b031633146127315760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146127ae5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b600c805465ffffffffffff199081166502bc00640064908117909255600d8054821683179055600e80548216909217909155600f805490911664640057000d179055565b6000546001600160a01b031633146128405760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b601f54610100900460ff16156128985760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610b40565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156128d2573d6000803e3d6000fd5b50565b6000546001600160a01b031633146129235760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b601f546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610b9d565b6000546001600160a01b031633146129cb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b82846012546129da9190614376565b6129e4919061433b565b601d5560125481906129f7908490614376565b612a01919061433b565b601e5550505050565b601f546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a879060240160206040518083038186803b158015612a6f57600080fd5b505afa158015612a83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aba91906143cb565b6001600160a01b038316612afd5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b40565b6001600160a01b038216612b535760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b40565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612c325760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b40565b6001600160a01b038316612cae5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b40565b60008211612d245760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610b40565b612d2e84846130cd565b15612e4157601f5460ff16612d855760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b40565b6001600160a01b03841660009081526003602052604090205460ff1680612dc457506001600160a01b03831660009081526003602052604090205460ff165b15612e4157601b54821115612e415760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610b40565b6001600160a01b03841660009081526006602052604090205460019060ff1680612e8357506001600160a01b03841660009081526006602052604090205460ff165b15612e8c575060005b6001600160a01b03841660009081526003602052604090205460ff1615612f275760185474010000000000000000000000000000000000000000900460ff16158015612ef357506018547501000000000000000000000000000000000000000000900460ff165b15612f27576000612f0330611a5b565b9050601d548110612f2557601e548110612f1c5750601e545b612f258161318a565b505b612f33858585846135bd565b95945050505050565b60135460125460009190825b60085481101561309457826001600060088481548110612f6a57612f6a61426d565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612fd55750816002600060088481548110612fae57612fae61426d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612ff257601254601354612fea919061433b565b935050505090565b60016000600883815481106130095761300961426d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461303890846142cb565b925060026000600883815481106130515761305161426d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461308090836142cb565b91508061308c816142e2565b915050612f48565b506012546013546130a5919061433b565b8210156130c3576012546013546130bc919061433b565b9250505090565b6130bc818361433b565b600080546001600160a01b038481169116148015906130fa57506000546001600160a01b03838116911614155b801561311f57506001600160a01b03821660009081526009602052604090205460ff16155b801561314457506001600160a01b03831660009081526009602052604090205460ff16155b801561315b57506001600160a01b03821661dead14155b801561316f57506001600160a01b03821615155b80156111fc57506001600160a01b0383163014159392505050565b601880547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055600f5461ffff640100000000909104166131e257613592565b3060009081526005602090815260408083206015546001600160a01b031684529091529020546000191461323b573060009081526005602090815260408083206015546001600160a01b03168452909152902060001990555b600f5460009060029061ffff640100000000820481169161325d911685614376565b613267919061433b565b613271919061433b565b9050600061327f82846142cb565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106132b9576132b961426d565b6001600160a01b03928316602091820292909201810191909152601554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b15801561332657600080fd5b505afa15801561333a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335e91906143ae565b816001815181106133715761337161426d565b6001600160a01b0392831660209182029290920101526015546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906133d09085906000908690309042906004016143e8565b600060405180830381600087803b1580156133ea57600080fd5b505af11580156133fe573d6000803e3d6000fd5b5050600f54600092506002915061ffff6401000000008204811691613424911647614376565b61342e919061433b565b613438919061433b565b90508315613540576015546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b1580156134c257600080fd5b505af11580156134d6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134fb9190614459565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b600061354c85876142cb565b111561358d576018546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561358b573d6000803e3d6000fd5b505b505050505b50601880547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b601f54600090610100900460ff16613669576135d9858561396f565b601f54610100900460ff161580156135f657506135f685856130cd565b156136695760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610b40565b600061367786868686613b1b565b60808101516001600160a01b0388166000908152600160205260409020549192506136a1916142cb565b6001600160a01b03808816600090815260016020526040808220939093556060840151918816815291909120546136d89190614323565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561372c57506001600160a01b03851660009081526007602052604090205460ff16155b15613773576001600160a01b0386166000908152600260205260409020546137559085906142cb565b6001600160a01b0387166000908152600260205260409020556138b3565b6001600160a01b03861660009081526007602052604090205460ff161580156137b457506001600160a01b03851660009081526007602052604090205460ff165b156137fc5780516001600160a01b0386166000908152600260205260409020546137de9190614323565b6001600160a01b0386166000908152600260205260409020556138b3565b6001600160a01b03861660009081526007602052604090205460ff16801561383c57506001600160a01b03851660009081526007602052604090205460ff165b156138b3576001600160a01b0386166000908152600260205260409020546138659085906142cb565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546138999190614323565b6001600160a01b0386166000908152600260205260409020555b6040810151156138cb576138cb868260400151613ec2565b60008160a0015111806138e2575060008160200151115b15613903578060a00151601360008282546138fd91906142cb565b90915550505b8060200151601460008282546139199190614323565b909155505080516040519081526001600160a01b0386811691908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600195945050505050565b601f54610100900460ff16156139ed5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610b40565b6139f782826130cd565b158015613a1157506016546001600160a01b038281169116145b15610fa0576001600160a01b038083166000908152600960205260409020805460ff19166001179055601f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179081905562010000900416613aa357601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601880547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b613b546040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613b8d6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000613b97612f3c565b9050613ba38186614376565b6080830152613bb287876130cd565b15613c9257601f546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a5390606401602060405180830381600087803b158015613c2d57600080fd5b505af1925050508015613c7b575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252613c78918101906143cb565b60015b613c8457600080fd5b905080613c9057600080fd5b505b8315613e6c576001600160a01b03861660009081526003602052604090205460ff1615613d0357600d54600b805461ffff80841663ffffffff1990921691909117620100008085048316021765ffff0000000019166401000000009384900491909116909202919091179055613db4565b6001600160a01b03871660009081526003602052604090205460ff1615613d6e57600c54600b805461ffff80841663ffffffff1990921691909117620100008085048316021765ffff0000000019166401000000009384900491909116909202919091179055613db4565b600e54600b805461ffff80841663ffffffff1990921691909117620100008085048316021765ffff00000000191664010000000093849004919091169092029190911790555b601054600b5461ffff6601000000000000909204821691613dd6911687614376565b613de0919061433b565b6020830152601054600b5461ffff6601000000000000909204821691613e1891640100000000810482169162010000909104166142fd565b613e269061ffff1687614376565b613e30919061433b565b604083018190526020830151613e469190614323565b613e5090866142cb565b82526020820151613e62908290614376565b60a0830152613e85565b6000602083018190526040830181905285835260a08301525b808260400151613e959190614376565b8260a00151613ea49190614323565b8260800151613eb391906142cb565b60608301525095945050505050565b613eca612f3c565b613ed49082614376565b30600090815260016020526040902054613eee9190614323565b3060009081526001602090815260408083209390935560079052205460ff1615613f3e5730600090815260026020526040902054613f2d908290614323565b306000908152600260205260409020555b60405181815230906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b80151581146128d257600080fd5b60008060408385031215613fa357600080fd5b8235613fae81613f82565b91506020830135613fbe81613f82565b809150509250929050565b600060208083528351808285015260005b81811015613ff657858101830151858201604001528201613fda565b81811115614008576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6001600160a01b03811681146128d257600080fd5b6000806040838503121561406457600080fd5b823561406f8161403c565b946020939093013593505050565b6000806040838503121561409057600080fd5b8235613fae8161403c565b803561ffff811681146140ad57600080fd5b919050565b6000806000606084860312156140c757600080fd5b6140d08461409b565b92506140de6020850161409b565b91506140ec6040850161409b565b90509250925092565b60008060006060848603121561410a57600080fd5b83356141158161403c565b925060208401356141258161403c565b929592945050506040919091013590565b60006020828403121561414857600080fd5b5035919050565b60006020828403121561416157600080fd5b81356111fc8161403c565b6000806040838503121561417f57600080fd5b50508035926020909101359150565b600080604083850312156141a157600080fd5b6141aa8361409b565b91506141b86020840161409b565b90509250929050565b6000602082840312156141d357600080fd5b81356111fc81613f82565b600080604083850312156141f157600080fd5b82356141fc8161403c565b91506020830135613fbe8161403c565b6000806000806080858703121561422257600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156142dd576142dd61429c565b500390565b60006000198214156142f6576142f661429c565b5060010190565b600061ffff80831681851680830382111561431a5761431a61429c565b01949350505050565b600082198211156143365761433661429c565b500190565b600082614371577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008160001904831182151516156143905761439061429c565b500290565b6000602082840312156143a757600080fd5b5051919050565b6000602082840312156143c057600080fd5b81516111fc8161403c565b6000602082840312156143dd57600080fd5b81516111fc81613f82565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156144385784516001600160a01b031683529383019391830191600101614413565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561446e57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212209586a0404e6fe8268e2f688c26a149d330ad896c82bc2f8cdfaca3de3165868664736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103595760003560e01c806370a08231116101bb578063bcd96a25116100f7578063eb50e70e11610095578063eec2744e1161006f578063eec2744e14610a63578063fb78680d14610a83578063fdb78c0e14610aa3578063fe575a8714610ad657600080fd5b8063eb50e70e14610a19578063ecd7268f14610a39578063ee5d9c2d14610a4e57600080fd5b8063cab5ebea116100d1578063cab5ebea14610962578063cf84770614610982578063dd62ed3e146109b3578063eafb5a3c146109f957600080fd5b8063bcd96a25146108e0578063c2fa418f14610900578063c6831cd81461093157600080fd5b80638965b55d116101645780638da5cb5b1161013e5780638da5cb5b1461083857806395d89b41146103ba578063a457c2d7146108a0578063a9059cbb146108c057600080fd5b80638965b55d146108565780638a63bd9b146108765780638a8c523c1461088b57600080fd5b806380c581d11161019557806380c581d1146107df57806388f82020146107ff578063893d20e81461083857600080fd5b806370a0823114610754578063715018a6146107745780637b45d4311461078957600080fd5b806333251a0b116102955780634fbee1931161023357806355dbc3691161020d57806355dbc369146106e9578063590ffdce146106fe5780635c24b0741461071e578063640384091461073e57600080fd5b80634fbee1931461067157806350a8e016146106aa57806355d8ece6146106c957600080fd5b80633f3cf56c1161026f5780633f3cf56c146105f7578063452ed4f1146106175780634ada218b146106375780634fb2e45d1461065157600080fd5b806333251a0b14610597578063384f36b6146105b757806339509351146105d757600080fd5b806318160ddd1161030257806323b872dd116102dc57806323b872dd146105205780632b112e49146105405780632d83811914610555578063313ce5671461057557600080fd5b806318160ddd146104765780631b6afa2d146104955780631e90afe31461050057600080fd5b80630758d924116103335780630758d92414610406578063095ea7b31461042657806313e461921461045657600080fd5b806303fd2a4514610365578063044df7261461039857806306fdde03146103ba57600080fd5b3661036057005b600080fd5b34801561037157600080fd5b5061037b61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103a457600080fd5b506103b86103b3366004613f90565b610af6565b005b3480156103c657600080fd5b50604080518082018252600681527f53454e50414900000000000000000000000000000000000000000000000000006020820152905161038f9190613fc9565b34801561041257600080fd5b5060155461037b906001600160a01b031681565b34801561043257600080fd5b50610446610441366004614051565b610bd3565b604051901515815260200161038f565b34801561046257600080fd5b506103b861047136600461407d565b610be9565b34801561048257600080fd5b506012545b60405190815260200161038f565b3480156104a157600080fd5b506010546104d29061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff9586168152938516602085015291841691830191909152909116606082015260800161038f565b34801561050c57600080fd5b506103b861051b3660046140b2565b610fa4565b34801561052c57600080fd5b5061044661053b3660046140f5565b6110c1565b34801561054c57600080fd5b50610487611139565b34801561056157600080fd5b50610487610570366004614136565b61116c565b34801561058157600080fd5b5060115460405160ff909116815260200161038f565b3480156105a357600080fd5b506103b86105b236600461414f565b611203565b3480156105c357600080fd5b506103b86105d236600461414f565b6112d3565b3480156105e357600080fd5b506104466105f2366004614051565b611365565b34801561060357600080fd5b506103b861061236600461416c565b6113a1565b34801561062357600080fd5b5060165461037b906001600160a01b031681565b34801561064357600080fd5b50601f546104469060ff1681565b34801561065d57600080fd5b506103b861066c36600461414f565b6114b8565b34801561067d57600080fd5b5061044661068c36600461414f565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106b657600080fd5b50601f5461044690610100900460ff1681565b3480156106d557600080fd5b506103b86106e43660046140b2565b6116fe565b3480156106f557600080fd5b5061048761181b565b34801561070a57600080fd5b506103b861071936600461407d565b6118a3565b34801561072a57600080fd5b506103b861073936600461414f565b61191c565b34801561074a57600080fd5b50610487601c5481565b34801561076057600080fd5b5061048761076f36600461414f565b611a5b565b34801561078057600080fd5b506103b8611ac0565b34801561079557600080fd5b50600c546107ba9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161038f565b3480156107eb57600080fd5b506103b86107fa36600461407d565b611b70565b34801561080b57600080fd5b5061044661081a36600461414f565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561084457600080fd5b506000546001600160a01b031661037b565b34801561086257600080fd5b506103b86108713660046140b2565b611d2c565b34801561088257600080fd5b50610446611e49565b34801561089757600080fd5b506103b8611eb8565b3480156108ac57600080fd5b506104466108bb366004614051565b6120bd565b3480156108cc57600080fd5b506104466108db366004614051565b6120f4565b3480156108ec57600080fd5b506103b86108fb36600461418e565b61210b565b34801561090c57600080fd5b50600e546107ba9061ffff808216916201000081048216916401000000009091041683565b34801561093d57600080fd5b50600d546107ba9061ffff808216916201000081048216916401000000009091041683565b34801561096e57600080fd5b506103b861097d3660046141c1565b612207565b34801561098e57600080fd5b50600f546107ba9061ffff808216916201000081048216916401000000009091041683565b3480156109bf57600080fd5b506104876109ce3660046141de565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a0557600080fd5b506103b8610a1436600461414f565b6122da565b348015610a2557600080fd5b506103b8610a3436600461414f565b6126e3565b348015610a4557600080fd5b506103b8612760565b348015610a5a57600080fd5b506103b86127f2565b348015610a6f57600080fd5b506103b8610a7e36600461407d565b6128d5565b348015610a8f57600080fd5b506103b8610a9e36600461420c565b61297d565b348015610aaf57600080fd5b50601854610446907501000000000000000000000000000000000000000000900460ff1681565b348015610ae257600080fd5b50610446610af136600461414f565b612a0a565b6000546001600160a01b03163314610b495760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601f546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610bb757600080fd5b505af1158015610bcb573d6000803e3d6000fd5b505050505050565b6000610be0338484612aa7565b50600192915050565b6000546001600160a01b03163314610c375760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b60018115151415610d79576001600160a01b03821660009081526007602052604090205460ff1615610cab5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610b40565b6001600160a01b03821660009081526001602052604090205415610d05576001600160a01b038216600090815260016020526040902054610ceb9061116c565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b80610fa0576001600160a01b03821660009081526007602052604090205460ff16610de65760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610b40565b60085460011415610e62576001600160a01b038216600090815260026020908152604080832083905560079091529020805460ff191690556008805480610e2f57610e2f61423e565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b600854811015610f9e57826001600160a01b031660088281548110610e8c57610e8c61426d565b6000918252602090912001546001600160a01b03161415610f8c5760088054610eb7906001906142cb565b81548110610ec757610ec761426d565b600091825260209091200154600880546001600160a01b039092169183908110610ef357610ef361426d565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610f5857610f5861423e565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055610f9e565b80610f96816142e2565b915050610e65565b505b5050565b6000546001600160a01b03163314610ff25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b60105461ffff9081169084161180159061101c575060105461ffff62010000909104811690831611155b801561103a575060105461ffff640100000000909104811690821611155b61104357600080fd5b610d7a8161105185856142fd565b61105b91906142fd565b61ffff16111561106a57600080fd5b600e805461ffff928316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff000094841662010000029490941665ffffffffffff19909116179390911692909217179055565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914611126576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906111209084906142cb565b90915550505b611131848484612bb4565b949350505050565b60006111456000611a5b565b61115061dead611a5b565b61115a9190614323565b60125461116791906142cb565b905090565b60006013548211156111e65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610b40565b60006111f0612f3c565b90506111fc818461433b565b9392505050565b6000546001600160a01b031633146112515760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b601f546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b1580156112b857600080fd5b505af11580156112cc573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146113215760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b601f54610100900460ff161561133657600080fd5b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610be091859061139c908690614323565b612aa7565b6000546001600160a01b031633146113ef5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b600081836012546114009190614376565b61140a919061433b565b90506103e860125461141c919061433b565b8110156114915760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b40565b601b819055600a5482906114a6908590614376565b6114b0919061433b565b601c55505050565b6000546001600160a01b031633146115065760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b6001600160a01b0381166115825760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b40565b6001600160a01b03811661dead14156116035760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b40565b6000805461161c916001600160a01b03909116906118a3565b6116278160016118a3565b6000546018546001600160a01b0390811691161415611669576018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6000805461167f906001600160a01b0316611a5b565b11156116a6576000546116a4906001600160a01b03168261169f82611a5b565b612bb4565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b0316331461174c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b60105461ffff90811690841611801590611776575060105461ffff62010000909104811690831611155b8015611794575060105461ffff640100000000909104811690821611155b61179d57600080fd5b610d7a816117ab85856142fd565b6117b591906142fd565b61ffff1611156117c457600080fd5b600c805461ffff928316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff000094841662010000029490941665ffffffffffff19909116179390911692909217179055565b6000601f60029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b815260040160206040518083038186803b15801561186b57600080fd5b505afa15801561187f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111679190614395565b6000546001600160a01b031633146118f15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461196a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b601f54610100900460ff16156119c25760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610b40565b6001600160a01b038116301415611a1b5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610b40565b601f80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff1615611a9857506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054611aba9061116c565b92915050565b6000546001600160a01b03163314611b0e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b60008054611b27916001600160a01b03909116906118a3565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611bbe5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b80611c4a576001600160a01b03828116600081815260036020526040808220805460ff19169055601f5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610bb757600080fd5b60045415611cb1576203f48060045442611c6491906142cb565b11611cb15760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610b40565b6001600160a01b0382811660008181526003602052604090819020805460ff19166001908117909155426004908155601f5492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610b9d565b6000546001600160a01b03163314611d7a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b60105461ffff90811690841611801590611da4575060105461ffff62010000909104811690831611155b8015611dc2575060105461ffff640100000000909104811690821611155b611dcb57600080fd5b610d7a81611dd985856142fd565b611de391906142fd565b61ffff161115611df257600080fd5b600d805461ffff928316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff000094841662010000029490941665ffffffffffff19909116179390911692909217179055565b600080546001600160a01b03163314611e985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b601554611eb29030906001600160a01b0316600019612aa7565b50600190565b6000546001600160a01b03163314611f065760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b601f5460ff1615611f595760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b40565b601f54610100900460ff16611fb05760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610b40565b611fbb306001610be9565b601654611fd2906001600160a01b03166001610be9565b601f546201000090046001600160a01b031661201857601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601f546016546040517f4b38f1d40000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff42166044820152620100009092041690634b38f1d490606401600060405180830381600087803b15801561209c57600080fd5b505af19250505080156120ad575060015b50601f805460ff19166001179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610be091859061139c9086906142cb565b6000612101338484612bb4565b5060019392505050565b6000546001600160a01b031633146121595760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b606361216582846142fd565b61ffff1610156121b75760405162461bcd60e51b815260206004820152601b60248201527f4d7573742061646420757020746f2031303025206f72203939252e00000000006044820152606401610b40565b600f805461ffff838116620100000263ffffffff19909216908516171790556121e081836142fd565b600f805461ffff929092166401000000000265ffff00000000199092169190911790555050565b6000546001600160a01b031633146122555760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b601880548215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906122cf90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146123285760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561236857600080fd5b505afa15801561237c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a091906143ae565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156123e857600080fd5b505afa1580156123fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242091906143ae565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561247e57600080fd5b505afa158015612492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b691906143ae565b90506001600160a01b03811661268157816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156124ff57600080fd5b505afa158015612513573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253791906143ae565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561257f57600080fd5b505afa158015612593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b791906143ae565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561261757600080fd5b505af115801561262b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264f91906143ae565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556126aa565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155610f9e903090600019612aa7565b6000546001600160a01b031633146127315760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146127ae5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b600c805465ffffffffffff199081166502bc00640064908117909255600d8054821683179055600e80548216909217909155600f805490911664640057000d179055565b6000546001600160a01b031633146128405760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b601f54610100900460ff16156128985760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610b40565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156128d2573d6000803e3d6000fd5b50565b6000546001600160a01b031633146129235760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b601f546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610b9d565b6000546001600160a01b031633146129cb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b40565b82846012546129da9190614376565b6129e4919061433b565b601d5560125481906129f7908490614376565b612a01919061433b565b601e5550505050565b601f546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a879060240160206040518083038186803b158015612a6f57600080fd5b505afa158015612a83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aba91906143cb565b6001600160a01b038316612afd5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b40565b6001600160a01b038216612b535760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b40565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612c325760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b40565b6001600160a01b038316612cae5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b40565b60008211612d245760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610b40565b612d2e84846130cd565b15612e4157601f5460ff16612d855760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b40565b6001600160a01b03841660009081526003602052604090205460ff1680612dc457506001600160a01b03831660009081526003602052604090205460ff165b15612e4157601b54821115612e415760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610b40565b6001600160a01b03841660009081526006602052604090205460019060ff1680612e8357506001600160a01b03841660009081526006602052604090205460ff165b15612e8c575060005b6001600160a01b03841660009081526003602052604090205460ff1615612f275760185474010000000000000000000000000000000000000000900460ff16158015612ef357506018547501000000000000000000000000000000000000000000900460ff165b15612f27576000612f0330611a5b565b9050601d548110612f2557601e548110612f1c5750601e545b612f258161318a565b505b612f33858585846135bd565b95945050505050565b60135460125460009190825b60085481101561309457826001600060088481548110612f6a57612f6a61426d565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612fd55750816002600060088481548110612fae57612fae61426d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612ff257601254601354612fea919061433b565b935050505090565b60016000600883815481106130095761300961426d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461303890846142cb565b925060026000600883815481106130515761305161426d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461308090836142cb565b91508061308c816142e2565b915050612f48565b506012546013546130a5919061433b565b8210156130c3576012546013546130bc919061433b565b9250505090565b6130bc818361433b565b600080546001600160a01b038481169116148015906130fa57506000546001600160a01b03838116911614155b801561311f57506001600160a01b03821660009081526009602052604090205460ff16155b801561314457506001600160a01b03831660009081526009602052604090205460ff16155b801561315b57506001600160a01b03821661dead14155b801561316f57506001600160a01b03821615155b80156111fc57506001600160a01b0383163014159392505050565b601880547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055600f5461ffff640100000000909104166131e257613592565b3060009081526005602090815260408083206015546001600160a01b031684529091529020546000191461323b573060009081526005602090815260408083206015546001600160a01b03168452909152902060001990555b600f5460009060029061ffff640100000000820481169161325d911685614376565b613267919061433b565b613271919061433b565b9050600061327f82846142cb565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106132b9576132b961426d565b6001600160a01b03928316602091820292909201810191909152601554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b15801561332657600080fd5b505afa15801561333a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335e91906143ae565b816001815181106133715761337161426d565b6001600160a01b0392831660209182029290920101526015546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906133d09085906000908690309042906004016143e8565b600060405180830381600087803b1580156133ea57600080fd5b505af11580156133fe573d6000803e3d6000fd5b5050600f54600092506002915061ffff6401000000008204811691613424911647614376565b61342e919061433b565b613438919061433b565b90508315613540576015546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b1580156134c257600080fd5b505af11580156134d6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134fb9190614459565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b600061354c85876142cb565b111561358d576018546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561358b573d6000803e3d6000fd5b505b505050505b50601880547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b601f54600090610100900460ff16613669576135d9858561396f565b601f54610100900460ff161580156135f657506135f685856130cd565b156136695760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610b40565b600061367786868686613b1b565b60808101516001600160a01b0388166000908152600160205260409020549192506136a1916142cb565b6001600160a01b03808816600090815260016020526040808220939093556060840151918816815291909120546136d89190614323565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561372c57506001600160a01b03851660009081526007602052604090205460ff16155b15613773576001600160a01b0386166000908152600260205260409020546137559085906142cb565b6001600160a01b0387166000908152600260205260409020556138b3565b6001600160a01b03861660009081526007602052604090205460ff161580156137b457506001600160a01b03851660009081526007602052604090205460ff165b156137fc5780516001600160a01b0386166000908152600260205260409020546137de9190614323565b6001600160a01b0386166000908152600260205260409020556138b3565b6001600160a01b03861660009081526007602052604090205460ff16801561383c57506001600160a01b03851660009081526007602052604090205460ff165b156138b3576001600160a01b0386166000908152600260205260409020546138659085906142cb565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546138999190614323565b6001600160a01b0386166000908152600260205260409020555b6040810151156138cb576138cb868260400151613ec2565b60008160a0015111806138e2575060008160200151115b15613903578060a00151601360008282546138fd91906142cb565b90915550505b8060200151601460008282546139199190614323565b909155505080516040519081526001600160a01b0386811691908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600195945050505050565b601f54610100900460ff16156139ed5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610b40565b6139f782826130cd565b158015613a1157506016546001600160a01b038281169116145b15610fa0576001600160a01b038083166000908152600960205260409020805460ff19166001179055601f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179081905562010000900416613aa357601f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601880547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b613b546040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613b8d6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000613b97612f3c565b9050613ba38186614376565b6080830152613bb287876130cd565b15613c9257601f546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a5390606401602060405180830381600087803b158015613c2d57600080fd5b505af1925050508015613c7b575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252613c78918101906143cb565b60015b613c8457600080fd5b905080613c9057600080fd5b505b8315613e6c576001600160a01b03861660009081526003602052604090205460ff1615613d0357600d54600b805461ffff80841663ffffffff1990921691909117620100008085048316021765ffff0000000019166401000000009384900491909116909202919091179055613db4565b6001600160a01b03871660009081526003602052604090205460ff1615613d6e57600c54600b805461ffff80841663ffffffff1990921691909117620100008085048316021765ffff0000000019166401000000009384900491909116909202919091179055613db4565b600e54600b805461ffff80841663ffffffff1990921691909117620100008085048316021765ffff00000000191664010000000093849004919091169092029190911790555b601054600b5461ffff6601000000000000909204821691613dd6911687614376565b613de0919061433b565b6020830152601054600b5461ffff6601000000000000909204821691613e1891640100000000810482169162010000909104166142fd565b613e269061ffff1687614376565b613e30919061433b565b604083018190526020830151613e469190614323565b613e5090866142cb565b82526020820151613e62908290614376565b60a0830152613e85565b6000602083018190526040830181905285835260a08301525b808260400151613e959190614376565b8260a00151613ea49190614323565b8260800151613eb391906142cb565b60608301525095945050505050565b613eca612f3c565b613ed49082614376565b30600090815260016020526040902054613eee9190614323565b3060009081526001602090815260408083209390935560079052205460ff1615613f3e5730600090815260026020526040902054613f2d908290614323565b306000908152600260205260409020555b60405181815230906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b80151581146128d257600080fd5b60008060408385031215613fa357600080fd5b8235613fae81613f82565b91506020830135613fbe81613f82565b809150509250929050565b600060208083528351808285015260005b81811015613ff657858101830151858201604001528201613fda565b81811115614008576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6001600160a01b03811681146128d257600080fd5b6000806040838503121561406457600080fd5b823561406f8161403c565b946020939093013593505050565b6000806040838503121561409057600080fd5b8235613fae8161403c565b803561ffff811681146140ad57600080fd5b919050565b6000806000606084860312156140c757600080fd5b6140d08461409b565b92506140de6020850161409b565b91506140ec6040850161409b565b90509250925092565b60008060006060848603121561410a57600080fd5b83356141158161403c565b925060208401356141258161403c565b929592945050506040919091013590565b60006020828403121561414857600080fd5b5035919050565b60006020828403121561416157600080fd5b81356111fc8161403c565b6000806040838503121561417f57600080fd5b50508035926020909101359150565b600080604083850312156141a157600080fd5b6141aa8361409b565b91506141b86020840161409b565b90509250929050565b6000602082840312156141d357600080fd5b81356111fc81613f82565b600080604083850312156141f157600080fd5b82356141fc8161403c565b91506020830135613fbe8161403c565b6000806000806080858703121561422257600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156142dd576142dd61429c565b500390565b60006000198214156142f6576142f661429c565b5060010190565b600061ffff80831681851680830382111561431a5761431a61429c565b01949350505050565b600082198211156143365761433661429c565b500190565b600082614371577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008160001904831182151516156143905761439061429c565b500290565b6000602082840312156143a757600080fd5b5051919050565b6000602082840312156143c057600080fd5b81516111fc8161403c565b6000602082840312156143dd57600080fd5b81516111fc81613f82565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156144385784516001600160a01b031683529383019391830191600101614413565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561446e57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212209586a0404e6fe8268e2f688c26a149d330ad896c82bc2f8cdfaca3de3165868664736f6c63430008090033

Deployed Bytecode Sourcemap

7711:24737:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10125:73;;;;;;;;;;;;10156:42;10125:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;10125:73:0;;;;;;;;20196:141;;;;;;;;;;-1:-1:-1;20196:141:0;;;;;:::i;:::-;;:::i;:::-;;14351:80;;;;;;;;;;-1:-1:-1;14423:5:0;;;;;;;;;;;;;;;;14351:80;;;;14423:5;14351:80;:::i;9950:35::-;;;;;;;;;;-1:-1:-1;9950:35:0;;;;-1:-1:-1;;;;;9950:35:0;;;15045:161;;;;;;;;;;-1:-1:-1;15045:161:0;;;;;:::i;:::-;;:::i;:::-;;;2311:14:1;;2304:22;2286:41;;2274:2;2259:18;15045:161:0;2146:187:1;18279:1139:0;;;;;;;;;;-1:-1:-1;18279:1139:0;;;;;:::i;:::-;;:::i;14086:83::-;;;;;;;;;;-1:-1:-1;14159:7:0;;14086:83;;;2871:25:1;;;2859:2;2844:18;14086:83:0;2725:177:1;9517:186:0;;;;;;;;;;-1:-1:-1;9517:186:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3140:6:1;3173:15;;;3155:34;;3225:15;;;3220:2;3205:18;;3198:43;3277:15;;;3257:18;;;3250:43;;;;3329:15;;;3324:2;3309:18;;3302:43;3117:3;3102:19;9517:186:0;2907:444:1;21263:467:0;;;;;;;;;;-1:-1:-1;21263:467:0;;;;;:::i;:::-;;:::i;15712:306::-;;;;;;;;;;-1:-1:-1;15712:306:0;;;;;:::i;:::-;;:::i;17727:141::-;;;;;;;;;;;;;:::i;23326:250::-;;;;;;;;;;-1:-1:-1;23326:250:0;;;;;:::i;:::-;;:::i;14175:80::-;;;;;;;;;;-1:-1:-1;14243:9:0;;14175:80;;14243:9;;;;4641:36:1;;4629:2;4614:18;14175:80:0;4499:184:1;20080:108:0;;;;;;;;;;-1:-1:-1;20080:108:0;;;;;:::i;:::-;;:::i;17572:147::-;;;;;;;;;;-1:-1:-1;17572:147:0;;;;;:::i;:::-;;:::i;16026:215::-;;;;;;;;;;-1:-1:-1;16026:215:0;;;;;:::i;:::-;;:::i;22035:340::-;;;;;;;;;;-1:-1:-1;22035:340:0;;;;;:::i;:::-;;:::i;9992:21::-;;;;;;;;;;-1:-1:-1;9992:21:0;;;;-1:-1:-1;;;;;9992:21:0;;;10718:34;;;;;;;;;;-1:-1:-1;10718:34:0;;;;;;;;12829:701;;;;;;;;;;-1:-1:-1;12829:701:0;;;;;:::i;:::-;;:::i;17876:125::-;;;;;;;;;;-1:-1:-1;17876:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;17965:28:0;17941:4;17965:28;;;:19;:28;;;;;;;;;17876:125;10759:36;;;;;;;;;;-1:-1:-1;10759:36:0;;;;;;;;;;;20349:447;;;;;;;;;;-1:-1:-1;20349:447:0;;;;;:::i;:::-;;:::i;19968:104::-;;;;;;;;;;;;;:::i;18009:134::-;;;;;;;;;;-1:-1:-1;18009:134:0;;;;;:::i;:::-;;:::i;19426:248::-;;;;;;;;;;-1:-1:-1;19426:248:0;;;;;:::i;:::-;;:::i;10536:75::-;;;;;;;;;;;;;;;;14664:198;;;;;;;;;;-1:-1:-1;14664:198:0;;;;;:::i;:::-;;:::i;13538:195::-;;;;;;;;;;;;;:::i;8984:127::-;;;;;;;;;;-1:-1:-1;8984:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;5399:6:1;5432:15;;;5414:34;;5484:15;;;5479:2;5464:18;;5457:43;5536:15;;5516:18;;;5509:43;;;;5377:2;5362:18;8984:127:0;5193:365:1;17064:500:0;;;;;;;;;;-1:-1:-1;17064:500:0;;;;;:::i;:::-;;:::i;18151:120::-;;;;;;;;;;-1:-1:-1;18151:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;18243:20:0;18219:4;18243:20;;;:11;:20;;;;;;;;;18151:120;14437:80;;;;;;;;;;-1:-1:-1;14489:7:0;12807:6;-1:-1:-1;;;;;12807:6:0;14437:80;17727:141;20804:451;;;;;;;;;;-1:-1:-1;20804:451:0;;;;;:::i;:::-;;:::i;15531:173::-;;;;;;;;;;;;;:::i;26882:517::-;;;;;;;;;;;;;:::i;16249:225::-;;;;;;;;;;-1:-1:-1;16249:225:0;;;;;:::i;:::-;;:::i;14870:167::-;;;;;;;;;;-1:-1:-1;14870:167:0;;;;;:::i;:::-;;:::i;21738:289::-;;;;;;;;;;-1:-1:-1;21738:289:0;;;;;:::i;:::-;;:::i;9257:132::-;;;;;;;;;;-1:-1:-1;9257:132:0;;;;;;;;;;;;;;;;;;;;;;9120:128;;;;;;;;;;-1:-1:-1;9120:128:0;;;;;;;;;;;;;;;;;;;;;;22822:165;;;;;;;;;;-1:-1:-1;22822:165:0;;;;;:::i;:::-;;:::i;9398:110::-;;;;;;;;;;-1:-1:-1;9398:110:0;;;;;;;;;;;;;;;;;;;;;;14523:133;;;;;;;;;;-1:-1:-1;14523:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;14625:19:0;;;14607:7;14625:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;14523:133;16482:574;;;;;;;;;;-1:-1:-1;16482:574:0;;;;;:::i;:::-;;:::i;22680:134::-;;;;;;;;;;-1:-1:-1;22680:134:0;;;;;:::i;:::-;;:::i;31959:486::-;;;;;;;;;;;;;:::i;27407:183::-;;;;;;;;;;;;;:::i;19682:145::-;;;;;;;;;;-1:-1:-1;19682:145:0;;;;;:::i;:::-;;:::i;22383:289::-;;;;;;;;;;-1:-1:-1;22383:289:0;;;;;:::i;:::-;;:::i;10330:39::-;;;;;;;;;;-1:-1:-1;10330:39:0;;;;;;;;;;;19835:125;;;;;;;;;;-1:-1:-1;19835:125:0;;;;;:::i;:::-;;:::i;20196:141::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;;;;;;;;;20286:9:::1;::::0;:43:::1;::::0;;;;7646:14:1;;7639:22;20286:43:0::1;::::0;::::1;7621:41:1::0;7705:14;;7698:22;7678:18;;;7671:50;20286:9:0;;;::::1;-1:-1:-1::0;;;;;20286:9:0::1;::::0;:24:::1;::::0;7594:18:1;;20286:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20196:141:::0;;:::o;15045:161::-;15120:4;15137:39;279:10;15160:7;15169:6;15137:8;:39::i;:::-;-1:-1:-1;15194:4:0;15045:161;;;;:::o;18279:1139::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;18384:4:::1;18373:15:::0;::::1;;;18369:1042;;;-1:-1:-1::0;;;;;18414:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18413:21;18405:62;;;::::0;-1:-1:-1;;;18405:62:0;;7934:2:1;18405:62:0::1;::::0;::::1;7916:21:1::0;7973:2;7953:18;;;7946:30;8012;7992:18;;;7985:58;8060:18;;18405:62:0::1;7732:352:1::0;18405:62:0::1;-1:-1:-1::0;;;;;18485:16:0;::::1;18504:1;18485:16:::0;;;:7:::1;:16;::::0;;;;;:20;18482:116:::1;;-1:-1:-1::0;;;;;18565:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;18545:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;18526:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;18482:116:::1;-1:-1:-1::0;;;;;;18612:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;18612:27:0::1;18635:4;18612:27:::0;;::::1;::::0;;;18654:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;18654:23:0::1;::::0;;::::1;::::0;;18279:1139::o;18369:1042::-:1;18699:16:::0;18695:716:::1;;-1:-1:-1::0;;;;;18740:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18732:61;;;::::0;-1:-1:-1;;;18732:61:0;;8291:2:1;18732:61:0::1;::::0;::::1;8273:21:1::0;8330:2;8310:18;;;8303:30;8369;8349:18;;;8342:58;8417:18;;18732:61:0::1;8089:352:1::0;18732:61:0::1;18811:9;:16:::0;18831:1:::1;18811:21;18808:592;;;-1:-1:-1::0;;;;;18852:16:0;::::1;18871:1;18852:16:::0;;;:7:::1;:16;::::0;;;;;;;:20;;;18891:11:::1;:20:::0;;;;;:28;;-1:-1:-1;;18891:28:0::1;::::0;;18938:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;18938:15:0;;;;;-1:-1:-1;;18938:15:0::1;::::0;;;;;18279:1139;;:::o;18808:592::-:1;18999:9;18994:391;19018:9;:16:::0;19014:20;::::1;18994:391;;;19084:7;-1:-1:-1::0;;;;;19068:23:0::1;:9;19078:1;19068:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19068:12:0::1;:23;19064:302;;;19135:9;19145:16:::0;;:20:::1;::::0;19164:1:::1;::::0;19145:20:::1;:::i;:::-;19135:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19120:9:::1;:12:::0;;-1:-1:-1;;;;;19135:31:0;;::::1;::::0;19130:1;;19120:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;19120:46:0::1;-1:-1:-1::0;;;;;19120:46:0;;::::1;;::::0;;19193:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;19240:11:::1;:20:::0;;;;:28;;-1:-1:-1;;19240:28:0::1;::::0;;19295:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19295:15:0;;;;;-1:-1:-1;;19295:15:0::1;::::0;;;;;19337:5:::1;;19064:302;19036:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18994:391;;;;18808:592;18279:1139:::0;;:::o;21263:467::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;21390:10:::1;:21:::0;::::1;::::0;;::::1;21379:32:::0;;::::1;;::::0;::::1;::::0;:89:::1;;-1:-1:-1::0;21445:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;21432:36:::0;;::::1;;;21379:89;:146;;;;-1:-1:-1::0;21502:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;21489:36:::0;;::::1;;;21379:146;21371:155;;;::::0;::::1;;21580:4;21567:9:::0;21545:19:::1;21557:7:::0;21545:9;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;;;21537:48;;;::::0;::::1;;21596:14;:36:::0;;::::1;21686::::0;;::::1;::::0;::::1;::::0;21596;;::::1;::::0;::::1;21686::::0;;;;-1:-1:-1;;21686:36:0;;;;21643:32;;;::::1;21686:36:::0;;;;::::1;::::0;;21263:467::o;15712:306::-;-1:-1:-1;;;;;15833:19:0;;15812:4;15833:19;;;:11;:19;;;;;;;;15853:10;15833:31;;;;;;;;-1:-1:-1;;15833:52:0;15829:126;;-1:-1:-1;;;;;15902:19:0;;;;;;:11;:19;;;;;;;;15922:10;15902:31;;;;;;;:41;;15937:6;;15902:19;:41;;15937:6;;15902:41;:::i;:::-;;;;-1:-1:-1;;15829:126:0;15974:36;15984:6;15992:9;16003:6;15974:9;:36::i;:::-;15967:43;15712:306;-1:-1:-1;;;;15712:306:0:o;17727:141::-;17780:7;17837:21;17855:1;17837:9;:21::i;:::-;17819:15;10156:42;17819:9;:15::i;:::-;:39;;;;:::i;:::-;17808:7;;:51;;;;:::i;:::-;17800:60;;17727:141;:::o;23326:250::-;23392:7;23431;;23420;:18;;23412:73;;;;-1:-1:-1;;;23412:73:0;;9907:2:1;23412:73:0;;;9889:21:1;9946:2;9926:18;;;9919:30;9985:34;9965:18;;;9958:62;10056:12;10036:18;;;10029:40;10086:19;;23412:73:0;9705:406:1;23412:73:0;23496:19;23519:10;:8;:10::i;:::-;23496:33;-1:-1:-1;23547:21:0;23496:33;23547:7;:21;:::i;:::-;23540:28;23326:250;-1:-1:-1;;;23326:250:0:o;20080:108::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;20149:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;20149:31:0::1;::::0;::::1;160:74:1::0;20149:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;20149:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20080:108:::0;:::o;17572:147::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;17660:16:::1;::::0;::::1;::::0;::::1;;;17659:17;17651:26;;;::::0;::::1;;17688:14;:23:::0;;-1:-1:-1;;17688:23:0::1;-1:-1:-1::0;;;;;17688:23:0;;;::::1;::::0;;;::::1;::::0;;17572:147::o;16026:215::-;279:10;16114:4;16163:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16163:34:0;;;;;;;;;;16114:4;;16131:80;;16154:7;;16163:47;;16200:10;;16163:47;:::i;:::-;16131:8;:80::i;22035:340::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;22124:13:::1;22162:7;22151;22141;;:17;;;;:::i;:::-;22140:29;;;;:::i;:::-;22124:45;;22208:4;22198:7;;:14;;;;:::i;:::-;22188:5;:25;;22180:93;;;::::0;-1:-1:-1;;;22180:93:0;;10830:2:1;22180:93:0::1;::::0;::::1;10812:21:1::0;10869:2;10849:18;;;10842:30;10908:34;10888:18;;;10881:62;10979:25;10959:18;;;10952:53;11022:19;;22180:93:0::1;10628:419:1::0;22180:93:0::1;22284:12;:20:::0;;;22332:14:::1;::::0;22360:7;;22332:24:::1;::::0;22349:7;;22332:24:::1;:::i;:::-;22331:36;;;;:::i;:::-;22315:13;:52:::0;-1:-1:-1;;;22035:340:0:o;12829:701::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;-1:-1:-1;;;;;12910:22:0;::::1;12902:96;;;::::0;-1:-1:-1;;;12902:96:0;;11254:2:1;12902:96:0::1;::::0;::::1;11236:21:1::0;11293:2;11273:18;;;11266:30;11332:34;11312:18;;;11305:62;11403:31;11383:18;;;11376:59;11452:19;;12902:96:0::1;11052:425:1::0;12902:96:0::1;-1:-1:-1::0;;;;;13017:16:0;::::1;10156:42;13017:16;;13009:90;;;::::0;-1:-1:-1;;;13009:90:0;;11254:2:1;13009:90:0::1;::::0;::::1;11236:21:1::0;11293:2;11273:18;;;11266:30;11332:34;11312:18;;;11305:62;11403:31;11383:18;;;11376:59;11452:19;;13009:90:0::1;11052:425:1::0;13009:90:0::1;13130:6;::::0;;13110:34:::1;::::0;-1:-1:-1;;;;;13130:6:0;;::::1;::::0;13110:19:::1;:34::i;:::-;13155:35;13175:8;13185:4;13155:19;:35::i;:::-;13243:6;::::0;13215:16:::1;::::0;-1:-1:-1;;;;;13215:16:0;;::::1;13243:6:::0;::::1;13215:35;13211:90;;;13265:16;:36:::0;;-1:-1:-1;;13265:36:0::1;-1:-1:-1::0;;;;;13265:36:0;::::1;;::::0;;13211:90:::1;13345:1;13335:6:::0;;13325:17:::1;::::0;-1:-1:-1;;;;;13335:6:0::1;13325:9;:17::i;:::-;:21;13322:99;;;13373:6;::::0;13363:46:::1;::::0;-1:-1:-1;;;;;13373:6:0::1;13381:8:::0;13391:17:::1;13373:6:::0;13391:9:::1;:17::i;:::-;13363:9;:46::i;:::-;;13322:99;13441:6;:17:::0;;-1:-1:-1;;13441:17:0::1;-1:-1:-1::0;;;;;13441:17:0;::::1;::::0;;::::1;::::0;;13474:38:::1;::::0;13441:17;;;;13474:38:::1;::::0;13441:6;13474:38:::1;12829:701:::0;:::o;20349:447::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;20471:10:::1;:21:::0;::::1;::::0;;::::1;20460:32:::0;;::::1;;::::0;::::1;::::0;:89:::1;;-1:-1:-1::0;20526:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;20513:36:::0;;::::1;;;20460:89;:146;;;;-1:-1:-1::0;20583:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;20570:36:::0;;::::1;;;20460:146;20452:155;;;::::0;::::1;;20661:4;20648:9:::0;20626:19:::1;20638:7:::0;20626:9;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;;;20618:48;;;::::0;::::1;;20677:9;:31:::0;;::::1;20757::::0;;::::1;::::0;::::1;::::0;20677;;::::1;::::0;::::1;20757::::0;;;;-1:-1:-1;;20757:31:0;;;;20719:27;;;::::1;20757:31:::0;;;;::::1;::::0;;20349:447::o;19968:104::-;20013:7;20040:9;;;;;;;;;-1:-1:-1;;;;;20040:9:0;-1:-1:-1;;;;;20040:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18009:134::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;-1:-1:-1;;;;;18097:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;18097:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18009:134::o;19426:248::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;19510:16:::1;::::0;::::1;::::0;::::1;;;19509:17;19501:54;;;::::0;-1:-1:-1;;;19501:54:0;;11873:2:1;19501:54:0::1;::::0;::::1;11855:21:1::0;11912:2;11892:18;;;11885:30;11951:26;11931:18;;;11924:54;11995:18;;19501:54:0::1;11671:348:1::0;19501:54:0::1;-1:-1:-1::0;;;;;19574:28:0;::::1;19597:4;19574:28;;19566:55;;;::::0;-1:-1:-1;;;19566:55:0;;12226:2:1;19566:55:0::1;::::0;::::1;12208:21:1::0;12265:2;12245:18;;;12238:30;12304:16;12284:18;;;12277:44;12338:18;;19566:55:0::1;12024:338:1::0;19566:55:0::1;19632:9;:34:::0;;-1:-1:-1;;;;;19632:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;19426:248::o;14664:198::-;-1:-1:-1;;;;;14754:20:0;;14730:7;14754:20;;;:11;:20;;;;;;;;14750:49;;;-1:-1:-1;;;;;;14783:16:0;;;;;:7;:16;;;;;;;14664:198::o;14750:49::-;-1:-1:-1;;;;;14837:16:0;;;;;;:7;:16;;;;;;14817:37;;:19;:37::i;:::-;14810:44;14664:198;-1:-1:-1;;14664:198:0:o;13538:195::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;13625:6:::1;::::0;;13605:34:::1;::::0;-1:-1:-1;;;;;13625:6:0;;::::1;::::0;13605:19:::1;:34::i;:::-;13667:1;13650:19:::0;;-1:-1:-1;;13650:19:0::1;::::0;;13685:40:::1;::::0;13667:1;;13685:40:::1;::::0;13667:1;;13685:40:::1;13538:195::o:0;17064:500::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;17145:16;17141:416:::1;;-1:-1:-1::0;;;;;17178:13:0;;::::1;17194:5;17178:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;17178:21:0::1;::::0;;17214:9:::1;::::0;:32;;;;;::::1;::::0;::::1;12535:74:1::0;;;;12625:18;;;12618:50;;;;17214:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;12508:18:1;;17214:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;17141:416;17283:17;::::0;:22;17279:136:::1;;17372:6;17352:17;;17334:15;:35;;;;:::i;:::-;:44;17326:73;;;::::0;-1:-1:-1;;;17326:73:0;;12881:2:1;17326:73:0::1;::::0;::::1;12863:21:1::0;12920:2;12900:18;;;12893:30;12959:18;12939;;;12932:46;12995:18;;17326:73:0::1;12679:340:1::0;17326:73:0::1;-1:-1:-1::0;;;;;17429:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;17429:20:0::1;17445:4;17429:20:::0;;::::1;::::0;;;17484:15:::1;17464:17;:35:::0;;;17514:9:::1;::::0;:31;;;;;;;::::1;12535:74:1::0;;;;12625:18;;;12618:50;17514:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;12508:18:1;;17514:31:0::1;12367:307:1::0;20804:451:0;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;20927:10:::1;:21:::0;::::1;::::0;;::::1;20916:32:::0;;::::1;;::::0;::::1;::::0;:89:::1;;-1:-1:-1::0;20982:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;20969:36:::0;;::::1;;;20916:89;:146;;;;-1:-1:-1::0;21039:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;21026:36:::0;;::::1;;;20916:146;20908:155;;;::::0;::::1;;21117:4;21104:9:::0;21082:19:::1;21094:7:::0;21082:9;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;;;21074:48;;;::::0;::::1;;21133:10;:32:::0;;::::1;21215::::0;;::::1;::::0;::::1;::::0;21133;;::::1;::::0;::::1;21215::::0;;;;-1:-1:-1;;21215:32:0;;;;21176:28;;;::::1;21215:32:::0;;;;::::1;::::0;;20804:451::o;15531:173::-;15595:4;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;15644:9:::1;::::0;15612:62:::1;::::0;15629:4:::1;::::0;-1:-1:-1;;;;;15644:9:0::1;-1:-1:-1::0;;15612:8:0::1;:62::i;:::-;-1:-1:-1::0;15692:4:0::1;15531:173:::0;:::o;26882:517::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;26944:14:::1;::::0;::::1;;26943:15;26935:52;;;::::0;-1:-1:-1;;;26935:52:0;;13226:2:1;26935:52:0::1;::::0;::::1;13208:21:1::0;13265:2;13245:18;;;13238:30;13304:26;13284:18;;;13277:54;13348:18;;26935:52:0::1;13024:348:1::0;26935:52:0::1;27006:16;::::0;::::1;::::0;::::1;;;26998:53;;;::::0;-1:-1:-1;;;26998:53:0;;13579:2:1;26998:53:0::1;::::0;::::1;13561:21:1::0;13618:2;13598:18;;;13591:30;13657:26;13637:18;;;13630:54;13701:18;;26998:53:0::1;13377:348:1::0;26998:53:0::1;27062:42;27092:4;27099;27062:21;:42::i;:::-;27137:6;::::0;27115:35:::1;::::0;-1:-1:-1;;;;;27137:6:0::1;::::0;27115:21:::1;:35::i;:::-;27172:9;::::0;;;::::1;-1:-1:-1::0;;;;;27172:9:0::1;27161:99;;27212:9;:36:::0;;;::::1;27242:4;27212:36:::0;::::1;;::::0;;27161:99:::1;27274:9;::::0;27294:6:::1;::::0;27274:74:::1;::::0;;;;-1:-1:-1;;;;;27294:6:0;;::::1;27274:74;::::0;::::1;13928::1::0;14050:10;27309:12:0::1;14038:23:1::0;14018:18;;;14011:51;14110:18;27331:15:0::1;14098:31:1::0;14078:18;;;14071:59;27274:9:0;;;::::1;;::::0;:19:::1;::::0;13901:18:1;;27274:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;27270:90:::0;27370:14:::1;:21:::0;;-1:-1:-1;;27370:21:0::1;27387:4;27370:21;::::0;;26882:517::o;16249:225::-;279:10;16342:4;16391:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16391:34:0;;;;;;;;;;16342:4;;16359:85;;16382:7;;16391:52;;16428:15;;16391:52;:::i;14870:167::-;14948:4;14965:42;279:10;14989:9;15000:6;14965:9;:42::i;:::-;-1:-1:-1;15025:4:0;;14870:167;-1:-1:-1;;;14870:167:0:o;21738:289::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;21857:2:::1;21832:21;21844:9:::0;21832;:21:::1;:::i;:::-;:27;;;;21823:68;;;::::0;-1:-1:-1;;;21823:68:0;;14343:2:1;21823:68:0::1;::::0;::::1;14325:21:1::0;14382:2;14362:18;;;14355:30;14421:29;14401:18;;;14394:57;14468:18;;21823:68:0::1;14141:351:1::0;21823:68:0::1;21902:7;:29:::0;;::::1;21942::::0;;::::1;::::0;::::1;-1:-1:-1::0;;21942:29:0;;;21902;;::::1;21942::::0;::::1;::::0;;21998:21:::1;21962:9:::0;21922;21998:21:::1;:::i;:::-;21982:7;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;21982:37:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;21738:289:0:o;22822:165::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;22897:19:::1;:30:::0;;;::::1;;::::0;::::1;::::0;;;::::1;;::::0;;22943:36:::1;::::0;::::1;::::0;::::1;::::0;22919:8;2311:14:1;2304:22;2286:41;;2274:2;2259:18;;2146:187;22943:36:0::1;;;;;;;;22822:165:::0;:::o;16482:574::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;16553:29:::1;16604:9;16553:61;;16625:16;16662:10;-1:-1:-1::0;;;;;16662:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16644:47:0::1;;16700:4;16707:10;-1:-1:-1::0;;;;;16707:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16644:81;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;15006:15:1;;;16644:81:0::1;::::0;::::1;14988:34:1::0;15058:15;;15038:18;;;15031:43;14900:18;;16644:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16625:100:::0;-1:-1:-1;;;;;;16740:22:0;::::1;16736:207;;16806:10;-1:-1:-1::0;;;;;16806:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16788:50:0::1;;16847:4;16854:10;-1:-1:-1::0;;;;;16854:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16788:84;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;15006:15:1;;;16788:84:0::1;::::0;::::1;14988:34:1::0;15058:15;;15038:18;;;15031:43;14900:18;;16788:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16779:6;:93:::0;;-1:-1:-1;;16779:93:0::1;-1:-1:-1::0;;;;;16779:93:0;;;::::1;::::0;;;::::1;::::0;;16736:207:::1;;;16914:6;:17:::0;;-1:-1:-1;;16914:17:0::1;-1:-1:-1::0;;;;;16914:17:0;::::1;;::::0;;16736:207:::1;16953:9;:22:::0;;-1:-1:-1;;16953:22:0::1;-1:-1:-1::0;;;;;16953:22:0;::::1;::::0;;::::1;::::0;;;16986:62:::1;::::0;17003:4:::1;::::0;-1:-1:-1;;16986:8:0::1;:62::i;22680:134::-:0;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;22763:16:::1;:43:::0;;-1:-1:-1;;22763:43:0::1;-1:-1:-1::0;;;;;22763:43:0;;;::::1;::::0;;;::::1;::::0;;22680:134::o;31959:486::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;32016:9:::1;:25:::0;;-1:-1:-1;;32086:25:0;;;;;;;;;;32122:10:::1;:26:::0;;32194;;;;;;32231:14:::1;:30:::0;;32311;;;;;;;;32352:7:::1;:22:::0;;32418:19;;;;;;;31959:486::o;27407:183::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;27474:16:::1;::::0;::::1;::::0;::::1;;;27473:17;27465:58;;;::::0;-1:-1:-1;;;27465:58:0;;15287:2:1;27465:58:0::1;::::0;::::1;15269:21:1::0;15326:2;15306:18;;;15299:30;15365;15345:18;;;15338:58;15413:18;;27465:58:0::1;15085:352:1::0;27465:58:0::1;12780:7:::0;12807:6;;27534:48:::1;::::0;-1:-1:-1;;;;;12807:6:0;;;;27560:21:::1;27534:48:::0;::::1;;;::::0;27560:21;;27534:48;12780:7;27534:48;27560:21;12807:6;27534:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27407:183::o:0;19682:145::-;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;19772:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;12553:55:1;;;19772:47:0::1;::::0;::::1;12535:74:1::0;12652:14;;12645:22;12625:18;;;12618:50;19772:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;12508:18:1;;19772:47:0::1;12367:307:1::0;22383:289:0;11366:6;;-1:-1:-1;;;;;11366:6:0;279:10;11366:22;11358:52;;;;-1:-1:-1;;;11358:52:0;;7315:2:1;11358:52:0;;;7297:21:1;7354:2;7334:18;;;7327:30;-1:-1:-1;;;7373:18:1;;;7366:47;7430:18;;11358:52:0;7113:341:1;11358:52:0;22583:16:::1;22563;22553:7;;:26;;;;:::i;:::-;22552:47;;;;:::i;:::-;22536:13;:63:::0;22624:7:::1;::::0;22651:13;;22624:23:::1;::::0;22634:13;;22624:23:::1;:::i;:::-;22623:41;;;;:::i;:::-;22610:10;:54:::0;-1:-1:-1;;;;22383:289:0:o;19835:125::-;19920:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;19920:32:0;;;160:74:1;19896:4:0;;19920:9;;;;;:23;;133:18:1;;19920:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15214:309::-;-1:-1:-1;;;;;15308:20:0;;15300:52;;;;-1:-1:-1;;;15300:52:0;;15894:2:1;15300:52:0;;;15876:21:1;15933:2;15913:18;;;15906:30;15972:21;15952:18;;;15945:49;16011:18;;15300:52:0;15692:343:1;15300:52:0;-1:-1:-1;;;;;15371:21:0;;15363:53;;;;-1:-1:-1;;;15363:53:0;;15894:2:1;15363:53:0;;;15876:21:1;15933:2;15913:18;;;15906:30;15972:21;15952:18;;;15945:49;16011:18;;15363:53:0;15692:343:1;15363:53:0;-1:-1:-1;;;;;15429:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;15482:33;;2871:25:1;;;15482:33:0;;2844:18:1;15482:33:0;;;;;;;15214:309;;;:::o;23584:1286::-;23663:4;-1:-1:-1;;;;;23688:18:0;;23680:68;;;;-1:-1:-1;;;23680:68:0;;16242:2:1;23680:68:0;;;16224:21:1;16281:2;16261:18;;;16254:30;16320:34;16300:18;;;16293:62;16391:7;16371:18;;;16364:35;16416:19;;23680:68:0;16040:401:1;23680:68:0;-1:-1:-1;;;;;23767:16:0;;23759:64;;;;-1:-1:-1;;;23759:64:0;;16648:2:1;23759:64:0;;;16630:21:1;16687:2;16667:18;;;16660:30;16726:34;16706:18;;;16699:62;16797:5;16777:18;;;16770:33;16820:19;;23759:64:0;16446:399:1;23759:64:0;23851:1;23842:6;:10;23834:64;;;;-1:-1:-1;;;23834:64:0;;17052:2:1;23834:64:0;;;17034:21:1;17091:2;17071:18;;;17064:30;17130:34;17110:18;;;17103:62;17201:11;17181:18;;;17174:39;17230:19;;23834:64:0;16850:405:1;23834:64:0;23912:20;23923:4;23929:2;23912:10;:20::i;:::-;23909:296;;;23953:14;;;;23949:89;;23988:34;;-1:-1:-1;;;23988:34:0;;17462:2:1;23988:34:0;;;17444:21:1;17501:2;17481:18;;;17474:30;17540:26;17520:18;;;17513:54;17584:18;;23988:34:0;17260:348:1;23949:89:0;-1:-1:-1;;;;;24055:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;24072:11:0;;;;;;:7;:11;;;;;;;;24055:28;24052:142;;;24121:12;;24111:6;:22;;24103:75;;;;-1:-1:-1;;;24103:75:0;;17815:2:1;24103:75:0;;;17797:21:1;17854:2;17834:18;;;17827:30;17893:34;17873:18;;;17866:62;17964:10;17944:18;;;17937:38;17992:19;;24103:75:0;17613:404:1;24103:75:0;-1:-1:-1;;;;;24250:25:0;;24217:12;24250:25;;;:19;:25;;;;;;24232:4;;24250:25;;;:52;;-1:-1:-1;;;;;;24279:23:0;;;;;;:19;:23;;;;;;;;24250:52;24247:98;;;-1:-1:-1;24328:5:0;24247:98;-1:-1:-1;;;;;24361:11:0;;;;;;:7;:11;;;;;;;;24357:443;;;24394:6;;;;;;;24393:7;:47;;;;-1:-1:-1;24421:19:0;;;;;;;24393:47;24389:394;;;24475:28;24506:24;24524:4;24506:9;:24::i;:::-;24475:55;;24577:13;;24553:20;:37;24549:219;;24642:10;;24618:20;:34;24615:77;;-1:-1:-1;24679:10:0;;24615:77;24714:34;24727:20;24714:12;:34::i;:::-;24456:327;24389:394;24818:44;24836:4;24842:2;24846:6;24854:7;24818:17;:44::i;:::-;24811:51;23584:1286;-1:-1:-1;;;;;23584:1286:0:o;31038:526::-;31118:7;;31154;;31080;;31118;31080;31172:282;31196:9;:16;31192:20;;31172:282;;;31262:7;31238;:21;31246:9;31256:1;31246:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31246:12:0;31238:21;;;;;;;;;;;;;:31;;:66;;;31297:7;31273;:21;31281:9;31291:1;31281:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31281:12:0;31273:21;;;;;;;;;;;;;:31;31238:66;31234:96;;;31323:7;;31313;;:17;;;;:::i;:::-;31306:24;;;;;31038:526;:::o;31234:96::-;31365:7;:21;31373:9;31383:1;31373:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31373:12:0;31365:21;;;;;;;;;;;;;31355:31;;:7;:31;:::i;:::-;31345:41;;31421:7;:21;31429:9;31439:1;31429:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31429:12:0;31421:21;;;;;;;;;;;;;31411:31;;:7;:31;:::i;:::-;31401:41;-1:-1:-1;31214:3:0;;;;:::i;:::-;;;;31172:282;;;;31488:7;;31478;;:17;;;;:::i;:::-;31468:7;:27;31464:57;;;31514:7;;31504;;:17;;;;:::i;:::-;31497:24;;;;31038:526;:::o;31464:57::-;31539:17;31549:7;31539;:17;:::i;22995:323::-;23063:4;12807:6;;-1:-1:-1;;;;;23087:15:0;;;12807:6;;23087:15;;;;:45;;-1:-1:-1;12780:7:0;12807:6;-1:-1:-1;;;;;23119:13:0;;;12807:6;;23119:13;;23087:45;:84;;;;-1:-1:-1;;;;;;23150:21:0;;;;;;:17;:21;;;;;;;;23149:22;23087:84;:125;;;;-1:-1:-1;;;;;;23189:23:0;;;;;;:17;:23;;;;;;;;23188:24;23087:125;:152;;;;-1:-1:-1;;;;;;23229:10:0;;10156:42;23229:10;;23087:152;:185;;;;-1:-1:-1;;;;;;23256:16:0;;;;23087:185;:223;;;;-1:-1:-1;;;;;;23289:21:0;;23305:4;23289:21;;23080:230;22995:323;-1:-1:-1;;;22995:323:0:o;24878:1480::-;11260:6;:13;;;;;;;;24965:7:::1;:13:::0;::::1;::::0;;;::::1;;24961:44;;24998:7;;24961:44;25040:4;25020:26;::::0;;;:11:::1;:26;::::0;;;;;;;25055:9:::1;::::0;-1:-1:-1;;;;;25055:9:0::1;25020:46:::0;;;;;;;;-1:-1:-1;;25020:67:0::1;25017:165;;25124:4;25104:26;::::0;;;:11:::1;:26;::::0;;;;;;;25139:9:::1;::::0;-1:-1:-1;;;;;25139:9:0::1;25104:46:::0;;;;;;;-1:-1:-1;;25104:66:0;;25017:165:::1;25260:7;:13:::0;25194:17:::1;::::0;25277:1:::1;::::0;25260:13:::1;::::0;;::::1;::::0;::::1;::::0;25216:40:::1;::::0;25239:17:::1;25216:20:::0;:40:::1;:::i;:::-;25215:58;;;;:::i;:::-;25214:64;;;;:::i;:::-;25194:84:::0;-1:-1:-1;25291:20:0::1;25314:32;25194:84:::0;25314:20;:32:::1;:::i;:::-;25391:16;::::0;;25405:1:::1;25391:16:::0;;;;;::::1;::::0;;25291:55;;-1:-1:-1;25367:21:0::1;::::0;25391:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;25391:16:0::1;25367:40;;25436:4;25418;25423:1;25418:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25418:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;25462:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;25418:7;;25462:16;;;;;:9;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25452:4;25457:1;25452:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25452:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;25491:9:::1;::::0;:219:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:219:::1;::::0;25566:12;;25491:9:::1;::::0;25637:4;;25664::::1;::::0;25684:15:::1;::::0;25491:219:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;25797:7:0::1;:13:::0;25723:24:::1;::::0;-1:-1:-1;25814:1:0::1;::::0;-1:-1:-1;25797:13:0::1;::::0;;::::1;::::0;::::1;::::0;25752:41:::1;::::0;25776:17:::1;25752:21;:41;:::i;:::-;25751:59;;;;:::i;:::-;25750:65;;;;:::i;:::-;25723:92:::0;-1:-1:-1;25832:13:0;;25828:396:::1;;25862:9;::::0;:276:::1;::::0;;;;25939:4:::1;25862:276;::::0;::::1;19606:34:1::0;19656:18;;;19649:34;;;25862:9:0::1;19699:18:1::0;;;19692:34;;;19742:18;;;19735:34;10156:42:0::1;19785:19:1::0;;;19778:44;26108:15:0::1;19838:19:1::0;;;19831:35;-1:-1:-1;;;;;25862:9:0;;::::1;::::0;:25:::1;::::0;25895:16;;19517:19:1;;25862:276:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;26158:54:0::1;::::0;;20390:25:1;;;20446:2;20431:18;;20424:34;;;20474:18;;;20467:34;;;26158:54:0::1;::::0;-1:-1:-1;20378:2:1;20363:18;26158:54:0::1;;;;;;;25828:396;26273:1;26238:32;26261:9:::0;26238:20;:32:::1;:::i;:::-;:36;26234:117;;;26291:16;::::0;:48:::1;::::0;-1:-1:-1;;;;;26291:16:0;;::::1;::::0;26317:21:::1;26291:48:::0;::::1;;;::::0;:16:::1;:48:::0;:16;:48;26317:21;26291:16;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;26234:117;24950:1408;;;;11284:1;-1:-1:-1::0;11296:6:0;:14;;;;;;24878:1480::o;27804:1273::-;27927:16;;27905:4;;27927:16;;;;;27922:221;;27960:28;27979:4;27985:2;27960:18;:28::i;:::-;28008:16;;;;;;;28007:17;:41;;;;;28028:20;28039:4;28045:2;28028:10;:20::i;:::-;28003:129;;;28069:47;;-1:-1:-1;;;28069:47:0;;20714:2:1;28069:47:0;;;20696:21:1;20753:2;20733:18;;;20726:30;20792:34;20772:18;;;20765:62;20863:7;20843:18;;;20836:35;20888:19;;28069:47:0;20512:401:1;28003:129:0;28155:25;28183:38;28194:4;28200:2;28204:7;28213;28183:10;:38::i;:::-;28266:14;;;;-1:-1:-1;;;;;28250:13:0;;;;;;:7;:13;;;;;;28155:66;;-1:-1:-1;28250:30:0;;;:::i;:::-;-1:-1:-1;;;;;28234:13:0;;;;;;;:7;:13;;;;;;:46;;;;28319:22;;;;28305:11;;;;;;;;;;:36;;28319:22;28305:36;:::i;:::-;-1:-1:-1;;;;;28291:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;28358:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;28380:15:0;;;;;;:11;:15;;;;;;;;28379:16;28358:37;28354:416;;;-1:-1:-1;;;;;28428:13:0;;;;;;:7;:13;;;;;;:23;;28444:7;;28428:23;:::i;:::-;-1:-1:-1;;;;;28412:13:0;;;;;;:7;:13;;;;;:39;28354:416;;;-1:-1:-1;;;;;28474:17:0;;;;;;:11;:17;;;;;;;;28473:18;:37;;;;-1:-1:-1;;;;;;28495:15:0;;;;;;:11;:15;;;;;;;;28473:37;28469:301;;;28555:22;;-1:-1:-1;;;;;28541:11:0;;28555:22;28541:11;;;:7;:11;;;;;;:36;;28555:22;28541:36;:::i;:::-;-1:-1:-1;;;;;28527:11:0;;;;;;:7;:11;;;;;:50;28469:301;;;-1:-1:-1;;;;;28601:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;28622:15:0;;;;;;:11;:15;;;;;;;;28601:36;28597:173;;;-1:-1:-1;;;;;28670:13:0;;;;;;:7;:13;;;;;;:23;;28686:7;;28670:23;:::i;:::-;-1:-1:-1;;;;;28654:13:0;;;;;;;:7;:13;;;;;;:39;;;;28736:22;;28722:11;;;;;;;;;;:36;;28736:22;28722:36;:::i;:::-;-1:-1:-1;;;;;28708:11:0;;;;;;:7;:11;;;;;:50;28597:173;28786:17;;;;:21;28782:79;;28822:39;28837:4;28843:6;:17;;;28822:14;:39::i;:::-;28890:1;28876:6;:11;;;:15;:34;;;;28909:1;28895:6;:11;;;:15;28876:34;28872:75;;;28936:6;:11;;;28925:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;28872:75:0;28976:6;:11;;;28962:10;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;29024:22:0;;29005:42;;2871:25:1;;;-1:-1:-1;;;;;29005:42:0;;;;;;;;;;2859:2:1;2844:18;29005:42:0;;;;;;;-1:-1:-1;29065:4:0;;27804:1273;-1:-1:-1;;;;;27804:1273:0:o;26366:508::-;26448:16;;;;;;;26447:17;26439:65;;;;-1:-1:-1;;;26439:65:0;;21120:2:1;26439:65:0;;;21102:21:1;21159:2;21139:18;;;21132:30;21198:34;21178:18;;;21171:62;21269:5;21249:18;;;21242:33;21292:19;;26439:65:0;20918:399:1;26439:65:0;26520:20;26531:4;26537:2;26520:10;:20::i;:::-;26519:21;:37;;;;-1:-1:-1;26550:6:0;;-1:-1:-1;;;;;26544:12:0;;;26550:6;;26544:12;26519:37;26515:352;;;-1:-1:-1;;;;;26573:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;26573:30:0;26599:4;26573:30;;;26618:16;:23;;;;26573:30;26618:23;;;;;26667:9;;;;26656:107;;26711:9;:36;;;;26741:4;26711:36;;;;;26656:107;26777:19;:26;;;;;;;;26823:32;;-1:-1:-1;2286:41:1;;26823:32:0;;2274:2:1;2259:18;26823:32:0;;;;;;;26366:508;;:::o;29085:1945::-;29179:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29179:18:0;29210:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29210:25:0;29246:19;29268:10;:8;:10::i;:::-;29246:32;-1:-1:-1;29308:21:0;29246:32;29308:7;:21;:::i;:::-;29291:14;;;:38;29346:20;29357:4;29363:2;29346:10;:20::i;:::-;29342:315;;;29414:9;;:38;;;;;-1:-1:-1;;;;;21603:15:1;;;29414:38:0;;;21585:34:1;21655:15;;;21635:18;;;21628:43;21687:18;;;21680:34;;;29383:12:0;;29414:9;;;;;:19;;21497:18:1;;29414:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29414:38:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29410:164;;29550:8;;;29410:164;29503:5;-1:-1:-1;29594:7:0;29590:56;;29622:8;;;29590:56;29368:289;29342:315;29672:7;29669:1228;;;-1:-1:-1;;;;;29700:11:0;;;;;;:7;:11;;;;;;;;29696:669;;;29755:10;:18;29732:12;:41;;29755:18;;;;-1:-1:-1;;29792:45:0;;;;;;;29817:20;;;;;;29792:45;;-1:-1:-1;;29856:45:0;29881:20;;;;;;;;;29856:45;;;;;;;;;29696:669;;;-1:-1:-1;;;;;29927:13:0;;;;;;:7;:13;;;;;;;;29923:442;;;29984:9;:17;29961:12;:40;;29984:17;;;;-1:-1:-1;;30020:44:0;;;;;;;30045:19;;;;;;30020:44;;-1:-1:-1;;30083:44:0;30108:19;;;;;;;;;30083:44;;;;;;;;;29923:442;;;30191:14;:22;30168:12;:45;;30191:22;;;;-1:-1:-1;;30232:49:0;;;;;;;30257:24;;;;;;30232:49;;-1:-1:-1;;30300:49:0;30325:24;;;;;;;;;30300:49;;;;;;;;;29923:442;30430:10;:27;30406:12;:20;30430:27;;;;;;;;30396:30;;30406:20;30396:7;:30;:::i;:::-;30395:62;;;;:::i;:::-;30381:11;;;:76;30556:10;:27;30529:12;:22;30556:27;;;;;;;;30504:47;;30529:22;;;;;;30504;;;;;:47;:::i;:::-;30493:59;;;;:7;:59;:::i;:::-;30492:91;;;;:::i;:::-;30472:17;;;:111;;;30634:11;;;;:31;;30472:111;30634:31;:::i;:::-;30623:43;;:7;:43;:::i;:::-;30598:68;;30697:11;;;;:25;;30711:11;;30697:25;:::i;:::-;30683:11;;;:39;29669:1228;;;30769:1;30755:11;;;:15;;;30785:17;;;:21;;;30821:32;;;30870:11;;;:15;29669:1228;30985:11;30965:6;:17;;;:31;;;;:::i;:::-;30950:6;:11;;;:47;;;;:::i;:::-;30932:6;:14;;;:66;;;;:::i;:::-;30907:22;;;:91;-1:-1:-1;30907:22:0;29085:1945;-1:-1:-1;;;;;29085:1945:0:o;31572:375::-;31715:10;:8;:10::i;:::-;31702:23;;:10;:23;:::i;:::-;31692:4;31676:22;;;;:7;:22;;;;;;:50;;;;:::i;:::-;31667:4;31651:22;;;;:7;:22;;;;;;;;:75;;;;31740:11;:26;;;;;;31737:104;;;31822:4;31806:22;;;;:7;:22;;;;;;:35;;31831:10;;31806:35;:::i;:::-;31797:4;31781:22;;;;:7;:22;;;;;:60;31737:104;31857:43;;2871:25:1;;;31882:4:0;;-1:-1:-1;;;;;31857:43:0;;;;;2859:2:1;2844:18;31857:43:0;;;;;;;31572:375;;:::o;245:118:1:-;331:5;324:13;317:21;310:5;307:32;297:60;;353:1;350;343:12;368:376;430:6;438;491:2;479:9;470:7;466:23;462:32;459:52;;;507:1;504;497:12;459:52;546:9;533:23;565:28;587:5;565:28;:::i;:::-;612:5;-1:-1:-1;669:2:1;654:18;;641:32;682:30;641:32;682:30;:::i;:::-;731:7;721:17;;;368:376;;;;;:::o;749:656::-;861:4;890:2;919;908:9;901:21;951:6;945:13;994:6;989:2;978:9;974:18;967:34;1019:1;1029:140;1043:6;1040:1;1037:13;1029:140;;;1138:14;;;1134:23;;1128:30;1104:17;;;1123:2;1100:26;1093:66;1058:10;;1029:140;;;1187:6;1184:1;1181:13;1178:91;;;1257:1;1252:2;1243:6;1232:9;1228:22;1224:31;1217:42;1178:91;-1:-1:-1;1321:2:1;1309:15;1326:66;1305:88;1290:104;;;;1396:2;1286:113;;749:656;-1:-1:-1;;;749:656:1:o;1667:154::-;-1:-1:-1;;;;;1746:5:1;1742:54;1735:5;1732:65;1722:93;;1811:1;1808;1801:12;1826:315;1894:6;1902;1955:2;1943:9;1934:7;1930:23;1926:32;1923:52;;;1971:1;1968;1961:12;1923:52;2010:9;1997:23;2029:31;2054:5;2029:31;:::i;:::-;2079:5;2131:2;2116:18;;;;2103:32;;-1:-1:-1;;;1826:315:1:o;2338:382::-;2403:6;2411;2464:2;2452:9;2443:7;2439:23;2435:32;2432:52;;;2480:1;2477;2470:12;2432:52;2519:9;2506:23;2538:31;2563:5;2538:31;:::i;3356:159::-;3423:20;;3483:6;3472:18;;3462:29;;3452:57;;3505:1;3502;3495:12;3452:57;3356:159;;;:::o;3520:328::-;3594:6;3602;3610;3663:2;3651:9;3642:7;3638:23;3634:32;3631:52;;;3679:1;3676;3669:12;3631:52;3702:28;3720:9;3702:28;:::i;:::-;3692:38;;3749:37;3782:2;3771:9;3767:18;3749:37;:::i;:::-;3739:47;;3805:37;3838:2;3827:9;3823:18;3805:37;:::i;:::-;3795:47;;3520:328;;;;;:::o;3853:456::-;3930:6;3938;3946;3999:2;3987:9;3978:7;3974:23;3970:32;3967:52;;;4015:1;4012;4005:12;3967:52;4054:9;4041:23;4073:31;4098:5;4073:31;:::i;:::-;4123:5;-1:-1:-1;4180:2:1;4165:18;;4152:32;4193:33;4152:32;4193:33;:::i;:::-;3853:456;;4245:7;;-1:-1:-1;;;4299:2:1;4284:18;;;;4271:32;;3853:456::o;4314:180::-;4373:6;4426:2;4414:9;4405:7;4401:23;4397:32;4394:52;;;4442:1;4439;4432:12;4394:52;-1:-1:-1;4465:23:1;;4314:180;-1:-1:-1;4314:180:1:o;4688:247::-;4747:6;4800:2;4788:9;4779:7;4775:23;4771:32;4768:52;;;4816:1;4813;4806:12;4768:52;4855:9;4842:23;4874:31;4899:5;4874:31;:::i;4940:248::-;5008:6;5016;5069:2;5057:9;5048:7;5044:23;5040:32;5037:52;;;5085:1;5082;5075:12;5037:52;-1:-1:-1;;5108:23:1;;;5178:2;5163:18;;;5150:32;;-1:-1:-1;4940:248:1:o;5563:256::-;5629:6;5637;5690:2;5678:9;5669:7;5665:23;5661:32;5658:52;;;5706:1;5703;5696:12;5658:52;5729:28;5747:9;5729:28;:::i;:::-;5719:38;;5776:37;5809:2;5798:9;5794:18;5776:37;:::i;:::-;5766:47;;5563:256;;;;;:::o;5824:241::-;5880:6;5933:2;5921:9;5912:7;5908:23;5904:32;5901:52;;;5949:1;5946;5939:12;5901:52;5988:9;5975:23;6007:28;6029:5;6007:28;:::i;6070:388::-;6138:6;6146;6199:2;6187:9;6178:7;6174:23;6170:32;6167:52;;;6215:1;6212;6205:12;6167:52;6254:9;6241:23;6273:31;6298:5;6273:31;:::i;:::-;6323:5;-1:-1:-1;6380:2:1;6365:18;;6352:32;6393:33;6352:32;6393:33;:::i;6723:385::-;6809:6;6817;6825;6833;6886:3;6874:9;6865:7;6861:23;6857:33;6854:53;;;6903:1;6900;6893:12;6854:53;-1:-1:-1;;6926:23:1;;;6996:2;6981:18;;6968:32;;-1:-1:-1;7047:2:1;7032:18;;7019:32;;7098:2;7083:18;7070:32;;-1:-1:-1;6723:385:1;-1:-1:-1;6723:385:1:o;8446:184::-;8498:77;8495:1;8488:88;8595:4;8592:1;8585:15;8619:4;8616:1;8609:15;8635:184;8687:77;8684:1;8677:88;8784:4;8781:1;8774:15;8808:4;8805:1;8798:15;8824:184;8876:77;8873:1;8866:88;8973:4;8970:1;8963:15;8997:4;8994:1;8987:15;9013:125;9053:4;9081:1;9078;9075:8;9072:34;;;9086:18;;:::i;:::-;-1:-1:-1;9123:9:1;;9013:125::o;9143:195::-;9182:3;-1:-1:-1;;9206:5:1;9203:77;9200:103;;;9283:18;;:::i;:::-;-1:-1:-1;9330:1:1;9319:13;;9143:195::o;9343:224::-;9382:3;9410:6;9443:2;9440:1;9436:10;9473:2;9470:1;9466:10;9504:3;9500:2;9496:12;9491:3;9488:21;9485:47;;;9512:18;;:::i;:::-;9548:13;;9343:224;-1:-1:-1;;;;9343:224:1:o;9572:128::-;9612:3;9643:1;9639:6;9636:1;9633:13;9630:39;;;9649:18;;:::i;:::-;-1:-1:-1;9685:9:1;;9572:128::o;10116:274::-;10156:1;10182;10172:189;;10217:77;10214:1;10207:88;10318:4;10315:1;10308:15;10346:4;10343:1;10336:15;10172:189;-1:-1:-1;10375:9:1;;10116:274::o;10395:228::-;10435:7;10561:1;-1:-1:-1;;10489:74:1;10486:1;10483:81;10478:1;10471:9;10464:17;10460:105;10457:131;;;10568:18;;:::i;:::-;-1:-1:-1;10608:9:1;;10395:228::o;11482:184::-;11552:6;11605:2;11593:9;11584:7;11580:23;11576:32;11573:52;;;11621:1;11618;11611:12;11573:52;-1:-1:-1;11644:16:1;;11482:184;-1:-1:-1;11482:184:1:o;14497:251::-;14567:6;14620:2;14608:9;14599:7;14595:23;14591:32;14588:52;;;14636:1;14633;14626:12;14588:52;14668:9;14662:16;14687:31;14712:5;14687:31;:::i;15442:245::-;15509:6;15562:2;15550:9;15541:7;15537:23;15533:32;15530:52;;;15578:1;15575;15568:12;15530:52;15610:9;15604:16;15629:28;15651:5;15629:28;:::i;18211:1026::-;18473:4;18521:3;18510:9;18506:19;18552:6;18541:9;18534:25;18578:2;18616:6;18611:2;18600:9;18596:18;18589:34;18659:3;18654:2;18643:9;18639:18;18632:31;18683:6;18718;18712:13;18749:6;18741;18734:22;18787:3;18776:9;18772:19;18765:26;;18826:2;18818:6;18814:15;18800:29;;18847:1;18857:218;18871:6;18868:1;18865:13;18857:218;;;18936:13;;-1:-1:-1;;;;;18932:62:1;18920:75;;19050:15;;;;19015:12;;;;18893:1;18886:9;18857:218;;;-1:-1:-1;;;;;;;19131:55:1;;;;19126:2;19111:18;;19104:83;-1:-1:-1;;;19218:3:1;19203:19;19196:35;19092:3;18211:1026;-1:-1:-1;;;18211:1026:1:o;19877:306::-;19965:6;19973;19981;20034:2;20022:9;20013:7;20009:23;20005:32;20002:52;;;20050:1;20047;20040:12;20002:52;20079:9;20073:16;20063:26;;20129:2;20118:9;20114:18;20108:25;20098:35;;20173:2;20162:9;20158:18;20152:25;20142:35;;19877:306;;;;;:::o

Swarm Source

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