ETH Price: $3,105.87 (+0.07%)

Token

Banana Task Force Ape (BTFA)
 

Overview

Max Total Supply

1,000,000,000,000 BTFA

Holders

2,217 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
37,645.861463589 BTFA

Value
$0.00
0xdd8793bbfc79c829a6cc17b534332956e53715e7
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Banana Task Force Ape is the native token to their highly anticipated NFT Collection. The benefits of being a BTFA token member includes being whitelisted to future NFT mint collections, airdrop ofgovernance token Banana Index, and guaranteed spots in future IDOs.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BananaTaskForceApe

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license, Audited

Contract Source Code (Solidity)Audit Report

/**
 *Submitted for verification at Etherscan.io on 2022-01-29
*/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private presaleAddresses;
    bool private allowedPresaleExclusion = true;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 constant private startingSupply = 1_000_000_000_000;

    string constant private _name = "Banana Task Force Ape";
    string constant private _symbol = "BTFA";
    uint8 constant private _decimals = 9;

    uint256 constant private _tTotal = startingSupply * 10**_decimals;

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

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

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

    Ratios public _ratios = Ratios({
        liquidity: 2,
        marketing: 5,
        total: 7
        });

    uint256 constant public maxBuyTaxes = 2000;
    uint256 constant public maxSellTaxes = 2000;
    uint256 constant public maxTransferTaxes = 2000;
    uint256 constant masterTaxDivisor = 10000;

    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x1764041440eD4081Ae361EC9c2245Eb33F023F60)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 10 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold = (_tTotal * 5) / 10000;
    uint256 public swapAmount = (_tTotal * 20) / 10000;
    
    uint256 private _maxTxAmount = (_tTotal * 100) / 100;
    uint256 private _maxWalletSize = (_tTotal * 100) / 100;

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

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        _tOwned[msg.sender] = _tTotal;

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

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
            contractSwapTimer = 3 seconds;
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3);
            contractSwapTimer = 3 seconds;
        } else if (block.chainid == 1 || block.chainid == 4) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            contractSwapTimer = 10 seconds;
        } else {
            revert();
        }

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

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

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

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

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

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

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

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

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

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

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

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

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

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

        return _transfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

    function setProtectionSettings(bool _antiSnipe, bool _antiGas, bool _antiBlock, bool _algo) external onlyOwner {
        antiSnipe.setProtections(_antiSnipe, _antiGas, _antiBlock, _algo);
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75, "Too low.");
        antiSnipe.setGasPriceLimit(gas);
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setRatios(uint16 liquidity, uint16 marketing) external onlyOwner {
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.total = liquidity + marketing;
    }

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

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

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

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

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

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

    function getMaxTX() public view returns (uint256) {
        return _maxTxAmount / (10**_decimals);
    }

    function getMaxWallet() public view returns (uint256) {
        return _maxWalletSize / (10**_decimals);
    }

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

    function setWallets(address payable marketing) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
    }

    function setContractSwapEnabled(bool enabled) external onlyOwner {
        contractSwapEnabled = enabled;
        emit ContractSwapEnabledUpdated(enabled);
    }

    function excludePresaleAddresses(address router, address presale) external onlyOwner {
        require(allowedPresaleExclusion);
        if (router == presale) {
            _liquidityHolders[presale] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(presale, true);
        } else {
            _liquidityHolders[router] = true;
            _liquidityHolders[presale] = true;
            presaleAddresses[router] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(router, true);
            setExcludedFromFees(presale, true);
        }
    }

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

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

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

        if (lpPairs[to]) {
            if (!inSwap
                && contractSwapEnabled
                && !presaleAddresses[to]
                && !presaleAddresses[from]
            ) {
                if (lastSwap + contractSwapTimer < block.timestamp) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                        contractSwap(contractTokenBalance);
                        lastSwap = block.timestamp;
                    }
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

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

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

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

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

        uint256 amtBalance = address(this).balance;
        uint256 liquidityBalance = (amtBalance * toLiquify) / swapAmt;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0,
                0,
                DEAD,
                block.timestamp
            );
            emit AutoLiquify(liquidityBalance, toLiquify);
        }

        amtBalance -= liquidityBalance;
        ratios.total -= ratios.liquidity;
        uint256 marketingBalance = amtBalance;
        if (ratios.marketing > 0) {
            _taxWallets.marketing.transfer(marketingBalance);
        }
    }

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

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

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

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            _transfer(msg.sender, accounts[i], amounts[i]*10**_decimals);
        }
    }

    function multiSendPercents(address[] memory accounts, uint256[] memory percents, uint256[] memory divisors) external {
        require(accounts.length == percents.length && percents.length == divisors.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= (_tTotal * percents[i]) / divisors[i]);
            _transfer(msg.sender, accounts[i], (_tTotal * percents[i]) / divisors[i]);
        }
    }

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

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

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

        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, to, amount) : amount;
        _tOwned[to] += amountReceived;

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (lpPairs[from]) {
            currentFee = _taxRates.buyFee;
        } else if (lpPairs[to]) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;

        _tOwned[address(this)] += feeAmount;
        emit Transfer(from, address(this), feeAmount);

        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"name":"excludePresaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSniperAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"percents","type":"uint256[]"},{"internalType":"uint256[]","name":"divisors","type":"uint256[]"}],"name":"multiSendPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600060038190556008805460ff191660011790556103e860805261057860a05260c052600a805465ffffffffffff1990811663057803e8178255600260e052600561010052600761012052600b80546407000500029216919091179055610160604052731764041440ed4081ae361ec9c2245eb33f023f60610140819052600e80546001600160a01b0319169091179055600f805461ff0019169055601081905561271090620000b290600990620007cb565b620000c39064e8d4a51000620007e3565b620000d0906005620007e3565b620000dc919062000805565b601255612710620000f06009600a620007cb565b620001019064e8d4a51000620007e3565b6200010e906014620007e3565b6200011a919062000805565b60135560646200012d6009600a620007cb565b6200013e9064e8d4a51000620007e3565b6200014b906064620007e3565b62000157919062000805565b60145560646200016a6009600a620007cb565b6200017b9064e8d4a51000620007e3565b62000188906064620007e3565b62000194919062000805565b6015556016805461ffff19169055620001b06009600a620007cb565b620001c19064e8d4a51000620007e3565b3360008181526001602052604081209290925581546001600160a01b03191617905560384614156200021e57600c80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790556003601055620002a5565b46606114156200025957600c80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c31790556003601055620002a5565b4660011480620002695750466004145b15620002a057600c80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055600a601055620002a5565b600080fd5b600c60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031f919062000828565b6001600160a01b031663c9c65396600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000381573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a7919062000828565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620003f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041a919062000828565b600d80546001600160a01b0319166001600160a01b039283169081179091556000908152600260205260409020805460ff19166001179055600c546200046691339116600019620005b5565b600c54620004829030906001600160a01b0316600019620005b5565b6001600560006200049b6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526005909252812080548316600190811790915561dead82527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba80549093168117909255600990620005236000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620005533390565b6001600160a01b031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200058d6009600a620007cb565b6200059e9064e8d4a51000620007e3565b60405190815260200160405180910390a362000853565b6001600160a01b038316620006075760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620006555760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401620005fe565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200070d578160001904821115620006f157620006f1620006b6565b80851615620006ff57918102915b93841c9390800290620006d1565b509250929050565b6000826200072657506001620007c5565b816200073557506000620007c5565b81600181146200074e5760028114620007595762000779565b6001915050620007c5565b60ff8411156200076d576200076d620006b6565b50506001821b620007c5565b5060208310610133831016604e8410600b84101617156200079e575081810a620007c5565b620007aa8383620006cc565b8060001904821115620007c157620007c1620006b6565b0290505b92915050565b6000620007dc60ff84168362000715565b9392505050565b6000816000190483118215151615620008005762000800620006b6565b500290565b6000826200082357634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200083b57600080fd5b81516001600160a01b0381168114620007dc57600080fd5b6141a480620008636000396000f3fe6080604052600436106103855760003560e01c8063590ffdce116101d1578063b1b08f7111610102578063e4fcfd18116100a0578063ee5d9c2d1161006f578063ee5d9c2d14610aac578063f94aa1b414610ac1578063fdb78c0e14610ae1578063fe575a8714610b0057600080fd5b8063e4fcfd1814610a36578063e8a0e3f914610a4c578063eafb5a3c14610a6c578063eb50e70e14610a8c57600080fd5b8063c6a276c2116100dc578063c6a276c21461097f578063cab5ebea1461099f578063cf847706146109bf578063dd62ed3e146109f057600080fd5b8063b1b08f71146105c9578063b3d514fb146105c9578063bcd96a251461095f57600080fd5b8063893d20e81161016f5780638da5cb5b116101495780638da5cb5b1461089157806395d89b41146108d9578063a457c2d71461091f578063a9059cbb1461093f57600080fd5b8063893d20e8146108915780638a63bd9b146108af5780638a8c523c146108c457600080fd5b80636ebd0078116101ab5780636ebd00781461081157806370a0823114610826578063715018a61461085c57806380c581d11461087157600080fd5b8063590ffdce146107985780635c24b074146107b85780635cce86cd146107d857600080fd5b80632b28fc7a116102b657806339509351116102545780634fb2e45d116102235780634fb2e45d1461070b5780634fbee1931461072b57806350a8e0161461076457806355dbc3691461078357600080fd5b806339509351146106915780633f3cf56c146106b1578063452ed4f1146106d15780634ada218b146106f157600080fd5b806332cde6641161029057806332cde6641461061157806333251a0b1461063157806334cd82601461065157806336fddb041461067157600080fd5b80632b28fc7a146105c95780632e8fa821146105df578063313ce567146105f557600080fd5b80630fa604e41161032357806323b872dd116102fd57806323b872dd1461054957806326003957146105695780632610eaca1461058957806329dd8798146105a957600080fd5b80630fa604e4146104ff57806313b4a7f41461051457806318160ddd1461053457600080fd5b806306fdde031161035f57806306fdde031461043e5780630758d9241461048d57806309231602146104ad578063095ea7b3146104cf57600080fd5b806303fd2a45146103915780630445b667146103c4578063069d955f146103e857600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a761dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103d057600080fd5b506103da60125481565b6040519081526020016103bb565b3480156103f457600080fd5b50600a546104199061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103bb565b34801561044a57600080fd5b5060408051808201909152601581527f42616e616e61205461736b20466f72636520417065000000000000000000000060208201525b6040516103bb9190613915565b34801561049957600080fd5b50600c546103a7906001600160a01b031681565b3480156104b957600080fd5b506104cd6104c836600461396a565b610b20565b005b3480156104db57600080fd5b506104ef6104ea366004613998565b610c44565b60405190151581526020016103bb565b34801561050b57600080fd5b506103da610c5b565b34801561052057600080fd5b506104cd61052f3660046139c4565b610c7b565b34801561054057600080fd5b506103da610db0565b34801561055557600080fd5b506104ef6105643660046139fd565b610df1565b34801561057557600080fd5b506104cd610584366004613a3e565b610e69565b34801561059557600080fd5b506104cd6105a4366004613bb3565b610fbc565b3480156105b557600080fd5b506104cd6105c4366004613c25565b6110d6565b3480156105d557600080fd5b506103da6107d081565b3480156105eb57600080fd5b506103da60135481565b34801561060157600080fd5b50604051600981526020016103bb565b34801561061d57600080fd5b506104cd61062c366004613c98565b6111bf565b34801561063d57600080fd5b506104cd61064c366004613cdb565b6112fa565b34801561065d57600080fd5b506104cd61066c366004613cf8565b61139a565b34801561067d57600080fd5b506104cd61068c366004613d33565b611459565b34801561069d57600080fd5b506104ef6106ac366004613998565b6114d2565b3480156106bd57600080fd5b506104cd6106cc366004613a3e565b61150e565b3480156106dd57600080fd5b50600d546103a7906001600160a01b031681565b3480156106fd57600080fd5b506016546104ef9060ff1681565b34801561071757600080fd5b506104cd610726366004613cdb565b611661565b34801561073757600080fd5b506104ef610746366004613cdb565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561077057600080fd5b506016546104ef90610100900460ff1681565b34801561078f57600080fd5b506103da61187a565b3480156107a457600080fd5b506104cd6107b3366004613d33565b6118f3565b3480156107c457600080fd5b506104cd6107d3366004613cdb565b61196c565b3480156107e457600080fd5b506104ef6107f3366004613cdb565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561081d57600080fd5b506103da611aab565b34801561083257600080fd5b506103da610841366004613cdb565b6001600160a01b031660009081526001602052604090205490565b34801561086857600080fd5b506104cd611ac6565b34801561087d57600080fd5b506104cd61088c366004613d33565b611b81565b34801561089d57600080fd5b506000546001600160a01b03166103a7565b3480156108bb57600080fd5b506104ef611d6d565b3480156108d057600080fd5b506104cd611ddc565b3480156108e557600080fd5b5060408051808201909152600481527f42544641000000000000000000000000000000000000000000000000000000006020820152610480565b34801561092b57600080fd5b506104ef61093a366004613998565b611fd2565b34801561094b57600080fd5b506104ef61095a366004613998565b612009565b34801561096b57600080fd5b506104cd61097a366004613d61565b612020565b34801561098b57600080fd5b506104cd61099a366004613cdb565b6120f2565b3480156109ab57600080fd5b506104cd6109ba366004613d94565b612192565b3480156109cb57600080fd5b50600b546104199061ffff808216916201000081048216916401000000009091041683565b3480156109fc57600080fd5b506103da610a0b3660046139c4565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610a4257600080fd5b506103da60105481565b348015610a5857600080fd5b506104cd610a67366004613db1565b612234565b348015610a7857600080fd5b506104cd610a87366004613cdb565b6123cc565b348015610a9857600080fd5b506104cd610aa7366004613cdb565b61279c565b348015610ab857600080fd5b506104cd612824565b348015610acd57600080fd5b50600e546103a7906001600160a01b031681565b348015610aed57600080fd5b50600f546104ef90610100900460ff1681565b348015610b0c57600080fd5b506104ef610b1b366004613cdb565b612907565b6000546001600160a01b03163314610b735760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b604b811015610bc45760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610b6a565b6016546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610c2957600080fd5b505af1158015610c3d573d6000803e3d6000fd5b5050505050565b6000610c51338484612995565b5060015b92915050565b6000610c696009600a613f4c565b601554610c769190613f5b565b905090565b6000546001600160a01b03163314610cc95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b60085460ff16610cd857600080fd5b806001600160a01b0316826001600160a01b03161415610d3b576001600160a01b03811660009081526009602090815260408083208054600160ff19918216811790925560079093529220805490911682179055610d379082906118f3565b5050565b6001600160a01b0382811660008181526009602090815260408083208054600160ff19918216811790925595871680855282852080548816831790559484526007909252808320805486168317905592825291902080549092168117909155610da59083906118f3565b610d378160016118f3565b6000610dbe6009600a613f4c565b610dcd9064e8d4a51000613f96565b610dd657600080fd5b610de26009600a613f4c565b610c769064e8d4a51000613f96565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610e56576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610e50908490613fb5565b90915550505b610e61848484612aa2565b949350505050565b6000546001600160a01b03163314610eb75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b6103e8610ec66009600a613f4c565b610ed59064e8d4a51000613f96565b610edf9190613f5b565b8183610eed6009600a613f4c565b610efc9064e8d4a51000613f96565b610f069190613f96565b610f109190613f5b565b1015610f845760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610b6a565b8082610f926009600a613f4c565b610fa19064e8d4a51000613f96565b610fab9190613f96565b610fb59190613f5b565b6015555050565b805182511461100d5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610b6a565b60005b82518160ff1610156110d157818160ff168151811061103157611031613fcc565b6020026020010151611058336001600160a01b031660009081526001602052604090205490565b101561106357600080fd5b6110be33848360ff168151811061107c5761107c613fcc565b60200260200101516009600a6110929190613f4c565b858560ff16815181106110a7576110a7613fcc565b60200260200101516110b99190613f96565b612aa2565b50806110c981613ffb565b915050611010565b505050565b6000546001600160a01b031633146111245760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b6016546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156111a157600080fd5b505af11580156111b5573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b0316331461120d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b6107d08361ffff161115801561122957506107d08261ffff1611155b801561123b57506107d08161ffff1611155b6112875760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610b6a565b600a805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146113485760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b6016546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610c0f565b6000546001600160a01b031633146113e85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b83856113f66009600a613f4c565b6114059064e8d4a51000613f96565b61140f9190613f96565b6114199190613f5b565b601255818361142a6009600a613f4c565b6114399064e8d4a51000613f96565b6114439190613f96565b61144d9190613f5b565b60135560105550505050565b6000546001600160a01b031633146114a75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610c5191859061150990869061401b565b612995565b6000546001600160a01b0316331461155c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b6103e861156b6009600a613f4c565b61157a9064e8d4a51000613f96565b6115849190613f5b565b81836115926009600a613f4c565b6115a19064e8d4a51000613f96565b6115ab9190613f96565b6115b59190613f5b565b10156116295760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b6a565b80826116376009600a613f4c565b6116469064e8d4a51000613f96565b6116509190613f96565b61165a9190613f5b565b6014555050565b6000546001600160a01b031633146116af5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b6001600160a01b03811661172b5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b6a565b6001600160a01b03811661dead14156117ac5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b6a565b600080546117c5916001600160a01b03909116906118f3565b6117d08160016118f3565b600080546001600160a01b03168152600160205260409020541561181757600080546001600160a01b0316808252600160205260409091205461181591908390612aa2565b505b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000601660029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c769190614033565b6000546001600160a01b031633146119415760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119ba5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b601654610100900460ff1615611a125760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610b6a565b6001600160a01b038116301415611a6b5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610b6a565b601680546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000611ab96009600a613f4c565b601454610c769190613f5b565b6000546001600160a01b03163314611b145760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b60008054611b2d916001600160a01b03909116906118f3565b600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611bcf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b80611c77576001600160a01b03828116600081815260026020526040808220805460ff1916905560165490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015611c5b57600080fd5b505af1158015611c6f573d6000803e3d6000fd5b505050505050565b60035415611cde576203f48060035442611c919190613fb5565b11611cde5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610b6a565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560165491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401600060405180830381600087803b158015611c5b57600080fd5b600080546001600160a01b03163314611dbc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b600c54611dd69030906001600160a01b0316600019612995565b50600190565b6000546001600160a01b03163314611e2a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b60165460ff1615611e7d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b6a565b601654610100900460ff16611ed45760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610b6a565b6016546201000090046001600160a01b0316611f1a57601680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601654600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260096064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611fa557600080fd5b505af1925050508015611fb6575060015b506016805460ff19908116600117909155600880549091169055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610c51918590611509908690613fb5565b6000612016338484612aa2565b5060019392505050565b6000546001600160a01b0316331461206e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b600b805461ffff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216908516171790556120b2818361404c565b600b805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b031633146121405760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b6016546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610c0f565b6000546001600160a01b031633146121e05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b600f80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061222990831515815260200190565b60405180910390a150565b81518351148015612246575080518251145b6122925760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610b6a565b60005b83518160ff1610156123c657818160ff16815181106122b6576122b6613fcc565b6020026020010151838260ff16815181106122d3576122d3613fcc565b60200260200101516009600a6122e99190613f4c565b6122f89064e8d4a51000613f96565b6123029190613f96565b61230c9190613f5b565b33600090815260016020526040902054101561232757600080fd5b6123b333858360ff168151811061234057612340613fcc565b6020026020010151848460ff168151811061235d5761235d613fcc565b6020026020010151868560ff168151811061237a5761237a613fcc565b60200260200101516009600a6123909190613f4c565b61239f9064e8d4a51000613f96565b6123a99190613f96565b6110b99190613f5b565b50806123be81613ffb565b915050612295565b50505050565b6000546001600160a01b0316331461241a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561245f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124839190614072565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f49190614072565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612557573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257b9190614072565b90506001600160a01b03811661272457816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ed9190614072565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561263a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265e9190614072565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156126c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e79190614072565b600d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055612758565b600d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555b600c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556110d1903090600019612995565b6000546001600160a01b031633146127ea5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000546001600160a01b031633146128725760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b601654610100900460ff16156128ca5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610b6a565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612904573d6000803e3d6000fd5b50565b6016546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612971573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c55919061408f565b6001600160a01b0383166129eb5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b6a565b6001600160a01b038216612a415760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b6a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612b205760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b6a565b6001600160a01b038316612b9c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b6a565b60008211612c125760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610b6a565b612c1c8484612fab565b15612e735760165460ff16612c735760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b6a565b6001600160a01b03841660009081526002602052604090205460ff1680612cb257506001600160a01b03831660009081526002602052604090205460ff165b15612d76576001600160a01b03841660009081526006602052604090205460ff16158015612cf957506001600160a01b03831660009081526006602052604090205460ff16155b15612d7657601454821115612d765760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610b6a565b600c546001600160a01b03848116911614801590612dad57506001600160a01b03831660009081526002602052604090205460ff16155b15612e73576001600160a01b03831660009081526006602052604090205460ff16612e735760155482612df5856001600160a01b031660009081526001602052604090205490565b612dff919061401b565b1115612e735760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610b6a565b6001600160a01b03841660009081526005602052604090205460019060ff1680612eb557506001600160a01b03841660009081526005602052604090205460ff165b15612ebe575060005b6001600160a01b03841660009081526002602052604090205460ff1615612f9657600f5460ff16158015612ef95750600f54610100900460ff165b8015612f1e57506001600160a01b03841660009081526007602052604090205460ff16155b8015612f4357506001600160a01b03851660009081526007602052604090205460ff16155b15612f965742601054601154612f59919061401b565b1015612f9657306000908152600160205260409020546012548110612f94576013548110612f8657506013545b612f8f81613080565b426011555b505b612fa285858584613470565b95945050505050565b600080546001600160a01b03848116911614801590612fd857506000546001600160a01b03838116911614155b8015612fef57506000546001600160a01b03163214155b801561301457506001600160a01b03821660009081526009602052604090205460ff16155b801561303957506001600160a01b03831660009081526009602052604090205460ff16155b801561305057506001600160a01b03821661dead14155b801561306457506001600160a01b03821615155b801561307957506001600160a01b0383163014155b9392505050565b600f805460ff1916600117905560408051606081018252600b5461ffff80821683526201000082048116602084015264010000000090910416918101829052906130ca5750613463565b306000908152600460209081526040808320600c546001600160a01b031684529091529020546000191461312357306000908152600460209081526040808320600c546001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff16856131449190613f96565b61314e9190613f5b565b6131589190613f5b565b905060006131668285613fb5565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106131a0576131a0613fcc565b6001600160a01b03928316602091820292909201810191909152600c54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132369190614072565b8160018151811061324957613249613fcc565b6001600160a01b039283166020918202929092010152600c546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906132a89085906000908690309042906004016140ac565b600060405180830381600087803b1580156132c257600080fd5b505af11580156132d6573d6000803e3d6000fd5b50479250600091508490506132eb8684613f96565b6132f59190613f5b565b905084156133e657600c546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613384573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133a9919061411d565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6133f08183613fb5565b9150856000015186604001818151613408919061414b565b61ffff9081169091526020880151849250161561345b57600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613459573d6000803e3d6000fd5b505b505050505050505b50600f805460ff19169055565b601654600090610100900460ff1661351c5761348c85856136ac565b601654610100900460ff161580156134a957506134a98585612fab565b1561351c5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610b6a565b6135268585612fab565b156135d9576016546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152868116602483015260448201869052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156135c2575060408051601f3d908101601f191682019092526135bf9181019061408f565b60015b6135cb57600080fd5b9050806135d757600080fd5b505b6001600160a01b03851660009081526001602052604081208054859290613601908490613fb5565b909155506000905082613614578361361f565b61361f86868661380a565b6001600160a01b03861660009081526001602052604081208054929350839290919061364c90849061401b565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161369891815260200190565b60405180910390a350600195945050505050565b601654610100900460ff161561372a5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610b6a565b6137348282612fab565b15801561374e5750600d546001600160a01b038281169116145b15610d37576001600160a01b038083166000908152600960205260409020805460ff191660011790556016805461ff0019166101001790819055620100009004166137c357601680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b600f805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6001600160a01b038316600090815260026020526040812054819060ff161561383a5750600a5461ffff1661387f565b6001600160a01b03841660009081526002602052604090205460ff161561386e5750600a5462010000900461ffff1661387f565b50600a54640100000000900461ffff165b600061271061388e8386613f96565b6138989190613f5b565b306000908152600160205260408120805492935083929091906138bc90849061401b565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361390b8185613fb5565b9695505050505050565b600060208083528351808285015260005b8181101561394257858101830151858201604001528201613926565b81811115613954576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561397c57600080fd5b5035919050565b6001600160a01b038116811461290457600080fd5b600080604083850312156139ab57600080fd5b82356139b681613983565b946020939093013593505050565b600080604083850312156139d757600080fd5b82356139e281613983565b915060208301356139f281613983565b809150509250929050565b600080600060608486031215613a1257600080fd5b8335613a1d81613983565b92506020840135613a2d81613983565b929592945050506040919091013590565b60008060408385031215613a5157600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613ab857613ab8613a60565b604052919050565b600067ffffffffffffffff821115613ada57613ada613a60565b5060051b60200190565b600082601f830112613af557600080fd5b81356020613b0a613b0583613ac0565b613a8f565b82815260059290921b84018101918181019086841115613b2957600080fd5b8286015b84811015613b4d578035613b4081613983565b8352918301918301613b2d565b509695505050505050565b600082601f830112613b6957600080fd5b81356020613b79613b0583613ac0565b82815260059290921b84018101918181019086841115613b9857600080fd5b8286015b84811015613b4d5780358352918301918301613b9c565b60008060408385031215613bc657600080fd5b823567ffffffffffffffff80821115613bde57600080fd5b613bea86838701613ae4565b93506020850135915080821115613c0057600080fd5b50613c0d85828601613b58565b9150509250929050565b801515811461290457600080fd5b60008060008060808587031215613c3b57600080fd5b8435613c4681613c17565b93506020850135613c5681613c17565b92506040850135613c6681613c17565b91506060850135613c7681613c17565b939692955090935050565b803561ffff81168114613c9357600080fd5b919050565b600080600060608486031215613cad57600080fd5b613cb684613c81565b9250613cc460208501613c81565b9150613cd260408501613c81565b90509250925092565b600060208284031215613ced57600080fd5b813561307981613983565b600080600080600060a08688031215613d1057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215613d4657600080fd5b8235613d5181613983565b915060208301356139f281613c17565b60008060408385031215613d7457600080fd5b613d7d83613c81565b9150613d8b60208401613c81565b90509250929050565b600060208284031215613da657600080fd5b813561307981613c17565b600080600060608486031215613dc657600080fd5b833567ffffffffffffffff80821115613dde57600080fd5b613dea87838801613ae4565b94506020860135915080821115613e0057600080fd5b613e0c87838801613b58565b93506040860135915080821115613e2257600080fd5b50613e2f86828701613b58565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115613ea3578160001904821115613e8957613e89613e39565b80851615613e9657918102915b93841c9390800290613e6d565b509250929050565b600082613eba57506001610c55565b81613ec757506000610c55565b8160018114613edd5760028114613ee757613f03565b6001915050610c55565b60ff841115613ef857613ef8613e39565b50506001821b610c55565b5060208310610133831016604e8410600b8410161715613f26575081810a610c55565b613f308383613e68565b8060001904821115613f4457613f44613e39565b029392505050565b600061307960ff841683613eab565b600082613f91577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615613fb057613fb0613e39565b500290565b600082821015613fc757613fc7613e39565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff81141561401257614012613e39565b60010192915050565b6000821982111561402e5761402e613e39565b500190565b60006020828403121561404557600080fd5b5051919050565b600061ffff80831681851680830382111561406957614069613e39565b01949350505050565b60006020828403121561408457600080fd5b815161307981613983565b6000602082840312156140a157600080fd5b815161307981613c17565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156140fc5784516001600160a01b0316835293830193918301916001016140d7565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561413257600080fd5b8351925060208401519150604084015190509250925092565b600061ffff8381169083168181101561416657614166613e39565b03939250505056fea2646970667358221220002a03375f28a0962e42cddaaef2c1b2ad0b3f07ef567139595c8d9ed9cd351964736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106103855760003560e01c8063590ffdce116101d1578063b1b08f7111610102578063e4fcfd18116100a0578063ee5d9c2d1161006f578063ee5d9c2d14610aac578063f94aa1b414610ac1578063fdb78c0e14610ae1578063fe575a8714610b0057600080fd5b8063e4fcfd1814610a36578063e8a0e3f914610a4c578063eafb5a3c14610a6c578063eb50e70e14610a8c57600080fd5b8063c6a276c2116100dc578063c6a276c21461097f578063cab5ebea1461099f578063cf847706146109bf578063dd62ed3e146109f057600080fd5b8063b1b08f71146105c9578063b3d514fb146105c9578063bcd96a251461095f57600080fd5b8063893d20e81161016f5780638da5cb5b116101495780638da5cb5b1461089157806395d89b41146108d9578063a457c2d71461091f578063a9059cbb1461093f57600080fd5b8063893d20e8146108915780638a63bd9b146108af5780638a8c523c146108c457600080fd5b80636ebd0078116101ab5780636ebd00781461081157806370a0823114610826578063715018a61461085c57806380c581d11461087157600080fd5b8063590ffdce146107985780635c24b074146107b85780635cce86cd146107d857600080fd5b80632b28fc7a116102b657806339509351116102545780634fb2e45d116102235780634fb2e45d1461070b5780634fbee1931461072b57806350a8e0161461076457806355dbc3691461078357600080fd5b806339509351146106915780633f3cf56c146106b1578063452ed4f1146106d15780634ada218b146106f157600080fd5b806332cde6641161029057806332cde6641461061157806333251a0b1461063157806334cd82601461065157806336fddb041461067157600080fd5b80632b28fc7a146105c95780632e8fa821146105df578063313ce567146105f557600080fd5b80630fa604e41161032357806323b872dd116102fd57806323b872dd1461054957806326003957146105695780632610eaca1461058957806329dd8798146105a957600080fd5b80630fa604e4146104ff57806313b4a7f41461051457806318160ddd1461053457600080fd5b806306fdde031161035f57806306fdde031461043e5780630758d9241461048d57806309231602146104ad578063095ea7b3146104cf57600080fd5b806303fd2a45146103915780630445b667146103c4578063069d955f146103e857600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a761dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103d057600080fd5b506103da60125481565b6040519081526020016103bb565b3480156103f457600080fd5b50600a546104199061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103bb565b34801561044a57600080fd5b5060408051808201909152601581527f42616e616e61205461736b20466f72636520417065000000000000000000000060208201525b6040516103bb9190613915565b34801561049957600080fd5b50600c546103a7906001600160a01b031681565b3480156104b957600080fd5b506104cd6104c836600461396a565b610b20565b005b3480156104db57600080fd5b506104ef6104ea366004613998565b610c44565b60405190151581526020016103bb565b34801561050b57600080fd5b506103da610c5b565b34801561052057600080fd5b506104cd61052f3660046139c4565b610c7b565b34801561054057600080fd5b506103da610db0565b34801561055557600080fd5b506104ef6105643660046139fd565b610df1565b34801561057557600080fd5b506104cd610584366004613a3e565b610e69565b34801561059557600080fd5b506104cd6105a4366004613bb3565b610fbc565b3480156105b557600080fd5b506104cd6105c4366004613c25565b6110d6565b3480156105d557600080fd5b506103da6107d081565b3480156105eb57600080fd5b506103da60135481565b34801561060157600080fd5b50604051600981526020016103bb565b34801561061d57600080fd5b506104cd61062c366004613c98565b6111bf565b34801561063d57600080fd5b506104cd61064c366004613cdb565b6112fa565b34801561065d57600080fd5b506104cd61066c366004613cf8565b61139a565b34801561067d57600080fd5b506104cd61068c366004613d33565b611459565b34801561069d57600080fd5b506104ef6106ac366004613998565b6114d2565b3480156106bd57600080fd5b506104cd6106cc366004613a3e565b61150e565b3480156106dd57600080fd5b50600d546103a7906001600160a01b031681565b3480156106fd57600080fd5b506016546104ef9060ff1681565b34801561071757600080fd5b506104cd610726366004613cdb565b611661565b34801561073757600080fd5b506104ef610746366004613cdb565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561077057600080fd5b506016546104ef90610100900460ff1681565b34801561078f57600080fd5b506103da61187a565b3480156107a457600080fd5b506104cd6107b3366004613d33565b6118f3565b3480156107c457600080fd5b506104cd6107d3366004613cdb565b61196c565b3480156107e457600080fd5b506104ef6107f3366004613cdb565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561081d57600080fd5b506103da611aab565b34801561083257600080fd5b506103da610841366004613cdb565b6001600160a01b031660009081526001602052604090205490565b34801561086857600080fd5b506104cd611ac6565b34801561087d57600080fd5b506104cd61088c366004613d33565b611b81565b34801561089d57600080fd5b506000546001600160a01b03166103a7565b3480156108bb57600080fd5b506104ef611d6d565b3480156108d057600080fd5b506104cd611ddc565b3480156108e557600080fd5b5060408051808201909152600481527f42544641000000000000000000000000000000000000000000000000000000006020820152610480565b34801561092b57600080fd5b506104ef61093a366004613998565b611fd2565b34801561094b57600080fd5b506104ef61095a366004613998565b612009565b34801561096b57600080fd5b506104cd61097a366004613d61565b612020565b34801561098b57600080fd5b506104cd61099a366004613cdb565b6120f2565b3480156109ab57600080fd5b506104cd6109ba366004613d94565b612192565b3480156109cb57600080fd5b50600b546104199061ffff808216916201000081048216916401000000009091041683565b3480156109fc57600080fd5b506103da610a0b3660046139c4565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610a4257600080fd5b506103da60105481565b348015610a5857600080fd5b506104cd610a67366004613db1565b612234565b348015610a7857600080fd5b506104cd610a87366004613cdb565b6123cc565b348015610a9857600080fd5b506104cd610aa7366004613cdb565b61279c565b348015610ab857600080fd5b506104cd612824565b348015610acd57600080fd5b50600e546103a7906001600160a01b031681565b348015610aed57600080fd5b50600f546104ef90610100900460ff1681565b348015610b0c57600080fd5b506104ef610b1b366004613cdb565b612907565b6000546001600160a01b03163314610b735760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b604b811015610bc45760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610b6a565b6016546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610c2957600080fd5b505af1158015610c3d573d6000803e3d6000fd5b5050505050565b6000610c51338484612995565b5060015b92915050565b6000610c696009600a613f4c565b601554610c769190613f5b565b905090565b6000546001600160a01b03163314610cc95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b60085460ff16610cd857600080fd5b806001600160a01b0316826001600160a01b03161415610d3b576001600160a01b03811660009081526009602090815260408083208054600160ff19918216811790925560079093529220805490911682179055610d379082906118f3565b5050565b6001600160a01b0382811660008181526009602090815260408083208054600160ff19918216811790925595871680855282852080548816831790559484526007909252808320805486168317905592825291902080549092168117909155610da59083906118f3565b610d378160016118f3565b6000610dbe6009600a613f4c565b610dcd9064e8d4a51000613f96565b610dd657600080fd5b610de26009600a613f4c565b610c769064e8d4a51000613f96565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610e56576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610e50908490613fb5565b90915550505b610e61848484612aa2565b949350505050565b6000546001600160a01b03163314610eb75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b6103e8610ec66009600a613f4c565b610ed59064e8d4a51000613f96565b610edf9190613f5b565b8183610eed6009600a613f4c565b610efc9064e8d4a51000613f96565b610f069190613f96565b610f109190613f5b565b1015610f845760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610b6a565b8082610f926009600a613f4c565b610fa19064e8d4a51000613f96565b610fab9190613f96565b610fb59190613f5b565b6015555050565b805182511461100d5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610b6a565b60005b82518160ff1610156110d157818160ff168151811061103157611031613fcc565b6020026020010151611058336001600160a01b031660009081526001602052604090205490565b101561106357600080fd5b6110be33848360ff168151811061107c5761107c613fcc565b60200260200101516009600a6110929190613f4c565b858560ff16815181106110a7576110a7613fcc565b60200260200101516110b99190613f96565b612aa2565b50806110c981613ffb565b915050611010565b505050565b6000546001600160a01b031633146111245760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b6016546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156111a157600080fd5b505af11580156111b5573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b0316331461120d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b6107d08361ffff161115801561122957506107d08261ffff1611155b801561123b57506107d08161ffff1611155b6112875760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610b6a565b600a805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146113485760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b6016546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610c0f565b6000546001600160a01b031633146113e85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b83856113f66009600a613f4c565b6114059064e8d4a51000613f96565b61140f9190613f96565b6114199190613f5b565b601255818361142a6009600a613f4c565b6114399064e8d4a51000613f96565b6114439190613f96565b61144d9190613f5b565b60135560105550505050565b6000546001600160a01b031633146114a75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610c5191859061150990869061401b565b612995565b6000546001600160a01b0316331461155c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b6103e861156b6009600a613f4c565b61157a9064e8d4a51000613f96565b6115849190613f5b565b81836115926009600a613f4c565b6115a19064e8d4a51000613f96565b6115ab9190613f96565b6115b59190613f5b565b10156116295760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b6a565b80826116376009600a613f4c565b6116469064e8d4a51000613f96565b6116509190613f96565b61165a9190613f5b565b6014555050565b6000546001600160a01b031633146116af5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b6001600160a01b03811661172b5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b6a565b6001600160a01b03811661dead14156117ac5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b6a565b600080546117c5916001600160a01b03909116906118f3565b6117d08160016118f3565b600080546001600160a01b03168152600160205260409020541561181757600080546001600160a01b0316808252600160205260409091205461181591908390612aa2565b505b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000601660029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c769190614033565b6000546001600160a01b031633146119415760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119ba5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b601654610100900460ff1615611a125760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610b6a565b6001600160a01b038116301415611a6b5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610b6a565b601680546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000611ab96009600a613f4c565b601454610c769190613f5b565b6000546001600160a01b03163314611b145760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b60008054611b2d916001600160a01b03909116906118f3565b600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611bcf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b80611c77576001600160a01b03828116600081815260026020526040808220805460ff1916905560165490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015611c5b57600080fd5b505af1158015611c6f573d6000803e3d6000fd5b505050505050565b60035415611cde576203f48060035442611c919190613fb5565b11611cde5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610b6a565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560165491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401600060405180830381600087803b158015611c5b57600080fd5b600080546001600160a01b03163314611dbc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b600c54611dd69030906001600160a01b0316600019612995565b50600190565b6000546001600160a01b03163314611e2a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b60165460ff1615611e7d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b6a565b601654610100900460ff16611ed45760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610b6a565b6016546201000090046001600160a01b0316611f1a57601680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601654600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260096064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611fa557600080fd5b505af1925050508015611fb6575060015b506016805460ff19908116600117909155600880549091169055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610c51918590611509908690613fb5565b6000612016338484612aa2565b5060019392505050565b6000546001600160a01b0316331461206e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b600b805461ffff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216908516171790556120b2818361404c565b600b805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b031633146121405760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b6016546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610c0f565b6000546001600160a01b031633146121e05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b600f80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061222990831515815260200190565b60405180910390a150565b81518351148015612246575080518251145b6122925760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610b6a565b60005b83518160ff1610156123c657818160ff16815181106122b6576122b6613fcc565b6020026020010151838260ff16815181106122d3576122d3613fcc565b60200260200101516009600a6122e99190613f4c565b6122f89064e8d4a51000613f96565b6123029190613f96565b61230c9190613f5b565b33600090815260016020526040902054101561232757600080fd5b6123b333858360ff168151811061234057612340613fcc565b6020026020010151848460ff168151811061235d5761235d613fcc565b6020026020010151868560ff168151811061237a5761237a613fcc565b60200260200101516009600a6123909190613f4c565b61239f9064e8d4a51000613f96565b6123a99190613f96565b6110b99190613f5b565b50806123be81613ffb565b915050612295565b50505050565b6000546001600160a01b0316331461241a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561245f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124839190614072565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f49190614072565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612557573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257b9190614072565b90506001600160a01b03811661272457816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ed9190614072565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561263a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265e9190614072565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156126c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e79190614072565b600d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055612758565b600d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555b600c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556110d1903090600019612995565b6000546001600160a01b031633146127ea5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000546001600160a01b031633146128725760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b6a565b601654610100900460ff16156128ca5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610b6a565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612904573d6000803e3d6000fd5b50565b6016546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612971573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c55919061408f565b6001600160a01b0383166129eb5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b6a565b6001600160a01b038216612a415760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b6a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612b205760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b6a565b6001600160a01b038316612b9c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b6a565b60008211612c125760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610b6a565b612c1c8484612fab565b15612e735760165460ff16612c735760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b6a565b6001600160a01b03841660009081526002602052604090205460ff1680612cb257506001600160a01b03831660009081526002602052604090205460ff165b15612d76576001600160a01b03841660009081526006602052604090205460ff16158015612cf957506001600160a01b03831660009081526006602052604090205460ff16155b15612d7657601454821115612d765760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610b6a565b600c546001600160a01b03848116911614801590612dad57506001600160a01b03831660009081526002602052604090205460ff16155b15612e73576001600160a01b03831660009081526006602052604090205460ff16612e735760155482612df5856001600160a01b031660009081526001602052604090205490565b612dff919061401b565b1115612e735760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610b6a565b6001600160a01b03841660009081526005602052604090205460019060ff1680612eb557506001600160a01b03841660009081526005602052604090205460ff165b15612ebe575060005b6001600160a01b03841660009081526002602052604090205460ff1615612f9657600f5460ff16158015612ef95750600f54610100900460ff165b8015612f1e57506001600160a01b03841660009081526007602052604090205460ff16155b8015612f4357506001600160a01b03851660009081526007602052604090205460ff16155b15612f965742601054601154612f59919061401b565b1015612f9657306000908152600160205260409020546012548110612f94576013548110612f8657506013545b612f8f81613080565b426011555b505b612fa285858584613470565b95945050505050565b600080546001600160a01b03848116911614801590612fd857506000546001600160a01b03838116911614155b8015612fef57506000546001600160a01b03163214155b801561301457506001600160a01b03821660009081526009602052604090205460ff16155b801561303957506001600160a01b03831660009081526009602052604090205460ff16155b801561305057506001600160a01b03821661dead14155b801561306457506001600160a01b03821615155b801561307957506001600160a01b0383163014155b9392505050565b600f805460ff1916600117905560408051606081018252600b5461ffff80821683526201000082048116602084015264010000000090910416918101829052906130ca5750613463565b306000908152600460209081526040808320600c546001600160a01b031684529091529020546000191461312357306000908152600460209081526040808320600c546001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff16856131449190613f96565b61314e9190613f5b565b6131589190613f5b565b905060006131668285613fb5565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106131a0576131a0613fcc565b6001600160a01b03928316602091820292909201810191909152600c54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132369190614072565b8160018151811061324957613249613fcc565b6001600160a01b039283166020918202929092010152600c546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906132a89085906000908690309042906004016140ac565b600060405180830381600087803b1580156132c257600080fd5b505af11580156132d6573d6000803e3d6000fd5b50479250600091508490506132eb8684613f96565b6132f59190613f5b565b905084156133e657600c546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613384573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133a9919061411d565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6133f08183613fb5565b9150856000015186604001818151613408919061414b565b61ffff9081169091526020880151849250161561345b57600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613459573d6000803e3d6000fd5b505b505050505050505b50600f805460ff19169055565b601654600090610100900460ff1661351c5761348c85856136ac565b601654610100900460ff161580156134a957506134a98585612fab565b1561351c5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610b6a565b6135268585612fab565b156135d9576016546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152868116602483015260448201869052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156135c2575060408051601f3d908101601f191682019092526135bf9181019061408f565b60015b6135cb57600080fd5b9050806135d757600080fd5b505b6001600160a01b03851660009081526001602052604081208054859290613601908490613fb5565b909155506000905082613614578361361f565b61361f86868661380a565b6001600160a01b03861660009081526001602052604081208054929350839290919061364c90849061401b565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161369891815260200190565b60405180910390a350600195945050505050565b601654610100900460ff161561372a5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610b6a565b6137348282612fab565b15801561374e5750600d546001600160a01b038281169116145b15610d37576001600160a01b038083166000908152600960205260409020805460ff191660011790556016805461ff0019166101001790819055620100009004166137c357601680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b600f805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6001600160a01b038316600090815260026020526040812054819060ff161561383a5750600a5461ffff1661387f565b6001600160a01b03841660009081526002602052604090205460ff161561386e5750600a5462010000900461ffff1661387f565b50600a54640100000000900461ffff165b600061271061388e8386613f96565b6138989190613f5b565b306000908152600160205260408120805492935083929091906138bc90849061401b565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361390b8185613fb5565b9695505050505050565b600060208083528351808285015260005b8181101561394257858101830151858201604001528201613926565b81811115613954576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561397c57600080fd5b5035919050565b6001600160a01b038116811461290457600080fd5b600080604083850312156139ab57600080fd5b82356139b681613983565b946020939093013593505050565b600080604083850312156139d757600080fd5b82356139e281613983565b915060208301356139f281613983565b809150509250929050565b600080600060608486031215613a1257600080fd5b8335613a1d81613983565b92506020840135613a2d81613983565b929592945050506040919091013590565b60008060408385031215613a5157600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613ab857613ab8613a60565b604052919050565b600067ffffffffffffffff821115613ada57613ada613a60565b5060051b60200190565b600082601f830112613af557600080fd5b81356020613b0a613b0583613ac0565b613a8f565b82815260059290921b84018101918181019086841115613b2957600080fd5b8286015b84811015613b4d578035613b4081613983565b8352918301918301613b2d565b509695505050505050565b600082601f830112613b6957600080fd5b81356020613b79613b0583613ac0565b82815260059290921b84018101918181019086841115613b9857600080fd5b8286015b84811015613b4d5780358352918301918301613b9c565b60008060408385031215613bc657600080fd5b823567ffffffffffffffff80821115613bde57600080fd5b613bea86838701613ae4565b93506020850135915080821115613c0057600080fd5b50613c0d85828601613b58565b9150509250929050565b801515811461290457600080fd5b60008060008060808587031215613c3b57600080fd5b8435613c4681613c17565b93506020850135613c5681613c17565b92506040850135613c6681613c17565b91506060850135613c7681613c17565b939692955090935050565b803561ffff81168114613c9357600080fd5b919050565b600080600060608486031215613cad57600080fd5b613cb684613c81565b9250613cc460208501613c81565b9150613cd260408501613c81565b90509250925092565b600060208284031215613ced57600080fd5b813561307981613983565b600080600080600060a08688031215613d1057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215613d4657600080fd5b8235613d5181613983565b915060208301356139f281613c17565b60008060408385031215613d7457600080fd5b613d7d83613c81565b9150613d8b60208401613c81565b90509250929050565b600060208284031215613da657600080fd5b813561307981613c17565b600080600060608486031215613dc657600080fd5b833567ffffffffffffffff80821115613dde57600080fd5b613dea87838801613ae4565b94506020860135915080821115613e0057600080fd5b613e0c87838801613b58565b93506040860135915080821115613e2257600080fd5b50613e2f86828701613b58565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115613ea3578160001904821115613e8957613e89613e39565b80851615613e9657918102915b93841c9390800290613e6d565b509250929050565b600082613eba57506001610c55565b81613ec757506000610c55565b8160018114613edd5760028114613ee757613f03565b6001915050610c55565b60ff841115613ef857613ef8613e39565b50506001821b610c55565b5060208310610133831016604e8410600b8410161715613f26575081810a610c55565b613f308383613e68565b8060001904821115613f4457613f44613e39565b029392505050565b600061307960ff841683613eab565b600082613f91577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615613fb057613fb0613e39565b500290565b600082821015613fc757613fc7613e39565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff81141561401257614012613e39565b60010192915050565b6000821982111561402e5761402e613e39565b500190565b60006020828403121561404557600080fd5b5051919050565b600061ffff80831681851680830382111561406957614069613e39565b01949350505050565b60006020828403121561408457600080fd5b815161307981613983565b6000602082840312156140a157600080fd5b815161307981613c17565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156140fc5784516001600160a01b0316835293830193918301916001016140d7565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561413257600080fd5b8351925060208401519150604084015190509250925092565b600061ffff8381169083168181101561416657614166613e39565b03939250505056fea2646970667358221220002a03375f28a0962e42cddaaef2c1b2ad0b3f07ef567139595c8d9ed9cd351964736f6c634300080b0033

Deployed Bytecode Sourcemap

6422:21097:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8084:73;;;;;;;;;;;;8115:42;8084:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;8084:73:0;;;;;;;;8524:52;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;8524:52:0;245:177:1;7581:113:0;;;;;;;;;;-1:-1:-1;7581:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;633:6:1;666:15;;;648:34;;718:15;;;713:2;698:18;;691:43;770:15;;750:18;;;743:43;;;;611:2;596:18;7581:113:0;427:365:1;12655:80:0;;;;;;;;;;-1:-1:-1;12727:5:0;;;;;;;;;;;;;;;;;12655:80;;;;;;;:::i;8023:26::-;;;;;;;;;;-1:-1:-1;8023:26:0;;;;-1:-1:-1;;;;;8023:26:0;;;16709:149;;;;;;;;;;-1:-1:-1;16709:149:0;;;;;:::i;:::-;;:::i;:::-;;13268:161;;;;;;;;;;-1:-1:-1;13268:161:0;;;;;:::i;:::-;;:::i;:::-;;;2535:14:1;;2528:22;2510:41;;2498:2;2483:18;13268:161:0;2370:187:1;18716:112:0;;;;;;;;;;;;;:::i;19489:628::-;;;;;;;;;;-1:-1:-1;19489:628:0;;;;;:::i;:::-;;:::i;12358:115::-;;;;;;;;;;;;;:::i;13935:306::-;;;;;;;;;;-1:-1:-1;13935:306:0;;;;;:::i;:::-;;:::i;17766:267::-;;;;;;;;;;-1:-1:-1;17766:267:0;;;;;:::i;:::-;;:::i;25162:373::-;;;;;;;;;;-1:-1:-1;25162:373:0;;;;;:::i;:::-;;:::i;16506:195::-;;;;;;;;;;-1:-1:-1;16506:195:0;;;;;:::i;:::-;;:::i;7820:42::-;;;;;;;;;;;;7858:4;7820:42;;8583:50;;;;;;;;;;;;;;;;12479:80;;;;;;;;;;-1:-1:-1;12479:80:0;;7284:1;7311:36:1;;7299:2;7284:18;12479:80:0;7169:184:1;16866:397:0;;;;;;;;;;-1:-1:-1;16866:397:0;;;;;:::i;:::-;;:::i;16390:108::-;;;;;;;;;;-1:-1:-1;16390:108:0;;;;;:::i;:::-;;:::i;18836:338::-;;;;;;;;;;-1:-1:-1;18836:338:0;;;;;:::i;:::-;;:::i;18041:140::-;;;;;;;;;;-1:-1:-1;18041:140:0;;;;;:::i;:::-;;:::i;14249:215::-;;;;;;;;;;-1:-1:-1;14249:215:0;;;;;:::i;:::-;;:::i;17489:269::-;;;;;;;;;;-1:-1:-1;17489:269:0;;;;;:::i;:::-;;:::i;8056:21::-;;;;;;;;;;-1:-1:-1;8056:21:0;;;;-1:-1:-1;;;;;8056:21:0;;;8768:34;;;;;;;;;;-1:-1:-1;8768:34:0;;;;;;;;11212:590;;;;;;;;;;-1:-1:-1;11212:590:0;;;;;:::i;:::-;;:::i;18327:125::-;;;;;;;;;;-1:-1:-1;18327:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;18416:28:0;18392:4;18416:28;;;:19;:28;;;;;;;;;18327:125;8809:36;;;;;;;;;;-1:-1:-1;8809:36:0;;;;;;;;;;;16278:104;;;;;;;;;;;;;:::i;18460:134::-;;;;;;;;;;-1:-1:-1;18460:134:0;;;;;:::i;:::-;;:::i;15763:248::-;;;;;;;;;;-1:-1:-1;15763:248:0;;;;;:::i;:::-;;:::i;18189:130::-;;;;;;;;;;-1:-1:-1;18189:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;18281:30:0;18257:4;18281:30;;;:21;:30;;;;;;;;;18189:130;18602:106;;;;;;;;;;;;;:::i;12968:117::-;;;;;;;;;;-1:-1:-1;12968:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;13061:16:0;13034:7;13061:16;;;:7;:16;;;;;;;12968:117;11810:195;;;;;;;;;;;;;:::i;15255:500::-;;;;;;;;;;-1:-1:-1;15255:500:0;;;;;:::i;:::-;;:::i;12741:80::-;;;;;;;;;;-1:-1:-1;12793:7:0;11190:6;-1:-1:-1;;;;;11190:6:0;12741:80;18716:112;13754:173;;;;;;;;;;;;;:::i;24492:471::-;;;;;;;;;;;;;:::i;12565:84::-;;;;;;;;;;-1:-1:-1;12639:7:0;;;;;;;;;;;;;;;;;12565:84;;14472:225;;;;;;;;;;-1:-1:-1;14472:225:0;;;;;:::i;:::-;;:::i;13093:167::-;;;;;;;;;;-1:-1:-1;13093:167:0;;;;;:::i;:::-;;:::i;17271:210::-;;;;;;;;;;-1:-1:-1;17271:210:0;;;;;:::i;:::-;;:::i;16019:118::-;;;;;;;;;;-1:-1:-1;16019:118:0;;;;;:::i;:::-;;:::i;19317:164::-;;;;;;;;;;-1:-1:-1;19317:164:0;;;;;:::i;:::-;;:::i;7703:108::-;;;;;;;;;;-1:-1:-1;7703:108:0;;;;;;;;;;;;;;;;;;;;;;12827:133;;;;;;;;;;-1:-1:-1;12827:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;12929:19:0;;;12911:7;12929:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;12827:133;8441:45;;;;;;;;;;;;;;;;25543:482;;;;;;;;;;-1:-1:-1;25543:482:0;;;;;:::i;:::-;;:::i;14705:542::-;;;;;;;;;;-1:-1:-1;14705:542:0;;;;;:::i;:::-;;:::i;19182:127::-;;;;;;;;;;-1:-1:-1;19182:127:0;;;;;:::i;:::-;;:::i;24971:183::-;;;;;;;;;;;;;:::i;8236:128::-;;;;;;;;;;-1:-1:-1;8236:128:0;;;;-1:-1:-1;;;;;8236:128:0;;;8395:39;;;;;;;;;;-1:-1:-1;8395:39:0;;;;;;;;;;;16145:125;;;;;;;;;;-1:-1:-1;16145:125:0;;;;;:::i;:::-;;:::i;16709:149::-;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;;;;;;;;;16793:2:::1;16786:3;:9;;16778:30;;;::::0;-1:-1:-1;;;16778:30:0;;11341:2:1;16778:30:0::1;::::0;::::1;11323:21:1::0;11380:1;11360:18;;;11353:29;11418:10;11398:18;;;11391:38;11446:18;;16778:30:0::1;11139:331:1::0;16778:30:0::1;16819:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;391:25:1::0;;;16819:9:0;;;::::1;-1:-1:-1::0;;;;;16819:9:0::1;::::0;:26:::1;::::0;364:18:1;;16819:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16709:149:::0;:::o;13268:161::-;13343:4;13360:39;189:10;13383:7;13392:6;13360:8;:39::i;:::-;-1:-1:-1;13417:4:0;13268:161;;;;;:::o;18716:112::-;18761:7;18806:13;7284:1;18806:2;:13;:::i;:::-;18788:14;;:32;;;;:::i;:::-;18781:39;;18716:112;:::o;19489:628::-;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;19593:23:::1;::::0;::::1;;19585:32;;;::::0;::::1;;19642:7;-1:-1:-1::0;;;;;19632:17:0::1;:6;-1:-1:-1::0;;;;;19632:17:0::1;;19628:482;;;-1:-1:-1::0;;;;;19666:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;:33;;19695:4:::1;-1:-1:-1::0;;19666:33:0;;::::1;::::0;::::1;::::0;;;19714:16:::1;:25:::0;;;;;:32;;;;::::1;::::0;::::1;::::0;;19761:34:::1;::::0;19666:26;;19761:19:::1;:34::i;:::-;19489:628:::0;;:::o;19628:482::-:1;-1:-1:-1::0;;;;;19828:25:0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;:32;;19856:4:::1;-1:-1:-1::0;;19828:32:0;;::::1;::::0;::::1;::::0;;;19875:26;;::::1;::::0;;;;;;:33;;;::::1;::::0;::::1;::::0;;19923:24;;;:16:::1;:24:::0;;;;;;:31;;;::::1;::::0;::::1;::::0;;19969:25;;;;;;:32;;;;::::1;::::0;::::1;::::0;;;20016:33:::1;::::0;19828:25;;20016:19:::1;:33::i;:::-;20064:34;20084:7;20093:4;20064:19;:34::i;12358:115::-:0;12413:7;7346:13;7284:1;7346:2;:13;:::i;:::-;7329:30;;7114:17;7329:30;:::i;:::-;12424:31;;12444:8;;;12424:31;7346:13;7284:1;7346:2;:13;:::i;:::-;7329:30;;7114:17;7329:30;:::i;13935:306::-;-1:-1:-1;;;;;14056:19:0;;14035:4;14056:19;;;:11;:19;;;;;;;;14076:10;14056:31;;;;;;;;-1:-1:-1;;14056:52:0;14052:126;;-1:-1:-1;;;;;14125:19:0;;;;;;:11;:19;;;;;;;;14145:10;14125:31;;;;;;;:41;;14160:6;;14125:19;:41;;14160:6;;14125:41;:::i;:::-;;;;-1:-1:-1;;14052:126:0;14197:36;14207:6;14215:9;14226:6;14197:9;:36::i;:::-;14190:43;13935:306;-1:-1:-1;;;;13935:306:0:o;17766:267::-;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;17908:4:::1;7346:13;7284:1;7346:2;:13;:::i;:::-;7329:30;::::0;7114:17:::1;7329:30;:::i;:::-;17898:14;;;;:::i;:::-;17886:7:::0;17875;7346:13:::1;7284:1;7346:2;:13;:::i;:::-;7329:30;::::0;7114:17:::1;7329:30;:::i;:::-;17865:17;;;;:::i;:::-;17864:29;;;;:::i;:::-;:49;;17856:112;;;::::0;-1:-1:-1;;;17856:112:0;;14011:2:1;17856:112:0::1;::::0;::::1;13993:21:1::0;14050:2;14030:18;;;14023:30;14089:34;14069:18;;;14062:62;14160:20;14140:18;;;14133:48;14198:19;;17856:112:0::1;13809:414:1::0;17856:112:0::1;18018:7:::0;18007;7346:13:::1;7284:1;7346:2;:13;:::i;:::-;7329:30;::::0;7114:17:::1;7329:30;:::i;:::-;17997:17;;;;:::i;:::-;17996:29;;;;:::i;:::-;17979:14;:46:::0;-1:-1:-1;;17766:267:0:o;25162:373::-;25287:7;:14;25268:8;:15;:33;25260:67;;;;-1:-1:-1;;;25260:67:0;;14430:2:1;25260:67:0;;;14412:21:1;14469:2;14449:18;;;14442:30;14508:23;14488:18;;;14481:51;14549:18;;25260:67:0;14228:345:1;25260:67:0;25343:7;25338:190;25360:8;:15;25356:1;:19;;;25338:190;;;25430:7;25438:1;25430:10;;;;;;;;;;:::i;:::-;;;;;;;25405:21;25415:10;-1:-1:-1;;;;;13061:16:0;13034:7;13061:16;;;:7;:16;;;;;;;12968:117;25405:21;:35;;25397:44;;;;;;25456:60;25466:10;25478:8;25487:1;25478:11;;;;;;;;;;:::i;:::-;;;;;;;7284:1;25502:2;:13;;;;:::i;:::-;25491:7;25499:1;25491:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;25456:9;:60::i;:::-;-1:-1:-1;25377:3:0;;;;:::i;:::-;;;;25338:190;;;;25162:373;;:::o;16506:195::-;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;16628:9:::1;::::0;:65:::1;::::0;;;;15179:14:1;;15172:22;16628:65:0::1;::::0;::::1;15154:41:1::0;15238:14;;15231:22;15211:18;;;15204:50;15297:14;;15290:22;15270:18;;;15263:50;15356:14;;15349:22;15329:18;;;15322:50;16628:9:0;;;::::1;-1:-1:-1::0;;;;;16628:9:0::1;::::0;:24:::1;::::0;15126:19:1;;16628:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16506:195:::0;;;;:::o;16866:397::-;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;7858:4:::1;16973:6;:21;;;;:65;;;;;7908:4;17015:7;:23;;;;16973:65;:117;;;;;7962:4;17059:11;:31;;;;16973:117;16965:170;;;::::0;-1:-1:-1;;;16965:170:0;;15585:2:1;16965:170:0::1;::::0;::::1;15567:21:1::0;15624:2;15604:18;;;15597:30;15663:25;15643:18;;;15636:53;15706:18;;16965:170:0::1;15383:347:1::0;16965:170:0::1;17146:9;:25:::0;;::::1;::::0;;::::1;17182:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;17220:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;16866:397::o;16390:108::-;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;16459:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;16459:31:0::1;::::0;::::1;160:74:1::0;16459:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;16459:31:0::1;14:226:1::0;18836:338:0;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;19050:16;19030;7346:13:::1;7284:1;7346:2;:13;:::i;:::-;7329:30;::::0;7114:17:::1;7329:30;:::i;:::-;19020:26;;;;:::i;:::-;19019:47;;;;:::i;:::-;19003:13;:63:::0;19118:13;19101;7346::::1;7284:1;7346:2;:13;:::i;:::-;7329:30;::::0;7114:17:::1;7329:30;:::i;:::-;19091:23;;;;:::i;:::-;19090:41;;;;:::i;:::-;19077:10;:54:::0;19142:17:::1;:24:::0;-1:-1:-1;;;;18836:338:0:o;18041:140::-;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;-1:-1:-1;;;;;18133:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;18133:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18041:140::o;14249:215::-;189:10;14337:4;14386:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14386:34:0;;;;;;;;;;14337:4;;14354:80;;14377:7;;14386:47;;14423:10;;14386:47;:::i;:::-;14354:8;:80::i;17489:269::-;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;17630:4:::1;7346:13;7284:1;7346:2;:13;:::i;:::-;7329:30;::::0;7114:17:::1;7329:30;:::i;:::-;17620:14;;;;:::i;:::-;17608:7:::0;17597;7346:13:::1;7284:1;7346:2;:13;:::i;:::-;7329:30;::::0;7114:17:::1;7329:30;:::i;:::-;17587:17;;;;:::i;:::-;17586:29;;;;:::i;:::-;:49;;17578:117;;;::::0;-1:-1:-1;;;17578:117:0;;16070:2:1;17578:117:0::1;::::0;::::1;16052:21:1::0;16109:2;16089:18;;;16082:30;16148:34;16128:18;;;16121:62;16219:25;16199:18;;;16192:53;16262:19;;17578:117:0::1;15868:419:1::0;17578:117:0::1;17743:7:::0;17732;7346:13:::1;7284:1;7346:2;:13;:::i;:::-;7329:30;::::0;7114:17:::1;7329:30;:::i;:::-;17722:17;;;;:::i;:::-;17721:29;;;;:::i;:::-;17706:12;:44:::0;-1:-1:-1;;17489:269:0:o;11212:590::-;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;-1:-1:-1;;;;;11293:22:0;::::1;11285:96;;;::::0;-1:-1:-1;;;11285:96:0;;16494:2:1;11285:96:0::1;::::0;::::1;16476:21:1::0;16533:2;16513:18;;;16506:30;16572:34;16552:18;;;16545:62;16643:31;16623:18;;;16616:59;16692:19;;11285:96:0::1;16292:425:1::0;11285:96:0::1;-1:-1:-1::0;;;;;11400:16:0;::::1;8115:42;11400:16;;11392:90;;;::::0;-1:-1:-1;;;11392:90:0;;16494:2:1;11392:90:0::1;::::0;::::1;16476:21:1::0;16533:2;16513:18;;;16506:30;16572:34;16552:18;;;16545:62;16643:31;16623:18;;;16616:59;16692:19;;11392:90:0::1;16292:425:1::0;11392:90:0::1;11513:6;::::0;;11493:34:::1;::::0;-1:-1:-1;;;;;11513:6:0;;::::1;::::0;11493:19:::1;:34::i;:::-;11538:35;11558:8;11568:4;11538:19;:35::i;:::-;11617:1;11607:6:::0;;-1:-1:-1;;;;;11607:6:0::1;13061:16:::0;;:7;:16;;;;;;11597:21;11594:99:::1;;11645:6;::::0;;-1:-1:-1;;;;;11645:6:0::1;13061:16:::0;;;:7;:16;;;;;;;11635:46:::1;::::0;11645:6;11653:8;;25456:9;:60::i;11635:46::-:1;;11594:99;11713:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;11713:17:0;::::1;::::0;;::::1;::::0;;11746:38:::1;::::0;11713:17;;;;11746:38:::1;::::0;11713:6;11746:38:::1;11212:590:::0;:::o;16278:104::-;16323:7;16350:9;;;;;;;;;-1:-1:-1;;;;;16350:9:0;-1:-1:-1;;;;;16350:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18460:134::-;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;-1:-1:-1;;;;;18548:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;18548:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18460:134::o;15763:248::-;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;15847:16:::1;::::0;::::1;::::0;::::1;;;15846:17;15838:54;;;::::0;-1:-1:-1;;;15838:54:0;;17113:2:1;15838:54:0::1;::::0;::::1;17095:21:1::0;17152:2;17132:18;;;17125:30;17191:26;17171:18;;;17164:54;17235:18;;15838:54:0::1;16911:348:1::0;15838:54:0::1;-1:-1:-1::0;;;;;15911:28:0;::::1;15934:4;15911:28;;15903:55;;;::::0;-1:-1:-1;;;15903:55:0;;17466:2:1;15903:55:0::1;::::0;::::1;17448:21:1::0;17505:2;17485:18;;;17478:30;17544:16;17524:18;;;17517:44;17578:18;;15903:55:0::1;17264:338:1::0;15903:55:0::1;15969:9;:34:::0;;-1:-1:-1;;;;;15969:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;15763:248::o;18602:106::-;18643:7;18686:13;7284:1;18686:2;:13;:::i;:::-;18670:12;;:30;;;;:::i;11810:195::-;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;11897:6:::1;::::0;;11877:34:::1;::::0;-1:-1:-1;;;;;11897:6:0;;::::1;::::0;11877:19:::1;:34::i;:::-;11939:1;11922:19:::0;;;::::1;::::0;;11957:40:::1;::::0;11939:1;;11957:40:::1;::::0;11939:1;;11957:40:::1;11810:195::o:0;15255:500::-;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;15336:16;15332:416:::1;;-1:-1:-1::0;;;;;15369:13:0;;::::1;15385:5;15369:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;15369:21:0::1;::::0;;15405:9:::1;::::0;:32;;;;;::::1;::::0;::::1;17775:74:1::0;;;;17865:18;;;17858:50;;;;15405:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;17748:18:1;;15405:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19489:628:::0;;:::o;15332:416::-:1;15474:17;::::0;:22;15470:136:::1;;15563:6;15543:17;;15525:15;:35;;;;:::i;:::-;:44;15517:73;;;::::0;-1:-1:-1;;;15517:73:0;;18121:2:1;15517:73:0::1;::::0;::::1;18103:21:1::0;18160:2;18140:18;;;18133:30;18199:18;18179;;;18172:46;18235:18;;15517:73:0::1;17919:340:1::0;15517:73:0::1;-1:-1:-1::0;;;;;15620:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;15620:20:0::1;15636:4;15620:20:::0;;::::1;::::0;;;15675:15:::1;15655:17;:35:::0;15705:9:::1;::::0;:31;;;;;::::1;::::0;::::1;17775:74:1::0;;;;17865:18;;;17858:50;15705:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;17748:18:1;;15705:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;13754:173:::0;13818:4;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;13867:9:::1;::::0;13835:62:::1;::::0;13852:4:::1;::::0;-1:-1:-1;;;;;13867:9:0::1;-1:-1:-1::0;;13835:8:0::1;:62::i;:::-;-1:-1:-1::0;13915:4:0::1;13754:173:::0;:::o;24492:471::-;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;24554:14:::1;::::0;::::1;;24553:15;24545:52;;;::::0;-1:-1:-1;;;24545:52:0;;18466:2:1;24545:52:0::1;::::0;::::1;18448:21:1::0;18505:2;18485:18;;;18478:30;18544:26;18524:18;;;18517:54;18588:18;;24545:52:0::1;18264:348:1::0;24545:52:0::1;24616:16;::::0;::::1;::::0;::::1;;;24608:53;;;::::0;-1:-1:-1;;;24608:53:0;;18819:2:1;24608:53:0::1;::::0;::::1;18801:21:1::0;18858:2;18838:18;;;18831:30;18897:26;18877:18;;;18870:54;18941:18;;24608:53:0::1;18617:348:1::0;24608:53:0::1;24683:9;::::0;;;::::1;-1:-1:-1::0;;;;;24683:9:0::1;24672:99;;24723:9;:36:::0;;;::::1;24753:4;24723:36:::0;::::1;;::::0;;24672:99:::1;24785:9;::::0;24805:6:::1;::::0;24785:85:::1;::::0;;;;-1:-1:-1;;;;;24805:6:0;;::::1;24785:85;::::0;::::1;19193:74:1::0;19315:10;24820:12:0::1;19303:23:1::0;19283:18;;;19276:51;19375:18;24842:15:0::1;19363:31:1::0;19343:18;;;19336:59;7284:1:0::1;19411:18:1::0;;;19404:45;24785:9:0;;;::::1;;::::0;:19:::1;::::0;19165::1;;24785:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;24781:101:::0;24892:14:::1;:21:::0;;-1:-1:-1;;24892:21:0;;::::1;24909:4;24892:21;::::0;;;24924:23:::1;:31:::0;;;;::::1;::::0;;24492:471::o;14472:225::-;189:10;14565:4;14614:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14614:34:0;;;;;;;;;;14565:4;;14582:85;;14605:7;;14614:52;;14651:15;;14614:52;:::i;13093:167::-;13171:4;13188:42;189:10;13212:9;13223:6;13188:9;:42::i;:::-;-1:-1:-1;13248:4:0;;13093:167;-1:-1:-1;;;13093:167:0:o;17271:210::-;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;17356:7:::1;:29:::0;;::::1;17396::::0;;::::1;::::0;::::1;::::0;;;;17356;;::::1;17396::::0;::::1;::::0;;17452:21:::1;17416:9:::0;17376;17452:21:::1;:::i;:::-;17436:7;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;17271:210:0:o;16019:118::-;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;16093:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;16093:36:0::1;::::0;::::1;160:74:1::0;16093:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;16093:36:0::1;14:226:1::0;19317:164:0;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;19393:19:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;19393:29:0;;::::1;;::::0;;19438:35:::1;::::0;::::1;::::0;::::1;::::0;19415:7;2535:14:1;2528:22;2510:41;;2498:2;2483:18;;2370:187;19438:35:0::1;;;;;;;;19317:164:::0;:::o;25543:482::-;25698:8;:15;25679:8;:15;:34;:72;;;;;25736:8;:15;25717:8;:15;:34;25679:72;25671:106;;;;-1:-1:-1;;;25671:106:0;;14430:2:1;25671:106:0;;;14412:21:1;14469:2;14449:18;;;14442:30;14508:23;14488:18;;;14481:51;14549:18;;25671:106:0;14228:345:1;25671:106:0;25793:7;25788:230;25810:8;:15;25806:1;:19;;;25788:230;;;25906:8;25915:1;25906:11;;;;;;;;;;:::i;:::-;;;;;;;25891:8;25900:1;25891:11;;;;;;;;;;:::i;:::-;;;;;;;7284:1;7346:2;:13;;;;:::i;:::-;7329:30;;7114:17;7329:30;:::i;:::-;25881:21;;;;:::i;:::-;25880:37;;;;:::i;:::-;25865:10;13034:7;13061:16;;;:7;:16;;;;;;25855:62;;25847:71;;;;;;25933:73;25943:10;25955:8;25964:1;25955:11;;;;;;;;;;:::i;:::-;;;;;;;25994:8;26003:1;25994:11;;;;;;;;;;:::i;:::-;;;;;;;25979:8;25988:1;25979:11;;;;;;;;;;:::i;:::-;;;;;;;7284:1;7346:2;:13;;;;:::i;:::-;7329:30;;7114:17;7329:30;:::i;:::-;25969:21;;;;:::i;:::-;25968:37;;;;:::i;25933:73::-;-1:-1:-1;25827:3:0;;;;:::i;:::-;;;;25788:230;;;;25543:482;;;:::o;14705:542::-;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;14776:20:::1;14809:9;14776:43;;14830:16;14860:10;-1:-1:-1::0;;;;;14860:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14849:40:0::1;;14898:4;14905:10;-1:-1:-1::0;;;;;14905:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14849:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;20198:15:1;;;14849:74:0::1;::::0;::::1;20180:34:1::0;20250:15;;20230:18;;;20223:43;20092:18;;14849:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14830:93:::0;-1:-1:-1;;;;;;14938:22:0;::::1;14934:200;;14997:10;-1:-1:-1::0;;;;;14997:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14986:43:0::1;;15038:4;15045:10;-1:-1:-1::0;;;;;15045:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14986:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;20198:15:1;;;14986:77:0::1;::::0;::::1;20180:34:1::0;20250:15;;20230:18;;;20223:43;20092:18;;14986:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14977:6;:86:::0;;;::::1;-1:-1:-1::0;;;;;14977:86:0;;;::::1;::::0;;;::::1;::::0;;14934:200:::1;;;15105:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;15105:17:0;::::1;;::::0;;14934:200:::1;15144:9;:22:::0;;;::::1;-1:-1:-1::0;;;;;15144:22:0;::::1;::::0;;::::1;::::0;;;15177:62:::1;::::0;15194:4:::1;::::0;-1:-1:-1;;15177:8:0::1;:62::i;19182:127::-:0;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;19259:11:::1;:42:::0;;;::::1;-1:-1:-1::0;;;;;19259:42:0;;;::::1;::::0;;;::::1;::::0;;19182:127::o;24971:183::-;9237:6;;-1:-1:-1;;;;;9237:6:0;189:10;9237:22;9229:52;;;;-1:-1:-1;;;9229:52:0;;10995:2:1;9229:52:0;;;10977:21:1;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11053:18:1;;;11046:47;11110:18;;9229:52:0;10793:341:1;9229:52:0;25038:16:::1;::::0;::::1;::::0;::::1;;;25037:17;25029:58;;;::::0;-1:-1:-1;;;25029:58:0;;20479:2:1;25029:58:0::1;::::0;::::1;20461:21:1::0;20518:2;20498:18;;;20491:30;20557;20537:18;;;20530:58;20605:18;;25029:58:0::1;20277:352:1::0;25029:58:0::1;11163:7:::0;11190:6;;25098:48:::1;::::0;-1:-1:-1;;;;;11190:6:0;;;;25124:21:::1;25098:48:::0;::::1;;;::::0;25124:21;;25098:48;11163:7;25098:48;25124:21;11190:6;25098:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24971:183::o:0;16145:125::-;16230:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;16230:32:0;;;160:74:1;16206:4:0;;16230:9;;;;;:23;;133:18:1;;16230:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13437:309::-;-1:-1:-1;;;;;13531:20:0;;13523:52;;;;-1:-1:-1;;;13523:52:0;;21086:2:1;13523:52:0;;;21068:21:1;21125:2;21105:18;;;21098:30;21164:21;21144:18;;;21137:49;21203:18;;13523:52:0;20884:343:1;13523:52:0;-1:-1:-1;;;;;13594:21:0;;13586:53;;;;-1:-1:-1;;;13586:53:0;;21086:2:1;13586:53:0;;;21068:21:1;21125:2;21105:18;;;21098:30;21164:21;21144:18;;;21137:49;21203:18;;13586:53:0;20884:343:1;13586:53:0;-1:-1:-1;;;;;13652:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;13705:33;;391:25:1;;;13705:33:0;;364:18:1;13705:33:0;;;;;;;13437:309;;;:::o;20493:1904::-;20572:4;-1:-1:-1;;;;;20597:18:0;;20589:68;;;;-1:-1:-1;;;20589:68:0;;21434:2:1;20589:68:0;;;21416:21:1;21473:2;21453:18;;;21446:30;21512:34;21492:18;;;21485:62;21583:7;21563:18;;;21556:35;21608:19;;20589:68:0;21232:401:1;20589:68:0;-1:-1:-1;;;;;20676:16:0;;20668:64;;;;-1:-1:-1;;;20668:64:0;;21840:2:1;20668:64:0;;;21822:21:1;21879:2;21859:18;;;21852:30;21918:34;21898:18;;;21891:62;21989:5;21969:18;;;21962:33;22012:19;;20668:64:0;21638:399:1;20668:64:0;20760:1;20751:6;:10;20743:64;;;;-1:-1:-1;;;20743:64:0;;22244:2:1;20743:64:0;;;22226:21:1;22283:2;22263:18;;;22256:30;22322:34;22302:18;;;22295:62;22393:11;22373:18;;;22366:39;22422:19;;20743:64:0;22042:405:1;20743:64:0;20821:20;20832:4;20838:2;20821:10;:20::i;:::-;20818:665;;;20862:14;;;;20858:89;;20897:34;;-1:-1:-1;;;20897:34:0;;22654:2:1;20897:34:0;;;22636:21:1;22693:2;22673:18;;;22666:30;22732:26;22712:18;;;22705:54;22776:18;;20897:34:0;22452:348:1;20858:89:0;-1:-1:-1;;;;;20964:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;20981:11:0;;;;;;:7;:11;;;;;;;;20964:28;20961:248;;;-1:-1:-1;;;;;21017:27:0;;;;;;:21;:27;;;;;;;;21016:28;:58;;;;-1:-1:-1;;;;;;21049:25:0;;;;;;:21;:25;;;;;;;;21048:26;21016:58;21012:182;;;21117:12;;21107:6;:22;;21099:75;;;;-1:-1:-1;;;21099:75:0;;23007:2:1;21099:75:0;;;22989:21:1;23046:2;23026:18;;;23019:30;23085:34;23065:18;;;23058:62;23156:10;23136:18;;;23129:38;23184:19;;21099:75:0;22805:404:1;21099:75:0;21240:9;;-1:-1:-1;;;;;21226:24:0;;;21240:9;;21226:24;;;;:40;;-1:-1:-1;;;;;;21255:11:0;;;;;;:7;:11;;;;;;;;21254:12;21226:40;21223:249;;;-1:-1:-1;;;;;21292:25:0;;;;;;:21;:25;;;;;;;;21287:170;;21376:14;;21366:6;21350:13;21360:2;-1:-1:-1;;;;;13061:16:0;13034:7;13061:16;;;:7;:16;;;;;;;12968:117;21350:13;:22;;;;:::i;:::-;:40;;21342:95;;;;-1:-1:-1;;;21342:95:0;;23416:2:1;21342:95:0;;;23398:21:1;23455:2;23435:18;;;23428:30;23494:34;23474:18;;;23467:62;23565:12;23545:18;;;23538:40;23595:19;;21342:95:0;23214:406:1;21342:95:0;-1:-1:-1;;;;;21528:25:0;;21495:12;21528:25;;;:19;:25;;;;;;21510:4;;21528:25;;;:52;;-1:-1:-1;;;;;;21557:23:0;;;;;;:19;:23;;;;;;;;21528:52;21525:98;;;-1:-1:-1;21606:5:0;21525:98;-1:-1:-1;;;;;21639:11:0;;;;;;:7;:11;;;;;;;;21635:692;;;21672:6;;;;21671:7;:47;;;;-1:-1:-1;21699:19:0;;;;;;;21671:47;:89;;;;-1:-1:-1;;;;;;21740:20:0;;;;;;:16;:20;;;;;;;;21739:21;21671:89;:133;;;;-1:-1:-1;;;;;;21782:22:0;;;;;;:16;:22;;;;;;;;21781:23;21671:133;21667:643;;;21874:15;21854:17;;21843:8;;:28;;;;:::i;:::-;:46;21839:456;;;21963:4;21914:28;13061:16;;;:7;:16;;;;;;22020:13;;21996:37;;21992:284;;22089:10;;22065:20;:34;22062:77;;-1:-1:-1;22126:10:0;;22062:77;22165:34;22178:20;22165:12;:34::i;:::-;22237:15;22226:8;:26;21992:284;21891:404;21839:456;22345:44;22363:4;22369:2;22373:6;22381:7;22345:17;:44::i;:::-;22338:51;20493:1904;-1:-1:-1;;;;;20493:1904:0:o;20125:360::-;20193:4;11190:6;;-1:-1:-1;;;;;20217:15:0;;;11190:6;;20217:15;;;;:45;;-1:-1:-1;11163:7:0;11190:6;-1:-1:-1;;;;;20249:13:0;;;11190:6;;20249:13;;20217:45;:82;;;;-1:-1:-1;11163:7:0;11190:6;-1:-1:-1;;;;;11190:6:0;20279:9;:20;;20217:82;:121;;;;-1:-1:-1;;;;;;20317:21:0;;;;;;:17;:21;;;;;;;;20316:22;20217:121;:162;;;;-1:-1:-1;;;;;;20356:23:0;;;;;;:17;:23;;;;;;;;20355:24;20217:162;:189;;;;-1:-1:-1;;;;;;20396:10:0;;8115:42;20396:10;;20217:189;:222;;;;-1:-1:-1;;;;;;20423:16:0;;;;20217:222;:260;;;;-1:-1:-1;;;;;;20456:21:0;;20472:4;20456:21;;20217:260;20210:267;20125:360;-1:-1:-1;;;20125:360:0:o;22405:1563::-;9131:6;:13;;-1:-1:-1;;9131:13:0;9140:4;9131:13;;;22488:30:::1;::::0;;::::1;::::0;::::1;::::0;;22511:7:::1;22488:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;::::1;;::::0;;;;;;;22529:56:::1;;22567:7;;;22529:56;22620:4;22600:26;::::0;;;:11:::1;:26;::::0;;;;;;;22635:9:::1;::::0;-1:-1:-1;;;;;22635:9:0::1;22600:46:::0;;;;;;;;-1:-1:-1;;22600:67:0::1;22597:165;;22704:4;22684:26;::::0;;;:11:::1;:26;::::0;;;;;;;22719:9:::1;::::0;-1:-1:-1;;;;;22719:9:0::1;22684:46:::0;;;;;;;-1:-1:-1;;22684:66:0;;22597:165:::1;22774:17;22855:1;22839:6;:12;;;22795:56;;22819:6;:16;;;22796:39;;:20;:39;;;;:::i;:::-;22795:56;;;;:::i;:::-;22794:62;;;;:::i;:::-;22774:82:::0;-1:-1:-1;22867:15:0::1;22885:32;22774:82:::0;22885:20;:32:::1;:::i;:::-;22962:16;::::0;;22976:1:::1;22962:16:::0;;;;;::::1;::::0;;22867:50;;-1:-1:-1;22938:21:0::1;::::0;22962:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22962:16:0::1;22938:40;;23007:4;22989;22994:1;22989:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22989:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23033:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;22989:7;;23033:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23023:4;23028:1;23023:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23023:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;23062:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;23137:7;;23062:9:::1;::::0;23175:4;;23202::::1;::::0;23222:15:::1;::::0;23062:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;23282:21:0::1;::::0;-1:-1:-1;23261:18:0::1;::::0;-1:-1:-1;23368:7:0;;-1:-1:-1;23342:22:0::1;23355:9:::0;23282:21;23342:22:::1;:::i;:::-;23341:34;;;;:::i;:::-;23314:61:::0;-1:-1:-1;23392:13:0;;23388:328:::1;;23422:9;::::0;:222:::1;::::0;;;;23499:4:::1;23422:222;::::0;::::1;25020:34:1::0;25070:18;;;25063:34;;;23422:9:0::1;25113:18:1::0;;;25106:34;;;25156:18;;;25149:34;8115:42:0::1;25199:19:1::0;;;25192:44;23614:15:0::1;25252:19:1::0;;;25245:35;-1:-1:-1;;;;;23422:9:0;;::::1;::::0;:25:::1;::::0;23455:16;;24931:19:1;;23422:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23664:40:0::1;::::0;;25776:25:1;;;25832:2;25817:18;;25810:34;;;23664:40:0::1;::::0;-1:-1:-1;25749:18:1;23664:40:0::1;;;;;;;23388:328;23728:30;23742:16:::0;23728:30;::::1;:::i;:::-;;;23785:6;:16;;;23769:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;23864:16:::1;::::0;::::1;::::0;23839:10;;-1:-1:-1;23864:20:0::1;::::0;23860:101:::1;;23901:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;23901:21:0;;::::1;::::0;:48;::::1;;;::::0;23932:16;;23901:21:::1;:48:::0;:21;:48;23932:16;23901:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;23860:101;22477:1491;;;;;;;9155:1;-1:-1:-1::0;9167:6:0;:14;;-1:-1:-1;;9167:14:0;;;22405:1563::o;26033:905::-;26155:16;;26133:4;;26155:16;;;;;26150:221;;26188:28;26207:4;26213:2;26188:18;:28::i;:::-;26236:16;;;;;;;26235:17;:41;;;;;26256:20;26267:4;26273:2;26256:10;:20::i;:::-;26231:129;;;26297:47;;-1:-1:-1;;;26297:47:0;;26279:2:1;26297:47:0;;;26261:21:1;26318:2;26298:18;;;26291:30;26357:34;26337:18;;;26330:62;26428:7;26408:18;;;26401:35;26453:19;;26297:47:0;26077:401:1;26231:129:0;26387:20;26398:4;26404:2;26387:10;:20::i;:::-;26383:314;;;26455:9;;:37;;;;;-1:-1:-1;;;;;26764:15:1;;;26455:37:0;;;26746:34:1;26816:15;;;26796:18;;;26789:43;26848:18;;;26841:34;;;26424:12:0;;26455:9;;;;;:19;;26658:18:1;;26455:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;26455:37:0;;;;;;;;-1:-1:-1;;26455:37:0;;;;;;;;;;;;:::i;:::-;;;26451:163;;26590:8;;;26451:163;26543:5;-1:-1:-1;26634:7:0;26630:56;;26662:8;;;26630:56;26409:288;26383:314;-1:-1:-1;;;;;26709:13:0;;;;;;:7;:13;;;;;:23;;26726:6;;26709:13;:23;;26726:6;;26709:23;:::i;:::-;;;;-1:-1:-1;26743:22:0;;-1:-1:-1;26769:7:0;26768:48;;26810:6;26768:48;;;26780:27;26790:4;26796:2;26800:6;26780:9;:27::i;:::-;-1:-1:-1;;;;;26827:11:0;;;;;;:7;:11;;;;;:29;;26743:73;;-1:-1:-1;26743:73:0;;26827:11;;;:29;;26743:73;;26827:29;:::i;:::-;;;;;;;;26889:2;-1:-1:-1;;;;;26874:34:0;26883:4;-1:-1:-1;;;;;26874:34:0;;26893:14;26874:34;;;;391:25:1;;379:2;364:18;;245:177;26874:34:0;;;;;;;;-1:-1:-1;26926:4:0;;26033:905;-1:-1:-1;;;;;26033:905:0:o;23976:508::-;24058:16;;;;;;;24057:17;24049:65;;;;-1:-1:-1;;;24049:65:0;;27088:2:1;24049:65:0;;;27070:21:1;27127:2;27107:18;;;27100:30;27166:34;27146:18;;;27139:62;27237:5;27217:18;;;27210:33;27260:19;;24049:65:0;26886:399:1;24049:65:0;24130:20;24141:4;24147:2;24130:10;:20::i;:::-;24129:21;:37;;;;-1:-1:-1;24160:6:0;;-1:-1:-1;;;;;24154:12:0;;;24160:6;;24154:12;24129:37;24125:352;;;-1:-1:-1;;;;;24183:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;24183:30:0;24209:4;24183:30;;;24228:16;:23;;-1:-1:-1;;24228:23:0;24183:30;24228:23;;;;;24277:9;;;;24266:107;;24321:9;:36;;;;24351:4;24321:36;;;;;24266:107;24387:19;:26;;-1:-1:-1;;24387:26:0;;;;;24433:32;;-1:-1:-1;2510:41:1;;24433:32:0;;2498:2:1;2483:18;24433:32:0;;;;;;;23976:508;;:::o;26946:570::-;-1:-1:-1;;;;;27078:13:0;;27025:7;27078:13;;;:7;:13;;;;;;27025:7;;27078:13;;27074:222;;;-1:-1:-1;27121:9:0;:16;;;27074:222;;;-1:-1:-1;;;;;27159:11:0;;;;;;:7;:11;;;;;;;;27155:141;;;-1:-1:-1;27200:9:0;:17;;;;;;27155:141;;;-1:-1:-1;27263:9:0;:21;;;;;;27155:141;27308:17;8009:5;27328:19;27337:10;27328:6;:19;:::i;:::-;:38;;;;:::i;:::-;27395:4;27379:22;;;;:7;:22;;;;;:35;;27308:58;;-1:-1:-1;27308:58:0;;27379:22;;;:35;;27308:58;;27379:35;:::i;:::-;;;;-1:-1:-1;;27430:40:0;;391:25:1;;;27453:4:0;;-1:-1:-1;;;;;27430:40:0;;;;;379:2:1;364:18;27430:40:0;;;;;;;27490:18;27499:9;27490:6;:18;:::i;:::-;27483:25;26946:570;-1:-1:-1;;;;;;26946:570:0:o;797:656:1:-;909:4;938:2;967;956:9;949:21;999:6;993:13;1042:6;1037:2;1026:9;1022:18;1015:34;1067:1;1077:140;1091:6;1088:1;1085:13;1077:140;;;1186:14;;;1182:23;;1176:30;1152:17;;;1171:2;1148:26;1141:66;1106:10;;1077:140;;;1235:6;1232:1;1229:13;1226:91;;;1305:1;1300:2;1291:6;1280:9;1276:22;1272:31;1265:42;1226:91;-1:-1:-1;1369:2:1;1357:15;-1:-1:-1;;1353:88:1;1338:104;;;;1444:2;1334:113;;797:656;-1:-1:-1;;;797:656:1:o;1706:180::-;1765:6;1818:2;1806:9;1797:7;1793:23;1789:32;1786:52;;;1834:1;1831;1824:12;1786:52;-1:-1:-1;1857:23:1;;1706:180;-1:-1:-1;1706:180:1:o;1891:154::-;-1:-1:-1;;;;;1970:5:1;1966:54;1959:5;1956:65;1946:93;;2035:1;2032;2025:12;2050:315;2118:6;2126;2179:2;2167:9;2158:7;2154:23;2150:32;2147:52;;;2195:1;2192;2185:12;2147:52;2234:9;2221:23;2253:31;2278:5;2253:31;:::i;:::-;2303:5;2355:2;2340:18;;;;2327:32;;-1:-1:-1;;;2050:315:1:o;2562:388::-;2630:6;2638;2691:2;2679:9;2670:7;2666:23;2662:32;2659:52;;;2707:1;2704;2697:12;2659:52;2746:9;2733:23;2765:31;2790:5;2765:31;:::i;:::-;2815:5;-1:-1:-1;2872:2:1;2857:18;;2844:32;2885:33;2844:32;2885:33;:::i;:::-;2937:7;2927:17;;;2562:388;;;;;:::o;2955:456::-;3032:6;3040;3048;3101:2;3089:9;3080:7;3076:23;3072:32;3069:52;;;3117:1;3114;3107:12;3069:52;3156:9;3143:23;3175:31;3200:5;3175:31;:::i;:::-;3225:5;-1:-1:-1;3282:2:1;3267:18;;3254:32;3295:33;3254:32;3295:33;:::i;:::-;2955:456;;3347:7;;-1:-1:-1;;;3401:2:1;3386:18;;;;3373:32;;2955:456::o;3416:248::-;3484:6;3492;3545:2;3533:9;3524:7;3520:23;3516:32;3513:52;;;3561:1;3558;3551:12;3513:52;-1:-1:-1;;3584:23:1;;;3654:2;3639:18;;;3626:32;;-1:-1:-1;3416:248:1:o;3669:184::-;3721:77;3718:1;3711:88;3818:4;3815:1;3808:15;3842:4;3839:1;3832:15;3858:334;3929:2;3923:9;3985:2;3975:13;;-1:-1:-1;;3971:86:1;3959:99;;4088:18;4073:34;;4109:22;;;4070:62;4067:88;;;4135:18;;:::i;:::-;4171:2;4164:22;3858:334;;-1:-1:-1;3858:334:1:o;4197:183::-;4257:4;4290:18;4282:6;4279:30;4276:56;;;4312:18;;:::i;:::-;-1:-1:-1;4357:1:1;4353:14;4369:4;4349:25;;4197:183::o;4385:737::-;4439:5;4492:3;4485:4;4477:6;4473:17;4469:27;4459:55;;4510:1;4507;4500:12;4459:55;4546:6;4533:20;4572:4;4596:60;4612:43;4652:2;4612:43;:::i;:::-;4596:60;:::i;:::-;4690:15;;;4776:1;4772:10;;;;4760:23;;4756:32;;;4721:12;;;;4800:15;;;4797:35;;;4828:1;4825;4818:12;4797:35;4864:2;4856:6;4852:15;4876:217;4892:6;4887:3;4884:15;4876:217;;;4972:3;4959:17;4989:31;5014:5;4989:31;:::i;:::-;5033:18;;5071:12;;;;4909;;4876:217;;;-1:-1:-1;5111:5:1;4385:737;-1:-1:-1;;;;;;4385:737:1:o;5127:662::-;5181:5;5234:3;5227:4;5219:6;5215:17;5211:27;5201:55;;5252:1;5249;5242:12;5201:55;5288:6;5275:20;5314:4;5338:60;5354:43;5394:2;5354:43;:::i;5338:60::-;5432:15;;;5518:1;5514:10;;;;5502:23;;5498:32;;;5463:12;;;;5542:15;;;5539:35;;;5570:1;5567;5560:12;5539:35;5606:2;5598:6;5594:15;5618:142;5634:6;5629:3;5626:15;5618:142;;;5700:17;;5688:30;;5738:12;;;;5651;;5618:142;;5794:595;5912:6;5920;5973:2;5961:9;5952:7;5948:23;5944:32;5941:52;;;5989:1;5986;5979:12;5941:52;6029:9;6016:23;6058:18;6099:2;6091:6;6088:14;6085:34;;;6115:1;6112;6105:12;6085:34;6138:61;6191:7;6182:6;6171:9;6167:22;6138:61;:::i;:::-;6128:71;;6252:2;6241:9;6237:18;6224:32;6208:48;;6281:2;6271:8;6268:16;6265:36;;;6297:1;6294;6287:12;6265:36;;6320:63;6375:7;6364:8;6353:9;6349:24;6320:63;:::i;:::-;6310:73;;;5794:595;;;;;:::o;6394:118::-;6480:5;6473:13;6466:21;6459:5;6456:32;6446:60;;6502:1;6499;6492:12;6517:647;6591:6;6599;6607;6615;6668:3;6656:9;6647:7;6643:23;6639:33;6636:53;;;6685:1;6682;6675:12;6636:53;6724:9;6711:23;6743:28;6765:5;6743:28;:::i;:::-;6790:5;-1:-1:-1;6847:2:1;6832:18;;6819:32;6860:30;6819:32;6860:30;:::i;:::-;6909:7;-1:-1:-1;6968:2:1;6953:18;;6940:32;6981:30;6940:32;6981:30;:::i;:::-;7030:7;-1:-1:-1;7089:2:1;7074:18;;7061:32;7102:30;7061:32;7102:30;:::i;:::-;6517:647;;;;-1:-1:-1;6517:647:1;;-1:-1:-1;;6517:647:1:o;7358:159::-;7425:20;;7485:6;7474:18;;7464:29;;7454:57;;7507:1;7504;7497:12;7454:57;7358:159;;;:::o;7522:328::-;7596:6;7604;7612;7665:2;7653:9;7644:7;7640:23;7636:32;7633:52;;;7681:1;7678;7671:12;7633:52;7704:28;7722:9;7704:28;:::i;:::-;7694:38;;7751:37;7784:2;7773:9;7769:18;7751:37;:::i;:::-;7741:47;;7807:37;7840:2;7829:9;7825:18;7807:37;:::i;:::-;7797:47;;7522:328;;;;;:::o;7855:247::-;7914:6;7967:2;7955:9;7946:7;7942:23;7938:32;7935:52;;;7983:1;7980;7973:12;7935:52;8022:9;8009:23;8041:31;8066:5;8041:31;:::i;8107:454::-;8202:6;8210;8218;8226;8234;8287:3;8275:9;8266:7;8262:23;8258:33;8255:53;;;8304:1;8301;8294:12;8255:53;-1:-1:-1;;8327:23:1;;;8397:2;8382:18;;8369:32;;-1:-1:-1;8448:2:1;8433:18;;8420:32;;8499:2;8484:18;;8471:32;;-1:-1:-1;8550:3:1;8535:19;8522:33;;-1:-1:-1;8107:454:1;-1:-1:-1;8107:454:1:o;8566:382::-;8631:6;8639;8692:2;8680:9;8671:7;8667:23;8663:32;8660:52;;;8708:1;8705;8698:12;8660:52;8747:9;8734:23;8766:31;8791:5;8766:31;:::i;:::-;8816:5;-1:-1:-1;8873:2:1;8858:18;;8845:32;8886:30;8845:32;8886:30;:::i;8953:256::-;9019:6;9027;9080:2;9068:9;9059:7;9055:23;9051:32;9048:52;;;9096:1;9093;9086:12;9048:52;9119:28;9137:9;9119:28;:::i;:::-;9109:38;;9166:37;9199:2;9188:9;9184:18;9166:37;:::i;:::-;9156:47;;8953:256;;;;;:::o;9214:241::-;9270:6;9323:2;9311:9;9302:7;9298:23;9294:32;9291:52;;;9339:1;9336;9329:12;9291:52;9378:9;9365:23;9397:28;9419:5;9397:28;:::i;9460:821::-;9612:6;9620;9628;9681:2;9669:9;9660:7;9656:23;9652:32;9649:52;;;9697:1;9694;9687:12;9649:52;9737:9;9724:23;9766:18;9807:2;9799:6;9796:14;9793:34;;;9823:1;9820;9813:12;9793:34;9846:61;9899:7;9890:6;9879:9;9875:22;9846:61;:::i;:::-;9836:71;;9960:2;9949:9;9945:18;9932:32;9916:48;;9989:2;9979:8;9976:16;9973:36;;;10005:1;10002;9995:12;9973:36;10028:63;10083:7;10072:8;10061:9;10057:24;10028:63;:::i;:::-;10018:73;;10144:2;10133:9;10129:18;10116:32;10100:48;;10173:2;10163:8;10160:16;10157:36;;;10189:1;10186;10179:12;10157:36;;10212:63;10267:7;10256:8;10245:9;10241:24;10212:63;:::i;:::-;10202:73;;;9460:821;;;;;:::o;11475:184::-;11527:77;11524:1;11517:88;11624:4;11621:1;11614:15;11648:4;11645:1;11638:15;11664:482;11753:1;11796:5;11753:1;11810:330;11831:7;11821:8;11818:21;11810:330;;;11950:4;-1:-1:-1;;11878:77:1;11872:4;11869:87;11866:113;;;11959:18;;:::i;:::-;12009:7;11999:8;11995:22;11992:55;;;12029:16;;;;11992:55;12108:22;;;;12068:15;;;;11810:330;;;11814:3;11664:482;;;;;:::o;12151:866::-;12200:5;12230:8;12220:80;;-1:-1:-1;12271:1:1;12285:5;;12220:80;12319:4;12309:76;;-1:-1:-1;12356:1:1;12370:5;;12309:76;12401:4;12419:1;12414:59;;;;12487:1;12482:130;;;;12394:218;;12414:59;12444:1;12435:10;;12458:5;;;12482:130;12519:3;12509:8;12506:17;12503:43;;;12526:18;;:::i;:::-;-1:-1:-1;;12582:1:1;12568:16;;12597:5;;12394:218;;12696:2;12686:8;12683:16;12677:3;12671:4;12668:13;12664:36;12658:2;12648:8;12645:16;12640:2;12634:4;12631:12;12627:35;12624:77;12621:159;;;-1:-1:-1;12733:19:1;;;12765:5;;12621:159;12812:34;12837:8;12831:4;12812:34;:::i;:::-;12942:6;-1:-1:-1;;12870:79:1;12861:7;12858:92;12855:118;;;12953:18;;:::i;:::-;12991:20;;12151:866;-1:-1:-1;;;12151:866:1:o;13022:140::-;13080:5;13109:47;13150:4;13140:8;13136:19;13130:4;13109:47;:::i;13167:274::-;13207:1;13233;13223:189;;13268:77;13265:1;13258:88;13369:4;13366:1;13359:15;13397:4;13394:1;13387:15;13223:189;-1:-1:-1;13426:9:1;;13167:274::o;13446:228::-;13486:7;13612:1;-1:-1:-1;;13540:74:1;13537:1;13534:81;13529:1;13522:9;13515:17;13511:105;13508:131;;;13619:18;;:::i;:::-;-1:-1:-1;13659:9:1;;13446:228::o;13679:125::-;13719:4;13747:1;13744;13741:8;13738:34;;;13752:18;;:::i;:::-;-1:-1:-1;13789:9:1;;13679:125::o;14578:184::-;14630:77;14627:1;14620:88;14727:4;14724:1;14717:15;14751:4;14748:1;14741:15;14767:175;14804:3;14848:4;14841:5;14837:16;14877:4;14868:7;14865:17;14862:43;;;14885:18;;:::i;:::-;14934:1;14921:15;;14767:175;-1:-1:-1;;14767:175:1:o;15735:128::-;15775:3;15806:1;15802:6;15799:1;15796:13;15793:39;;;15812:18;;:::i;:::-;-1:-1:-1;15848:9:1;;15735:128::o;16722:184::-;16792:6;16845:2;16833:9;16824:7;16820:23;16816:32;16813:52;;;16861:1;16858;16851:12;16813:52;-1:-1:-1;16884:16:1;;16722:184;-1:-1:-1;16722:184:1:o;19460:224::-;19499:3;19527:6;19560:2;19557:1;19553:10;19590:2;19587:1;19583:10;19621:3;19617:2;19613:12;19608:3;19605:21;19602:47;;;19629:18;;:::i;:::-;19665:13;;19460:224;-1:-1:-1;;;;19460:224:1:o;19689:251::-;19759:6;19812:2;19800:9;19791:7;19787:23;19783:32;19780:52;;;19828:1;19825;19818:12;19780:52;19860:9;19854:16;19879:31;19904:5;19879:31;:::i;20634:245::-;20701:6;20754:2;20742:9;20733:7;20729:23;20725:32;20722:52;;;20770:1;20767;20760:12;20722:52;20802:9;20796:16;20821:28;20843:5;20821:28;:::i;23625:1026::-;23887:4;23935:3;23924:9;23920:19;23966:6;23955:9;23948:25;23992:2;24030:6;24025:2;24014:9;24010:18;24003:34;24073:3;24068:2;24057:9;24053:18;24046:31;24097:6;24132;24126:13;24163:6;24155;24148:22;24201:3;24190:9;24186:19;24179:26;;24240:2;24232:6;24228:15;24214:29;;24261:1;24271:218;24285:6;24282:1;24279:13;24271:218;;;24350:13;;-1:-1:-1;;;;;24346:62:1;24334:75;;24464:15;;;;24429:12;;;;24307:1;24300:9;24271:218;;;-1:-1:-1;;;;;;;24545:55:1;;;;24540:2;24525:18;;24518:83;-1:-1:-1;;;24632:3:1;24617:19;24610:35;24506:3;23625:1026;-1:-1:-1;;;23625:1026:1:o;25291:306::-;25379:6;25387;25395;25448:2;25436:9;25427:7;25423:23;25419:32;25416:52;;;25464:1;25461;25454:12;25416:52;25493:9;25487:16;25477:26;;25543:2;25532:9;25528:18;25522:25;25512:35;;25587:2;25576:9;25572:18;25566:25;25556:35;;25291:306;;;;;:::o;25855:217::-;25894:4;25923:6;25979:10;;;;25949;;26001:12;;;25998:38;;;26016:18;;:::i;:::-;26053:13;;25855:217;-1:-1:-1;;;25855:217:1:o

Swarm Source

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