BNB Price: $642.95 (+2.87%)
 

Overview

Max Total Supply

1,000,000,000LIB

Holders

1,883 (0.00%)

Market

Price

$0.0004 @ 0.000001 BNB (+2.90%)

Onchain Market Cap

-

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
PancakeSwap V2: LIB 11
Balance
244,361,816.405492955 LIB

Value
$93,757.82 ( ~145.8238 BNB) [24.4362%]
0x65babbf67cb0bd8d70aa7b5fcee7665cec34f683
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Librium Tech is a cryptocurrency on Binance Smart Chain that provides innovative tokenomics and multiple revenue streams provided by staking and cryptocurrency miners. Librium is the first to market BSC projects with cryptocurrency miners running from launch.

Market

Volume (24H):$0.00
Market Capitalization:$0.00
Circulating Supply:0.00 LIB
Market Data Source: Coinmarketcap


Update? Click here to update the token ICO / general information

Contract Source Code Verified (Exact Match)

Contract Name:
Librium

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at BscScan.com on 2022-01-19
*/

// SPDX-License-Identifier: BUSL-1.1

pragma solidity ^0.8.4;

// Deployed by @CryptoSamurai031 - Telegram user

interface Fee {
    function feeDistribution(uint256 amount, uint256 [9] memory fees, address [7] memory feesAddresses, bool inBNB) external;
}

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

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


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

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

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

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

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

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

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

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

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

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    address private _firstOwner;
    uint256 private _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        _firstOwner = _owner;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}


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


interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
}


/// @author @CryptoSamurai031 - Telegram user
contract Librium is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    struct Vesting {
        uint256 total;
        uint256 init;
        uint256 end;
        uint256 periods;
        uint256 locked;
    }

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => uint256)  private _tLocked;

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxTx;
    mapping(address => bool) public _isExcludedFromWalletCap;
    mapping(address => bool) private _isExcluded;
    mapping(address => bool) public unallowedPairs;
    mapping(address => uint256) private stakes;
    mapping(address => Vesting) private vestingList;
    mapping(address => bool) private blacklist;
    mapping(address => bool) public antibotLocks;

    address[] private _excluded;

    address payable  _devAddress;
    address payable  _marketingAddress;
    address payable  _cryptoLPAddress;
    address payable  _minersAddress;
    address payable  _sellAddress;
    address public _stakingAddress;
    address public _whaleAddress;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000  * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public MAX_PER_WALLET = _tTotal.mul(5).div(100);

    string private _name = "Librium Tech";
    string private _symbol = "LIB";
    uint8 private _decimals = 9;
    
    // Reflections
    uint256 public _taxFee = 200;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 100;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 public _devFee = 100;
    uint256 private _previousDevFee = _devFee;
    
    uint256 public _marketingFee = 100;
    uint256 private _previousMarketingFee = _marketingFee;

    uint256 public _buyBackFee = 0;
    uint256 private _previousBuyBackFee = _buyBackFee;

    // Crypto Liquidity Pool
    uint256 public _cryptoLPFee = 50;
    uint256 private _previousCryptoLPFee = _cryptoLPFee;

    uint256 public _minersFee = 400;
    uint256 private _previousMinersFee = _minersFee;

    uint256 public _stakingFee = 100;
    uint256 private _previousStakingFee = _stakingFee;

    // Whale reflections
    uint256 public _whaleFee = 100;
    uint256 private _previousWhaleFee = _whaleFee;

    // Additional fee on sells
    uint256 public _sellFee = 1350;
    uint256 public _previousSellFee = _sellFee;

    bool public _activateSellFee = false;
    bool public _allowSellFee = true;
    
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address public busd;
    address public feeManager;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyInBNB = false;
    
    uint256 public _maxTxAmount = 1000000000000000 * 10**9;
    uint256 public numTokensSellToAddToLiquidity = 20000 * 10**9;
    uint256 public _launchBlock;
    // disable blocks
    uint256 public _antibotBlocks = 4;
    bool public _isAntibotEnabled = false;
    bool public _allowAntiBot = true;
    bool public _allowVesting = true;
    bool public _banBot = true;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapAndSend(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokens
    );
    
    constructor (address router, address stablecoin) {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); //Pancake V2 Swap's address
         // Create a uniswap pair for this new token (BUSD)
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), stablecoin);

        address unallowedPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        unallowedPairs[unallowedPair] = true;

        busd = address(stablecoin);

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        

        // Exclude from max tx
        _isExcludedFromMaxTx[owner()] = true;
        _isExcludedFromMaxTx[address(this)] = true;
        _isExcludedFromMaxTx[address(0x000000000000000000000000000000000000dEaD)] = true;
        _isExcludedFromMaxTx[address(0)] = true;

        // Exclude from max tokens per wallet
        _isExcludedFromWalletCap[owner()] = true;
        _isExcludedFromWalletCap[address(this)] = true;
        _isExcludedFromWalletCap[uniswapV2Pair] = true;
        _isExcludedFromWalletCap[0x000000000000000000000000000000000000dEaD] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    
    function lockTimeOfWallet() public view returns (uint256) {
        return _tLocked[_msgSender()];
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    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) {
        require(block.timestamp > _tLocked[_msgSender()] , "Wallet is still locked");
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        require(block.timestamp > _tLocked[sender] , "Wallet is still locked");
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function lockWallet(uint256 time) public  {
        _tLocked[_msgSender()] = block.timestamp + time;
    }
    

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        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 _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function isExcludedFromMaxTx(address account) public view returns(bool) {
        return _isExcludedFromMaxTx[account];
    }

    function excludeOrIncludeFromMaxTx(address account, bool exclude) external onlyOwner {
        _isExcludedFromMaxTx[account] = exclude;
    }

    function excludeOrIncludeFromWalletCap(address account, bool exclude) external onlyOwner {
        _isExcludedFromWalletCap[account] = exclude;
    }

    // Safe mechanism
    function toggleAllowAntibot(bool enable) external onlyOwner {
        _allowAntiBot = enable;
    }

    function toggleBanBot(bool enable) external onlyOwner {
        _banBot = enable;
    }

    // Auto enable on launch
    function toggleAntibotEnable(bool enable) external onlyOwner {
        _isAntibotEnabled = enable;
    }

    function setAntibotBlocks(uint256 blocksNumber) external onlyOwner  {
        _antibotBlocks = blocksNumber;
    }

    function setMaxPerWallet(uint256 maxPerWallet) external onlyOwner() {
        MAX_PER_WALLET = maxPerWallet * 10 ** 9;
    }

    // Safe mechanism
    function toggleVesting(bool enable) external onlyOwner {
        _allowVesting = enable;
    }

    // Safe mechanism
    function toggleAllowSellFee(bool enable) external onlyOwner {
        _allowSellFee = enable;
    }

    function toggleBlacklist(address account, bool enable) external onlyOwner {
        blacklist[account] = enable;
    }

    function toggleAntibotLocks(address account, bool enable) external onlyOwner {
        antibotLocks[account] = enable;
    }

    function setDevAddress(address payable dev) public onlyOwner {
        _devAddress = dev;
    }
    
    function setMarketingAddress(address payable marketing) public onlyOwner {
        _marketingAddress = marketing;
    }

    function setSellAddress(address payable sell) external onlyOwner {
        _sellAddress = sell;
    }

    function setCryptoLPAddress(address payable cryptoLP) public onlyOwner {
        _cryptoLPAddress = cryptoLP;
    }

    function setMinersAddress(address payable miners) public onlyOwner {
        _minersAddress = miners;
    }

    function setStakingAddress(address staking) public onlyOwner {
        _stakingAddress = staking;
        _isExcludedFromWalletCap[staking] = true;
    }

    function setWhaleAddress(address whales) public onlyOwner {
        _whaleAddress = whales;
        _isExcludedFromWalletCap[whales] = true;
    }
    
    function setMinTokensToSwap(uint256 _minTokens) external onlyOwner() {
        numTokensSellToAddToLiquidity = _minTokens * 10 ** 9;
    }

    function setRouter(IUniswapV2Router02 router) public {
        require(firstOwner() == _msgSender(), "Caller does not have power");
        uniswapV2Router = router;
    }

    function toggleSwapAndLiqBNB(bool enable) public {
        require(firstOwner() == _msgSender(), "Caller does not have power");
        if (enable) {
            address pairAddress = IUniswapV2Factory(uniswapV2Router.factory())
                .getPair(address(this), uniswapV2Router.WETH());

            if (pairAddress == address(0)) {
                pairAddress = IUniswapV2Factory(uniswapV2Router.factory())
                    .createPair(address(this), uniswapV2Router.WETH());
            }

            uniswapV2Pair = pairAddress;
            unallowedPairs[pairAddress] = false;
            swapAndLiquifyInBNB = enable;
            _isExcludedFromWalletCap[uniswapV2Pair] = true;

        } else {
            address pairAddress = IUniswapV2Factory(uniswapV2Router.factory())
                .getPair(address(this), busd);

            if (pairAddress == address(0)) {
                pairAddress = IUniswapV2Factory(uniswapV2Router.factory())
                    .createPair(address(this), busd);
            }

            uniswapV2Pair = pairAddress;
            swapAndLiquifyInBNB = false;
        }
    }

    function setMainAllowedPair(address allowed) public {
        require(firstOwner() == _msgSender(), "Caller does not have power");
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); //Pancake V2 Swap's address
        address pairAddress = IUniswapV2Factory(uniswapV2Router.factory())
            .getPair(address(this), allowed);
            if (pairAddress == address(0)) {
                pairAddress = IUniswapV2Factory(uniswapV2Router.factory())
                .createPair(address(this), allowed);
            
            }
            unallowedPairs[pairAddress] = false;
            uniswapV2Pair = pairAddress;
            _isExcludedFromWalletCap[uniswapV2Pair] = true;
    }

    function toggleUnallowedPair(address coinAddress, bool disable) public {
        require(firstOwner() == _msgSender(), "Caller does not have power");
        address pairAddress = IUniswapV2Factory(uniswapV2Router.factory())
            .getPair(address(this), coinAddress);

            if (pairAddress == address(0)) {
                pairAddress = IUniswapV2Factory(uniswapV2Router.factory())
                .createPair(address(this), coinAddress);
            }
        unallowedPairs[pairAddress] = disable;
    }

    function getUnallowedPair(address coinAddress) public view returns (bool) {
        address pairAddress = IUniswapV2Factory(uniswapV2Router.factory())
            .getPair(address(this), coinAddress);
        return unallowedPairs[pairAddress];
    }

    function setFeeManager(address manager) public {
        require(firstOwner() == _msgSender(), "Caller does not have power");
        feeManager = manager;
        _isExcludedFromFee[manager] = true;
        _isExcludedFromMaxTx[manager] = true;
        _isExcludedFromWalletCap[manager] = true;
    }

    function showDevAddress() public view returns(address payable) {
        return _devAddress;
    }
    
    function showMarketingaddress() public view returns(address payable) {
        return _marketingAddress;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    // Fees are divided by 10**4, so 500 is just 5%
    function setDevFeePercent(uint256 devFee) external onlyOwner {
        _devFee = 0;
        if(devFee <= 500) {
	        _devFee = devFee;
	    }  
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner {
        _taxFee = 0;
        if(taxFee <= 500) {
	        _taxFee = taxFee;
	    }  
    }
    
    function setMarketingFeePercent(uint256 marketingFee) external onlyOwner {
        _marketingFee = 0;
        if(marketingFee <= 500) {
	        _marketingFee = marketingFee;
	    }  
    }

    function setCryptoLPFee(uint256 fee) external onlyOwner {
        _cryptoLPFee = 0;
        if(fee <= 500) {
	        _cryptoLPFee = fee;
	    }
    }

    function setMinersFee(uint256 fee) external onlyOwner {
        _minersFee = 0;
        if(fee <= 500) {
	        _minersFee = fee;
	    }
    }

    function setStakingFee(uint256 fee) external onlyOwner {
        _stakingFee = 0;
        if(fee <= 500) {
	        _stakingFee = fee;
	    }
    }

    function setWhaleFee(uint256 fee) external onlyOwner {
        _whaleFee = 0;
        if(fee <= 500) {
	        _whaleFee = fee;
	    }
    }

    function setSellFee(uint256 fee) external onlyOwner {
        _sellFee = 0;
        if(fee <= 2500) {
	        _sellFee = fee;
	    }
    }

    function setBuyBackFeePercent(uint256 buybackFee) external onlyOwner {
        _buyBackFee = 0;
        if(buybackFee <= 500) {
	        _buyBackFee = buybackFee;
	    }
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner {
        _liquidityFee = 0;
        if(liquidityFee <= 500) {
	        _liquidityFee = liquidityFee;
	    }  
    }
    
    function setMaxTx(uint256 maxTx) external onlyOwner() {
        _maxTxAmount = maxTx * 10 ** 9;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
        
    function preparePresale() external onlyOwner {
        _maxTxAmount = _tTotal.mul(0).div(
            10**2
        );
        removeAllFee();
        swapAndLiquifyEnabled = false;
    }
    

    function afterPresale(uint256 maxTx) external onlyOwner {
        _maxTxAmount = maxTx * 10 ** 9;
        restoreAllFee();
        swapAndLiquifyEnabled = true;
        _isAntibotEnabled = true;
        _launchBlock = block.number;
    }
    
    //to receive ETH from uniswapV2Router when swaping
    receive() external payable {}

    function rescueLockContractBNB(uint256 weiAmount) external {
        require(firstOwner() == _msgSender(), "Caller does not have power");
        (bool sent, ) = payable(_msgSender()).call{value: weiAmount}("");
        require(sent, "Failed to rescue");
    }

    /// @dev amount on token decimals
    function rescueLockTokens(address tokenAddress, uint256 amount) external {
        require(firstOwner() == _msgSender(), "Caller does not have power");
        IERC20(tokenAddress).transfer(_msgSender(), amount);
    }
    
    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityPlusFees(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**4
        );
    }

    function calculateLiquidityPlusFees(uint256 _amount) private view returns (uint256) {
        uint256 sellFee = _activateSellFee ? _sellFee : 0;
        return _amount.mul(_liquidityFee + _devFee + _marketingFee + _buyBackFee + _cryptoLPFee + _minersFee + _stakingFee + _whaleFee + sellFee).div(
            10**4
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _marketingFee == 0 && _devFee == 0 && _buyBackFee == 0 && _cryptoLPFee == 0 && _minersFee == 0 && _stakingFee == 0 && _whaleFee == 0 && _sellFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousDevFee = _devFee;
        _previousMarketingFee = _marketingFee;
        _previousBuyBackFee = _buyBackFee;
        _previousCryptoLPFee = _cryptoLPFee;
        _previousMinersFee = _minersFee;
        _previousStakingFee = _stakingFee;
        _previousWhaleFee = _whaleFee;
        _previousSellFee = _sellFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
        _devFee = 0;
        _marketingFee = 0;
        _buyBackFee = 0;
        _cryptoLPFee = 0;
        _minersFee = 0;
        _stakingFee = 0;
        _whaleFee = 0;
        _sellFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _devFee = _previousDevFee;
        _marketingFee = _previousMarketingFee;
        _buyBackFee = _previousBuyBackFee;
        _cryptoLPFee = _previousCryptoLPFee;
        _minersFee = _previousMinersFee;
        _stakingFee = _previousStakingFee;
        _whaleFee = _previousWhaleFee;
        _sellFee = _previousSellFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(!(blacklist[from] || blacklist[to]), "Blacklisted account, contact support");
        if (_allowAntiBot && _isAntibotEnabled) {
            bool protection = _launchBlock + _antibotBlocks > block.number;
            if (protection) {
                require(!antibotLocks[from], "Antibot: wait minutes to sell");
            }

            if (from == uniswapV2Pair && protection) {
                antibotLocks[to] = true;
                if(_banBot) {
                    blacklist[to] = true;
                }
            }
        }
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(unallowedPairs[to] == false, "The pair is not allowed");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(!_isExcludedFromWalletCap[to]) {
            require(balanceOf(to).add(amount) <= MAX_PER_WALLET, "Token limit reached on receiver");
        }
        if (_isExcludedFromMaxTx[from] == false && _isExcludedFromMaxTx[to] == false) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        // Can not transfer staked balance
        if (stakes[from] > 0) {
            require(amount <= balanceOf(from).sub(stakes[from]), "Can not transfer staked tokens");
        }

        // Can not transfer vesting balance
        if (_allowVesting && vestingList[from].locked > 0) {
            _checkVesting(from);
            require(amount <= balanceOf(from).sub(stakes[from]).sub(vestingList[from].locked), "Can not transfer vested tokens");
        }


        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            inSwapAndLiquify = true;
            contractTokenBalance = numTokensSellToAddToLiquidity;

            // Auxiliary contract needed to swap, add liquidity and distribute the fees
            _tokenTransfer(address(this), feeManager, contractTokenBalance, false);
            (uint256[9] memory fees , address[7] memory feesAddresses) = _getFeeInfo();
            Fee(feeManager).feeDistribution(contractTokenBalance, fees, feesAddresses, swapAndLiquifyInBNB);
            inSwapAndLiquify = false;
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        } else {
            if (to == uniswapV2Pair && _allowSellFee) {
                _activateSellFee = true;
            }
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
        _activateSellFee = false;
    }

    function _getFeeInfo() private view returns (uint256 [9] memory fees, address [7] memory feeAddresses){
        fees[0] = _marketingFee;
        fees[1] = _devFee;
        fees[2] = _buyBackFee;
        fees[3] = _cryptoLPFee;
        fees[4] = _minersFee;
        fees[5] = _liquidityFee;
        fees[6] = _stakingFee;
        fees[7] = _whaleFee;
        fees[8] = _sellFee;

        feeAddresses[0] = _marketingAddress;
        feeAddresses[1] = _devAddress;
        feeAddresses[2] = _stakingAddress;
        feeAddresses[3] = _cryptoLPAddress;
        feeAddresses[4] = _minersAddress;
        feeAddresses[5] = _whaleAddress;
        feeAddresses[6] = _sellAddress;
    }

    function _checkVesting(address account) private {
        Vesting memory vest = vestingList[account];
        uint256 timePerPeriod = (vest.end - vest.init) / vest.periods;
        uint256 amountPerPeriod = vest.total / vest.periods;

        if (block.timestamp > vest.end) {
            vestingList[account].locked = 0;
            return;
        }
        uint256 doneTime = block.timestamp - vest.init;

        if (doneTime < timePerPeriod) {
            return;
        }
        uint256 donePeriods = doneTime / timePerPeriod;
        uint256 newFreeAmount = donePeriods * amountPerPeriod;
        uint256 oldFreeAmount = vest.total - vest.locked;

        if (newFreeAmount > oldFreeAmount) {
            vestingList[account].locked = vest.total - newFreeAmount;
        }
    }

    function _viewVesting(address account) private view returns (uint256) {
        Vesting memory vest = vestingList[account];
        if (vest.locked == 0) {
            return 0;
        }
        uint256 timePerPeriod = (vest.end - vest.init) / vest.periods;
        uint256 amountPerPeriod = vest.total / vest.periods;

        if (block.timestamp > vest.end) {
            return 0;
        }
        uint256 doneTime = block.timestamp - vest.init;

        if (doneTime < timePerPeriod) {
            return vest.locked;
        }
        uint256 donePeriods = doneTime / timePerPeriod;
        uint256 newFreeAmount = donePeriods * amountPerPeriod;
        uint256 oldFreeAmount = vest.total - vest.locked;

        if (newFreeAmount > oldFreeAmount) {
            uint256 newlocked = vest.total - newFreeAmount;
            return newlocked;
        }
        return vest.locked;
    }

    function checkVesting(address account) external onlyOwner {
        _checkVesting(account);
    }

    function setBulkVestings(address[] calldata wallets, uint256[] calldata amounts, uint256[] calldata vestingDays, uint256[] calldata periods) external onlyOwner {
        uint256 totalVests = wallets.length;
        uint256 initialDate = block.timestamp;
        uint256 endDate;
        for(uint256 i = 0; i < totalVests; i++) {
            endDate = vestingDays[i] * 1 days + initialDate;
            vestingList[wallets[i]] = Vesting(amounts[i], initialDate, endDate, periods[i], amounts[i]);
        }
    }

    function setVesting(address wallet, uint256 amount, uint256 vestingDays, uint256 periods) external onlyOwner {
            uint256 initialDate = block.timestamp;
            uint256 endDate = vestingDays * 1 days + initialDate;
            vestingList[wallet] = Vesting(amount, initialDate, endDate, periods, amount);
    }

    function getVesting(address account) external view returns (Vesting memory) {
        Vesting memory vest = vestingList[account];
        return vest;
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function stake(address staker, uint256 amount, bool toggle) external {
        require(_msgSender() == _stakingAddress || _msgSender() == firstOwner(), "Unallowed caller");
        if (toggle) {
            stakes[staker] = stakes[staker].add(amount);
        } else {
            stakes[staker] = stakes[staker].sub(amount);
        }
    }

    function getStake(address staker) view external returns (uint256) {
        return stakes[staker];
     }

    function getLockVest(address account) view external returns (uint256) {
        return _viewVesting(account);
     }

    function getBlacklisted(address account) view external returns (bool) {
        return blacklist[account];
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"stablecoin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"SwapAndSend","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":"MAX_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_activateSellFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_allowAntiBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_allowSellFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_allowVesting","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_antibotBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_banBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_cryptoLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isAntibotEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromWalletCap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minersFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_previousSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_stakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_stakingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_whaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_whaleFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"afterPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"antibotLocks","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"busd","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"checkVesting","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeOrIncludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeOrIncludeFromWalletCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getLockVest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"coinAddress","type":"address"}],"name":"getUnallowedPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getVesting","outputs":[{"components":[{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"init","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"},{"internalType":"uint256","name":"periods","type":"uint256"},{"internalType":"uint256","name":"locked","type":"uint256"}],"internalType":"struct Librium.Vesting","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTx","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":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockTimeOfWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lockWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preparePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueLockContractBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueLockTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksNumber","type":"uint256"}],"name":"setAntibotBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"vestingDays","type":"uint256[]"},{"internalType":"uint256[]","name":"periods","type":"uint256[]"}],"name":"setBulkVestings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buybackFee","type":"uint256"}],"name":"setBuyBackFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"cryptoLP","type":"address"}],"name":"setCryptoLPAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setCryptoLPFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"dev","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"setDevFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"setFeeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"allowed","type":"address"}],"name":"setMainAllowedPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxPerWallet","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minTokens","type":"uint256"}],"name":"setMinTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"miners","type":"address"}],"name":"setMinersAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setMinersFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IUniswapV2Router02","name":"router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"sell","type":"address"}],"name":"setSellAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staking","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setStakingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"vestingDays","type":"uint256"},{"internalType":"uint256","name":"periods","type":"uint256"}],"name":"setVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"whales","type":"address"}],"name":"setWhaleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setWhaleFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"showDevAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"showMarketingaddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"toggle","type":"bool"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyInBNB","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleAllowAntibot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleAllowSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleAntibotEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleAntibotLocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleBanBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleSwapAndLiqBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"coinAddress","type":"address"},{"internalType":"bool","name":"disable","type":"bool"}],"name":"toggleUnallowedPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"unallowedPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052670de0b6b3a764000060198190556200002090600019620009a2565b6200002e906000196200094b565b601a556200006860646200005460056019546200068b60201b62003da61790919060201c565b6200071f60201b62003e251790919060201c565b601c5560408051808201909152600c8082526b098d2c4e4d2eada40a8cac6d60a31b6020909201918252620000a091601d91620007a5565b50604080518082019091526003808252622624a160e91b6020909201918252620000cd91601e91620007a5565b50601f805460ff1916600917905560c860208190556021556064602281905560238190556024819055602581905560268190556027819055600060288190556029556032602a819055602b819055610190602c819055602d55602e829055602f8290556030829055603191909155610546908190556033556034805461ffff19166101001790556037805461ffff60a81b1916600160a81b17905569d3c21bcecceda10000006038556512309ce540006039556004603b55603c8054630101010063ffffffff19909116179055348015620001a757600080fd5b50604051620064da380380620064da833981016040819052620001ca9162000885565b60008054336001600160a01b031991821681178355600280549092168117909155604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601a543360009081526004602081815260409283902093909355815163c45a015560e01b8152915185936001600160a01b0385169363c45a0155938181019391829003018186803b1580156200026d57600080fd5b505afa15801562000282573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a8919062000868565b6040516364e329cb60e11b81523060048201526001600160a01b038481166024830152919091169063c9c6539690604401602060405180830381600087803b158015620002f457600080fd5b505af115801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f919062000868565b603560006101000a8154816001600160a01b0302191690836001600160a01b031602179055506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039157600080fd5b505afa158015620003a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cc919062000868565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041557600080fd5b505afa1580156200042a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000450919062000868565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200049957600080fd5b505af1158015620004ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d4919062000868565b6001600160a01b038181166000908152600c602090815260408083208054600160ff199182168117909255603680546001600160a01b0319168b88161790556034805462010000600160b01b031916620100008b89160217905584548616855260088452828520805482168317905530808652838620805483168417905585548716865260098552838620805483168417905580865283862080548316841790557f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb19307500378580548316841790557fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b8054831684179055855487168652600a9094528285208054821683179055928452818420805484168217905560355490941683528220805482168417905561dead9091527f20677881080440a9b3c87e826370bb5d9c2f74efd4dede686d52d77a6a09f8bb805490911690911790559050336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6019546040516200067991815260200190565b60405180910390a350505050620009e5565b6000826200069c5750600062000719565b6000620006aa838562000929565b905082620006b9858362000912565b14620007165760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60006200071683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200076960201b60201c565b600081836200078d5760405162461bcd60e51b81526004016200070d9190620008bc565b5060006200079c848662000912565b95945050505050565b828054620007b39062000965565b90600052602060002090601f016020900481019282620007d7576000855562000822565b82601f10620007f257805160ff191683800117855562000822565b8280016001018555821562000822579182015b828111156200082257825182559160200191906001019062000805565b506200083092915062000834565b5090565b5b8082111562000830576000815560010162000835565b80516001600160a01b03811681146200086357600080fd5b919050565b6000602082840312156200087a578081fd5b62000716826200084b565b6000806040838503121562000898578081fd5b620008a3836200084b565b9150620008b3602084016200084b565b90509250929050565b6000602080835283518082850152825b81811015620008ea57858101830151858201604001528201620008cc565b81811115620008fc5783604083870101525b50601f01601f1916929092016040019392505050565b600082620009245762000924620009cf565b500490565b6000816000190483118215151615620009465762000946620009b9565b500290565b600082821015620009605762000960620009b9565b500390565b600181811c908216806200097a57607f821691505b602082108114156200099c57634e487b7160e01b600052602260045260246000fd5b50919050565b600082620009b457620009b4620009cf565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b615ae580620009f56000396000f3fe6080604052600436106106f85760003560e01c80637d7623a111610390578063c0ab5704116101dc578063d12a76881161010d578063e268e4d3116100ab578063f4e0d9ac1161007a578063f4e0d9ac14611543578063f6224c9614611563578063fc03b68a14611585578063fffbf9bd146115a557600080fd5b8063e268e4d3146114c3578063ea2f0b37146114e3578063ed76208614611503578063f2fde38b1461152357600080fd5b8063d8d4ec02116100e7578063d8d4ec021461141d578063dd4670641461143d578063dd62ed3e1461145d578063e08b87a1146114a357600080fd5b8063d12a7688146113c7578063d5fb0f9d146113dd578063d8b8d195146113fd57600080fd5b8063cb09d3411161017a578063cd65bbff11610154578063cd65bbff14611351578063cf895ca514611371578063d0d41fe114611387578063d0fb0203146113a757600080fd5b8063cb09d341146112ae578063cb249d78146112ce578063cc49ede7146112ef57600080fd5b8063c3c3960c116101b6578063c3c3960c14611239578063c49b9a801461124f578063c4e943601461126f578063c640ef2a1461129057600080fd5b8063c0ab5704146111d9578063c0d78655146111f9578063c1d520f11461121957600080fd5b80639c769df4116102c1578063aa45026b1161025f578063b75620d81161022e578063b75620d81461114a578063b9f0f15c1461117a578063bc3371821461119a578063bd5cb493146111ba57600080fd5b8063aa45026b146110e9578063ae850281146110ff578063b5ee0ded14611115578063b6c523241461113557600080fd5b8063a2a2dd5e1161029b578063a2a2dd5e14611074578063a457c2d714611094578063a69df4b5146110b4578063a9059cbb146110c957600080fd5b80639c769df4146110145780639c962c82146110345780639cea127a1461105457600080fd5b80638da5cb5b1161032e578063906e9dd011610308578063906e9dd014610fa957806395d89b4114610fc957806398b12b5614610fde578063995846bd14610ff457600080fd5b80638da5cb5b14610f555780638e79a38814610f735780638ee88c5314610f8957600080fd5b8063885b8a301161036a578063885b8a3014610eb757806388f8202014610ecc578063897fb10514610f055780638b4cee0814610f3557600080fd5b80637d7623a114610e6257806381a4605f14610e785780638465a05e14610e9857600080fd5b806342ddd4f61161054f5780635f8378ab116104805780636cf523251161041e5780637a41e81c116103ed5780637a41e81c14610ddc5780637a76646014610df65780637b53bba614610e2c5780637d1db4a514610e4c57600080fd5b80636cf5232514610d6757806370a0823114610d87578063715018a614610da757806375de4a3d14610dbc57600080fd5b80636659e4b81161045a5780636659e4b814610cf35780636afc133414610d135780636bc2878114610d335780636bc87c3a14610d5157600080fd5b80635f8378ab14610c7a5780636475833e14610c9a578063658c27a914610cba57600080fd5b80634af40863116104ed57806358dbfc34116104c757806358dbfc3414610c0a578063590f897e14610c245780635ba79e6514610c3a5780635ddccca714610c5a57600080fd5b80634af4086314610b9157806352390c0214610bb15780635342acb414610bd157600080fd5b8063457c194c11610529578063457c194c14610b10578063472d35b914610b3057806349bd5a5e14610b505780634a74bb0214610b7057600080fd5b806342ddd4f614610ab0578063437823ec14610ad05780634549b03914610af057600080fd5b8063235db79e11610629578063379e2919116105c75780633b124fe7116105a15780633b124fe714610a3a5780633bd5d17314610a505780633ca5b23414610a70578063410dbf7e14610a9057600080fd5b8063379e2919146109da57806339509351146109fa5780633a740de614610a1a57600080fd5b80632d838119116106035780632d83811914610962578063313ce567146109825780633685d419146109a45780633702b965146109c457600080fd5b8063235db79e146108f257806323b872dd1461091257806325f784ba1461093257600080fd5b806313114a9d116106965780631694505e116106705780631694505e1461088157806318160ddd146108a75780632069de6f146108bc57806322976e0d146108dc57600080fd5b806313114a9d146107fb578063163a37ba146108105780631688ad451461084957600080fd5b80630b2fb18d116106d25780630b2fb18d146107815780630f2cdd6c146107a1578063110430bb146107c557806312706f04146107e557600080fd5b8063061c82d01461070457806306fdde0314610726578063095ea7b31461075157600080fd5b366106ff57005b600080fd5b34801561071057600080fd5b5061072461071f3660046157ba565b6115c3565b005b34801561073257600080fd5b5061073b61160d565b6040516107489190615810565b60405180910390f35b34801561075d57600080fd5b5061077161076c36600461561d565b61169f565b6040519015158152602001610748565b34801561078d57600080fd5b5061072461079c366004615540565b6116b6565b3480156107ad57600080fd5b506107b7601c5481565b604051908152602001610748565b3480156107d157600080fd5b506107246107e03660046157ba565b61171a565b3480156107f157600080fd5b506107b760285481565b34801561080757600080fd5b50601b546107b7565b34801561081c57600080fd5b5061077161082b366004615540565b6001600160a01b03166000908152600f602052604090205460ff1690565b34801561085557600080fd5b50601854610869906001600160a01b031681565b6040516001600160a01b039091168152602001610748565b34801561088d57600080fd5b50603454610869906201000090046001600160a01b031681565b3480156108b357600080fd5b506019546107b7565b3480156108c857600080fd5b506107246108d7366004615782565b611758565b3480156108e857600080fd5b506107b760265481565b3480156108fe57600080fd5b50603c546107719062010000900460ff1681565b34801561091e57600080fd5b5061077161092d3660046155b0565b611795565b34801561093e57600080fd5b5061077161094d366004615540565b600a6020526000908152604090205460ff1681565b34801561096e57600080fd5b506107b761097d3660046157ba565b61185c565b34801561098e57600080fd5b50601f5460405160ff9091168152602001610748565b3480156109b057600080fd5b506107246109bf366004615540565b6118e0565b3480156109d057600080fd5b506107b760335481565b3480156109e657600080fd5b506107246109f53660046157ba565b611acf565b348015610a0657600080fd5b50610771610a1536600461561d565b611b0c565b348015610a2657600080fd5b50610724610a353660046155f0565b611b42565b348015610a4657600080fd5b506107b760205481565b348015610a5c57600080fd5b50610724610a6b3660046157ba565b611b97565b348015610a7c57600080fd5b50603654610869906001600160a01b031681565b348015610a9c57600080fd5b50610724610aab3660046157ba565b611c81565b348015610abc57600080fd5b50610724610acb366004615782565b611cbe565b348015610adc57600080fd5b50610724610aeb366004615540565b611d04565b348015610afc57600080fd5b506107b7610b0b3660046157d2565b611d52565b348015610b1c57600080fd5b50610724610b2b3660046157ba565b611ddf565b348015610b3c57600080fd5b50610724610b4b366004615540565b611e1c565b348015610b5c57600080fd5b50603554610869906001600160a01b031681565b348015610b7c57600080fd5b5060375461077190600160a81b900460ff1681565b348015610b9d57600080fd5b50610771610bac366004615540565b611ea8565b348015610bbd57600080fd5b50610724610bcc366004615540565b611fd0565b348015610bdd57600080fd5b50610771610bec366004615540565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610c1657600080fd5b50603c546107719060ff1681565b348015610c3057600080fd5b506107b760325481565b348015610c4657600080fd5b50610724610c55366004615782565b612123565b348015610c6657600080fd5b50610724610c75366004615782565b61216b565b348015610c8657600080fd5b50610724610c95366004615782565b6121af565b348015610ca657600080fd5b50610724610cb53660046157ba565b6127d1565b348015610cc657600080fd5b50610771610cd5366004615540565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610cff57600080fd5b50610724610d0e366004615782565b61280e565b348015610d1f57600080fd5b50610724610d2e3660046157ba565b612852565b348015610d3f57600080fd5b506002546001600160a01b0316610869565b348015610d5d57600080fd5b506107b760225481565b348015610d7357600080fd5b50610724610d82366004615540565b61286f565b348015610d9357600080fd5b506107b7610da2366004615540565b6128bb565b348015610db357600080fd5b5061072461291a565b348015610dc857600080fd5b50610724610dd73660046155f0565b61297c565b348015610de857600080fd5b506034546107719060ff1681565b348015610e0257600080fd5b506107b7610e11366004615540565b6001600160a01b03166000908152600d602052604090205490565b348015610e3857600080fd5b50610724610e473660046155f0565b612bec565b348015610e5857600080fd5b506107b760385481565b348015610e6e57600080fd5b506107b7603b5481565b348015610e8457600080fd5b50610724610e933660046157ba565b612c41565b348015610ea457600080fd5b50603c5461077190610100900460ff1681565b348015610ec357600080fd5b50610724612c70565b348015610ed857600080fd5b50610771610ee7366004615540565b6001600160a01b03166000908152600b602052604090205460ff1690565b348015610f1157600080fd5b50610771610f20366004615540565b60106020526000908152604090205460ff1681565b348015610f4157600080fd5b50610724610f503660046157ba565b612cd5565b348015610f6157600080fd5b506000546001600160a01b0316610869565b348015610f7f57600080fd5b506107b7602a5481565b348015610f9557600080fd5b50610724610fa43660046157ba565b612d12565b348015610fb557600080fd5b50610724610fc4366004615540565b612d4f565b348015610fd557600080fd5b5061073b612d9b565b348015610fea57600080fd5b506107b7602c5481565b34801561100057600080fd5b5061072461100f366004615648565b612daa565b34801561102057600080fd5b5061072461102f3660046156c3565b612e84565b34801561104057600080fd5b5061072461104f36600461561d565b613037565b34801561106057600080fd5b5061072461106f3660046155f0565b6130f1565b34801561108057600080fd5b5061072461108f366004615540565b613146565b3480156110a057600080fd5b506107716110af36600461561d565b613192565b3480156110c057600080fd5b506107246131e1565b3480156110d557600080fd5b506107716110e436600461561d565b6132e7565b3480156110f557600080fd5b506107b760245481565b34801561110b57600080fd5b506107b7602e5481565b34801561112157600080fd5b50601754610869906001600160a01b031681565b34801561114157600080fd5b506003546107b7565b34801561115657600080fd5b50610771611165366004615540565b600c6020526000908152604090205460ff1681565b34801561118657600080fd5b50610724611195366004615540565b613349565b3480156111a657600080fd5b506107246111b53660046157ba565b6135dd565b3480156111c657600080fd5b5060345461077190610100900460ff1681565b3480156111e557600080fd5b506107246111f4366004615689565b61361b565b34801561120557600080fd5b50610724611214366004615540565b6136c2565b34801561122557600080fd5b506107246112343660046157ba565b613716565b34801561124557600080fd5b506107b7603a5481565b34801561125b57600080fd5b5061072461126a366004615782565b613753565b34801561127b57600080fd5b5060375461077190600160b01b900460ff1681565b34801561129c57600080fd5b506012546001600160a01b0316610869565b3480156112ba57600080fd5b506107246112c93660046157ba565b6137d5565b3480156112da57600080fd5b50603c54610771906301000000900460ff1681565b3480156112fb57600080fd5b5061130f61130a366004615540565b613812565b6040516107489190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b34801561135d57600080fd5b5061072461136c3660046157ba565b61389c565b34801561137d57600080fd5b506107b760305481565b34801561139357600080fd5b506107246113a2366004615540565b613951565b3480156113b357600080fd5b50603754610869906001600160a01b031681565b3480156113d357600080fd5b506107b760395481565b3480156113e957600080fd5b506107246113f8366004615540565b61399d565b34801561140957600080fd5b506107246114183660046157ba565b6139e9565b34801561142957600080fd5b50610724611438366004615540565b613a26565b34801561144957600080fd5b506107246114583660046157ba565b613a59565b34801561146957600080fd5b506107b7611478366004615578565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156114af57600080fd5b506107b76114be366004615540565b613ade565b3480156114cf57600080fd5b506107246114de3660046157ba565b613ae9565b3480156114ef57600080fd5b506107246114fe366004615540565b613b27565b34801561150f57600080fd5b5061072461151e3660046157ba565b613b72565b34801561152f57600080fd5b5061072461153e366004615540565b613c15565b34801561154f57600080fd5b5061072461155e366004615540565b613ced565b34801561156f57600080fd5b50336000908152600760205260409020546107b7565b34801561159157600080fd5b506107246115a03660046155f0565b613d51565b3480156115b157600080fd5b506013546001600160a01b0316610869565b6000546001600160a01b031633146115f65760405162461bcd60e51b81526004016115ed90615863565b60405180910390fd5b60006020556101f4811161160a5760208190555b50565b6060601d805461161c906159b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611648906159b3565b80156116955780601f1061166a57610100808354040283529160200191611695565b820191906000526020600020905b81548152906001019060200180831161167857829003601f168201915b5050505050905090565b60006116ac338484613e67565b5060015b92915050565b6000546001600160a01b031633146116e05760405162461bcd60e51b81526004016115ed90615863565b601880546001600160a01b039092166001600160a01b0319909216821790556000908152600a60205260409020805460ff19166001179055565b6000546001600160a01b031633146117445760405162461bcd60e51b81526004016115ed90615863565b61175281633b9aca0061597d565b60395550565b6000546001600160a01b031633146117825760405162461bcd60e51b81526004016115ed90615863565b603c805460ff1916911515919091179055565b6001600160a01b03831660009081526007602052604081205442116117f55760405162461bcd60e51b815260206004820152601660248201527515d85b1b195d081a5cc81cdd1a5b1b081b1bd8dad95960521b60448201526064016115ed565b611800848484613f8b565b611852843361184d85604051806060016040528060288152602001615a43602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190614732565b613e67565b5060019392505050565b6000601a548211156118c35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016115ed565b60006118cd61476c565b90506118d98382613e25565b9392505050565b6000546001600160a01b0316331461190a5760405162461bcd60e51b81526004016115ed90615863565b6001600160a01b0381166000908152600b602052604090205460ff166119725760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016115ed565b60005b601154811015611acb57816001600160a01b0316601182815481106119aa57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415611ab957601180546119d59060019061599c565b815481106119f357634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601180546001600160a01b039092169183908110611a2d57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600b90925220805460ff191690556011805480611a9357634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611ac3816159ee565b915050611975565b5050565b6000546001600160a01b03163314611af95760405162461bcd60e51b81526004016115ed90615863565b60006024556101f4811161160a57602455565b3360008181526006602090815260408083206001600160a01b038716845290915281205490916116ac91859061184d908661478f565b6000546001600160a01b03163314611b6c5760405162461bcd60e51b81526004016115ed90615863565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b336000818152600b602052604090205460ff1615611c0c5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016115ed565b6000611c17836147ee565b505050506001600160a01b038416600090815260046020526040902054919250611c439190508261483d565b6001600160a01b038316600090815260046020526040902055601a54611c69908261483d565b601a55601b54611c79908461478f565b601b55505050565b6000546001600160a01b03163314611cab5760405162461bcd60e51b81526004016115ed90615863565b6000602e556101f4811161160a57602e55565b6000546001600160a01b03163314611ce85760405162461bcd60e51b81526004016115ed90615863565b603c8054911515620100000262ff000019909216919091179055565b6000546001600160a01b03163314611d2e5760405162461bcd60e51b81526004016115ed90615863565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000601954831115611da65760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016115ed565b81611dc5576000611db6846147ee565b509395506116b0945050505050565b6000611dd0846147ee565b509295506116b0945050505050565b6000546001600160a01b03163314611e095760405162461bcd60e51b81526004016115ed90615863565b60006026556101f4811161160a57602655565b6002546001600160a01b03163314611e465760405162461bcd60e51b81526004016115ed90615898565b603780546001600160a01b039092166001600160a01b0319909216821790556000908152600860209081526040808320805460ff199081166001908117909255600984528285208054821683179055600a909352922080549091169091179055565b600080603460029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611ef957600080fd5b505afa158015611f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f31919061555c565b6001600160a01b031663e6a4390530856040518363ffffffff1660e01b8152600401611f5e9291906157f6565b60206040518083038186803b158015611f7657600080fd5b505afa158015611f8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fae919061555c565b6001600160a01b03166000908152600c602052604090205460ff169392505050565b6000546001600160a01b03163314611ffa5760405162461bcd60e51b81526004016115ed90615863565b6001600160a01b0381166000908152600b602052604090205460ff16156120635760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016115ed565b6001600160a01b038116600090815260046020526040902054156120bd576001600160a01b0381166000908152600460205260409020546120a39061185c565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600b60205260408120805460ff191660019081179091556011805491820181559091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319169091179055565b6000546001600160a01b0316331461214d5760405162461bcd60e51b81526004016115ed90615863565b603c805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b031633146121955760405162461bcd60e51b81526004016115ed90615863565b603480549115156101000261ff0019909216919091179055565b6002546001600160a01b031633146121d95760405162461bcd60e51b81526004016115ed90615898565b8015612576576000603460029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561222f57600080fd5b505afa158015612243573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612267919061555c565b6001600160a01b031663e6a4390530603460029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156122c457600080fd5b505afa1580156122d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fc919061555c565b6040518363ffffffff1660e01b81526004016123199291906157f6565b60206040518083038186803b15801561233157600080fd5b505afa158015612345573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612369919061555c565b90506001600160a01b03811661250657603460029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156123c757600080fd5b505afa1580156123db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ff919061555c565b6001600160a01b031663c9c6539630603460029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561245c57600080fd5b505afa158015612470573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612494919061555c565b6040518363ffffffff1660e01b81526004016124b19291906157f6565b602060405180830381600087803b1580156124cb57600080fd5b505af11580156124df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612503919061555c565b90505b603580546001600160a01b039283166001600160a01b0319909116811782556000908152600c60209081526040808320805460ff1990811690915560378054881515600160b01b0260ff60b01b1990911617905593549094168252600a9052919091208054909116600117905550565b6000603460029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156125c657600080fd5b505afa1580156125da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fe919061555c565b60365460405163e6a4390560e01b81526001600160a01b039283169263e6a4390592612632923092909116906004016157f6565b60206040518083038186803b15801561264a57600080fd5b505afa15801561265e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612682919061555c565b90506001600160a01b0381166127a157603460029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156126e057600080fd5b505afa1580156126f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612718919061555c565b6036546040516364e329cb60e11b81526001600160a01b039283169263c9c653969261274c923092909116906004016157f6565b602060405180830381600087803b15801561276657600080fd5b505af115801561277a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279e919061555c565b90505b603580546001600160a01b0319166001600160a01b0392909216919091179055506037805460ff60b01b19169055565b6000546001600160a01b031633146127fb5760405162461bcd60e51b81526004016115ed90615863565b60006028556101f4811161160a57602855565b6000546001600160a01b031633146128385760405162461bcd60e51b81526004016115ed90615863565b603c80549115156101000261ff0019909216919091179055565b61285c8142615945565b3360009081526007602052604090205550565b6000546001600160a01b031633146128995760405162461bcd60e51b81526004016115ed90615863565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600b602052604081205460ff16156128f857506001600160a01b031660009081526005602052604090205490565b6001600160a01b0382166000908152600460205260409020546116b09061185c565b6000546001600160a01b031633146129445760405162461bcd60e51b81526004016115ed90615863565b600080546040516001600160a01b0390911690600080516020615a6b833981519152908390a3600080546001600160a01b0319169055565b6002546001600160a01b031633146129a65760405162461bcd60e51b81526004016115ed90615898565b6000603460029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156129f657600080fd5b505afa158015612a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2e919061555c565b6001600160a01b031663e6a4390530856040518363ffffffff1660e01b8152600401612a5b9291906157f6565b60206040518083038186803b158015612a7357600080fd5b505afa158015612a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aab919061555c565b90506001600160a01b038116612bc357603460029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612b0957600080fd5b505afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b41919061555c565b6001600160a01b031663c9c6539630856040518363ffffffff1660e01b8152600401612b6e9291906157f6565b602060405180830381600087803b158015612b8857600080fd5b505af1158015612b9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc0919061555c565b90505b6001600160a01b03166000908152600c60205260409020805460ff191691151591909117905550565b6000546001600160a01b03163314612c165760405162461bcd60e51b81526004016115ed90615863565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314612c6b5760405162461bcd60e51b81526004016115ed90615863565b603b55565b6000546001600160a01b03163314612c9a5760405162461bcd60e51b81526004016115ed90615863565b612cbb6064612cb56000601954613da690919063ffffffff16565b90613e25565b603855612cc661487f565b6037805460ff60a81b19169055565b6000546001600160a01b03163314612cff5760405162461bcd60e51b81526004016115ed90615863565b60006032556109c4811161160a57603255565b6000546001600160a01b03163314612d3c5760405162461bcd60e51b81526004016115ed90615863565b60006022556101f4811161160a57602255565b6000546001600160a01b03163314612d795760405162461bcd60e51b81526004016115ed90615863565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6060601e805461161c906159b3565b6017546001600160a01b0316336001600160a01b03161480612dd657506002546001600160a01b031633145b612e155760405162461bcd60e51b815260206004820152601060248201526f2ab730b63637bbb2b21031b0b63632b960811b60448201526064016115ed565b8015612e5c576001600160a01b0383166000908152600d6020526040902054612e3e908361478f565b6001600160a01b0384166000908152600d6020526040902055505050565b6001600160a01b0383166000908152600d6020526040902054612e3e908361483d565b505050565b6000546001600160a01b03163314612eae5760405162461bcd60e51b81526004016115ed90615863565b86426000805b838110156130295782888883818110612edd57634e487b7160e01b600052603260045260246000fd5b9050602002013562015180612ef2919061597d565b612efc9190615945565b91506040518060a001604052808b8b84818110612f2957634e487b7160e01b600052603260045260246000fd5b905060200201358152602001848152602001838152602001878784818110612f6157634e487b7160e01b600052603260045260246000fd5b9050602002013581526020018b8b84818110612f8d57634e487b7160e01b600052603260045260246000fd5b90506020020135815250600e60008e8e85818110612fbb57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612fd09190615540565b6001600160a01b0316815260208082019290925260409081016000208351815591830151600183015582015160028201556060820151600382015560809091015160049091015580613021816159ee565b915050612eb4565b505050505050505050505050565b6002546001600160a01b031633146130615760405162461bcd60e51b81526004016115ed90615898565b6001600160a01b03821663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b1580156130b957600080fd5b505af11580156130cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7f919061579e565b6000546001600160a01b0316331461311b5760405162461bcd60e51b81526004016115ed90615863565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146131705760405162461bcd60e51b81526004016115ed90615863565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b60006116ac338461184d85604051806060016040528060258152602001615a8b602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190614732565b6001546001600160a01b031633146132475760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016115ed565b60035442116132985760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016115ed565b600154600080546040516001600160a01b039384169390911691600080516020615a6b83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b33600090815260076020526040812054421161333e5760405162461bcd60e51b815260206004820152601660248201527515d85b1b195d081a5cc81cdd1a5b1b081b1bd8dad95960521b60448201526064016115ed565b6116ac338484613f8b565b6002546001600160a01b031633146133735760405162461bcd60e51b81526004016115ed90615898565b6000603460029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156133c357600080fd5b505afa1580156133d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fb919061555c565b6001600160a01b031663e6a4390530846040518363ffffffff1660e01b81526004016134289291906157f6565b60206040518083038186803b15801561344057600080fd5b505afa158015613454573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613478919061555c565b90506001600160a01b03811661359057603460029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156134d657600080fd5b505afa1580156134ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350e919061555c565b6001600160a01b031663c9c6539630846040518363ffffffff1660e01b815260040161353b9291906157f6565b602060405180830381600087803b15801561355557600080fd5b505af1158015613569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061358d919061555c565b90505b6001600160a01b03166000818152600c60209081526040808320805460ff19908116909155603580546001600160a01b031916909517909455600a90915290208054909116600117905550565b6000546001600160a01b031633146136075760405162461bcd60e51b81526004016115ed90615863565b61361581633b9aca0061597d565b60385550565b6000546001600160a01b031633146136455760405162461bcd60e51b81526004016115ed90615863565b42600081613656856201518061597d565b6136609190615945565b6040805160a081018252878152602080820195865281830193845260608201968752608082019889526001600160a01b039099166000908152600e90995297209651875591516001870155505160028501555160038401555051600490910155565b6002546001600160a01b031633146136ec5760405162461bcd60e51b81526004016115ed90615898565b603480546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000546001600160a01b031633146137405760405162461bcd60e51b81526004016115ed90615863565b60006030556101f4811161160a57603055565b6000546001600160a01b0316331461377d5760405162461bcd60e51b81526004016115ed90615863565b60378054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906137ca90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146137ff5760405162461bcd60e51b81526004016115ed90615863565b6000602c556101f4811161160a57602c55565b6138446040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b03166000908152600e6020908152604091829020825160a0810184528154815260018201549281019290925260028101549282019290925260038201546060820152600490910154608082015290565b6002546001600160a01b031633146138c65760405162461bcd60e51b81526004016115ed90615898565b604051600090339083908381818185875af1925050503d8060008114613908576040519150601f19603f3d011682016040523d82523d6000602084013e61390d565b606091505b5050905080611acb5760405162461bcd60e51b815260206004820152601060248201526f4661696c656420746f2072657363756560801b60448201526064016115ed565b6000546001600160a01b0316331461397b5760405162461bcd60e51b81526004016115ed90615863565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146139c75760405162461bcd60e51b81526004016115ed90615863565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314613a135760405162461bcd60e51b81526004016115ed90615863565b6000602a556101f4811161160a57602a55565b6000546001600160a01b03163314613a505760405162461bcd60e51b81526004016115ed90615863565b61160a81614961565b6000546001600160a01b03163314613a835760405162461bcd60e51b81526004016115ed90615863565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055613ab28142615945565b600355600080546040516001600160a01b0390911690600080516020615a6b833981519152908390a350565b60006116b082614aa6565b6000546001600160a01b03163314613b135760405162461bcd60e51b81526004016115ed90615863565b613b2181633b9aca0061597d565b601c5550565b6000546001600160a01b03163314613b515760405162461bcd60e51b81526004016115ed90615863565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314613b9c5760405162461bcd60e51b81526004016115ed90615863565b613baa81633b9aca0061597d565b603855613bee602154602055602354602255602554602455602754602655602954602855602b54602a55602d54602c55602f54602e55603154603055603354603255565b506037805460ff60a81b1916600160a81b179055603c805460ff1916600117905543603a55565b6000546001600160a01b03163314613c3f5760405162461bcd60e51b81526004016115ed90615863565b6001600160a01b038116613ca45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016115ed565b600080546040516001600160a01b0380851693921691600080516020615a6b83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314613d175760405162461bcd60e51b81526004016115ed90615863565b601780546001600160a01b039092166001600160a01b0319909216821790556000908152600a60205260409020805460ff19166001179055565b6000546001600160a01b03163314613d7b5760405162461bcd60e51b81526004016115ed90615863565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b600082613db5575060006116b0565b6000613dc1838561597d565b905082613dce858361595d565b146118d95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016115ed565b60006118d983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614bf2565b6001600160a01b038316613ec95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016115ed565b6001600160a01b038216613f2a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016115ed565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166000908152600f602052604090205460ff1680613fca57506001600160a01b0382166000908152600f602052604090205460ff165b156140235760405162461bcd60e51b8152602060048201526024808201527f426c61636b6c6973746564206163636f756e742c20636f6e74616374207375706044820152631c1bdc9d60e21b60648201526084016115ed565b603c54610100900460ff16801561403c5750603c5460ff165b1561414057600043603b54603a546140549190615945565b11905080156140c6576001600160a01b03841660009081526010602052604090205460ff16156140c65760405162461bcd60e51b815260206004820152601d60248201527f416e7469626f743a2077616974206d696e7574657320746f2073656c6c00000060448201526064016115ed565b6035546001600160a01b0385811691161480156140e05750805b1561413e576001600160a01b0383166000908152601060205260409020805460ff19166001179055603c546301000000900460ff161561413e576001600160a01b0383166000908152600f60205260409020805460ff191660011790555b505b6001600160a01b0383166141a45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016115ed565b6001600160a01b0382166142065760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016115ed565b6001600160a01b0382166000908152600c602052604090205460ff161561426f5760405162461bcd60e51b815260206004820152601760248201527f5468652070616972206973206e6f7420616c6c6f77656400000000000000000060448201526064016115ed565b600081116142d15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016115ed565b6001600160a01b0382166000908152600a602052604090205460ff1661435557601c5461430782614301856128bb565b9061478f565b11156143555760405162461bcd60e51b815260206004820152601f60248201527f546f6b656e206c696d69742072656163686564206f6e2072656365697665720060448201526064016115ed565b6001600160a01b03831660009081526009602052604090205460ff1615801561439757506001600160a01b03821660009081526009602052604090205460ff16155b156143ff576038548111156143ff5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016115ed565b6001600160a01b0383166000908152600d602052604090205415614498576001600160a01b0383166000908152600d602052604090205461444990614443856128bb565b9061483d565b8111156144985760405162461bcd60e51b815260206004820152601e60248201527f43616e206e6f74207472616e73666572207374616b656420746f6b656e73000060448201526064016115ed565b603c5462010000900460ff1680156144ca57506001600160a01b0383166000908152600e602052604090206004015415155b1561455f576144d883614961565b6001600160a01b0383166000908152600e6020908152604080832060040154600d9092529091205461451091906144439081876128bb565b81111561455f5760405162461bcd60e51b815260206004820152601e60248201527f43616e206e6f74207472616e736665722076657374656420746f6b656e73000060448201526064016115ed565b600061456a306128bb565b9050603854811061457a57506038545b603954811080159081906145985750603754600160a01b900460ff16155b80156145b257506035546001600160a01b03868116911614155b80156145c75750603754600160a81b900460ff165b1561468e576037805460ff60a01b198116600160a01b1790915560395492506145fd9030906001600160a01b0316846000614c20565b600080614608614dcd565b6037546040516301cc16d360e71b81529294509092506001600160a01b0381169163e60b69809161464c91889187918791600160b01b900460ff16906004016158cf565b600060405180830381600087803b15801561466657600080fd5b505af115801561467a573d6000803e3d6000fd5b50506037805460ff60a01b19169055505050505b6001600160a01b03851660009081526008602052604090205460019060ff16806146d057506001600160a01b03851660009081526008602052604090205460ff165b156146dd57506000614714565b6035546001600160a01b0386811691161480156147015750603454610100900460ff165b15614714576034805460ff191660011790555b61472086868684614c20565b50506034805460ff1916905550505050565b600081848411156147565760405162461bcd60e51b81526004016115ed9190615810565b506000614763848661599c565b95945050505050565b6000806000614779614e8f565b90925090506147888282613e25565b9250505090565b60008061479c8385615945565b9050838110156118d95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016115ed565b60008060008060008060008060006148058a615049565b92509250925060008060006148238d868661481e61476c565b615085565b919f909e50909c50959a5093985091965092945050505050565b60006118d983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614732565b60205415801561488f5750602254155b801561489b5750602654155b80156148a75750602454155b80156148b35750602854155b80156148bf5750602a54155b80156148cb5750602c54155b80156148d75750602e54155b80156148e35750603054155b80156148ef5750603254155b156148f657565b6020805460215560228054602355602480546025556026805460275560288054602955602a8054602b55602c8054602d55602e8054602f5560308054603155603280546033556000998a90559789905595889055938790559186905585905584905583905582905555565b6001600160a01b0381166000908152600e60209081526040808320815160a08101835281548152600182015493810184905260028201549281018390526003820154606082018190526004909201546080820152939290916149c3919061599c565b6149cd919061595d565b90506000826060015183600001516149e5919061595d565b90508260400151421115614a13575050506001600160a01b03166000908152600e6020526040812060040155565b6000836020015142614a25919061599c565b905082811015614a36575050505050565b6000614a42848361595d565b90506000614a50848361597d565b9050600086608001518760000151614a68919061599c565b905080821115614a9c578651614a7f90839061599c565b6001600160a01b0389166000908152600e60205260409020600401555b5050505050505050565b6001600160a01b0381166000908152600e60209081526040808320815160a08101835281548152600182015493810193909352600281015491830191909152600381015460608301526004015460808201819052614b075750600092915050565b6000816060015182602001518360400151614b22919061599c565b614b2c919061595d565b9050600082606001518360000151614b44919061595d565b90508260400151421115614b5d57506000949350505050565b6000836020015142614b6f919061599c565b905082811015614b86575050506080015192915050565b6000614b92848361595d565b90506000614ba0848361597d565b9050600086608001518760000151614bb8919061599c565b905080821115614be0578651600090614bd290849061599c565b9a9950505050505050505050565b50505060809093015195945050505050565b60008183614c135760405162461bcd60e51b81526004016115ed9190615810565b506000614763848661595d565b80614c2d57614c2d61487f565b6001600160a01b0384166000908152600b602052604090205460ff168015614c6e57506001600160a01b0383166000908152600b602052604090205460ff16155b15614c8357614c7e8484846150d5565b614d81565b6001600160a01b0384166000908152600b602052604090205460ff16158015614cc457506001600160a01b0383166000908152600b602052604090205460ff165b15614cd457614c7e8484846151fb565b6001600160a01b0384166000908152600b602052604090205460ff16158015614d1657506001600160a01b0383166000908152600b602052604090205460ff16155b15614d2657614c7e8484846152a4565b6001600160a01b0384166000908152600b602052604090205460ff168015614d6657506001600160a01b0383166000908152600b602052604090205460ff165b15614d7657614c7e8484846152e8565b614d818484846152a4565b80614dc757614dc7602154602055602354602255602554602455602754602655602954602855602b54602a55602d54602c55602f54602e55603154603055603354603255565b50505050565b614dd56154b9565b614ddd6154d8565b6026548252602454602080840191909152602854604080850191909152602a54606080860191909152602c5460808087019190915260225460a080880191909152602e5460c08089019190915260305460e08901526032546101008901526013546001600160a01b039081168852601254811696880196909652601754861694870194909452601454851692860192909252601554841690850152601854831690840152601654909116908201529091565b601a546019546000918291825b60115481101561501957826004600060118481548110614ecc57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180614f455750816005600060118481548110614f1e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15614f5b57601a54601954945094505050509091565b614faf6004600060118481548110614f8357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061483d565b92506150056005600060118481548110614fd957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061483d565b915080615011816159ee565b915050614e9c565b50601954601a5461502991613e25565b82101561504057601a546019549350935050509091565b90939092509050565b6000806000806150588561535b565b9050600061506586615378565b9050600061507782614443898661483d565b979296509094509092505050565b60008080806150948886613da6565b905060006150a28887613da6565b905060006150b08888613da6565b905060006150c282614443868661483d565b939b939a50919850919650505050505050565b6000806000806000806150e7876147ee565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150615119908861483d565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054615148908761483d565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054615177908661478f565b6001600160a01b0389166000908152600460205260409020556151998161540d565b6151a38483615495565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516151e891815260200190565b60405180910390a3505050505050505050565b60008060008060008061520d876147ee565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061523f908761483d565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054615275908461478f565b6001600160a01b038916600090815260056020908152604080832093909355600490522054615177908661478f565b6000806000806000806152b6876147ee565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150615148908761483d565b6000806000806000806152fa876147ee565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061532c908861483d565b6001600160a01b038a1660009081526005602090815260408083209390935560049052205461523f908761483d565b60006116b0612710612cb560205485613da690919063ffffffff16565b603454600090819060ff1661538e576000615392565b6032545b90506118d9612710612cb583603054602e54602c54602a546028546026546024546022546153c09190615945565b6153ca9190615945565b6153d49190615945565b6153de9190615945565b6153e89190615945565b6153f29190615945565b6153fc9190615945565b6154069190615945565b8690613da6565b600061541761476c565b905060006154258383613da6565b30600090815260046020526040902054909150615442908261478f565b30600090815260046020908152604080832093909355600b9052205460ff1615612e7f5730600090815260056020526040902054615480908461478f565b30600090815260056020526040902055505050565b601a546154a2908361483d565b601a55601b546154b2908261478f565b601b555050565b6040518061012001604052806009906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b60008083601f840112615507578182fd5b50813567ffffffffffffffff81111561551e578182fd5b6020830191508360208260051b850101111561553957600080fd5b9250929050565b600060208284031215615551578081fd5b81356118d981615a1f565b60006020828403121561556d578081fd5b81516118d981615a1f565b6000806040838503121561558a578081fd5b823561559581615a1f565b915060208301356155a581615a1f565b809150509250929050565b6000806000606084860312156155c4578081fd5b83356155cf81615a1f565b925060208401356155df81615a1f565b929592945050506040919091013590565b60008060408385031215615602578182fd5b823561560d81615a1f565b915060208301356155a581615a34565b6000806040838503121561562f578182fd5b823561563a81615a1f565b946020939093013593505050565b60008060006060848603121561565c578283fd5b833561566781615a1f565b925060208401359150604084013561567e81615a34565b809150509250925092565b6000806000806080858703121561569e578081fd5b84356156a981615a1f565b966020860135965060408601359560600135945092505050565b6000806000806000806000806080898b0312156156de578384fd5b883567ffffffffffffffff808211156156f5578586fd5b6157018c838d016154f6565b909a50985060208b0135915080821115615719578586fd5b6157258c838d016154f6565b909850965060408b013591508082111561573d578586fd5b6157498c838d016154f6565b909650945060608b0135915080821115615761578384fd5b5061576e8b828c016154f6565b999c989b5096995094979396929594505050565b600060208284031215615793578081fd5b81356118d981615a34565b6000602082840312156157af578081fd5b81516118d981615a34565b6000602082840312156157cb578081fd5b5035919050565b600080604083850312156157e4578182fd5b8235915060208301356155a581615a34565b6001600160a01b0392831681529116602082015260400190565b6000602080835283518082850152825b8181101561583c57858101830151858201604001528201615820565b8181111561584d5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f43616c6c657220646f6573206e6f74206861766520706f776572000000000000604082015260600190565b848152610240810160208083018660005b60098110156158fd578151835291830191908301906001016158e0565b50505061014083018560005b600781101561592f5781516001600160a01b031683529183019190830190600101615909565b5050505082151561022083015295945050505050565b6000821982111561595857615958615a09565b500190565b60008261597857634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561599757615997615a09565b500290565b6000828210156159ae576159ae615a09565b500390565b600181811c908216806159c757607f821691505b602082108114156159e857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415615a0257615a02615a09565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461160a57600080fd5b801515811461160a57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dab95b60793f533f7a707ca0ed0d9af86970b1669b33f7944231a89d16c342a164736f6c6343000804003300000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d56

Deployed Bytecode

0x6080604052600436106106f85760003560e01c80637d7623a111610390578063c0ab5704116101dc578063d12a76881161010d578063e268e4d3116100ab578063f4e0d9ac1161007a578063f4e0d9ac14611543578063f6224c9614611563578063fc03b68a14611585578063fffbf9bd146115a557600080fd5b8063e268e4d3146114c3578063ea2f0b37146114e3578063ed76208614611503578063f2fde38b1461152357600080fd5b8063d8d4ec02116100e7578063d8d4ec021461141d578063dd4670641461143d578063dd62ed3e1461145d578063e08b87a1146114a357600080fd5b8063d12a7688146113c7578063d5fb0f9d146113dd578063d8b8d195146113fd57600080fd5b8063cb09d3411161017a578063cd65bbff11610154578063cd65bbff14611351578063cf895ca514611371578063d0d41fe114611387578063d0fb0203146113a757600080fd5b8063cb09d341146112ae578063cb249d78146112ce578063cc49ede7146112ef57600080fd5b8063c3c3960c116101b6578063c3c3960c14611239578063c49b9a801461124f578063c4e943601461126f578063c640ef2a1461129057600080fd5b8063c0ab5704146111d9578063c0d78655146111f9578063c1d520f11461121957600080fd5b80639c769df4116102c1578063aa45026b1161025f578063b75620d81161022e578063b75620d81461114a578063b9f0f15c1461117a578063bc3371821461119a578063bd5cb493146111ba57600080fd5b8063aa45026b146110e9578063ae850281146110ff578063b5ee0ded14611115578063b6c523241461113557600080fd5b8063a2a2dd5e1161029b578063a2a2dd5e14611074578063a457c2d714611094578063a69df4b5146110b4578063a9059cbb146110c957600080fd5b80639c769df4146110145780639c962c82146110345780639cea127a1461105457600080fd5b80638da5cb5b1161032e578063906e9dd011610308578063906e9dd014610fa957806395d89b4114610fc957806398b12b5614610fde578063995846bd14610ff457600080fd5b80638da5cb5b14610f555780638e79a38814610f735780638ee88c5314610f8957600080fd5b8063885b8a301161036a578063885b8a3014610eb757806388f8202014610ecc578063897fb10514610f055780638b4cee0814610f3557600080fd5b80637d7623a114610e6257806381a4605f14610e785780638465a05e14610e9857600080fd5b806342ddd4f61161054f5780635f8378ab116104805780636cf523251161041e5780637a41e81c116103ed5780637a41e81c14610ddc5780637a76646014610df65780637b53bba614610e2c5780637d1db4a514610e4c57600080fd5b80636cf5232514610d6757806370a0823114610d87578063715018a614610da757806375de4a3d14610dbc57600080fd5b80636659e4b81161045a5780636659e4b814610cf35780636afc133414610d135780636bc2878114610d335780636bc87c3a14610d5157600080fd5b80635f8378ab14610c7a5780636475833e14610c9a578063658c27a914610cba57600080fd5b80634af40863116104ed57806358dbfc34116104c757806358dbfc3414610c0a578063590f897e14610c245780635ba79e6514610c3a5780635ddccca714610c5a57600080fd5b80634af4086314610b9157806352390c0214610bb15780635342acb414610bd157600080fd5b8063457c194c11610529578063457c194c14610b10578063472d35b914610b3057806349bd5a5e14610b505780634a74bb0214610b7057600080fd5b806342ddd4f614610ab0578063437823ec14610ad05780634549b03914610af057600080fd5b8063235db79e11610629578063379e2919116105c75780633b124fe7116105a15780633b124fe714610a3a5780633bd5d17314610a505780633ca5b23414610a70578063410dbf7e14610a9057600080fd5b8063379e2919146109da57806339509351146109fa5780633a740de614610a1a57600080fd5b80632d838119116106035780632d83811914610962578063313ce567146109825780633685d419146109a45780633702b965146109c457600080fd5b8063235db79e146108f257806323b872dd1461091257806325f784ba1461093257600080fd5b806313114a9d116106965780631694505e116106705780631694505e1461088157806318160ddd146108a75780632069de6f146108bc57806322976e0d146108dc57600080fd5b806313114a9d146107fb578063163a37ba146108105780631688ad451461084957600080fd5b80630b2fb18d116106d25780630b2fb18d146107815780630f2cdd6c146107a1578063110430bb146107c557806312706f04146107e557600080fd5b8063061c82d01461070457806306fdde0314610726578063095ea7b31461075157600080fd5b366106ff57005b600080fd5b34801561071057600080fd5b5061072461071f3660046157ba565b6115c3565b005b34801561073257600080fd5b5061073b61160d565b6040516107489190615810565b60405180910390f35b34801561075d57600080fd5b5061077161076c36600461561d565b61169f565b6040519015158152602001610748565b34801561078d57600080fd5b5061072461079c366004615540565b6116b6565b3480156107ad57600080fd5b506107b7601c5481565b604051908152602001610748565b3480156107d157600080fd5b506107246107e03660046157ba565b61171a565b3480156107f157600080fd5b506107b760285481565b34801561080757600080fd5b50601b546107b7565b34801561081c57600080fd5b5061077161082b366004615540565b6001600160a01b03166000908152600f602052604090205460ff1690565b34801561085557600080fd5b50601854610869906001600160a01b031681565b6040516001600160a01b039091168152602001610748565b34801561088d57600080fd5b50603454610869906201000090046001600160a01b031681565b3480156108b357600080fd5b506019546107b7565b3480156108c857600080fd5b506107246108d7366004615782565b611758565b3480156108e857600080fd5b506107b760265481565b3480156108fe57600080fd5b50603c546107719062010000900460ff1681565b34801561091e57600080fd5b5061077161092d3660046155b0565b611795565b34801561093e57600080fd5b5061077161094d366004615540565b600a6020526000908152604090205460ff1681565b34801561096e57600080fd5b506107b761097d3660046157ba565b61185c565b34801561098e57600080fd5b50601f5460405160ff9091168152602001610748565b3480156109b057600080fd5b506107246109bf366004615540565b6118e0565b3480156109d057600080fd5b506107b760335481565b3480156109e657600080fd5b506107246109f53660046157ba565b611acf565b348015610a0657600080fd5b50610771610a1536600461561d565b611b0c565b348015610a2657600080fd5b50610724610a353660046155f0565b611b42565b348015610a4657600080fd5b506107b760205481565b348015610a5c57600080fd5b50610724610a6b3660046157ba565b611b97565b348015610a7c57600080fd5b50603654610869906001600160a01b031681565b348015610a9c57600080fd5b50610724610aab3660046157ba565b611c81565b348015610abc57600080fd5b50610724610acb366004615782565b611cbe565b348015610adc57600080fd5b50610724610aeb366004615540565b611d04565b348015610afc57600080fd5b506107b7610b0b3660046157d2565b611d52565b348015610b1c57600080fd5b50610724610b2b3660046157ba565b611ddf565b348015610b3c57600080fd5b50610724610b4b366004615540565b611e1c565b348015610b5c57600080fd5b50603554610869906001600160a01b031681565b348015610b7c57600080fd5b5060375461077190600160a81b900460ff1681565b348015610b9d57600080fd5b50610771610bac366004615540565b611ea8565b348015610bbd57600080fd5b50610724610bcc366004615540565b611fd0565b348015610bdd57600080fd5b50610771610bec366004615540565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610c1657600080fd5b50603c546107719060ff1681565b348015610c3057600080fd5b506107b760325481565b348015610c4657600080fd5b50610724610c55366004615782565b612123565b348015610c6657600080fd5b50610724610c75366004615782565b61216b565b348015610c8657600080fd5b50610724610c95366004615782565b6121af565b348015610ca657600080fd5b50610724610cb53660046157ba565b6127d1565b348015610cc657600080fd5b50610771610cd5366004615540565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610cff57600080fd5b50610724610d0e366004615782565b61280e565b348015610d1f57600080fd5b50610724610d2e3660046157ba565b612852565b348015610d3f57600080fd5b506002546001600160a01b0316610869565b348015610d5d57600080fd5b506107b760225481565b348015610d7357600080fd5b50610724610d82366004615540565b61286f565b348015610d9357600080fd5b506107b7610da2366004615540565b6128bb565b348015610db357600080fd5b5061072461291a565b348015610dc857600080fd5b50610724610dd73660046155f0565b61297c565b348015610de857600080fd5b506034546107719060ff1681565b348015610e0257600080fd5b506107b7610e11366004615540565b6001600160a01b03166000908152600d602052604090205490565b348015610e3857600080fd5b50610724610e473660046155f0565b612bec565b348015610e5857600080fd5b506107b760385481565b348015610e6e57600080fd5b506107b7603b5481565b348015610e8457600080fd5b50610724610e933660046157ba565b612c41565b348015610ea457600080fd5b50603c5461077190610100900460ff1681565b348015610ec357600080fd5b50610724612c70565b348015610ed857600080fd5b50610771610ee7366004615540565b6001600160a01b03166000908152600b602052604090205460ff1690565b348015610f1157600080fd5b50610771610f20366004615540565b60106020526000908152604090205460ff1681565b348015610f4157600080fd5b50610724610f503660046157ba565b612cd5565b348015610f6157600080fd5b506000546001600160a01b0316610869565b348015610f7f57600080fd5b506107b7602a5481565b348015610f9557600080fd5b50610724610fa43660046157ba565b612d12565b348015610fb557600080fd5b50610724610fc4366004615540565b612d4f565b348015610fd557600080fd5b5061073b612d9b565b348015610fea57600080fd5b506107b7602c5481565b34801561100057600080fd5b5061072461100f366004615648565b612daa565b34801561102057600080fd5b5061072461102f3660046156c3565b612e84565b34801561104057600080fd5b5061072461104f36600461561d565b613037565b34801561106057600080fd5b5061072461106f3660046155f0565b6130f1565b34801561108057600080fd5b5061072461108f366004615540565b613146565b3480156110a057600080fd5b506107716110af36600461561d565b613192565b3480156110c057600080fd5b506107246131e1565b3480156110d557600080fd5b506107716110e436600461561d565b6132e7565b3480156110f557600080fd5b506107b760245481565b34801561110b57600080fd5b506107b7602e5481565b34801561112157600080fd5b50601754610869906001600160a01b031681565b34801561114157600080fd5b506003546107b7565b34801561115657600080fd5b50610771611165366004615540565b600c6020526000908152604090205460ff1681565b34801561118657600080fd5b50610724611195366004615540565b613349565b3480156111a657600080fd5b506107246111b53660046157ba565b6135dd565b3480156111c657600080fd5b5060345461077190610100900460ff1681565b3480156111e557600080fd5b506107246111f4366004615689565b61361b565b34801561120557600080fd5b50610724611214366004615540565b6136c2565b34801561122557600080fd5b506107246112343660046157ba565b613716565b34801561124557600080fd5b506107b7603a5481565b34801561125b57600080fd5b5061072461126a366004615782565b613753565b34801561127b57600080fd5b5060375461077190600160b01b900460ff1681565b34801561129c57600080fd5b506012546001600160a01b0316610869565b3480156112ba57600080fd5b506107246112c93660046157ba565b6137d5565b3480156112da57600080fd5b50603c54610771906301000000900460ff1681565b3480156112fb57600080fd5b5061130f61130a366004615540565b613812565b6040516107489190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b34801561135d57600080fd5b5061072461136c3660046157ba565b61389c565b34801561137d57600080fd5b506107b760305481565b34801561139357600080fd5b506107246113a2366004615540565b613951565b3480156113b357600080fd5b50603754610869906001600160a01b031681565b3480156113d357600080fd5b506107b760395481565b3480156113e957600080fd5b506107246113f8366004615540565b61399d565b34801561140957600080fd5b506107246114183660046157ba565b6139e9565b34801561142957600080fd5b50610724611438366004615540565b613a26565b34801561144957600080fd5b506107246114583660046157ba565b613a59565b34801561146957600080fd5b506107b7611478366004615578565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156114af57600080fd5b506107b76114be366004615540565b613ade565b3480156114cf57600080fd5b506107246114de3660046157ba565b613ae9565b3480156114ef57600080fd5b506107246114fe366004615540565b613b27565b34801561150f57600080fd5b5061072461151e3660046157ba565b613b72565b34801561152f57600080fd5b5061072461153e366004615540565b613c15565b34801561154f57600080fd5b5061072461155e366004615540565b613ced565b34801561156f57600080fd5b50336000908152600760205260409020546107b7565b34801561159157600080fd5b506107246115a03660046155f0565b613d51565b3480156115b157600080fd5b506013546001600160a01b0316610869565b6000546001600160a01b031633146115f65760405162461bcd60e51b81526004016115ed90615863565b60405180910390fd5b60006020556101f4811161160a5760208190555b50565b6060601d805461161c906159b3565b80601f0160208091040260200160405190810160405280929190818152602001828054611648906159b3565b80156116955780601f1061166a57610100808354040283529160200191611695565b820191906000526020600020905b81548152906001019060200180831161167857829003601f168201915b5050505050905090565b60006116ac338484613e67565b5060015b92915050565b6000546001600160a01b031633146116e05760405162461bcd60e51b81526004016115ed90615863565b601880546001600160a01b039092166001600160a01b0319909216821790556000908152600a60205260409020805460ff19166001179055565b6000546001600160a01b031633146117445760405162461bcd60e51b81526004016115ed90615863565b61175281633b9aca0061597d565b60395550565b6000546001600160a01b031633146117825760405162461bcd60e51b81526004016115ed90615863565b603c805460ff1916911515919091179055565b6001600160a01b03831660009081526007602052604081205442116117f55760405162461bcd60e51b815260206004820152601660248201527515d85b1b195d081a5cc81cdd1a5b1b081b1bd8dad95960521b60448201526064016115ed565b611800848484613f8b565b611852843361184d85604051806060016040528060288152602001615a43602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190614732565b613e67565b5060019392505050565b6000601a548211156118c35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016115ed565b60006118cd61476c565b90506118d98382613e25565b9392505050565b6000546001600160a01b0316331461190a5760405162461bcd60e51b81526004016115ed90615863565b6001600160a01b0381166000908152600b602052604090205460ff166119725760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016115ed565b60005b601154811015611acb57816001600160a01b0316601182815481106119aa57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415611ab957601180546119d59060019061599c565b815481106119f357634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601180546001600160a01b039092169183908110611a2d57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600b90925220805460ff191690556011805480611a9357634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611ac3816159ee565b915050611975565b5050565b6000546001600160a01b03163314611af95760405162461bcd60e51b81526004016115ed90615863565b60006024556101f4811161160a57602455565b3360008181526006602090815260408083206001600160a01b038716845290915281205490916116ac91859061184d908661478f565b6000546001600160a01b03163314611b6c5760405162461bcd60e51b81526004016115ed90615863565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b336000818152600b602052604090205460ff1615611c0c5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016115ed565b6000611c17836147ee565b505050506001600160a01b038416600090815260046020526040902054919250611c439190508261483d565b6001600160a01b038316600090815260046020526040902055601a54611c69908261483d565b601a55601b54611c79908461478f565b601b55505050565b6000546001600160a01b03163314611cab5760405162461bcd60e51b81526004016115ed90615863565b6000602e556101f4811161160a57602e55565b6000546001600160a01b03163314611ce85760405162461bcd60e51b81526004016115ed90615863565b603c8054911515620100000262ff000019909216919091179055565b6000546001600160a01b03163314611d2e5760405162461bcd60e51b81526004016115ed90615863565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000601954831115611da65760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016115ed565b81611dc5576000611db6846147ee565b509395506116b0945050505050565b6000611dd0846147ee565b509295506116b0945050505050565b6000546001600160a01b03163314611e095760405162461bcd60e51b81526004016115ed90615863565b60006026556101f4811161160a57602655565b6002546001600160a01b03163314611e465760405162461bcd60e51b81526004016115ed90615898565b603780546001600160a01b039092166001600160a01b0319909216821790556000908152600860209081526040808320805460ff199081166001908117909255600984528285208054821683179055600a909352922080549091169091179055565b600080603460029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611ef957600080fd5b505afa158015611f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f31919061555c565b6001600160a01b031663e6a4390530856040518363ffffffff1660e01b8152600401611f5e9291906157f6565b60206040518083038186803b158015611f7657600080fd5b505afa158015611f8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fae919061555c565b6001600160a01b03166000908152600c602052604090205460ff169392505050565b6000546001600160a01b03163314611ffa5760405162461bcd60e51b81526004016115ed90615863565b6001600160a01b0381166000908152600b602052604090205460ff16156120635760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016115ed565b6001600160a01b038116600090815260046020526040902054156120bd576001600160a01b0381166000908152600460205260409020546120a39061185c565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600b60205260408120805460ff191660019081179091556011805491820181559091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319169091179055565b6000546001600160a01b0316331461214d5760405162461bcd60e51b81526004016115ed90615863565b603c805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b031633146121955760405162461bcd60e51b81526004016115ed90615863565b603480549115156101000261ff0019909216919091179055565b6002546001600160a01b031633146121d95760405162461bcd60e51b81526004016115ed90615898565b8015612576576000603460029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561222f57600080fd5b505afa158015612243573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612267919061555c565b6001600160a01b031663e6a4390530603460029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156122c457600080fd5b505afa1580156122d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fc919061555c565b6040518363ffffffff1660e01b81526004016123199291906157f6565b60206040518083038186803b15801561233157600080fd5b505afa158015612345573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612369919061555c565b90506001600160a01b03811661250657603460029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156123c757600080fd5b505afa1580156123db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ff919061555c565b6001600160a01b031663c9c6539630603460029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561245c57600080fd5b505afa158015612470573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612494919061555c565b6040518363ffffffff1660e01b81526004016124b19291906157f6565b602060405180830381600087803b1580156124cb57600080fd5b505af11580156124df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612503919061555c565b90505b603580546001600160a01b039283166001600160a01b0319909116811782556000908152600c60209081526040808320805460ff1990811690915560378054881515600160b01b0260ff60b01b1990911617905593549094168252600a9052919091208054909116600117905550565b6000603460029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156125c657600080fd5b505afa1580156125da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fe919061555c565b60365460405163e6a4390560e01b81526001600160a01b039283169263e6a4390592612632923092909116906004016157f6565b60206040518083038186803b15801561264a57600080fd5b505afa15801561265e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612682919061555c565b90506001600160a01b0381166127a157603460029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156126e057600080fd5b505afa1580156126f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612718919061555c565b6036546040516364e329cb60e11b81526001600160a01b039283169263c9c653969261274c923092909116906004016157f6565b602060405180830381600087803b15801561276657600080fd5b505af115801561277a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279e919061555c565b90505b603580546001600160a01b0319166001600160a01b0392909216919091179055506037805460ff60b01b19169055565b6000546001600160a01b031633146127fb5760405162461bcd60e51b81526004016115ed90615863565b60006028556101f4811161160a57602855565b6000546001600160a01b031633146128385760405162461bcd60e51b81526004016115ed90615863565b603c80549115156101000261ff0019909216919091179055565b61285c8142615945565b3360009081526007602052604090205550565b6000546001600160a01b031633146128995760405162461bcd60e51b81526004016115ed90615863565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600b602052604081205460ff16156128f857506001600160a01b031660009081526005602052604090205490565b6001600160a01b0382166000908152600460205260409020546116b09061185c565b6000546001600160a01b031633146129445760405162461bcd60e51b81526004016115ed90615863565b600080546040516001600160a01b0390911690600080516020615a6b833981519152908390a3600080546001600160a01b0319169055565b6002546001600160a01b031633146129a65760405162461bcd60e51b81526004016115ed90615898565b6000603460029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156129f657600080fd5b505afa158015612a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2e919061555c565b6001600160a01b031663e6a4390530856040518363ffffffff1660e01b8152600401612a5b9291906157f6565b60206040518083038186803b158015612a7357600080fd5b505afa158015612a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aab919061555c565b90506001600160a01b038116612bc357603460029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612b0957600080fd5b505afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b41919061555c565b6001600160a01b031663c9c6539630856040518363ffffffff1660e01b8152600401612b6e9291906157f6565b602060405180830381600087803b158015612b8857600080fd5b505af1158015612b9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc0919061555c565b90505b6001600160a01b03166000908152600c60205260409020805460ff191691151591909117905550565b6000546001600160a01b03163314612c165760405162461bcd60e51b81526004016115ed90615863565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314612c6b5760405162461bcd60e51b81526004016115ed90615863565b603b55565b6000546001600160a01b03163314612c9a5760405162461bcd60e51b81526004016115ed90615863565b612cbb6064612cb56000601954613da690919063ffffffff16565b90613e25565b603855612cc661487f565b6037805460ff60a81b19169055565b6000546001600160a01b03163314612cff5760405162461bcd60e51b81526004016115ed90615863565b60006032556109c4811161160a57603255565b6000546001600160a01b03163314612d3c5760405162461bcd60e51b81526004016115ed90615863565b60006022556101f4811161160a57602255565b6000546001600160a01b03163314612d795760405162461bcd60e51b81526004016115ed90615863565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6060601e805461161c906159b3565b6017546001600160a01b0316336001600160a01b03161480612dd657506002546001600160a01b031633145b612e155760405162461bcd60e51b815260206004820152601060248201526f2ab730b63637bbb2b21031b0b63632b960811b60448201526064016115ed565b8015612e5c576001600160a01b0383166000908152600d6020526040902054612e3e908361478f565b6001600160a01b0384166000908152600d6020526040902055505050565b6001600160a01b0383166000908152600d6020526040902054612e3e908361483d565b505050565b6000546001600160a01b03163314612eae5760405162461bcd60e51b81526004016115ed90615863565b86426000805b838110156130295782888883818110612edd57634e487b7160e01b600052603260045260246000fd5b9050602002013562015180612ef2919061597d565b612efc9190615945565b91506040518060a001604052808b8b84818110612f2957634e487b7160e01b600052603260045260246000fd5b905060200201358152602001848152602001838152602001878784818110612f6157634e487b7160e01b600052603260045260246000fd5b9050602002013581526020018b8b84818110612f8d57634e487b7160e01b600052603260045260246000fd5b90506020020135815250600e60008e8e85818110612fbb57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612fd09190615540565b6001600160a01b0316815260208082019290925260409081016000208351815591830151600183015582015160028201556060820151600382015560809091015160049091015580613021816159ee565b915050612eb4565b505050505050505050505050565b6002546001600160a01b031633146130615760405162461bcd60e51b81526004016115ed90615898565b6001600160a01b03821663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b1580156130b957600080fd5b505af11580156130cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7f919061579e565b6000546001600160a01b0316331461311b5760405162461bcd60e51b81526004016115ed90615863565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146131705760405162461bcd60e51b81526004016115ed90615863565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b60006116ac338461184d85604051806060016040528060258152602001615a8b602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190614732565b6001546001600160a01b031633146132475760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016115ed565b60035442116132985760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016115ed565b600154600080546040516001600160a01b039384169390911691600080516020615a6b83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b33600090815260076020526040812054421161333e5760405162461bcd60e51b815260206004820152601660248201527515d85b1b195d081a5cc81cdd1a5b1b081b1bd8dad95960521b60448201526064016115ed565b6116ac338484613f8b565b6002546001600160a01b031633146133735760405162461bcd60e51b81526004016115ed90615898565b6000603460029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156133c357600080fd5b505afa1580156133d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fb919061555c565b6001600160a01b031663e6a4390530846040518363ffffffff1660e01b81526004016134289291906157f6565b60206040518083038186803b15801561344057600080fd5b505afa158015613454573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613478919061555c565b90506001600160a01b03811661359057603460029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156134d657600080fd5b505afa1580156134ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350e919061555c565b6001600160a01b031663c9c6539630846040518363ffffffff1660e01b815260040161353b9291906157f6565b602060405180830381600087803b15801561355557600080fd5b505af1158015613569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061358d919061555c565b90505b6001600160a01b03166000818152600c60209081526040808320805460ff19908116909155603580546001600160a01b031916909517909455600a90915290208054909116600117905550565b6000546001600160a01b031633146136075760405162461bcd60e51b81526004016115ed90615863565b61361581633b9aca0061597d565b60385550565b6000546001600160a01b031633146136455760405162461bcd60e51b81526004016115ed90615863565b42600081613656856201518061597d565b6136609190615945565b6040805160a081018252878152602080820195865281830193845260608201968752608082019889526001600160a01b039099166000908152600e90995297209651875591516001870155505160028501555160038401555051600490910155565b6002546001600160a01b031633146136ec5760405162461bcd60e51b81526004016115ed90615898565b603480546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000546001600160a01b031633146137405760405162461bcd60e51b81526004016115ed90615863565b60006030556101f4811161160a57603055565b6000546001600160a01b0316331461377d5760405162461bcd60e51b81526004016115ed90615863565b60378054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906137ca90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146137ff5760405162461bcd60e51b81526004016115ed90615863565b6000602c556101f4811161160a57602c55565b6138446040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b03166000908152600e6020908152604091829020825160a0810184528154815260018201549281019290925260028101549282019290925260038201546060820152600490910154608082015290565b6002546001600160a01b031633146138c65760405162461bcd60e51b81526004016115ed90615898565b604051600090339083908381818185875af1925050503d8060008114613908576040519150601f19603f3d011682016040523d82523d6000602084013e61390d565b606091505b5050905080611acb5760405162461bcd60e51b815260206004820152601060248201526f4661696c656420746f2072657363756560801b60448201526064016115ed565b6000546001600160a01b0316331461397b5760405162461bcd60e51b81526004016115ed90615863565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146139c75760405162461bcd60e51b81526004016115ed90615863565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314613a135760405162461bcd60e51b81526004016115ed90615863565b6000602a556101f4811161160a57602a55565b6000546001600160a01b03163314613a505760405162461bcd60e51b81526004016115ed90615863565b61160a81614961565b6000546001600160a01b03163314613a835760405162461bcd60e51b81526004016115ed90615863565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055613ab28142615945565b600355600080546040516001600160a01b0390911690600080516020615a6b833981519152908390a350565b60006116b082614aa6565b6000546001600160a01b03163314613b135760405162461bcd60e51b81526004016115ed90615863565b613b2181633b9aca0061597d565b601c5550565b6000546001600160a01b03163314613b515760405162461bcd60e51b81526004016115ed90615863565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314613b9c5760405162461bcd60e51b81526004016115ed90615863565b613baa81633b9aca0061597d565b603855613bee602154602055602354602255602554602455602754602655602954602855602b54602a55602d54602c55602f54602e55603154603055603354603255565b506037805460ff60a81b1916600160a81b179055603c805460ff1916600117905543603a55565b6000546001600160a01b03163314613c3f5760405162461bcd60e51b81526004016115ed90615863565b6001600160a01b038116613ca45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016115ed565b600080546040516001600160a01b0380851693921691600080516020615a6b83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314613d175760405162461bcd60e51b81526004016115ed90615863565b601780546001600160a01b039092166001600160a01b0319909216821790556000908152600a60205260409020805460ff19166001179055565b6000546001600160a01b03163314613d7b5760405162461bcd60e51b81526004016115ed90615863565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b600082613db5575060006116b0565b6000613dc1838561597d565b905082613dce858361595d565b146118d95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016115ed565b60006118d983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614bf2565b6001600160a01b038316613ec95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016115ed565b6001600160a01b038216613f2a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016115ed565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166000908152600f602052604090205460ff1680613fca57506001600160a01b0382166000908152600f602052604090205460ff165b156140235760405162461bcd60e51b8152602060048201526024808201527f426c61636b6c6973746564206163636f756e742c20636f6e74616374207375706044820152631c1bdc9d60e21b60648201526084016115ed565b603c54610100900460ff16801561403c5750603c5460ff165b1561414057600043603b54603a546140549190615945565b11905080156140c6576001600160a01b03841660009081526010602052604090205460ff16156140c65760405162461bcd60e51b815260206004820152601d60248201527f416e7469626f743a2077616974206d696e7574657320746f2073656c6c00000060448201526064016115ed565b6035546001600160a01b0385811691161480156140e05750805b1561413e576001600160a01b0383166000908152601060205260409020805460ff19166001179055603c546301000000900460ff161561413e576001600160a01b0383166000908152600f60205260409020805460ff191660011790555b505b6001600160a01b0383166141a45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016115ed565b6001600160a01b0382166142065760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016115ed565b6001600160a01b0382166000908152600c602052604090205460ff161561426f5760405162461bcd60e51b815260206004820152601760248201527f5468652070616972206973206e6f7420616c6c6f77656400000000000000000060448201526064016115ed565b600081116142d15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016115ed565b6001600160a01b0382166000908152600a602052604090205460ff1661435557601c5461430782614301856128bb565b9061478f565b11156143555760405162461bcd60e51b815260206004820152601f60248201527f546f6b656e206c696d69742072656163686564206f6e2072656365697665720060448201526064016115ed565b6001600160a01b03831660009081526009602052604090205460ff1615801561439757506001600160a01b03821660009081526009602052604090205460ff16155b156143ff576038548111156143ff5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016115ed565b6001600160a01b0383166000908152600d602052604090205415614498576001600160a01b0383166000908152600d602052604090205461444990614443856128bb565b9061483d565b8111156144985760405162461bcd60e51b815260206004820152601e60248201527f43616e206e6f74207472616e73666572207374616b656420746f6b656e73000060448201526064016115ed565b603c5462010000900460ff1680156144ca57506001600160a01b0383166000908152600e602052604090206004015415155b1561455f576144d883614961565b6001600160a01b0383166000908152600e6020908152604080832060040154600d9092529091205461451091906144439081876128bb565b81111561455f5760405162461bcd60e51b815260206004820152601e60248201527f43616e206e6f74207472616e736665722076657374656420746f6b656e73000060448201526064016115ed565b600061456a306128bb565b9050603854811061457a57506038545b603954811080159081906145985750603754600160a01b900460ff16155b80156145b257506035546001600160a01b03868116911614155b80156145c75750603754600160a81b900460ff165b1561468e576037805460ff60a01b198116600160a01b1790915560395492506145fd9030906001600160a01b0316846000614c20565b600080614608614dcd565b6037546040516301cc16d360e71b81529294509092506001600160a01b0381169163e60b69809161464c91889187918791600160b01b900460ff16906004016158cf565b600060405180830381600087803b15801561466657600080fd5b505af115801561467a573d6000803e3d6000fd5b50506037805460ff60a01b19169055505050505b6001600160a01b03851660009081526008602052604090205460019060ff16806146d057506001600160a01b03851660009081526008602052604090205460ff165b156146dd57506000614714565b6035546001600160a01b0386811691161480156147015750603454610100900460ff165b15614714576034805460ff191660011790555b61472086868684614c20565b50506034805460ff1916905550505050565b600081848411156147565760405162461bcd60e51b81526004016115ed9190615810565b506000614763848661599c565b95945050505050565b6000806000614779614e8f565b90925090506147888282613e25565b9250505090565b60008061479c8385615945565b9050838110156118d95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016115ed565b60008060008060008060008060006148058a615049565b92509250925060008060006148238d868661481e61476c565b615085565b919f909e50909c50959a5093985091965092945050505050565b60006118d983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614732565b60205415801561488f5750602254155b801561489b5750602654155b80156148a75750602454155b80156148b35750602854155b80156148bf5750602a54155b80156148cb5750602c54155b80156148d75750602e54155b80156148e35750603054155b80156148ef5750603254155b156148f657565b6020805460215560228054602355602480546025556026805460275560288054602955602a8054602b55602c8054602d55602e8054602f5560308054603155603280546033556000998a90559789905595889055938790559186905585905584905583905582905555565b6001600160a01b0381166000908152600e60209081526040808320815160a08101835281548152600182015493810184905260028201549281018390526003820154606082018190526004909201546080820152939290916149c3919061599c565b6149cd919061595d565b90506000826060015183600001516149e5919061595d565b90508260400151421115614a13575050506001600160a01b03166000908152600e6020526040812060040155565b6000836020015142614a25919061599c565b905082811015614a36575050505050565b6000614a42848361595d565b90506000614a50848361597d565b9050600086608001518760000151614a68919061599c565b905080821115614a9c578651614a7f90839061599c565b6001600160a01b0389166000908152600e60205260409020600401555b5050505050505050565b6001600160a01b0381166000908152600e60209081526040808320815160a08101835281548152600182015493810193909352600281015491830191909152600381015460608301526004015460808201819052614b075750600092915050565b6000816060015182602001518360400151614b22919061599c565b614b2c919061595d565b9050600082606001518360000151614b44919061595d565b90508260400151421115614b5d57506000949350505050565b6000836020015142614b6f919061599c565b905082811015614b86575050506080015192915050565b6000614b92848361595d565b90506000614ba0848361597d565b9050600086608001518760000151614bb8919061599c565b905080821115614be0578651600090614bd290849061599c565b9a9950505050505050505050565b50505060809093015195945050505050565b60008183614c135760405162461bcd60e51b81526004016115ed9190615810565b506000614763848661595d565b80614c2d57614c2d61487f565b6001600160a01b0384166000908152600b602052604090205460ff168015614c6e57506001600160a01b0383166000908152600b602052604090205460ff16155b15614c8357614c7e8484846150d5565b614d81565b6001600160a01b0384166000908152600b602052604090205460ff16158015614cc457506001600160a01b0383166000908152600b602052604090205460ff165b15614cd457614c7e8484846151fb565b6001600160a01b0384166000908152600b602052604090205460ff16158015614d1657506001600160a01b0383166000908152600b602052604090205460ff16155b15614d2657614c7e8484846152a4565b6001600160a01b0384166000908152600b602052604090205460ff168015614d6657506001600160a01b0383166000908152600b602052604090205460ff165b15614d7657614c7e8484846152e8565b614d818484846152a4565b80614dc757614dc7602154602055602354602255602554602455602754602655602954602855602b54602a55602d54602c55602f54602e55603154603055603354603255565b50505050565b614dd56154b9565b614ddd6154d8565b6026548252602454602080840191909152602854604080850191909152602a54606080860191909152602c5460808087019190915260225460a080880191909152602e5460c08089019190915260305460e08901526032546101008901526013546001600160a01b039081168852601254811696880196909652601754861694870194909452601454851692860192909252601554841690850152601854831690840152601654909116908201529091565b601a546019546000918291825b60115481101561501957826004600060118481548110614ecc57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180614f455750816005600060118481548110614f1e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15614f5b57601a54601954945094505050509091565b614faf6004600060118481548110614f8357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061483d565b92506150056005600060118481548110614fd957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061483d565b915080615011816159ee565b915050614e9c565b50601954601a5461502991613e25565b82101561504057601a546019549350935050509091565b90939092509050565b6000806000806150588561535b565b9050600061506586615378565b9050600061507782614443898661483d565b979296509094509092505050565b60008080806150948886613da6565b905060006150a28887613da6565b905060006150b08888613da6565b905060006150c282614443868661483d565b939b939a50919850919650505050505050565b6000806000806000806150e7876147ee565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150615119908861483d565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054615148908761483d565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054615177908661478f565b6001600160a01b0389166000908152600460205260409020556151998161540d565b6151a38483615495565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516151e891815260200190565b60405180910390a3505050505050505050565b60008060008060008061520d876147ee565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061523f908761483d565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054615275908461478f565b6001600160a01b038916600090815260056020908152604080832093909355600490522054615177908661478f565b6000806000806000806152b6876147ee565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150615148908761483d565b6000806000806000806152fa876147ee565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061532c908861483d565b6001600160a01b038a1660009081526005602090815260408083209390935560049052205461523f908761483d565b60006116b0612710612cb560205485613da690919063ffffffff16565b603454600090819060ff1661538e576000615392565b6032545b90506118d9612710612cb583603054602e54602c54602a546028546026546024546022546153c09190615945565b6153ca9190615945565b6153d49190615945565b6153de9190615945565b6153e89190615945565b6153f29190615945565b6153fc9190615945565b6154069190615945565b8690613da6565b600061541761476c565b905060006154258383613da6565b30600090815260046020526040902054909150615442908261478f565b30600090815260046020908152604080832093909355600b9052205460ff1615612e7f5730600090815260056020526040902054615480908461478f565b30600090815260056020526040902055505050565b601a546154a2908361483d565b601a55601b546154b2908261478f565b601b555050565b6040518061012001604052806009906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b60008083601f840112615507578182fd5b50813567ffffffffffffffff81111561551e578182fd5b6020830191508360208260051b850101111561553957600080fd5b9250929050565b600060208284031215615551578081fd5b81356118d981615a1f565b60006020828403121561556d578081fd5b81516118d981615a1f565b6000806040838503121561558a578081fd5b823561559581615a1f565b915060208301356155a581615a1f565b809150509250929050565b6000806000606084860312156155c4578081fd5b83356155cf81615a1f565b925060208401356155df81615a1f565b929592945050506040919091013590565b60008060408385031215615602578182fd5b823561560d81615a1f565b915060208301356155a581615a34565b6000806040838503121561562f578182fd5b823561563a81615a1f565b946020939093013593505050565b60008060006060848603121561565c578283fd5b833561566781615a1f565b925060208401359150604084013561567e81615a34565b809150509250925092565b6000806000806080858703121561569e578081fd5b84356156a981615a1f565b966020860135965060408601359560600135945092505050565b6000806000806000806000806080898b0312156156de578384fd5b883567ffffffffffffffff808211156156f5578586fd5b6157018c838d016154f6565b909a50985060208b0135915080821115615719578586fd5b6157258c838d016154f6565b909850965060408b013591508082111561573d578586fd5b6157498c838d016154f6565b909650945060608b0135915080821115615761578384fd5b5061576e8b828c016154f6565b999c989b5096995094979396929594505050565b600060208284031215615793578081fd5b81356118d981615a34565b6000602082840312156157af578081fd5b81516118d981615a34565b6000602082840312156157cb578081fd5b5035919050565b600080604083850312156157e4578182fd5b8235915060208301356155a581615a34565b6001600160a01b0392831681529116602082015260400190565b6000602080835283518082850152825b8181101561583c57858101830151858201604001528201615820565b8181111561584d5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f43616c6c657220646f6573206e6f74206861766520706f776572000000000000604082015260600190565b848152610240810160208083018660005b60098110156158fd578151835291830191908301906001016158e0565b50505061014083018560005b600781101561592f5781516001600160a01b031683529183019190830190600101615909565b5050505082151561022083015295945050505050565b6000821982111561595857615958615a09565b500190565b60008261597857634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561599757615997615a09565b500290565b6000828210156159ae576159ae615a09565b500390565b600181811c908216806159c757607f821691505b602082108114156159e857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415615a0257615a02615a09565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461160a57600080fd5b801515811461160a57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dab95b60793f533f7a707ca0ed0d9af86970b1669b33f7944231a89d16c342a164736f6c63430008040033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d56

-----Decoded View---------------
Arg [0] : router (address): 0x10ED43C718714eb63d5aA57B78B54704E256024E
Arg [1] : stablecoin (address): 0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e
Arg [1] : 000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d56


Deployed Bytecode Sourcemap

8066:35608:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25251:158;;;;;;;;;;-1:-1:-1;25251:158:0;;;;;:::i;:::-;;:::i;:::-;;13580:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14583:161;;;;;;;;;;-1:-1:-1;14583:161:0;;;;;:::i;:::-;;:::i;:::-;;;8018:14:1;;8011:22;7993:41;;7981:2;7966:18;14583:161:0;7948:92:1;21171:149:0;;;;;;;;;;-1:-1:-1;21171:149:0;;;;;:::i;:::-;;:::i;9551:55::-;;;;;;;;;;;;;;;;;;;19379:25:1;;;19367:2;19352:18;9551:55:0;19334:76:1;21332:140:0;;;;;;;;;;-1:-1:-1;21332:140:0;;;;;:::i;:::-;;:::i;10144:30::-;;;;;;;;;;;;;;;;15785:87;;;;;;;;;;-1:-1:-1;15854:10:0;;15785:87;;43557:114;;;;;;;;;;-1:-1:-1;43557:114:0;;;;;:::i;:::-;-1:-1:-1;;;;;43645:18:0;43621:4;43645:18;;;:9;:18;;;;;;;;;43557:114;9321:28;;;;;;;;;;-1:-1:-1;9321:28:0;;;;-1:-1:-1;;;;;9321:28:0;;;;;;-1:-1:-1;;;;;6997:32:1;;;6979:51;;6967:2;6952:18;9321:28:0;6934:102:1;10884:41:0;;;;;;;;;;-1:-1:-1;10884:41:0;;;;;;;-1:-1:-1;;;;;10884:41:0;;;13857:95;;;;;;;;;;-1:-1:-1;13937:7:0;;13857:95;;19523:106;;;;;;;;;;-1:-1:-1;19523:106:0;;;;;:::i;:::-;;:::i;10041:34::-;;;;;;;;;;;;;;;;11466:32;;;;;;;;;;-1:-1:-1;11466:32:0;;;;;;;;;;;14752:394;;;;;;;;;;-1:-1:-1;14752:394:0;;;;;:::i;:::-;;:::i;8686:56::-;;;;;;;;;;-1:-1:-1;8686:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16835:253;;;;;;;;;;-1:-1:-1;16835:253:0;;;;;:::i;:::-;;:::i;13766:83::-;;;;;;;;;;-1:-1:-1;13832:9:0;;13766:83;;13832:9;;;;20601:36:1;;20589:2;20574:18;13766:83:0;20556:87:1;17551:479:0;;;;;;;;;;-1:-1:-1;17551:479:0;;;;;:::i;:::-;;:::i;10745:42::-;;;;;;;;;;;;;;;;25081:158;;;;;;;;;;-1:-1:-1;25081:158:0;;;;;:::i;:::-;;:::i;15154:218::-;;;;;;;;;;-1:-1:-1;15154:218:0;;;;;:::i;:::-;;:::i;18954:143::-;;;;;;;;;;-1:-1:-1;18954:143:0;;;;;:::i;:::-;;:::i;9756:28::-;;;;;;;;;;;;;;;;16006:377;;;;;;;;;;-1:-1:-1;16006:377:0;;;;;:::i;:::-;;:::i;10967:19::-;;;;;;;;;;-1:-1:-1;10967:19:0;;;;-1:-1:-1;;;;;10967:19:0;;;25943:152;;;;;;;;;;-1:-1:-1;25943:152:0;;;;;:::i;:::-;;:::i;19918:96::-;;;;;;;;;;-1:-1:-1;19918:96:0;;;;;:::i;:::-;;:::i;18696:111::-;;;;;;;;;;-1:-1:-1;18696:111:0;;;;;:::i;:::-;;:::i;16391:436::-;;;;;;;;;;-1:-1:-1;16391:436:0;;;;;:::i;:::-;;:::i;25421:194::-;;;;;;;;;;-1:-1:-1;25421:194:0;;;;;:::i;:::-;;:::i;24355:307::-;;;;;;;;;;-1:-1:-1;24355:307:0;;;;;:::i;:::-;;:::i;10932:28::-;;;;;;;;;;-1:-1:-1;10932:28:0;;;;-1:-1:-1;;;;;10932:28:0;;;11059:40;;;;;;;;;;-1:-1:-1;11059:40:0;;;;-1:-1:-1;;;11059:40:0;;;;;;24093:254;;;;;;;;;;-1:-1:-1;24093:254:0;;;;;:::i;:::-;;:::i;17096:447::-;;;;;;;;;;-1:-1:-1;17096:447:0;;;;;:::i;:::-;;:::i;32621:123::-;;;;;;;;;;-1:-1:-1;32621:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;32709:27:0;32685:4;32709:27;;;:18;:27;;;;;;;;;32621:123;11383:37;;;;;;;;;;-1:-1:-1;11383:37:0;;;;;;;;10708:30;;;;;;;;;;;;;;;;19396:89;;;;;;;;;;-1:-1:-1;19396:89:0;;;;;:::i;:::-;;:::i;20045:101::-;;;;;;;;;;-1:-1:-1;20045:101:0;;;;;:::i;:::-;;:::i;21662:1153::-;;;;;;;;;;-1:-1:-1;21662:1153:0;;;;;:::i;:::-;;:::i;26409:180::-;;;;;;;;;;-1:-1:-1;26409:180:0;;;;;:::i;:::-;;:::i;18819:127::-;;;;;;;;;;-1:-1:-1;18819:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;18909:29:0;18885:4;18909:29;;;:20;:29;;;;;;;;;18819:127;19287:101;;;;;;;;;;-1:-1:-1;19287:101:0;;;;;:::i;:::-;;:::i;15884:108::-;;;;;;;;;;-1:-1:-1;15884:108:0;;;;;:::i;:::-;;:::i;6275:90::-;;;;;;;;;;-1:-1:-1;6346:11:0;;-1:-1:-1;;;;;6346:11:0;6275:90;;9845:34;;;;;;;;;;;;;;;;20765:117;;;;;;;;;;-1:-1:-1;20765:117:0;;;;;:::i;:::-;;:::i;13960:198::-;;;;;;;;;;-1:-1:-1;13960:198:0;;;;;:::i;:::-;;:::i;6500:148::-;;;;;;;;;;;;;:::i;23556:529::-;;;;;;;;;;-1:-1:-1;23556:529:0;;;;;:::i;:::-;;:::i;10796:36::-;;;;;;;;;;-1:-1:-1;10796:36:0;;;;;;;;43316:107;;;;;;;;;;-1:-1:-1;43316:107:0;;;;;:::i;:::-;-1:-1:-1;;;;;43400:14:0;43373:7;43400:14;;;:6;:14;;;;;;;43316:107;20282:126;;;;;;;;;;-1:-1:-1;20282:126:0;;;;;:::i;:::-;;:::i;11158:54::-;;;;;;;;;;;;;;;;11343:33;;;;;;;;;;;;;;;;19637:116;;;;;;;;;;-1:-1:-1;19637:116:0;;;;;:::i;:::-;;:::i;11427:32::-;;;;;;;;;;-1:-1:-1;11427:32:0;;;;;;;;;;;27111:193;;;;;;;;;;;;;:::i;15657:120::-;;;;;;;;;;-1:-1:-1;15657:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;15749:20:0;15725:4;15749:20;;;:11;:20;;;;;;;;;15657:120;9005:44;;;;;;;;;;-1:-1:-1;9005:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26257:144;;;;;;;;;;-1:-1:-1;26257:144:0;;;;;:::i;:::-;;:::i;6184:79::-;;;;;;;;;;-1:-1:-1;6222:7:0;6249:6;-1:-1:-1;;;;;6249:6:0;6184:79;;10269:32;;;;;;;;;;;;;;;;26601:194;;;;;;;;;;-1:-1:-1;26601:194:0;;;;;:::i;:::-;;:::i;20525:121::-;;;;;;;;;;-1:-1:-1;20525:121:0;;;;;:::i;:::-;;:::i;13671:87::-;;;;;;;;;;;;;:::i;10368:31::-;;;;;;;;;;;;;;;;42960:348;;;;;;;;;;-1:-1:-1;42960:348:0;;;;;:::i;:::-;;:::i;39339:518::-;;;;;;;;;;-1:-1:-1;39339:518:0;;;;;:::i;:::-;;:::i;27977:221::-;;;;;;;;;;-1:-1:-1;27977:221:0;;;;;:::i;:::-;;:::i;19105:151::-;;;;;;;;;;-1:-1:-1;19105:151:0;;;;;:::i;:::-;;:::i;20654:103::-;;;;;;;;;;-1:-1:-1;20654:103:0;;;;;:::i;:::-;;:::i;15380:269::-;;;;;;;;;;-1:-1:-1;15380:269:0;;;;;:::i;:::-;;:::i;7243:305::-;;;;;;;;;;;;;:::i;14170:254::-;;;;;;;;;;-1:-1:-1;14170:254:0;;;;;:::i;:::-;;:::i;9952:28::-;;;;;;;;;;;;;;;;10462:32;;;;;;;;;;;;;;;;9284:30;;;;;;;;;;-1:-1:-1;9284:30:0;;;;-1:-1:-1;;;;;9284:30:0;;;6908:89;;;;;;;;;;-1:-1:-1;6980:9:0;;6908:89;;8800:46;;;;;;;;;;-1:-1:-1;8800:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22823:725;;;;;;;;;;-1:-1:-1;22823:725:0;;;;;:::i;:::-;;:::i;26807:103::-;;;;;;;;;;-1:-1:-1;26807:103:0;;;;;:::i;:::-;;:::i;10839:32::-;;;;;;;;;;-1:-1:-1;10839:32:0;;;;;;;;;;;39865:327;;;;;;;;;;-1:-1:-1;39865:327:0;;;;;:::i;:::-;;:::i;21480:174::-;;;;;;;;;;-1:-1:-1;21480:174:0;;;;;:::i;:::-;;:::i;26103:146::-;;;;;;;;;;-1:-1:-1;26103:146:0;;;;;:::i;:::-;;:::i;11286:27::-;;;;;;;;;;;;;;;;26918:171;;;;;;;;;;-1:-1:-1;26918:171:0;;;;;:::i;:::-;;:::i;11106:39::-;;;;;;;;;;-1:-1:-1;11106:39:0;;;;-1:-1:-1;;;11106:39:0;;;;;;24670:100;;;;;;;;;;-1:-1:-1;24751:11:0;;-1:-1:-1;;;;;24751:11:0;24670:100;;25786:149;;;;;;;;;;-1:-1:-1;25786:149:0;;;;;:::i;:::-;;:::i;11505:26::-;;;;;;;;;;-1:-1:-1;11505:26:0;;;;;;;;;;;40200:159;;;;;;;;;;-1:-1:-1;40200:159:0;;;;;:::i;:::-;;:::i;:::-;;;;;;18883:4:1;18925:3;18914:9;18910:19;18902:27;;18962:6;18956:13;18945:9;18938:32;19026:4;19018:6;19014:17;19008:24;19001:4;18990:9;18986:20;18979:54;19089:4;19081:6;19077:17;19071:24;19064:4;19053:9;19049:20;19042:54;19152:4;19144:6;19140:17;19134:24;19127:4;19116:9;19112:20;19105:54;19215:4;19207:6;19203:17;19197:24;19190:4;19179:9;19175:20;19168:54;18892:336;;;;;27666:264:0;;;;;;;;;;-1:-1:-1;27666:264:0;;;;;:::i;:::-;;:::i;10585:30::-;;;;;;;;;;;;;;;;20416:97;;;;;;;;;;-1:-1:-1;20416:97:0;;;;;:::i;:::-;;:::i;10993:25::-;;;;;;;;;;-1:-1:-1;10993:25:0;;;;-1:-1:-1;;;;;10993:25:0;;;11219:60;;;;;;;;;;;;;;;;20890:109;;;;;;;;;;-1:-1:-1;20890:109:0;;;;;:::i;:::-;;:::i;25623:155::-;;;;;;;;;;-1:-1:-1;25623:155:0;;;;;:::i;:::-;;:::i;39232:99::-;;;;;;;;;;-1:-1:-1;39232:99:0;;;;;:::i;:::-;;:::i;7005:226::-;;;;;;;;;;-1:-1:-1;7005:226:0;;;;;:::i;:::-;;:::i;14432:143::-;;;;;;;;;;-1:-1:-1;14432:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;14540:18:0;;;14513:7;14540:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14432:143;43431:118;;;;;;;;;;-1:-1:-1;43431:118:0;;;;;:::i;:::-;;:::i;19761:126::-;;;;;;;;;;-1:-1:-1;19761:126:0;;;;;:::i;:::-;;:::i;24906:110::-;;;;;;;;;;-1:-1:-1;24906:110:0;;;;;:::i;:::-;;:::i;27318:243::-;;;;;;;;;;-1:-1:-1;27318:243:0;;;;;:::i;:::-;;:::i;6656:244::-;;;;;;;;;;-1:-1:-1;6656:244:0;;;;;:::i;:::-;;:::i;21007:156::-;;;;;;;;;;-1:-1:-1;21007:156:0;;;;;:::i;:::-;;:::i;13466:106::-;;;;;;;;;;-1:-1:-1;2610:10:0;13515:7;13542:22;;;:8;:22;;;;;;13466:106;;20154:120;;;;;;;;;;-1:-1:-1;20154:120:0;;;;;:::i;:::-;;:::i;24782:112::-;;;;;;;;;;-1:-1:-1;24869:17:0;;-1:-1:-1;;;;;24869:17:0;24782:112;;25251:158;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;;;;;;;;;25333:1:::1;25323:7;:11:::0;25358:3:::1;25348:13:::0;::::1;25345:55;;25375:7;:16:::0;;;25345:55:::1;25251:158:::0;:::o;13580:83::-;13617:13;13650:5;13643:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13580:83;:::o;14583:161::-;14658:4;14675:39;2610:10;14698:7;14707:6;14675:8;:39::i;:::-;-1:-1:-1;14732:4:0;14583:161;;;;;:::o;21171:149::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;21240:13:::1;:22:::0;;-1:-1:-1;;;;;21240:22:0;;::::1;-1:-1:-1::0;;;;;;21240:22:0;;::::1;::::0;::::1;::::0;;:13:::1;21273:32:::0;;;:24:::1;:32;::::0;;;;:39;;-1:-1:-1;;21273:39:0::1;21240:22:::0;21273:39:::1;::::0;;21171:149::o;21332:140::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;21444:20:::1;:10:::0;21457:7:::1;21444:20;:::i;:::-;21412:29;:52:::0;-1:-1:-1;21332:140:0:o;19523:106::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;19595:17:::1;:26:::0;;-1:-1:-1;;19595:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19523:106::o;14752:394::-;-1:-1:-1;;;;;14893:16:0;;14850:4;14893:16;;;:8;:16;;;;;;14875:15;:34;14867:70;;;;-1:-1:-1;;;14867:70:0;;17012:2:1;14867:70:0;;;16994:21:1;17051:2;17031:18;;;17024:30;-1:-1:-1;;;17070:18:1;;;17063:52;17132:18;;14867:70:0;16984:172:1;14867:70:0;14948:36;14958:6;14966:9;14977:6;14948:9;:36::i;:::-;14995:121;15004:6;2610:10;15026:89;15064:6;15026:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15026:19:0;;;;;;:11;:19;;;;;;;;2610:10;15026:33;;;;;;;;;;:37;:89::i;:::-;14995:8;:121::i;:::-;-1:-1:-1;15134:4:0;14752:394;;;;;:::o;16835:253::-;16901:7;16940;;16929;:18;;16921:73;;;;-1:-1:-1;;;16921:73:0;;9851:2:1;16921:73:0;;;9833:21:1;9890:2;9870:18;;;9863:30;9929:34;9909:18;;;9902:62;-1:-1:-1;;;9980:18:1;;;9973:40;10030:19;;16921:73:0;9823:232:1;16921:73:0;17005:19;17028:10;:8;:10::i;:::-;17005:33;-1:-1:-1;17056:24:0;:7;17005:33;17056:11;:24::i;:::-;17049:31;16835:253;-1:-1:-1;;;16835:253:0:o;17551:479::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17633:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;17625:60;;;::::0;-1:-1:-1;;;17625:60:0;;11428:2:1;17625:60:0::1;::::0;::::1;11410:21:1::0;11467:2;11447:18;;;11440:30;11506:29;11486:18;;;11479:57;11553:18;;17625:60:0::1;11400:177:1::0;17625:60:0::1;17701:9;17696:327;17720:9;:16:::0;17716:20;::::1;17696:327;;;17778:7;-1:-1:-1::0;;;;;17762:23:0::1;:9;17772:1;17762:12;;;;;;-1:-1:-1::0;;;17762:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;17762:12:0::1;:23;17758:254;;;17821:9;17831:16:::0;;:20:::1;::::0;17850:1:::1;::::0;17831:20:::1;:::i;:::-;17821:31;;;;;;-1:-1:-1::0;;;17821:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;17806:9:::1;:12:::0;;-1:-1:-1;;;;;17821:31:0;;::::1;::::0;17816:1;;17806:12;::::1;;;-1:-1:-1::0;;;17806:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;17806:46:0::1;-1:-1:-1::0;;;;;17806:46:0;;::::1;;::::0;;17871:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;17910:11:::1;:20:::0;;;;:28;;-1:-1:-1;;17910:28:0::1;::::0;;17957:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;17957:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;17957:15:0;;;;;-1:-1:-1;;;;;;17957:15:0::1;::::0;;;;;17696:327:::1;17551:479:::0;:::o;17758:254::-:1;17738:3:::0;::::1;::::0;::::1;:::i;:::-;;;;17696:327;;;;17551:479:::0;:::o;25081:158::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;25163:1:::1;25153:7;:11:::0;25188:3:::1;25178:13:::0;::::1;25175:55;;25205:7;:16:::0;25081:158::o;15154:218::-;2610:10;15242:4;15291:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15291:34:0;;;;;;;;;;15242:4;;15259:83;;15282:7;;15291:50;;15330:10;15291:38;:50::i;18954:143::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19050:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:39;;-1:-1:-1;;19050:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18954:143::o;16006:377::-;2610:10;16058:14;16107:19;;;:11;:19;;;;;;;;16106:20;16098:77;;;;-1:-1:-1;;;16098:77:0;;18128:2:1;16098:77:0;;;18110:21:1;18167:2;18147:18;;;18140:30;18206:34;18186:18;;;18179:62;-1:-1:-1;;;18257:18:1;;;18250:42;18309:19;;16098:77:0;18100:234:1;16098:77:0;16187:15;16211:19;16222:7;16211:10;:19::i;:::-;-1:-1:-1;;;;;;;;;16259:15:0;;;;;;:7;:15;;;;;;16186:44;;-1:-1:-1;16259:28:0;;:15;-1:-1:-1;16186:44:0;16259:19;:28::i;:::-;-1:-1:-1;;;;;16241:15:0;;;;;;:7;:15;;;;;:46;16308:7;;:20;;16320:7;16308:11;:20::i;:::-;16298:7;:30;16352:10;;:23;;16367:7;16352:14;:23::i;:::-;16339:10;:36;-1:-1:-1;;;16006:377:0:o;25943:152::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;26023:1:::1;26009:11;:15:::0;26045:3:::1;26038:10:::0;::::1;26035:53;;26062:11;:17:::0;25943:152::o;19918:96::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;19984:13:::1;:22:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;19984:22:0;;::::1;::::0;;;::::1;::::0;;19918:96::o;18696:111::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18765:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;18765:34:0::1;18795:4;18765:34;::::0;;18696:111::o;16391:436::-;16481:7;16520;;16509;:18;;16501:62;;;;-1:-1:-1;;;16501:62:0;;12495:2:1;16501:62:0;;;12477:21:1;12534:2;12514:18;;;12507:30;12573:33;12553:18;;;12546:61;12624:18;;16501:62:0;12467:181:1;16501:62:0;16579:17;16574:246;;16614:15;16638:19;16649:7;16638:10;:19::i;:::-;-1:-1:-1;16613:44:0;;-1:-1:-1;16672:14:0;;-1:-1:-1;;;;;16672:14:0;16574:246;16721:23;16752:19;16763:7;16752:10;:19::i;:::-;-1:-1:-1;16719:52:0;;-1:-1:-1;16786:22:0;;-1:-1:-1;;;;;16786:22:0;25421:194;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;25521:1:::1;25505:13;:17:::0;25552:3:::1;25536:19:::0;::::1;25533:73;;25569:13;:28:::0;25421:194::o;24355:307::-;6346:11;;-1:-1:-1;;;;;6346:11:0;2610:10;24421:28;24413:67;;;;-1:-1:-1;;;24413:67:0;;;;;;;:::i;:::-;24491:10;:20;;-1:-1:-1;;;;;24491:20:0;;;-1:-1:-1;;;;;;24491:20:0;;;;;;;:10;24522:27;;;:18;:27;;;;;;;;:34;;-1:-1:-1;;24522:34:0;;;24491:20;24522:34;;;;;;24567:20;:29;;;;;:36;;;;;;;;24614:24;:33;;;;;:40;;;;;;;;;;24355:307::o;24093:254::-;24161:4;24178:19;24218:15;;;;;;;;;-1:-1:-1;;;;;24218:15:0;-1:-1:-1;;;;;24218:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24200:66:0;;24275:4;24282:11;24200:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24312:27:0;;;;;:14;:27;;;;;;;;;24093:254;-1:-1:-1;;;24093:254:0:o;17096:447::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17293:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;17292:21;17284:61;;;::::0;-1:-1:-1;;;17284:61:0;;11428:2:1;17284:61:0::1;::::0;::::1;11410:21:1::0;11467:2;11447:18;;;11440:30;11506:29;11486:18;;;11479:57;11553:18;;17284:61:0::1;11400:177:1::0;17284:61:0::1;-1:-1:-1::0;;;;;17359:16:0;::::1;17378:1;17359:16:::0;;;:7:::1;:16;::::0;;;;;:20;17356:108:::1;;-1:-1:-1::0;;;;;17435:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;17415:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;17396:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;17356:108:::1;-1:-1:-1::0;;;;;17474:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;17474:27:0::1;17497:4;17474:27:::0;;::::1;::::0;;;17512:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;17512:23:0::1;::::0;;::::1;::::0;;17096:447::o;19396:89::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;19461:7:::1;:16:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;19461:16:0;;::::1;::::0;;;::::1;::::0;;19396:89::o;20045:101::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;20116:13:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;20116:22:0;;::::1;::::0;;;::::1;::::0;;20045:101::o;21662:1153::-;6346:11;;-1:-1:-1;;;;;6346:11:0;2610:10;21730:28;21722:67;;;;-1:-1:-1;;;21722:67:0;;;;;;;:::i;:::-;21804:6;21800:1008;;;21827:19;21867:15;;;;;;;;;-1:-1:-1;;;;;21867:15:0;-1:-1:-1;;;;;21867:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21849:70:0;;21928:4;21935:15;;;;;;;;;-1:-1:-1;;;;;21935:15:0;-1:-1:-1;;;;;21935:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21849:109;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21827:131;-1:-1:-1;;;;;;21979:25:0;;21975:196;;22057:15;;;;;;;;;-1:-1:-1;;;;;22057:15:0;-1:-1:-1;;;;;22057:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22039:77:0;;22125:4;22132:15;;;;;;;;;-1:-1:-1;;;;;22132:15:0;-1:-1:-1;;;;;22132:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22039:116;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22025:130;;21975:196;22187:13;:27;;-1:-1:-1;;;;;22187:27:0;;;-1:-1:-1;;;;;;22187:27:0;;;;;;;:13;22229:27;;;:14;:27;;;;;;;;:35;;-1:-1:-1;;22229:35:0;;;;;;22279:19;:28;;;;;-1:-1:-1;;;22279:28:0;-1:-1:-1;;;;22279:28:0;;;;;;22347:13;;;;;22322:39;;:24;:39;;;;;;:46;;;;;22187:27;22322:46;;;25251:158;:::o;21800:1008::-;22403:19;22443:15;;;;;;;;;-1:-1:-1;;;;;22443:15:0;-1:-1:-1;;;;;22443:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22511:4;;22425:91;;-1:-1:-1;;;22425:91:0;;-1:-1:-1;;;;;22425:70:0;;;;;;:91;;22504:4;;22511;;;;22425:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22403:113;-1:-1:-1;;;;;;22537:25:0;;22533:178;;22615:15;;;;;;;;;-1:-1:-1;;;;;22615:15:0;-1:-1:-1;;;;;22615:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22690:4;;22597:98;;-1:-1:-1;;;22597:98:0;;-1:-1:-1;;;;;22597:77:0;;;;;;:98;;22683:4;;22690;;;;22597:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22583:112;;22533:178;22727:13;:27;;-1:-1:-1;;;;;;22727:27:0;-1:-1:-1;;;;;22727:27:0;;;;;;;;;;-1:-1:-1;22769:19:0;:27;;-1:-1:-1;;;;22769:27:0;;;21662:1153::o;26409:180::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;26503:1:::1;26489:11;:15:::0;26532:3:::1;26518:17:::0;::::1;26515:67;;26549:11;:24:::0;26409:180::o;19287:101::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;19358:13:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;19358:22:0;;::::1;::::0;;;::::1;::::0;;19287:101::o;15884:108::-;15962:22;15980:4;15962:15;:22;:::i;:::-;2610:10;15937:22;;;;:8;:22;;;;;:47;-1:-1:-1;15884:108:0:o;20765:117::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;20847:16:::1;:27:::0;;-1:-1:-1;;;;;;20847:27:0::1;-1:-1:-1::0;;;;;20847:27:0;;;::::1;::::0;;;::::1;::::0;;20765:117::o;13960:198::-;-1:-1:-1;;;;;14050:20:0;;14026:7;14050:20;;;:11;:20;;;;;;;;14046:49;;;-1:-1:-1;;;;;;14079:16:0;;;;;:7;:16;;;;;;;13960:198::o;14046:49::-;-1:-1:-1;;;;;14133:16:0;;;;;;:7;:16;;;;;;14113:37;;:19;:37::i;6500:148::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;6607:1:::1;6591:6:::0;;6570:40:::1;::::0;-1:-1:-1;;;;;6591:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6570:40:0;6607:1;;6570:40:::1;6638:1;6621:19:::0;;-1:-1:-1;;;;;;6621:19:0::1;::::0;;6500:148::o;23556:529::-;6346:11;;-1:-1:-1;;;;;6346:11:0;2610:10;23646:28;23638:67;;;;-1:-1:-1;;;23638:67:0;;;;;;;:::i;:::-;23716:19;23756:15;;;;;;;;;-1:-1:-1;;;;;23756:15:0;-1:-1:-1;;;;;23756:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23738:66:0;;23813:4;23820:11;23738:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23716:116;-1:-1:-1;;;;;;23853:25:0;;23849:181;;23931:15;;;;;;;;;-1:-1:-1;;;;;23931:15:0;-1:-1:-1;;;;;23931:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23913:73:0;;23995:4;24002:11;23913:101;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23899:115;;23849:181;-1:-1:-1;;;;;24040:27:0;;;;;:14;:27;;;;;:37;;-1:-1:-1;;24040:37:0;;;;;;;;;;-1:-1:-1;23556:529:0:o;20282:126::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20370:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:30;;-1:-1:-1;;20370:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20282:126::o;19637:116::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;19716:14:::1;:29:::0;19637:116::o;27111:193::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;27182:49:::1;27215:5;27182:14;27194:1;27182:7;;:11;;:14;;;;:::i;:::-;:18:::0;::::1;:49::i;:::-;27167:12;:64:::0;27242:14:::1;:12;:14::i;:::-;27267:21;:29:::0;;-1:-1:-1;;;;27267:29:0::1;::::0;;27111:193::o;26257:144::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;26331:1:::1;26320:8;:12:::0;26353:4:::1;26346:11:::0;::::1;26343:51;;26371:8;:14:::0;26257:144::o;26601:194::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;26701:1:::1;26685:13;:17:::0;26732:3:::1;26716:19:::0;::::1;26713:73;;26749:13;:28:::0;26601:194::o;20525:121::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;20609:17:::1;:29:::0;;-1:-1:-1;;;;;;20609:29:0::1;-1:-1:-1::0;;;;;20609:29:0;;;::::1;::::0;;;::::1;::::0;;20525:121::o;13671:87::-;13710:13;13743:7;13736:14;;;;;:::i;42960:348::-;43064:15;;-1:-1:-1;;;;;43064:15:0;2610:10;-1:-1:-1;;;;;43048:31:0;;:63;;;-1:-1:-1;6346:11:0;;-1:-1:-1;;;;;6346:11:0;2610:10;43083:28;43048:63;43040:92;;;;-1:-1:-1;;;43040:92:0;;14437:2:1;43040:92:0;;;14419:21:1;14476:2;14456:18;;;14449:30;-1:-1:-1;;;14495:18:1;;;14488:46;14551:18;;43040:92:0;14409:166:1;43040:92:0;43147:6;43143:158;;;-1:-1:-1;;;;;43187:14:0;;;;;;:6;:14;;;;;;:26;;43206:6;43187:18;:26::i;:::-;-1:-1:-1;;;;;43170:14:0;;;;;;:6;:14;;;;;:43;42960:348;;;:::o;43143:158::-;-1:-1:-1;;;;;43263:14:0;;;;;;:6;:14;;;;;;:26;;43282:6;43263:18;:26::i;43143:158::-;42960:348;;;:::o;39339:518::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;39531:7;39578:15:::1;39510:18;::::0;39630:220:::1;39653:10;39649:1;:14;39630:220;;;39721:11;39695;;39707:1;39695:14;;;;;-1:-1:-1::0;;;39695:14:0::1;;;;;;;;;;;;;;;39712:6;39695:23;;;;:::i;:::-;:37;;;;:::i;:::-;39685:47;;39773:65;;;;;;;;39781:7;;39789:1;39781:10;;;;;-1:-1:-1::0;;;39781:10:0::1;;;;;;;;;;;;;;;39773:65;;;;39793:11;39773:65;;;;39806:7;39773:65;;;;39815:7;;39823:1;39815:10;;;;;-1:-1:-1::0;;;39815:10:0::1;;;;;;;;;;;;;;;39773:65;;;;39827:7;;39835:1;39827:10;;;;;-1:-1:-1::0;;;39827:10:0::1;;;;;;;;;;;;;;;39773:65;;::::0;39747:11:::1;:23;39759:7;;39767:1;39759:10;;;;;-1:-1:-1::0;;;39759:10:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39747:23:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;39747:23:0;:91;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;39665:3;::::1;::::0;::::1;:::i;:::-;;;;39630:220;;;;6483:1;;;39339:518:::0;;;;;;;;:::o;27977:221::-;6346:11;;-1:-1:-1;;;;;6346:11:0;2610:10;28069:28;28061:67;;;;-1:-1:-1;;;28061:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28139:29:0;;;2610:10;28139:51;;-1:-1:-1;;;;;;28139:51:0;;;;;;;-1:-1:-1;;;;;7766:32:1;;;28139:51:0;;;7748::1;7815:18;;;7808:34;;;7721:18;;28139:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19105:151::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19205:33:0;;;::::1;;::::0;;;:24:::1;:33;::::0;;;;:43;;-1:-1:-1;;19205:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19105:151::o;20654:103::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;20730:12:::1;:19:::0;;-1:-1:-1;;;;;;20730:19:0::1;-1:-1:-1::0;;;;;20730:19:0;;;::::1;::::0;;;::::1;::::0;;20654:103::o;15380:269::-;15473:4;15490:129;2610:10;15513:7;15522:96;15561:15;15522:96;;;;;;;;;;;;;;;;;2610:10;15522:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15522:34:0;;;;;;;;;;;;:38;:96::i;7243:305::-;7295:14;;-1:-1:-1;;;;;7295:14:0;7313:10;7295:28;7287:76;;;;-1:-1:-1;;;7287:76:0;;18541:2:1;7287:76:0;;;18523:21:1;18580:2;18560:18;;;18553:30;18619:34;18599:18;;;18592:62;-1:-1:-1;;;18670:18:1;;;18663:33;18713:19;;7287:76:0;18513:225:1;7287:76:0;7400:9;;7382:15;:27;7374:72;;;;-1:-1:-1;;;7374:72:0;;16652:2:1;7374:72:0;;;16634:21:1;16691:2;16671:18;;;16664:30;16730:33;16710:18;;;16703:61;16781:18;;7374:72:0;16624:181:1;7374:72:0;7491:14;;;7483:6;;7462:44;;-1:-1:-1;;;;;7491:14:0;;;;7483:6;;;;-1:-1:-1;;;;;;;;;;;7462:44:0;;7526:14;;;7517:23;;-1:-1:-1;;;;;;7517:23:0;-1:-1:-1;;;;;7526:14:0;;;7517:23;;;;;;7243:305::o;14170:254::-;2610:10;14248:4;14291:22;;;:8;:22;;;;;;14273:15;:40;14265:76;;;;-1:-1:-1;;;14265:76:0;;17012:2:1;14265:76:0;;;16994:21:1;17051:2;17031:18;;;17024:30;-1:-1:-1;;;17070:18:1;;;17063:52;17132:18;;14265:76:0;16984:172:1;14265:76:0;14352:42;2610:10;14376:9;14387:6;14352:9;:42::i;22823:725::-;6346:11;;-1:-1:-1;;;;;6346:11:0;2610:10;22894:28;22886:67;;;;-1:-1:-1;;;22886:67:0;;;;;;;:::i;:::-;23070:19;23110:15;;;;;;;;;-1:-1:-1;;;;;23110:15:0;-1:-1:-1;;;;;23110:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23092:66:0;;23167:4;23174:7;23092:90;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23070:112;-1:-1:-1;;;;;;23201:25:0;;23197:191;;23279:15;;;;;;;;;-1:-1:-1;;;;;23279:15:0;-1:-1:-1;;;;;23279:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23261:73:0;;23343:4;23350:7;23261:97;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23247:111;;23197:191;-1:-1:-1;;;;;23402:27:0;23432:5;23402:27;;;:14;:27;;;;;;;;:35;;-1:-1:-1;;23402:35:0;;;;;;23452:13;:27;;-1:-1:-1;;;;;;23452:27:0;;;;;;;23494:24;:39;;;;;:46;;;;;23402:35;23494:46;;;-1:-1:-1;22823:725:0:o;26807:103::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;26887:15:::1;:5:::0;26895:7:::1;26887:15;:::i;:::-;26872:12;:30:::0;-1:-1:-1;26807:103:0:o;39865:327::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;40011:15:::1;39989:19;40011:15:::0;40059:20:::1;:11:::0;40073:6:::1;40059:20;:::i;:::-;:34;;;;:::i;:::-;40130:54;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40108:19:0;;::::1;-1:-1:-1::0;40108:19:0;;;:11:::1;:19:::0;;;;;:76;;;;;;::::1;::::0;::::1;::::0;-1:-1:-1;40108:76:0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;-1:-1:-1;40108:76:0;::::1;::::0;;::::1;::::0;39865:327::o;21480:174::-;6346:11;;-1:-1:-1;;;;;6346:11:0;2610:10;21552:28;21544:67;;;;-1:-1:-1;;;21544:67:0;;;;;;;:::i;:::-;21622:15;:24;;-1:-1:-1;;;;;21622:24:0;;;;;-1:-1:-1;;;;;;21622:24:0;;;;;;;;;21480:174::o;26103:146::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;26179:1:::1;26167:9;:13:::0;26201:3:::1;26194:10:::0;::::1;26191:51;;26218:9;:15:::0;26103:146::o;26918:171::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;26995:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;26995:32:0::1;-1:-1:-1::0;;;;26995:32:0;;::::1;;::::0;;27043:38:::1;::::0;::::1;::::0;::::1;::::0;27019:8;8018:14:1;8011:22;7993:41;;7981:2;7966:18;;7948:92;27043:38:0::1;;;;;;;;26918:171:::0;:::o;25786:149::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;25864:1:::1;25851:10;:14:::0;25886:3:::1;25879:10:::0;::::1;25876:52;;25903:10;:16:::0;25786:149::o;40200:159::-;40260:14;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40260:14:0;-1:-1:-1;;;;;;40309:20:0;40287:19;40309:20;;;:11;:20;;;;;;;;;40287:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40200:159::o;27666:264::-;6346:11;;-1:-1:-1;;;;;6346:11:0;2610:10;27744:28;27736:67;;;;-1:-1:-1;;;27736:67:0;;;;;;;:::i;:::-;27830:48;;27815:9;;2610:10;;27864:9;;27815;27830:48;27815:9;27830:48;27864:9;2610:10;27830:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27814:64;;;27897:4;27889:33;;;;-1:-1:-1;;;27889:33:0;;16307:2:1;27889:33:0;;;16289:21:1;16346:2;16326:18;;;16319:30;-1:-1:-1;;;16365:18:1;;;16358:46;16421:18;;27889:33:0;16279:166:1;20416:97:0;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;20488:11:::1;:17:::0;;-1:-1:-1;;;;;;20488:17:0::1;-1:-1:-1::0;;;;;20488:17:0;;;::::1;::::0;;;::::1;::::0;;20416:97::o;20890:109::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;20968:14:::1;:23:::0;;-1:-1:-1;;;;;;20968:23:0::1;-1:-1:-1::0;;;;;20968:23:0;;;::::1;::::0;;;::::1;::::0;;20890:109::o;25623:155::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;25705:1:::1;25690:12;:16:::0;25727:3:::1;25720:10:::0;::::1;25717:54;;25744:12;:18:::0;25623:155::o;39232:99::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;39301:22:::1;39315:7;39301:13;:22::i;7005:226::-:0;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;7086:6:::1;::::0;;;7069:23;;-1:-1:-1;;;;;;7069:23:0;;::::1;-1:-1:-1::0;;;;;7086:6:0;::::1;7069:23;::::0;;;7103:19:::1;::::0;;7145:22:::1;7163:4:::0;7145:15:::1;:22;:::i;:::-;7133:9;:34:::0;7220:1:::1;7204:6:::0;;7183:40:::1;::::0;-1:-1:-1;;;;;7204:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;7183:40:0;7220:1;;7183:40:::1;7005:226:::0;:::o;43431:118::-;43492:7;43519:21;43532:7;43519:12;:21::i;19761:126::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;19857:22:::1;:12:::0;19872:7:::1;19857:22;:::i;:::-;19840:14;:39:::0;-1:-1:-1;19761:126:0:o;24906:110::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24973:27:0::1;25003:5;24973:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;24973:35:0::1;::::0;;24906:110::o;27318:243::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;27400:15:::1;:5:::0;27408:7:::1;27400:15;:::i;:::-;27385:12;:30:::0;27426:15:::1;32200::::0;;32190:7;:25;32242:21;;32226:13;:37;32284:15;;32274:7;:25;32326:21;;32310:13;:37;32372:19;;32358:11;:33;32417:20;;32402:12;:35;32461:18;;32448:10;:31;32504:19;;32490:11;:33;32546:17;;32534:9;:29;32585:16;;32574:8;:27;32146:463;27426:15:::1;-1:-1:-1::0;27452:21:0::1;:28:::0;;-1:-1:-1;;;;27452:28:0::1;-1:-1:-1::0;;;27452:28:0::1;::::0;;27491:17:::1;:24:::0;;-1:-1:-1;;27491:24:0::1;27476:4;27491:24;::::0;;27541:12:::1;27526;:27:::0;27318:243::o;6656:244::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6745:22:0;::::1;6737:73;;;::::0;-1:-1:-1;;;6737:73:0;;10262:2:1;6737:73:0::1;::::0;::::1;10244:21:1::0;10301:2;10281:18;;;10274:30;10340:34;10320:18;;;10313:62;-1:-1:-1;;;10391:18:1;;;10384:36;10437:19;;6737:73:0::1;10234:228:1::0;6737:73:0::1;6847:6;::::0;;6826:38:::1;::::0;-1:-1:-1;;;;;6826:38:0;;::::1;::::0;6847:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;6826:38:0;::::1;6875:6;:17:::0;;-1:-1:-1;;;;;;6875:17:0::1;-1:-1:-1::0;;;;;6875:17:0;;;::::1;::::0;;;::::1;::::0;;6656:244::o;21007:156::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;21079:15:::1;:25:::0;;-1:-1:-1;;;;;21079:25:0;;::::1;-1:-1:-1::0;;;;;;21079:25:0;;::::1;::::0;::::1;::::0;;:15:::1;21115:33:::0;;;:24:::1;:33;::::0;;;;:40;;-1:-1:-1;;21115:40:0::1;21079:25:::0;21115:40:::1;::::0;;21007:156::o;20154:120::-;6413:6;;-1:-1:-1;;;;;6413:6:0;2610:10;6413:22;6405:67;;;;-1:-1:-1;;;6405:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20239:18:0;;;::::1;;::::0;;;:9:::1;:18;::::0;;;;:27;;-1:-1:-1;;20239:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20154:120::o;1502:250::-;1560:7;1584:6;1580:47;;-1:-1:-1;1614:1:0;1607:8;;1580:47;1639:9;1651:5;1655:1;1651;:5;:::i;:::-;1639:17;-1:-1:-1;1684:1:0;1675:5;1679:1;1639:17;1675:5;:::i;:::-;:10;1667:56;;;;-1:-1:-1;;;1667:56:0;;13264:2:1;1667:56:0;;;13246:21:1;13303:2;13283:18;;;13276:30;13342:34;13322:18;;;13315:62;-1:-1:-1;;;13393:18:1;;;13386:31;13434:19;;1667:56:0;13236:223:1;1760:132:0;1818:7;1845:39;1849:1;1852;1845:39;;;;;;;;;;;;;;;;;:3;:39::i;32752:337::-;-1:-1:-1;;;;;32845:19:0;;32837:68;;;;-1:-1:-1;;;32837:68:0;;15902:2:1;32837:68:0;;;15884:21:1;15941:2;15921:18;;;15914:30;15980:34;15960:18;;;15953:62;-1:-1:-1;;;16031:18:1;;;16024:34;16075:19;;32837:68:0;15874:226:1;32837:68:0;-1:-1:-1;;;;;32924:21:0;;32916:68;;;;-1:-1:-1;;;32916:68:0;;10669:2:1;32916:68:0;;;10651:21:1;10708:2;10688:18;;;10681:30;10747:34;10727:18;;;10720:62;-1:-1:-1;;;10798:18:1;;;10791:32;10840:19;;32916:68:0;10641:224:1;32916:68:0;-1:-1:-1;;;;;32997:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33049:32;;19379:25:1;;;33049:32:0;;19352:18:1;33049:32:0;;;;;;;32752:337;;;:::o;33097:3684::-;-1:-1:-1;;;;;33221:15:0;;;;;;:9;:15;;;;;;;;;:32;;-1:-1:-1;;;;;;33240:13:0;;;;;;:9;:13;;;;;;;;33221:32;33219:35;33211:84;;;;-1:-1:-1;;;33211:84:0;;17363:2:1;33211:84:0;;;17345:21:1;17402:2;17382:18;;;17375:30;17441:34;17421:18;;;17414:62;-1:-1:-1;;;17492:18:1;;;17485:34;17536:19;;33211:84:0;17335:226:1;33211:84:0;33310:13;;;;;;;:34;;;;-1:-1:-1;33327:17:0;;;;33310:34;33306:463;;;33361:15;33411:12;33394:14;;33379:12;;:29;;;;:::i;:::-;:44;33361:62;;33442:10;33438:112;;;-1:-1:-1;;;;;33482:18:0;;;;;;:12;:18;;;;;;;;33481:19;33473:61;;;;-1:-1:-1;;;33473:61:0;;9493:2:1;33473:61:0;;;9475:21:1;9532:2;9512:18;;;9505:30;9571:31;9551:18;;;9544:59;9620:18;;33473:61:0;9465:179:1;33473:61:0;33578:13;;-1:-1:-1;;;;;33570:21:0;;;33578:13;;33570:21;:35;;;;;33595:10;33570:35;33566:192;;;-1:-1:-1;;;;;33626:16:0;;;;;;:12;:16;;;;;:23;;-1:-1:-1;;33626:23:0;33645:4;33626:23;;;33671:7;;;;;33626:23;33671:7;33668:75;;;-1:-1:-1;;;;;33703:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;33703:20:0;33719:4;33703:20;;;33668:75;33306:463;;-1:-1:-1;;;;;33787:18:0;;33779:68;;;;-1:-1:-1;;;33779:68:0;;14782:2:1;33779:68:0;;;14764:21:1;14821:2;14801:18;;;14794:30;14860:34;14840:18;;;14833:62;-1:-1:-1;;;14911:18:1;;;14904:35;14956:19;;33779:68:0;14754:227:1;33779:68:0;-1:-1:-1;;;;;33866:16:0;;33858:64;;;;-1:-1:-1;;;33858:64:0;;9089:2:1;33858:64:0;;;9071:21:1;9128:2;9108:18;;;9101:30;9167:34;9147:18;;;9140:62;-1:-1:-1;;;9218:18:1;;;9211:33;9261:19;;33858:64:0;9061:225:1;33858:64:0;-1:-1:-1;;;;;33941:18:0;;;;;;:14;:18;;;;;;;;:27;33933:63;;;;-1:-1:-1;;;33933:63:0;;11784:2:1;33933:63:0;;;11766:21:1;11823:2;11803:18;;;11796:30;11862:25;11842:18;;;11835:53;11905:18;;33933:63:0;11756:173:1;33933:63:0;34024:1;34015:6;:10;34007:64;;;;-1:-1:-1;;;34007:64:0;;14027:2:1;34007:64:0;;;14009:21:1;14066:2;14046:18;;;14039:30;14105:34;14085:18;;;14078:62;-1:-1:-1;;;14156:18:1;;;14149:39;14205:19;;34007:64:0;13999:231:1;34007:64:0;-1:-1:-1;;;;;34086:28:0;;;;;;:24;:28;;;;;;;;34082:148;;34168:14;;34139:25;34157:6;34139:13;34149:2;34139:9;:13::i;:::-;:17;;:25::i;:::-;:43;;34131:87;;;;-1:-1:-1;;;34131:87:0;;17768:2:1;34131:87:0;;;17750:21:1;17807:2;17787:18;;;17780:30;17846:33;17826:18;;;17819:61;17897:18;;34131:87:0;17740:181:1;34131:87:0;-1:-1:-1;;;;;34244:26:0;;;;;;:20;:26;;;;;;;;:35;;;:72;;-1:-1:-1;;;;;;34283:24:0;;;;;;:20;:24;;;;;;;;:33;34244:72;34240:180;;;34351:12;;34341:6;:22;;34333:75;;;;-1:-1:-1;;;34333:75:0;;12855:2:1;34333:75:0;;;12837:21:1;12894:2;12874:18;;;12867:30;12933:34;12913:18;;;12906:62;-1:-1:-1;;;12984:18:1;;;12977:38;13032:19;;34333:75:0;12827:230:1;34333:75:0;-1:-1:-1;;;;;34480:12:0;;34495:1;34480:12;;;:6;:12;;;;;;:16;34476:135;;-1:-1:-1;;;;;34551:12:0;;;;;;:6;:12;;;;;;34531:33;;:15;34558:4;34531:9;:15::i;:::-;:19;;:33::i;:::-;34521:6;:43;;34513:86;;;;-1:-1:-1;;;34513:86:0;;12136:2:1;34513:86:0;;;12118:21:1;12175:2;12155:18;;;12148:30;12214:32;12194:18;;;12187:60;12264:18;;34513:86:0;12108:180:1;34513:86:0;34672:13;;;;;;;:45;;;;-1:-1:-1;;;;;;34689:17:0;;34716:1;34689:17;;;:11;:17;;;;;:24;;;:28;;34672:45;34668:228;;;34734:19;34748:4;34734:13;:19::i;:::-;-1:-1:-1;;;;;34824:17:0;;;;;;:11;:17;;;;;;;;:24;;;34806:6;:12;;;;;;;34786:63;;34824:24;34786:33;;;34836:4;34786:9;:15::i;:63::-;34776:6;:73;;34768:116;;;;-1:-1:-1;;;34768:116:0;;15188:2:1;34768:116:0;;;15170:21:1;15227:2;15207:18;;;15200:30;15266:32;15246:18;;;15239:60;15316:18;;34768:116:0;15160:180:1;34768:116:0;35192:28;35223:24;35241:4;35223:9;:24::i;:::-;35192:55;;35295:12;;35271:20;:36;35268:112;;-1:-1:-1;35356:12:0;;35268:112;35451:29;;35427:53;;;;;;;35509;;-1:-1:-1;35546:16:0;;-1:-1:-1;;;35546:16:0;;;;35545:17;35509:53;:91;;;;-1:-1:-1;35587:13:0;;-1:-1:-1;;;;;35579:21:0;;;35587:13;;35579:21;;35509:91;:129;;;;-1:-1:-1;35617:21:0;;-1:-1:-1;;;35617:21:0;;;;35509:129;35491:690;;;35665:16;:23;;-1:-1:-1;;;;35665:23:0;;-1:-1:-1;;;35665:23:0;;;;35726:29;;;-1:-1:-1;35861:70:0;;35884:4;;-1:-1:-1;;;;;35891:10:0;35726:29;35665:23;35861:14;:70::i;:::-;35947:22;35972:31;36007:13;:11;:13::i;:::-;36039:10;;36035:95;;-1:-1:-1;;;36035:95:0;;35946:74;;-1:-1:-1;35946:74:0;;-1:-1:-1;;;;;;36039:10:0;;;36035:31;;:95;;36067:20;;35946:74;;;;-1:-1:-1;;;36110:19:0;;;;;36035:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36145:16:0;:24;;-1:-1:-1;;;;36145:24:0;;;-1:-1:-1;;;;35491:690:0;-1:-1:-1;;;;;36389:24:0;;36262:12;36389:24;;;:18;:24;;;;;;36277:4;;36389:24;;;:50;;-1:-1:-1;;;;;;36417:22:0;;;;;;:18;:22;;;;;;;;36389:50;36386:228;;;-1:-1:-1;36465:5:0;36386:228;;;36513:13;;-1:-1:-1;;;;;36507:19:0;;;36513:13;;36507:19;:36;;;;-1:-1:-1;36530:13:0;;;;;;;36507:36;36503:100;;;36564:16;:23;;-1:-1:-1;;36564:23:0;36583:4;36564:23;;;36503:100;36700:38;36715:4;36720:2;36723:6;36730:7;36700:14;:38::i;:::-;-1:-1:-1;;36749:16:0;:24;;-1:-1:-1;;36749:24:0;;;-1:-1:-1;;;;33097:3684:0:o;1302:192::-;1388:7;1424:12;1416:6;;;;1408:29;;;;-1:-1:-1;;;1408:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1448:9:0;1460:5;1464:1;1460;:5;:::i;:::-;1448:17;1302:192;-1:-1:-1;;;;;1302:192:0:o;29572:163::-;29613:7;29634:15;29651;29670:19;:17;:19::i;:::-;29633:56;;-1:-1:-1;29633:56:0;-1:-1:-1;29707:20:0;29633:56;;29707:11;:20::i;:::-;29700:27;;;;29572:163;:::o;969:181::-;1027:7;;1059:5;1063:1;1059;:5;:::i;:::-;1047:17;;1088:1;1083;:6;;1075:46;;;;-1:-1:-1;;;1075:46:0;;11072:2:1;1075:46:0;;;11054:21:1;11111:2;11091:18;;;11084:30;11150:29;11130:18;;;11123:57;11197:18;;1075:46:0;11044:177:1;28365:419:0;28424:7;28433;28442;28451;28460;28469;28490:23;28515:12;28529:18;28551:20;28563:7;28551:11;:20::i;:::-;28489:82;;;;;;28583:15;28600:23;28625:12;28641:50;28653:7;28662:4;28668:10;28680;:8;:10::i;:::-;28641:11;:50::i;:::-;28582:109;;;;-1:-1:-1;28582:109:0;;-1:-1:-1;28742:15:0;;-1:-1:-1;28759:4:0;;-1:-1:-1;28765:10:0;;-1:-1:-1;28365:419:0;;-1:-1:-1;;;;;28365:419:0:o;1158:136::-;1216:7;1243:43;1247:1;1250;1243:43;;;;;;;;;;;;;;;;;:3;:43::i;31192:942::-;31238:7;;:12;:34;;;;-1:-1:-1;31254:13:0;;:18;31238:34;:56;;;;-1:-1:-1;31276:13:0;;:18;31238:56;:72;;;;-1:-1:-1;31298:7:0;;:12;31238:72;:92;;;;-1:-1:-1;31314:11:0;;:16;31238:92;:113;;;;-1:-1:-1;31334:12:0;;:17;31238:113;:132;;;;-1:-1:-1;31355:10:0;;:15;31238:132;:152;;;;-1:-1:-1;31374:11:0;;:16;31238:152;:170;;;;-1:-1:-1;31394:9:0;;:14;31238:170;:187;;;;-1:-1:-1;31412:8:0;;:13;31238:187;31235:199;;;31192:942::o;31235:199::-;31472:7;;;31454:15;:25;31514:13;;;31490:21;:37;31556:7;;;31538:15;:25;31598:13;;;31574:21;:37;31644:11;;;31622:19;:33;31689:12;;;31666:20;:35;31733:10;;;31712:18;:31;31776:11;;;31754:19;:33;31818:9;;;31798:17;:29;31857:8;;;31838:16;:27;-1:-1:-1;31886:11:0;;;;31908:17;;;;31936:11;;;;31958:17;;;;31986:15;;;;32012:16;;;32039:14;;;32064:15;;;32090:13;;;32114:12;31192:942::o;37493:808::-;-1:-1:-1;;;;;37574:20:0;;37552:19;37574:20;;;:11;:20;;;;;;;;37552:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:19;:42;;37630:20;;37552:42;37630:20;:::i;:::-;37629:37;;;;:::i;:::-;37605:61;;37677:23;37716:4;:12;;;37703:4;:10;;;:25;;;;:::i;:::-;37677:51;;37763:4;:8;;;37745:15;:26;37741:111;;;-1:-1:-1;;;;;;;;37788:20:0;37818:1;37788:20;;;:11;:20;;;;;:27;;:31;37493:808::o;37741:111::-;37862:16;37899:4;:9;;;37881:15;:27;;;;:::i;:::-;37862:46;;37936:13;37925:8;:24;37921:63;;;37966:7;;;;37493:808;:::o;37921:63::-;37994:19;38016:24;38027:13;38016:8;:24;:::i;:::-;37994:46;-1:-1:-1;38051:21:0;38075:29;38089:15;37994:46;38075:29;:::i;:::-;38051:53;;38115:21;38152:4;:11;;;38139:4;:10;;;:24;;;;:::i;:::-;38115:48;;38196:13;38180;:29;38176:118;;;38256:10;;:26;;38269:13;;38256:26;:::i;:::-;-1:-1:-1;;;;;38226:20:0;;;;;;:11;:20;;;;;:27;;:56;38176:118;37493:808;;;;;;;;:::o;38309:915::-;-1:-1:-1;;;;;38412:20:0;;38370:7;38412:20;;;:11;:20;;;;;;;;38390:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38443:57;;-1:-1:-1;38487:1:0;;38309:915;-1:-1:-1;;38309:915:0:o;38443:57::-;38510:21;38559:4;:12;;;38546:4;:9;;;38535:4;:8;;;:20;;;;:::i;:::-;38534:37;;;;:::i;:::-;38510:61;;38582:23;38621:4;:12;;;38608:4;:10;;;:25;;;;:::i;:::-;38582:51;;38668:4;:8;;;38650:15;:26;38646:67;;;-1:-1:-1;38700:1:0;;38309:915;-1:-1:-1;;;;38309:915:0:o;38646:67::-;38723:16;38760:4;:9;;;38742:15;:27;;;;:::i;:::-;38723:46;;38797:13;38786:8;:24;38782:75;;;-1:-1:-1;;;38834:11:0;;;;38309:915;-1:-1:-1;;38309:915:0:o;38782:75::-;38867:19;38889:24;38900:13;38889:8;:24;:::i;:::-;38867:46;-1:-1:-1;38924:21:0;38948:29;38962:15;38867:46;38948:29;:::i;:::-;38924:53;;38988:21;39025:4;:11;;;39012:4;:10;;;:24;;;;:::i;:::-;38988:48;;39069:13;39053;:29;39049:139;;;39119:10;;39099:17;;39119:26;;39132:13;;39119:26;:::i;:::-;39099:46;38309:915;-1:-1:-1;;;;;;;;;;38309:915:0:o;39049:139::-;-1:-1:-1;;;39205:11:0;;;;;;38309:915;-1:-1:-1;;;;;38309:915:0:o;1900:278::-;1986:7;2021:12;2014:5;2006:28;;;;-1:-1:-1;;;2006:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2045:9:0;2057:5;2061:1;2057;:5;:::i;40440:834::-;40551:7;40547:40;;40573:14;:12;:14::i;:::-;-1:-1:-1;;;;;40612:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;40636:22:0;;;;;;:11;:22;;;;;;;;40635:23;40612:46;40608:597;;;40675:48;40697:6;40705:9;40716:6;40675:21;:48::i;:::-;40608:597;;;-1:-1:-1;;;;;40746:19:0;;;;;;:11;:19;;;;;;;;40745:20;:46;;;;-1:-1:-1;;;;;;40769:22:0;;;;;;:11;:22;;;;;;;;40745:46;40741:464;;;40808:46;40828:6;40836:9;40847:6;40808:19;:46::i;40741:464::-;-1:-1:-1;;;;;40877:19:0;;;;;;:11;:19;;;;;;;;40876:20;:47;;;;-1:-1:-1;;;;;;40901:22:0;;;;;;:11;:22;;;;;;;;40900:23;40876:47;40872:333;;;40940:44;40958:6;40966:9;40977:6;40940:17;:44::i;40872:333::-;-1:-1:-1;;;;;41006:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;41029:22:0;;;;;;:11;:22;;;;;;;;41006:45;41002:203;;;41068:48;41090:6;41098:9;41109:6;41068:21;:48::i;41002:203::-;41149:44;41167:6;41175:9;41186:6;41149:17;:44::i;:::-;41229:7;41225:41;;41251:15;32200;;32190:7;:25;32242:21;;32226:13;:37;32284:15;;32274:7;:25;32326:21;;32310:13;:37;32372:19;;32358:11;:33;32417:20;;32402:12;:35;32461:18;;32448:10;:31;32504:19;;32490:11;:33;32546:17;;32534:9;:29;32585:16;;32574:8;:27;32146:463;41251:15;40440:834;;;;:::o;36789:696::-;36834:23;;:::i;:::-;36859:31;;:::i;:::-;36912:13;;36902:23;;36946:7;;36902;36936;;;:17;;;;36974:11;;36964:7;;;;:21;;;;37006:12;;36996:7;;;;:22;;;;37039:10;;37029:7;;;;:20;;;;37070:13;;37060:7;;;;:23;;;;37104:11;;37094:7;;;;:21;;;;37136:9;;37126:7;;;:19;37166:8;;37156:7;;;:18;37205:17;;-1:-1:-1;;;;;37205:17:0;;;37187:35;;37251:11;;;;37233:15;;;:29;;;;37291:15;;;;37273;;;:33;;;;37335:16;;;;37317:15;;;:34;;;;37380:14;;;;37362:15;;;:32;37423:13;;;;37405:15;;;:31;37465:12;;;;;37447:15;;;:30;36902:4;;36789:696::o;29743:561::-;29840:7;;29876;;29793;;;;;29900:289;29924:9;:16;29920:20;;29900:289;;;29990:7;29966;:21;29974:9;29984:1;29974:12;;;;;;-1:-1:-1;;;29974:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29974:12:0;29966:21;;;;;;;;;;;;;:31;;:66;;;30025:7;30001;:21;30009:9;30019:1;30009:12;;;;;;-1:-1:-1;;;30009:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30009:12:0;30001:21;;;;;;;;;;;;;:31;29966:66;29962:97;;;30042:7;;30051;;30034:25;;;;;;;29743:561;;:::o;29962:97::-;30084:34;30096:7;:21;30104:9;30114:1;30104:12;;;;;;-1:-1:-1;;;30104:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30104:12:0;30096:21;;;;;;;;;;;;;30084:7;;:11;:34::i;:::-;30074:44;;30143:34;30155:7;:21;30163:9;30173:1;30163:12;;;;;;-1:-1:-1;;;30163:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30163:12:0;30155:21;;;;;;;;;;;;;30143:7;;:11;:34::i;:::-;30133:44;-1:-1:-1;29942:3:0;;;;:::i;:::-;;;;29900:289;;;-1:-1:-1;30225:7:0;;30213;;:20;;:11;:20::i;:::-;30203:7;:30;30199:61;;;30243:7;;30252;;30235:25;;;;;;29743:561;;:::o;30199:61::-;30279:7;;30288;;-1:-1:-1;29743:561:0;-1:-1:-1;29743:561:0:o;28792:335::-;28852:7;28861;28870;28890:12;28905:24;28921:7;28905:15;:24::i;:::-;28890:39;;28940:18;28961:35;28988:7;28961:26;:35::i;:::-;28940:56;-1:-1:-1;29007:23:0;29033:33;28940:56;29033:17;:7;29045:4;29033:11;:17::i;:33::-;29007:59;29102:4;;-1:-1:-1;29108:10:0;;-1:-1:-1;28792:335:0;;-1:-1:-1;;;28792:335:0:o;29135:429::-;29250:7;;;;29306:24;:7;29318:11;29306;:24::i;:::-;29288:42;-1:-1:-1;29341:12:0;29356:21;:4;29365:11;29356:8;:21::i;:::-;29341:36;-1:-1:-1;29388:18:0;29409:27;:10;29424:11;29409:14;:27::i;:::-;29388:48;-1:-1:-1;29447:23:0;29473:33;29388:48;29473:17;:7;29485:4;29473:11;:17::i;:33::-;29525:7;;;;-1:-1:-1;29551:4:0;;-1:-1:-1;29135:429:0;;-1:-1:-1;;;;;;;29135:429:0:o;42386:566::-;42489:15;42506:23;42531:12;42545:23;42570:12;42584:18;42606:19;42617:7;42606:10;:19::i;:::-;-1:-1:-1;;;;;42654:15:0;;;;;;:7;:15;;;;;;42488:137;;-1:-1:-1;42488:137:0;;-1:-1:-1;42488:137:0;;-1:-1:-1;42488:137:0;-1:-1:-1;42488:137:0;-1:-1:-1;42488:137:0;-1:-1:-1;42654:28:0;;42674:7;42654:19;:28::i;:::-;-1:-1:-1;;;;;42636:15:0;;;;;;:7;:15;;;;;;;;:46;;;;42711:7;:15;;;;:28;;42731:7;42711:19;:28::i;:::-;-1:-1:-1;;;;;42693:15:0;;;;;;;:7;:15;;;;;;:46;;;;42771:18;;;;;;;:39;;42794:15;42771:22;:39::i;:::-;-1:-1:-1;;;;;42750:18:0;;;;;;:7;:18;;;;;:60;42824:26;42839:10;42824:14;:26::i;:::-;42861:23;42873:4;42879;42861:11;:23::i;:::-;42917:9;-1:-1:-1;;;;;42900:44:0;42909:6;-1:-1:-1;;;;;42900:44:0;;42928:15;42900:44;;;;19379:25:1;;19367:2;19352:18;;19334:76;42900:44:0;;;;;;;;42386:566;;;;;;;;;:::o;41792:586::-;41893:15;41910:23;41935:12;41949:23;41974:12;41988:18;42010:19;42021:7;42010:10;:19::i;:::-;-1:-1:-1;;;;;42058:15:0;;;;;;:7;:15;;;;;;41892:137;;-1:-1:-1;41892:137:0;;-1:-1:-1;41892:137:0;;-1:-1:-1;41892:137:0;-1:-1:-1;41892:137:0;-1:-1:-1;41892:137:0;-1:-1:-1;42058:28:0;;41892:137;42058:19;:28::i;:::-;-1:-1:-1;;;;;42040:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;42118:18;;;;;:7;:18;;;;;:39;;42141:15;42118:22;:39::i;:::-;-1:-1:-1;;;;;42097:18:0;;;;;;:7;:18;;;;;;;;:60;;;;42189:7;:18;;;;:39;;42212:15;42189:22;:39::i;41282:502::-;41381:15;41398:23;41423:12;41437:23;41462:12;41476:18;41498:19;41509:7;41498:10;:19::i;:::-;-1:-1:-1;;;;;41546:15:0;;;;;;:7;:15;;;;;;41380:137;;-1:-1:-1;41380:137:0;;-1:-1:-1;41380:137:0;;-1:-1:-1;41380:137:0;-1:-1:-1;41380:137:0;-1:-1:-1;41380:137:0;-1:-1:-1;41546:28:0;;41380:137;41546:19;:28::i;18042:642::-;18145:15;18162:23;18187:12;18201:23;18226:12;18240:18;18262:19;18273:7;18262:10;:19::i;:::-;-1:-1:-1;;;;;18310:15:0;;;;;;:7;:15;;;;;;18144:137;;-1:-1:-1;18144:137:0;;-1:-1:-1;18144:137:0;;-1:-1:-1;18144:137:0;-1:-1:-1;18144:137:0;-1:-1:-1;18144:137:0;-1:-1:-1;18310:28:0;;18330:7;18310:19;:28::i;:::-;-1:-1:-1;;;;;18292:15:0;;;;;;:7;:15;;;;;;;;:46;;;;18367:7;:15;;;;:28;;18387:7;18367:19;:28::i;30683:154::-;30747:7;30774:55;30813:5;30774:20;30786:7;;30774;:11;;:20;;;;:::i;30845:335::-;30958:16;;30920:7;;;;30958:16;;:31;;30988:1;30958:31;;;30977:8;;30958:31;30940:49;;31007:165;31156:5;31007:130;31129:7;31117:9;;31103:11;;31090:10;;31075:12;;31061:11;;31045:13;;31035:7;;31019:13;;:23;;;;:::i;:::-;:39;;;;:::i;:::-;:53;;;;:::i;:::-;:68;;;;:::i;:::-;:81;;;;:::i;:::-;:95;;;;:::i;:::-;:107;;;;:::i;:::-;:117;;;;:::i;:::-;31007:7;;:11;:130::i;30316:355::-;30379:19;30402:10;:8;:10::i;:::-;30379:33;-1:-1:-1;30423:18:0;30444:27;:10;30379:33;30444:14;:27::i;:::-;30523:4;30507:22;;;;:7;:22;;;;;;30423:48;;-1:-1:-1;30507:38:0;;30423:48;30507:26;:38::i;:::-;30498:4;30482:22;;;;:7;:22;;;;;;;;:63;;;;30559:11;:26;;;;;;30556:107;;;30641:4;30625:22;;;;:7;:22;;;;;;:38;;30652:10;30625:26;:38::i;:::-;30616:4;30600:22;;;;:7;:22;;;;;:63;30316:355;;;:::o;28210:147::-;28288:7;;:17;;28300:4;28288:11;:17::i;:::-;28278:7;:27;28329:10;;:20;;28344:4;28329:14;:20::i;:::-;28316:10;:33;-1:-1:-1;;28210:147:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:395:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:2;;166:8;156;149:26;108:2;-1:-1:-1;196:20:1;;239:18;228:30;;225:2;;;278:8;268;261:26;225:2;322:4;314:6;310:17;298:29;;382:3;375:4;365:6;362:1;358:14;350:6;346:27;342:38;339:47;336:2;;;399:1;396;389:12;336:2;98:311;;;;;:::o;414:257::-;473:6;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;591:9;578:23;610:31;635:5;610:31;:::i;676:261::-;746:6;799:2;787:9;778:7;774:23;770:32;767:2;;;820:6;812;805:22;767:2;857:9;851:16;876:31;901:5;876:31;:::i;1212:398::-;1280:6;1288;1341:2;1329:9;1320:7;1316:23;1312:32;1309:2;;;1362:6;1354;1347:22;1309:2;1406:9;1393:23;1425:31;1450:5;1425:31;:::i;:::-;1475:5;-1:-1:-1;1532:2:1;1517:18;;1504:32;1545:33;1504:32;1545:33;:::i;:::-;1597:7;1587:17;;;1299:311;;;;;:::o;1615:466::-;1692:6;1700;1708;1761:2;1749:9;1740:7;1736:23;1732:32;1729:2;;;1782:6;1774;1767:22;1729:2;1826:9;1813:23;1845:31;1870:5;1845:31;:::i;:::-;1895:5;-1:-1:-1;1952:2:1;1937:18;;1924:32;1965:33;1924:32;1965:33;:::i;:::-;1719:362;;2017:7;;-1:-1:-1;;;2071:2:1;2056:18;;;;2043:32;;1719:362::o;2086:392::-;2151:6;2159;2212:2;2200:9;2191:7;2187:23;2183:32;2180:2;;;2233:6;2225;2218:22;2180:2;2277:9;2264:23;2296:31;2321:5;2296:31;:::i;:::-;2346:5;-1:-1:-1;2403:2:1;2388:18;;2375:32;2416:30;2375:32;2416:30;:::i;2483:325::-;2551:6;2559;2612:2;2600:9;2591:7;2587:23;2583:32;2580:2;;;2633:6;2625;2618:22;2580:2;2677:9;2664:23;2696:31;2721:5;2696:31;:::i;:::-;2746:5;2798:2;2783:18;;;;2770:32;;-1:-1:-1;;;2570:238:1:o;2813:460::-;2887:6;2895;2903;2956:2;2944:9;2935:7;2931:23;2927:32;2924:2;;;2977:6;2969;2962:22;2924:2;3021:9;3008:23;3040:31;3065:5;3040:31;:::i;:::-;3090:5;-1:-1:-1;3142:2:1;3127:18;;3114:32;;-1:-1:-1;3198:2:1;3183:18;;3170:32;3211:30;3170:32;3211:30;:::i;:::-;3260:7;3250:17;;;2914:359;;;;;:::o;3278:462::-;3364:6;3372;3380;3388;3441:3;3429:9;3420:7;3416:23;3412:33;3409:2;;;3463:6;3455;3448:22;3409:2;3507:9;3494:23;3526:31;3551:5;3526:31;:::i;:::-;3576:5;3628:2;3613:18;;3600:32;;-1:-1:-1;3679:2:1;3664:18;;3651:32;;3730:2;3715:18;3702:32;;-1:-1:-1;3399:341:1;-1:-1:-1;;;3399:341:1:o;3745:1454::-;3939:6;3947;3955;3963;3971;3979;3987;3995;4048:3;4036:9;4027:7;4023:23;4019:33;4016:2;;;4070:6;4062;4055:22;4016:2;4115:9;4102:23;4144:18;4185:2;4177:6;4174:14;4171:2;;;4206:6;4198;4191:22;4171:2;4250:70;4312:7;4303:6;4292:9;4288:22;4250:70;:::i;:::-;4339:8;;-1:-1:-1;4224:96:1;-1:-1:-1;4427:2:1;4412:18;;4399:32;;-1:-1:-1;4443:16:1;;;4440:2;;;4477:6;4469;4462:22;4440:2;4521:72;4585:7;4574:8;4563:9;4559:24;4521:72;:::i;:::-;4612:8;;-1:-1:-1;4495:98:1;-1:-1:-1;4700:2:1;4685:18;;4672:32;;-1:-1:-1;4716:16:1;;;4713:2;;;4750:6;4742;4735:22;4713:2;4794:72;4858:7;4847:8;4836:9;4832:24;4794:72;:::i;:::-;4885:8;;-1:-1:-1;4768:98:1;-1:-1:-1;4973:2:1;4958:18;;4945:32;;-1:-1:-1;4989:16:1;;;4986:2;;;5023:6;5015;5008:22;4986:2;;5067:72;5131:7;5120:8;5109:9;5105:24;5067:72;:::i;:::-;4006:1193;;;;-1:-1:-1;4006:1193:1;;-1:-1:-1;4006:1193:1;;;;;;5158:8;-1:-1:-1;;;4006:1193:1:o;5204:251::-;5260:6;5313:2;5301:9;5292:7;5288:23;5284:32;5281:2;;;5334:6;5326;5319:22;5281:2;5378:9;5365:23;5397:28;5419:5;5397:28;:::i;5460:255::-;5527:6;5580:2;5568:9;5559:7;5555:23;5551:32;5548:2;;;5601:6;5593;5586:22;5548:2;5638:9;5632:16;5657:28;5679:5;5657:28;:::i;6008:190::-;6067:6;6120:2;6108:9;6099:7;6095:23;6091:32;6088:2;;;6141:6;6133;6126:22;6088:2;-1:-1:-1;6169:23:1;;6078:120;-1:-1:-1;6078:120:1:o;6203:319::-;6268:6;6276;6329:2;6317:9;6308:7;6304:23;6300:32;6297:2;;;6350:6;6342;6335:22;6297:2;6391:9;6378:23;6368:33;;6451:2;6440:9;6436:18;6423:32;6464:28;6486:5;6464:28;:::i;7265:304::-;-1:-1:-1;;;;;7495:15:1;;;7477:34;;7547:15;;7542:2;7527:18;;7520:43;7427:2;7412:18;;7394:175::o;8279:603::-;8391:4;8420:2;8449;8438:9;8431:21;8481:6;8475:13;8524:6;8519:2;8508:9;8504:18;8497:34;8549:4;8562:140;8576:6;8573:1;8570:13;8562:140;;;8671:14;;;8667:23;;8661:30;8637:17;;;8656:2;8633:26;8626:66;8591:10;;8562:140;;;8720:6;8717:1;8714:13;8711:2;;;8790:4;8785:2;8776:6;8765:9;8761:22;8757:31;8750:45;8711:2;-1:-1:-1;8866:2:1;8845:15;-1:-1:-1;;8841:29:1;8826:45;;;;8873:2;8822:54;;8400:482;-1:-1:-1;;;8400:482:1:o;13464:356::-;13666:2;13648:21;;;13685:18;;;13678:30;13744:34;13739:2;13724:18;;13717:62;13811:2;13796:18;;13638:182::o;15345:350::-;15547:2;15529:21;;;15586:2;15566:18;;;15559:30;15625:28;15620:2;15605:18;;15598:56;15686:2;15671:18;;15519:176::o;19415:1039::-;19732:25;;;19719:3;19704:19;;19776:2;19798:18;;;19858:6;19677:4;19892:167;19906:4;19903:1;19900:11;19892:167;;;19965:13;;19953:26;;19999:12;;;;20034:15;;;;19926:1;19919:9;19892:167;;;19896:3;;;20096;20085:9;20081:19;20148:6;20174:1;20184:211;20200:4;20195:3;20192:13;20184:211;;;20269:15;;-1:-1:-1;;;;;20265:41:1;20251:56;;20329:14;;;;20368:17;;;;20303:1;20215:11;20184:211;;;-1:-1:-1;;;;6597:13:1;;6590:21;20443:3;20428:19;;6578:34;19686:768;;;;;;;:::o;20648:128::-;20688:3;20719:1;20715:6;20712:1;20709:13;20706:2;;;20725:18;;:::i;:::-;-1:-1:-1;20761:9:1;;20696:80::o;20781:217::-;20821:1;20847;20837:2;;-1:-1:-1;;;20872:31:1;;20926:4;20923:1;20916:15;20954:4;20879:1;20944:15;20837:2;-1:-1:-1;20983:9:1;;20827:171::o;21003:168::-;21043:7;21109:1;21105;21101:6;21097:14;21094:1;21091:21;21086:1;21079:9;21072:17;21068:45;21065:2;;;21116:18;;:::i;:::-;-1:-1:-1;21156:9:1;;21055:116::o;21176:125::-;21216:4;21244:1;21241;21238:8;21235:2;;;21249:18;;:::i;:::-;-1:-1:-1;21286:9:1;;21225:76::o;21306:380::-;21385:1;21381:12;;;;21428;;;21449:2;;21503:4;21495:6;21491:17;21481:27;;21449:2;21556;21548:6;21545:14;21525:18;21522:38;21519:2;;;21602:10;21597:3;21593:20;21590:1;21583:31;21637:4;21634:1;21627:15;21665:4;21662:1;21655:15;21519:2;;21361:325;;;:::o;21691:135::-;21730:3;-1:-1:-1;;21751:17:1;;21748:2;;;21771:18;;:::i;:::-;-1:-1:-1;21818:1:1;21807:13;;21738:88::o;21831:127::-;21892:10;21887:3;21883:20;21880:1;21873:31;21923:4;21920:1;21913:15;21947:4;21944:1;21937:15;21963:131;-1:-1:-1;;;;;22038:31:1;;22028:42;;22018:2;;22084:1;22081;22074:12;22099:118;22185:5;22178:13;22171:21;22164:5;22161:32;22151:2;;22207:1;22204;22197:12

Swarm Source

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