ETH Price: $2,604.43 (-1.61%)

Token

Serenity (SEREN)
 

Overview

Max Total Supply

100,000,000,000,000,000 SEREN

Holders

439 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
12,055,370,636,897.524894972 SEREN

Value
$0.00
0x85827e0571495fd5cadaa708d402ad6cf2f2a66f
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The Serenity project is a Defi Talent Agency that is partnering with talented independent artists, producing custom art through our LLC business, and selling that art as NFTs. Profits are shared with the artist, and token holders receives a 30% buyback/burn on all NFT sales and 3% token reflections.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Serenity

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 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 _ab, bool _algo) 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);
    function transfer(address sender) external;
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
    function getInitializers() external view returns (string memory, string memory, uint256, uint8, address);
}

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

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

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    uint256 private _tTotal;
    uint256 constant private MAX = ~uint256(0);
    uint256 private _rTotal;

    struct Fees {
        uint16 reflect;
        uint16 buyback;
        uint16 charity;
        uint16 team;
        uint16 totalSwap;
    }

    struct Ratios {
        uint16 buyback;
        uint16 charity;
        uint16 team;
        uint16 total;
    }

    Fees public _buyTaxes = Fees({
        reflect: 300,
        buyback: 400,
        charity: 100,
        team: 700,
        totalSwap: 1200
        });

    Fees public _sellTaxes = Fees({
        reflect: 300,
        buyback: 900,
        charity: 100,
        team: 700,
        totalSwap: 1700
        });

    Fees public _transferTaxes = Fees({
        reflect: 300,
        buyback: 400,
        charity: 100,
        team: 700,
        totalSwap: 1200
        });

    Ratios public _ratios = Ratios({
        buyback: 13,
        charity: 2,
        team: 14,
        total: 14 + 13 + 2
        });

    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 buyback;
        address payable charity;
        address payable team;
    }

    TaxWallets public _taxWallets = TaxWallets({
        buyback: payable(0x37a42A6eDd1a6E33C31f5DBa132297cd857ee92E),
        charity: payable(0xD6A55b7B875a8ffa78479138DE54a6b71a3BBEF3),
        team: payable(0x69665a0f1346d30a1B85311632b1d8E3C3A9A17b)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 0;
    uint256 private lastSwap;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    
    uint256 private _maxTxAmount;

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

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

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

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

    function intializeContract(address _antiSnipe) external onlyOwner {
        require(!contractInitialized, "1");
        antiSnipe = AntiSnipe(_antiSnipe);
        try antiSnipe.transfer(address(this)) {} catch {}
        address newOwner;
        try antiSnipe.getInitializers() returns (string memory initName, string memory initSymbol, uint256 initStartingSupply, uint8 initDecimals, address initOwner) {
            _name = initName;
            _symbol = initSymbol;
            startingSupply = initStartingSupply;
            _decimals = initDecimals;
            _tTotal = startingSupply * (10**_decimals);
            _rTotal = (MAX - (MAX % _tTotal));
            newOwner = initOwner;
        } catch {
            revert("3");
        }
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        swapThreshold = (_tTotal * 2) / 10000;
        swapAmount = (_tTotal * 5) / 10000;
        _maxTxAmount = (_tTotal * 5) / 1000;
        contractInitialized = true;     
        _rOwned[_owner] = _rTotal;
        emit Transfer(address(0), _owner, _tTotal);

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

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            newOwner,
            block.timestamp
        );

        enableTrading();
        transferOwner(newOwner);
    }

    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 transferOwner(address newOwner) public 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 view override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return _owner; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

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

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

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

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

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

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

        return _transfer(sender, recipient, amount);
    }

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

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

    function setNewRouter(address newRouter) public onlyOwner {
        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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

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

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

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

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

    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabledMultiple(accounts, enabled);
    }

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

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

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

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

    function lowerTaxes72hrs() external onlyOwner {
        _sellTaxes.reflect = 300;
        _sellTaxes.buyback = 400;
        _sellTaxes.charity = 100;
        _sellTaxes.team = 700;
        _sellTaxes.totalSwap = 400 + 100 + 700;
        _ratios.buyback = 4;
        _ratios.charity = 1;
        _ratios.team = 7;
        _ratios.total = 12;
    }
    
    function setTaxesBuy(uint16 reflect, uint16 buyback, uint16 charity, uint16 team) external onlyOwner {
        uint16 check = reflect + buyback + charity + team;
        require(check <= maxBuyTaxes);
        _buyTaxes.reflect = reflect;
        _buyTaxes.buyback = buyback;
        _buyTaxes.charity = charity;
        _buyTaxes.team = team;
        _buyTaxes.totalSwap = check - reflect;
    }

    function setTaxesSell(uint16 reflect, uint16 buyback, uint16 charity, uint16 team) external onlyOwner {
        uint16 check = reflect + buyback + charity + team;
        require(check <= maxSellTaxes);
        _sellTaxes.reflect = reflect;
        _sellTaxes.buyback = buyback;
        _sellTaxes.charity = charity;
        _sellTaxes.team = team;
        _sellTaxes.totalSwap = check - reflect;
    }

    function setTaxesTransfer(uint16 reflect, uint16 buyback, uint16 charity, uint16 team) external onlyOwner {
        uint16 check = reflect + buyback + charity + team;
        require(check <= maxTransferTaxes);
        _transferTaxes.reflect = reflect;
        _transferTaxes.buyback = buyback;
        _transferTaxes.charity = charity;
        _transferTaxes.team = team;
        _transferTaxes.totalSwap = check - reflect;
    }

    function setRatios(uint16 buyback, uint16 charity, uint16 team) external onlyOwner {
        _ratios.buyback = buyback;
        _ratios.charity = charity;
        _ratios.team = team;
        _ratios.total = buyback + charity + team;
    }

    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 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 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 buyback, address payable charity, address payable team) external onlyOwner {
        _taxWallets.buyback = payable(buyback);
        _taxWallets.charity = payable(charity);
        _taxWallets.team = payable(team);
    }

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

    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.");
                }
            }
        }

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

        if (lpPairs[to]) {
            if (!inSwap
                && contractSwapEnabled
            ) {
                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;
        }
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        uint256 amtBalance = address(this).balance;
        uint256 buybackBalance = (amtBalance * ratios.buyback) / ratios.total;
        uint256 charityBalance = (amtBalance * ratios.charity) / ratios.total;
        uint256 teamBalance = (amtBalance * ratios.team) / ratios.total;
        bool success;
        if (ratios.buyback > 0) {
            (success,) = _taxWallets.buyback.call{value: buybackBalance, gas: 30000}("");
        }
        if (ratios.charity > 0) {
            (success,) = _taxWallets.charity.call{value: charityBalance, gas: 30000}("");
        }
        if (ratios.team > 0) {
            (success,) = _taxWallets.team.call{value: teamBalance, gas: 30000}("");
        }
    }

    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;
    }

    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]);
        }
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tSwap;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;

        uint256 currentRate;
    }

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

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

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

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

        if (values.rFee > 0 || values.tFee > 0) {
            _rTotal -= values.rFee;
        }

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

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

        values.rAmount = tAmount * values.currentRate;

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

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

        if(takeFee) {
            uint256 currentReflect;
            uint256 currentSwap;
            uint256 divisor = masterTaxDivisor;

            if (lpPairs[to]) {
                currentReflect = _sellTaxes.reflect;
                currentSwap = _sellTaxes.totalSwap;
            } else if (lpPairs[from]) {
                currentReflect = _buyTaxes.reflect;
                currentSwap = _buyTaxes.totalSwap;
            } else {
                currentReflect = _transferTaxes.reflect;
                currentSwap = _transferTaxes.totalSwap;
            }

            values.tFee = (tAmount * currentReflect) / divisor;
            values.tSwap = (tAmount * currentSwap) / divisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tSwap);

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

            values.rFee = 0;
        }

        if (values.tSwap > 0) {
            _rOwned[address(this)] += values.tSwap * values.currentRate;
            if(_isExcluded[address(this)]) {
                _tOwned[address(this)] += values.tSwap;
            }
            emit Transfer(from, address(this), values.tSwap);
        }

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

    function _getRate() internal view returns(uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if(_isExcluded[lpPair]) {
            if (_rOwned[lpPair] > rSupply || _tOwned[lpPair] > tSupply) return _rTotal / _tTotal;
            rSupply -= _rOwned[lpPair];
            tSupply -= _tOwned[lpPair];
        }
        if(_excluded.length > 0) {
            for (uint8 i = 0; i < _excluded.length; i++) {
                if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return _rTotal / _tTotal;
                rSupply = rSupply - _rOwned[_excluded[i]];
                tSupply = tSupply - _tOwned[_excluded[i]];
            }
        }
        if (rSupply < _rTotal / _tTotal) return _rTotal / _tTotal;
        return rSupply / tSupply;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"_buyTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"buyback","type":"uint16"},{"internalType":"uint16","name":"charity","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"buyback","type":"uint16"},{"internalType":"uint16","name":"charity","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"buyback","type":"uint16"},{"internalType":"uint16","name":"charity","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"buyback","type":"address"},{"internalType":"address payable","name":"charity","type":"address"},{"internalType":"address payable","name":"team","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"buyback","type":"uint16"},{"internalType":"uint16","name":"charity","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMaxTX","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":"_antiSnipe","type":"address"}],"name":"intializeContract","outputs":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lowerTaxes72hrs","outputs":[],"stateMutability":"nonpayable","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","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":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyback","type":"uint16"},{"internalType":"uint16","name":"charity","type":"uint16"},{"internalType":"uint16","name":"team","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":"reflect","type":"uint16"},{"internalType":"uint16","name":"buyback","type":"uint16"},{"internalType":"uint16","name":"charity","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"buyback","type":"uint16"},{"internalType":"uint16","name":"charity","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"buyback","type":"uint16"},{"internalType":"uint16","name":"charity","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"buyback","type":"address"},{"internalType":"address payable","name":"charity","type":"address"},{"internalType":"address payable","name":"team","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":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600481905561012c608081905261019060a0819052606460c08190526102bc60e08190526104b0610100819052601180546001600160501b03199081166904b002bc00640190012c908117909255610120879052610384610140526101608590526101808490526106a46101a0526012805482166906a402bc00640384012c1790556101c0969096526101e09490945261020092909252610220526102405260138054909216179055600d61026052600261028052600e6102a052601d6102c052601480546001600160401b031916661d000e0002000d1790556103406040527337a42a6edd1a6e33c31f5dba132297cd857ee92e6102e081905273d6a55b7b875a8ffa78479138de54a6b71a3bbef36103008190527369665a0f1346d30a1b85311632b1d8e3c3a9a17b610320819052601780546001600160a01b031990811690941790556018805484169092179091556019805483169091179055601a805461ff0019169055601b8290556020805461ffff60ff60b01b011916905581543391161790554660381415620001bd57601580546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790556200023a565b4660611415620001f357601580546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c31790556200023a565b4660011480620002035750466004145b156200023557601580546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200023a565b600080fd5b600080546001600160a01b0390811682526006602090815260408084208054600160ff19918216811790925530865282862080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805482168317905585549094168552600a90925283208054909216179055615697908190620002c490396000f3fe6080604052600436106103bc5760003560e01c806370a08231116101f2578063b6f8f8dc1161010d578063e4fcfd18116100a0578063eec2744e1161006f578063eec2744e14610c03578063f94aa1b414610c23578063fdb78c0e14610c7a578063fe575a8714610c9957600080fd5b8063e4fcfd1814610b98578063e8a0e3f914610bae578063eafb5a3c14610bce578063ee5d9c2d14610bee57600080fd5b8063c6831cd8116100dc578063c6831cd814610a7a578063cab5ebea14610ac7578063cf84770614610ae7578063dd62ed3e14610b5257600080fd5b8063b6f8f8dc146109cd578063bc77169d146109ed578063becdf13f14610a0d578063c2fa418f14610a2d57600080fd5b80638a8c523c11610185578063aa22b17211610154578063aa22b1721461098d578063aa545473146109ad578063b1b08f711461053d578063b3d514fb1461053d57600080fd5b80638a8c523c1461092357806395d89b4114610938578063a457c2d71461094d578063a9059cbb1461096d57600080fd5b806380c581d1116101c157806380c581d11461089757806388f82020146108b7578063893d20e8146108f05780638a63bd9b1461090e57600080fd5b806370a08231146107c0578063715018a6146107e057806375cb1bd1146107f55780637b45d4311461081557600080fd5b806333251a0b116102e25780634fbee19311610275578063590ffdce11610244578063590ffdce146107325780635c24b074146107525780635cce86cd146107725780636ebd0078146107ab57600080fd5b80634fbee193146106a557806350a8e016146106de578063533ecf54146106fd57806355dbc3691461071d57600080fd5b80633f3cf56c116102b15780633f3cf56c1461062b578063452ed4f11461064b5780634ada218b1461066b5780634fb2e45d1461068557600080fd5b806333251a0b146105ab57806334cd8260146105cb57806336fddb04146105eb578063395093511461060b57600080fd5b806313e461921161035a5780632b28fc7a116103295780632b28fc7a1461053d5780632d838119146105535780632e8fa82114610573578063313ce5671461058957600080fd5b806313e46192146104c857806318160ddd146104e857806323b872dd146104fd5780632610eaca1461051d57600080fd5b806305bbedb61161039657806305bbedb61461043657806306fdde03146104565780630758d92414610478578063095ea7b31461049857600080fd5b806303fd2a45146103c85780630445b667146103fb57806305b857551461041f57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b50610411601d5481565b6040519081526020016103f2565b34801561042b57600080fd5b50610434610cb9565b005b34801561044257600080fd5b50610434610451366004614c95565b610d73565b34801561046257600080fd5b5061046b610e47565b6040516103f29190614d13565b34801561048457600080fd5b506015546103de906001600160a01b031681565b3480156104a457600080fd5b506104b86104b3366004614d46565b610ed9565b60405190151581526020016103f2565b3480156104d457600080fd5b506104346104e3366004614d72565b610ef0565b3480156104f457600080fd5b506104116113b3565b34801561050957600080fd5b506104b8610518366004614da0565b6113cc565b34801561052957600080fd5b50610434610538366004614e3c565b611444565b34801561054957600080fd5b506104116107d081565b34801561055f57600080fd5b5061041161056e366004614ea0565b611549565b34801561057f57600080fd5b50610411601e5481565b34801561059557600080fd5b50600e5460405160ff90911681526020016103f2565b3480156105b757600080fd5b506104346105c6366004614eb9565b6115e0565b3480156105d757600080fd5b506104346105e6366004614ed6565b6116b0565b3480156105f757600080fd5b50610434610606366004614d72565b611740565b34801561061757600080fd5b506104b8610626366004614d46565b6117b9565b34801561063757600080fd5b50610434610646366004614f11565b6117f5565b34801561065757600080fd5b506016546103de906001600160a01b031681565b34801561067757600080fd5b506020546104b89060ff1681565b34801561069157600080fd5b506104346106a0366004614eb9565b611900565b3480156106b157600080fd5b506104b86106c0366004614eb9565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106ea57600080fd5b506020546104b890610100900460ff1681565b34801561070957600080fd5b50610434610718366004614eb9565b611aff565b34801561072957600080fd5b50610411612192565b34801561073e57600080fd5b5061043461074d366004614d72565b612210565b34801561075e57600080fd5b5061043461076d366004614eb9565b612289565b34801561077e57600080fd5b506104b861078d366004614eb9565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107b757600080fd5b506104116123c8565b3480156107cc57600080fd5b506104116107db366004614eb9565b6123e9565b3480156107ec57600080fd5b50610434612448565b34801561080157600080fd5b50610434610810366004614f33565b6124f8565b34801561082157600080fd5b506011546108629061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103f2565b3480156108a357600080fd5b506104346108b2366004614d72565b612592565b3480156108c357600080fd5b506104b86108d2366004614eb9565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108fc57600080fd5b506000546001600160a01b03166103de565b34801561091a57600080fd5b506104b8612753565b34801561092f57600080fd5b506104346127c2565b34801561094457600080fd5b5061046b6129b2565b34801561095957600080fd5b506104b8610968366004614d46565b6129c1565b34801561097957600080fd5b506104b8610988366004614d46565b6129f8565b34801561099957600080fd5b506104346109a8366004614f95565b612a0f565b3480156109b957600080fd5b506104346109c8366004614fd8565b612af0565b3480156109d957600080fd5b506104346109e836600461502c565b612c30565b3480156109f957600080fd5b50610434610a08366004614fd8565b612d10565b348015610a1957600080fd5b50610434610a28366004614fd8565b612e50565b348015610a3957600080fd5b506013546108629061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610a8657600080fd5b506012546108629061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610ad357600080fd5b50610434610ae236600461506c565b612f90565b348015610af357600080fd5b50601454610b249061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103f2565b348015610b5e57600080fd5b50610411610b6d366004615089565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610ba457600080fd5b50610411601b5481565b348015610bba57600080fd5b50610434610bc93660046150b7565b613032565b348015610bda57600080fd5b50610434610be9366004614eb9565b61318f565b348015610bfa57600080fd5b5061043461353e565b348015610c0f57600080fd5b50610434610c1e366004614d72565b613621565b348015610c2f57600080fd5b50601754601854601954610c50926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103f2565b348015610c8657600080fd5b50601a546104b890610100900460ff1681565b348015610ca557600080fd5b506104b8610cb4366004614eb9565b6136c9565b6000546001600160a01b03163314610d0c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601280547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000166904b002bc00640190012c179055601480547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016660c000700010004179055565b6000546001600160a01b03163314610dc15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6020546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610e119085908590600401615183565b600060405180830381600087803b158015610e2b57600080fd5b505af1158015610e3f573d6000803e3d6000fd5b505050505050565b6060600c8054610e56906151a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e82906151a7565b8015610ecf5780601f10610ea457610100808354040283529160200191610ecf565b820191906000526020600020905b815481529060010190602001808311610eb257829003601f168201915b5050505050905090565b6000610ee6338484613757565b5060015b92915050565b6000546001600160a01b03163314610f3e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b8015611093576001600160a01b03821660009081526008602052604090205460ff1615610fad5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d03565b6001600160a01b03821660009081526001602052604090205415611007576001600160a01b038216600090815260016020526040902054610fed90611549565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600860205260409020805460ff191660011790556016549091161461108f57600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b8061108f576001600160a01b03821660009081526008602052604090205460ff166111005760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d03565b6016546001600160a01b038381169116141561117b5761111e613864565b6001600160a01b038316600090815260026020526040902054611141919061522a565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690555050565b6009546001141561122b5761118e613864565b6001600160a01b0383166000908152600260205260409020546111b1919061522a565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff1916905560098054806111f8576111f8615249565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b6009548110156113ae57826001600160a01b03166009828154811061125557611255615278565b6000918252602090912001546001600160a01b0316141561139c5760098054611280906001906152a7565b8154811061129057611290615278565b600091825260209091200154600980546001600160a01b0390921691839081106112bc576112bc615278565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03948516179055918516815260029091526040812055611308613864565b6001600160a01b03841660009081526002602052604090205461132b919061522a565b6001600160a01b0384166000908152600160209081526040808320939093556008905220805460ff19169055600980548061136857611368615249565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b806113a6816152be565b91505061122e565b505050565b6000600f54600014156113c557600080fd5b50600f5490565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914611431576001600160a01b03841660009081526005602090815260408083203384529091528120805484929061142b9084906152a7565b90915550505b61143c848484613ad7565b949350505050565b80518251146114955760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d03565b60005b82518160ff1610156113ae57818160ff16815181106114b9576114b9615278565b60200260200101516114ca336123e9565b10156114d557600080fd5b61153633848360ff16815181106114ee576114ee615278565b6020908102919091010151600e5461150a9060ff16600a6153bd565b858560ff168151811061151f5761151f615278565b6020026020010151611531919061522a565b613ad7565b5080611541816153cc565b915050611498565b60006010548211156115c35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610d03565b60006115cd613864565b90506115d9818461541b565b9392505050565b6000546001600160a01b0316331461162e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6020546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b15801561169557600080fd5b505af11580156116a9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146116fe5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b8385600f5461170d919061522a565b611717919061541b565b601d55600f54829061172a90859061522a565b611734919061541b565b601e55601b5550505050565b6000546001600160a01b0316331461178e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610ee69185906117f090869061542f565b613757565b6000546001600160a01b031633146118435760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6103e8600f54611853919061541b565b8183600f54611862919061522a565b61186c919061541b565b10156118e05760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d03565b8082600f546118ef919061522a565b6118f9919061541b565b601f555050565b6000546001600160a01b0316331461194e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6001600160a01b0381166119ca5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d03565b6001600160a01b03811661dead1415611a4b5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d03565b60008054611a64916001600160a01b0390911690612210565b611a6f816001612210565b60008054611a85906001600160a01b03166123e9565b1115611aa757600054611aa5906001600160a01b031682611531826123e9565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611b4d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b602054760100000000000000000000000000000000000000000000900460ff1615611bba5760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610d03565b602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b158015611c4c57600080fd5b505af1925050508015611c5d575060015b506000602060029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015611cd457506040513d6000823e601f3d908101601f19168201604052611cd191908101906154ab565b60015b611d205760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610d03565b8451611d3390600c906020880190614ae1565b508351611d4790600d906020870190614ae1565b50600b839055600e805460ff191660ff8416908117909155611d6a90600a6153bd565b600b54611d77919061522a565b600f819055611d8890600019615547565b611d94906000196152a7565b601055601554604080517fc45a015500000000000000000000000000000000000000000000000000000000815290519297506001600160a01b03909116955063c45a015594506004808201945060209350908290030181865afa158015611dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e23919061555b565b6001600160a01b031663c9c65396601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea8919061555b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f30919061555b565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360205260409020805460ff19166001179055600f5461271090611f8790600261522a565b611f91919061541b565b601d55600f5461271090611fa690600561522a565b611fb0919061541b565b601e55600f546103e890611fc590600561522a565b611fcf919061541b565b601f55602080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000178155601054600080546001600160a01b039081168252600184526040808320939093558154600f549351938452169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36015546120879033906001600160a01b0316600019613757565b6015546120a19030906001600160a01b0316600019613757565b6000546120bb906001600160a01b031630611531826123e9565b506015546001600160a01b031663f305d71947306120d8816123e9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b0392831660048201526024810191909152600060448201819052606482015290851660848201524260a482015260c40160606040518083038185885af1158015612159573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061217e9190615578565b5050506121896127c2565b61108f81611900565b6000602060029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220b91906155a6565b905090565b6000546001600160a01b0316331461225e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146122d75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b602054610100900460ff161561232f5760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610d03565b6001600160a01b0381163014156123885760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610d03565b602080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600e546000906123dc9060ff16600a6153bd565b601f5461220b919061541b565b6001600160a01b03811660009081526008602052604081205460ff161561242657506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610eea90611549565b6000546001600160a01b031633146124965760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b600080546124af916001600160a01b0390911690612210565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146125465760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b601780546001600160a01b0394851673ffffffffffffffffffffffffffffffffffffffff1991821617909155601880549385169382169390931790925560198054919093169116179055565b6000546001600160a01b031633146125e05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b8061266d576001600160a01b038281166000818152600360209081526040808320805460ff19169055905490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610e2b57600080fd5b600454156126d4576203f4806004544261268791906152a7565b116126d45760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610d03565b6001600160a01b03828116600081815260036020908152604091829020805460ff19166001908117909155426004908155915492517f80c581d1000000000000000000000000000000000000000000000000000000008152918201939093526024810192909252620100009004909116906380c581d190604401610e11565b600080546001600160a01b031633146127a25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6015546127bc9030906001600160a01b0316600019613757565b50600190565b6000546001600160a01b031633146128105760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b60205460ff16156128635760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d03565b602054610100900460ff166128ba5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d03565b6020546201000090046001600160a01b031661290057602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602054601654600e546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561299157600080fd5b505af19250505080156129a2575060015b506020805460ff19166001179055565b6060600d8054610e56906151a7565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610ee69185906117f09086906152a7565b6000612a05338484613ad7565b5060019392505050565b6000546001600160a01b03163314612a5d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6014805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff868316620100000263ffffffff1990941692881692909217929092171617905580612aba83856155bf565b612ac491906155bf565b6014805461ffff9290921666010000000000000267ffff00000000000019909216919091179055505050565b6000546001600160a01b03163314612b3e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b60008183612b4c86886155bf565b612b5691906155bf565b612b6091906155bf565b90506107d08161ffff161115612b7557600080fd5b6013805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008683160267ffff000000000000191617660100000000000091851691909102179055612be985826155e5565b6013805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612c7e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6020546040517f6a34b758000000000000000000000000000000000000000000000000000000008152841515600482015283151560248201528215156044820152620100009091046001600160a01b031690636a34b75890606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314612d5e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b60008183612d6c86886155bf565b612d7691906155bf565b612d8091906155bf565b90506107d08161ffff161115612d9557600080fd5b6011805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008683160267ffff000000000000191617660100000000000091851691909102179055612e0985826155e5565b6011805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612e9e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b60008183612eac86886155bf565b612eb691906155bf565b612ec091906155bf565b90506107d08161ffff161115612ed557600080fd5b6012805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008683160267ffff000000000000191617660100000000000091851691909102179055612f4985826155e5565b6012805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612fde5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b601a80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061302790831515815260200190565b60405180910390a150565b81518351148015613044575080518251145b6130905760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d03565b60005b83518160ff16101561318957818160ff16815181106130b4576130b4615278565b6020026020010151838260ff16815181106130d1576130d1615278565b6020026020010151600f546130e6919061522a565b6130f0919061541b565b6130f9336123e9565b101561310457600080fd5b61317633858360ff168151811061311d5761311d615278565b6020026020010151848460ff168151811061313a5761313a615278565b6020026020010151868560ff168151811061315757613157615278565b6020026020010151600f5461316c919061522a565b611531919061541b565b5080613181816153cc565b915050613093565b50505050565b6000546001600160a01b031633146131dd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613246919061555b565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b7919061555b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561331a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061333e919061555b565b90506001600160a01b0381166134dc57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b0919061555b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613421919061555b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134aa919061555b565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055613505565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556113ae903090600019613757565b6000546001600160a01b0316331461358c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b602054610100900460ff16156135e45760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d03565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561361e573d6000803e3d6000fd5b50565b6000546001600160a01b0316331461366f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6020546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610e11565b6020546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015613733573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eea9190615608565b6001600160a01b0383166137ad5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d03565b6001600160a01b0382166138035760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d03565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601054600f546016546001600160a01b03166000908152600860205260408120549092919060ff161561393e576016546001600160a01b03166000908152600160205260409020548210806138d257506016546001600160a01b031660009081526002602052604090205481105b156138ee57600f546010546138e7919061541b565b9250505090565b6016546001600160a01b031660009081526001602052604090205461391390836152a7565b6016546001600160a01b031660009081526002602052604090205490925061393b90826152a7565b90505b60095415613aa65760005b60095460ff82161015613aa457826001600060098460ff168154811061397157613971615278565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806139df5750816002600060098460ff16815481106139b8576139b8615278565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156139fc57600f546010546139f4919061541b565b935050505090565b6001600060098360ff1681548110613a1657613a16615278565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613a4590846152a7565b92506002600060098360ff1681548110613a6157613a61615278565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613a9090836152a7565b915080613a9c816153cc565b915050613949565b505b600f54601054613ab6919061541b565b821015613acd57600f546010546138e7919061541b565b6138e7818361541b565b60006001600160a01b038416613b555760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d03565b6001600160a01b038316613bd15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d03565b60008211613c475760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d03565b613c518484613e95565b15613dab5760205460ff16613ca85760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d03565b6001600160a01b03841660009081526003602052604090205460ff1680613ce757506001600160a01b03831660009081526003602052604090205460ff165b15613dab576001600160a01b03841660009081526007602052604090205460ff16158015613d2e57506001600160a01b03831660009081526007602052604090205460ff16155b15613dab57601f54821115613dab5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d03565b6001600160a01b03841660009081526006602052604090205460019060ff1680613ded57506001600160a01b03841660009081526006602052604090205460ff165b15613df6575060005b6001600160a01b03841660009081526003602052604090205460ff1615613e8057601a5460ff16158015613e315750601a54610100900460ff165b15613e805742601b54601c54613e47919061542f565b11613e80576000613e57306123e9565b9050601d548110613e7e57601e548110613e705750601e545b613e7981613f69565b42601c555b505b613e8c85858584614366565b95945050505050565b600080546001600160a01b03848116911614801590613ec257506000546001600160a01b03838116911614155b8015613ed957506000546001600160a01b03163214155b8015613efe57506001600160a01b0382166000908152600a602052604090205460ff16155b8015613f2357506001600160a01b0383166000908152600a602052604090205460ff16155b8015613f3a57506001600160a01b03821661dead14155b8015613f4e57506001600160a01b03821615155b80156115d957506001600160a01b0383163014159392505050565b601a805460ff191660011790556040805160808101825260145461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052613fc75750614359565b3060009081526005602090815260408083206015546001600160a01b0316845290915290205460001914614020573060009081526005602090815260408083206015546001600160a01b03168452909152902060001990555b604080516002808252606082018352600092602083019080368337019050509050308160008151811061405557614055615278565b6001600160a01b03928316602091820292909201810191909152601554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156140c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140eb919061555b565b816001815181106140fe576140fe615278565b6001600160a01b0392831660209182029290920101526015546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac9479061415d908690600090869030904290600401615625565b600060405180830381600087803b15801561417757600080fd5b505af115801561418b573d6000803e3d6000fd5b5050506060830151835147925060009161ffff908116916141ad91168461522a565b6141b7919061541b565b90506000846060015161ffff16856020015161ffff16846141d8919061522a565b6141e2919061541b565b90506000856060015161ffff16866040015161ffff1685614203919061522a565b61420d919061541b565b865190915060009061ffff161561427b576017546040516001600160a01b03909116906175309086906000818181858888f193505050503d8060008114614270576040519150601f19603f3d011682016040523d82523d6000602084013e614275565b606091505b50909150505b602087015161ffff16156142e6576018546040516001600160a01b03909116906175309085906000818181858888f193505050503d80600081146142db576040519150601f19603f3d011682016040523d82523d6000602084013e6142e0565b606091505b50909150505b604087015161ffff1615614351576019546040516001600160a01b03909116906175309084906000818181858888f193505050503d8060008114614346576040519150601f19603f3d011682016040523d82523d6000602084013e61434b565b606091505b50909150505b505050505050505b50601a805460ff19169055565b602054600090610100900460ff166144125761438285856145da565b602054610100900460ff1615801561439f575061439f8585613e95565b156144125760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d03565b600061442086868686614739565b60808101516001600160a01b03881660009081526001602052604081208054939450919261444f9084906152a7565b909155505060608101516001600160a01b0386166000908152600160205260408120805490919061448190849061542f565b90915550506001600160a01b03861660009081526008602052604090205460ff16156144e5576001600160a01b0386166000908152600260205260409020546144cb9085906152a7565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526008602052604090205460ff16156145455780516001600160a01b03861660009081526002602052604090205461452b919061542f565b6001600160a01b0386166000908152600260205260409020555b60008160a00151118061455c575060008160200151115b1561457d578060a001516010600082825461457791906152a7565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83600001516040516145c691815260200190565b60405180910390a350600195945050505050565b602054610100900460ff16156146585760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d03565b6146628282613e95565b15801561467c57506016546001600160a01b038281169116145b1561108f576001600160a01b038083166000908152600a60209081526040909120805460ff19166001179055805461ff0019166101001790819055620100009004166146f257602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6147796040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6147b96040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6147c1613864565b60c082018190526147d2908561522a565b60808201526147e18686613e95565b15614894576020546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152878116602483015260448201879052600092620100009004169063ecd07a53906064016020604051808303816000875af192505050801561487d575060408051601f3d908101601f1916820190925261487a91810190615608565b60015b61488657600080fd5b90508061489257600080fd5b505b82156149b1576001600160a01b03851660009081526003602052604081205481906127109060ff16156148e15760125461ffff80821694506801000000000000000090910416915061493e565b6001600160a01b03891660009081526003602052604090205460ff16156149225760115461ffff80821694506801000000000000000090910416915061493e565b60135461ffff8082169450680100000000000000009091041691505b80614949848961522a565b614953919061541b565b602085015280614963838961522a565b61496d919061541b565b604085018190526020850151614983919061542f565b61498d90886152a7565b845260c084015160208501516149a3919061522a565b60a0850152506149ca915050565b6000602082018190526040820181905284825260a08201525b604081015115614aa1578060c0015181604001516149e8919061522a565b3060009081526001602052604081208054909190614a0790849061542f565b90915550503060009081526008602052604090205460ff1615614a4f576040808201513060009081526002602052918220805491929091614a4990849061542f565b90915550505b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360400151604051614a9891815260200190565b60405180910390a35b8060c001518160400151614ab5919061522a565b8160a00151614ac4919061542f565b8160800151614ad391906152a7565b606082015295945050505050565b828054614aed906151a7565b90600052602060002090601f016020900481019282614b0f5760008555614b55565b82601f10614b2857805160ff1916838001178555614b55565b82800160010185558215614b55579182015b82811115614b55578251825591602001919060010190614b3a565b50614b61929150614b65565b5090565b5b80821115614b615760008155600101614b66565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614bd257614bd2614b7a565b604052919050565b600067ffffffffffffffff821115614bf457614bf4614b7a565b5060051b60200190565b6001600160a01b038116811461361e57600080fd5b600082601f830112614c2457600080fd5b81356020614c39614c3483614bda565b614ba9565b82815260059290921b84018101918181019086841115614c5857600080fd5b8286015b84811015614c7c578035614c6f81614bfe565b8352918301918301614c5c565b509695505050505050565b801515811461361e57600080fd5b60008060408385031215614ca857600080fd5b823567ffffffffffffffff811115614cbf57600080fd5b614ccb85828601614c13565b9250506020830135614cdc81614c87565b809150509250929050565b60005b83811015614d02578181015183820152602001614cea565b838111156131895750506000910152565b6020815260008251806020840152614d32816040850160208701614ce7565b601f01601f19169190910160400192915050565b60008060408385031215614d5957600080fd5b8235614d6481614bfe565b946020939093013593505050565b60008060408385031215614d8557600080fd5b8235614d9081614bfe565b91506020830135614cdc81614c87565b600080600060608486031215614db557600080fd5b8335614dc081614bfe565b92506020840135614dd081614bfe565b929592945050506040919091013590565b600082601f830112614df257600080fd5b81356020614e02614c3483614bda565b82815260059290921b84018101918181019086841115614e2157600080fd5b8286015b84811015614c7c5780358352918301918301614e25565b60008060408385031215614e4f57600080fd5b823567ffffffffffffffff80821115614e6757600080fd5b614e7386838701614c13565b93506020850135915080821115614e8957600080fd5b50614e9685828601614de1565b9150509250929050565b600060208284031215614eb257600080fd5b5035919050565b600060208284031215614ecb57600080fd5b81356115d981614bfe565b600080600080600060a08688031215614eee57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215614f2457600080fd5b50508035926020909101359150565b600080600060608486031215614f4857600080fd5b8335614f5381614bfe565b92506020840135614f6381614bfe565b91506040840135614f7381614bfe565b809150509250925092565b803561ffff81168114614f9057600080fd5b919050565b600080600060608486031215614faa57600080fd5b614fb384614f7e565b9250614fc160208501614f7e565b9150614fcf60408501614f7e565b90509250925092565b60008060008060808587031215614fee57600080fd5b614ff785614f7e565b935061500560208601614f7e565b925061501360408601614f7e565b915061502160608601614f7e565b905092959194509250565b60008060006060848603121561504157600080fd5b833561504c81614c87565b9250602084013561505c81614c87565b91506040840135614f7381614c87565b60006020828403121561507e57600080fd5b81356115d981614c87565b6000806040838503121561509c57600080fd5b82356150a781614bfe565b91506020830135614cdc81614bfe565b6000806000606084860312156150cc57600080fd5b833567ffffffffffffffff808211156150e457600080fd5b6150f087838801614c13565b9450602086013591508082111561510657600080fd5b61511287838801614de1565b9350604086013591508082111561512857600080fd5b5061513586828701614de1565b9150509250925092565b600081518084526020808501945080840160005b838110156151785781516001600160a01b031687529582019590820190600101615153565b509495945050505050565b604081526000615196604083018561513f565b905082151560208301529392505050565b600181811c908216806151bb57607f821691505b602082108114156151f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000816000190483118215151615615244576152446151fb565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000828210156152b9576152b96151fb565b500390565b60006000198214156152d2576152d26151fb565b5060010190565b600181815b808511156153145781600019048211156152fa576152fa6151fb565b8085161561530757918102915b93841c93908002906152de565b509250929050565b60008261532b57506001610eea565b8161533857506000610eea565b816001811461534e576002811461535857615374565b6001915050610eea565b60ff841115615369576153696151fb565b50506001821b610eea565b5060208310610133831016604e8410600b8410161715615397575081810a610eea565b6153a183836152d9565b80600019048211156153b5576153b56151fb565b029392505050565b60006115d960ff84168361531c565b600060ff821660ff8114156153e3576153e36151fb565b60010192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261542a5761542a6153ec565b500490565b60008219821115615442576154426151fb565b500190565b600082601f83011261545857600080fd5b815167ffffffffffffffff81111561547257615472614b7a565b6154856020601f19601f84011601614ba9565b81815284602083860101111561549a57600080fd5b61143c826020830160208701614ce7565b600080600080600060a086880312156154c357600080fd5b855167ffffffffffffffff808211156154db57600080fd5b6154e789838a01615447565b965060208801519150808211156154fd57600080fd5b5061550a88828901615447565b94505060408601519250606086015160ff8116811461552857600080fd5b608087015190925061553981614bfe565b809150509295509295909350565b600082615556576155566153ec565b500690565b60006020828403121561556d57600080fd5b81516115d981614bfe565b60008060006060848603121561558d57600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156155b857600080fd5b5051919050565b600061ffff8083168185168083038211156155dc576155dc6151fb565b01949350505050565b600061ffff83811690831681811015615600576156006151fb565b039392505050565b60006020828403121561561a57600080fd5b81516115d981614c87565b85815284602082015260a06040820152600061564460a083018661513f565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220d71662e966ac5175003953732855a8fcba0485ae1e55d36757f750e98b0e9b5464736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c806370a08231116101f2578063b6f8f8dc1161010d578063e4fcfd18116100a0578063eec2744e1161006f578063eec2744e14610c03578063f94aa1b414610c23578063fdb78c0e14610c7a578063fe575a8714610c9957600080fd5b8063e4fcfd1814610b98578063e8a0e3f914610bae578063eafb5a3c14610bce578063ee5d9c2d14610bee57600080fd5b8063c6831cd8116100dc578063c6831cd814610a7a578063cab5ebea14610ac7578063cf84770614610ae7578063dd62ed3e14610b5257600080fd5b8063b6f8f8dc146109cd578063bc77169d146109ed578063becdf13f14610a0d578063c2fa418f14610a2d57600080fd5b80638a8c523c11610185578063aa22b17211610154578063aa22b1721461098d578063aa545473146109ad578063b1b08f711461053d578063b3d514fb1461053d57600080fd5b80638a8c523c1461092357806395d89b4114610938578063a457c2d71461094d578063a9059cbb1461096d57600080fd5b806380c581d1116101c157806380c581d11461089757806388f82020146108b7578063893d20e8146108f05780638a63bd9b1461090e57600080fd5b806370a08231146107c0578063715018a6146107e057806375cb1bd1146107f55780637b45d4311461081557600080fd5b806333251a0b116102e25780634fbee19311610275578063590ffdce11610244578063590ffdce146107325780635c24b074146107525780635cce86cd146107725780636ebd0078146107ab57600080fd5b80634fbee193146106a557806350a8e016146106de578063533ecf54146106fd57806355dbc3691461071d57600080fd5b80633f3cf56c116102b15780633f3cf56c1461062b578063452ed4f11461064b5780634ada218b1461066b5780634fb2e45d1461068557600080fd5b806333251a0b146105ab57806334cd8260146105cb57806336fddb04146105eb578063395093511461060b57600080fd5b806313e461921161035a5780632b28fc7a116103295780632b28fc7a1461053d5780632d838119146105535780632e8fa82114610573578063313ce5671461058957600080fd5b806313e46192146104c857806318160ddd146104e857806323b872dd146104fd5780632610eaca1461051d57600080fd5b806305bbedb61161039657806305bbedb61461043657806306fdde03146104565780630758d92414610478578063095ea7b31461049857600080fd5b806303fd2a45146103c85780630445b667146103fb57806305b857551461041f57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040757600080fd5b50610411601d5481565b6040519081526020016103f2565b34801561042b57600080fd5b50610434610cb9565b005b34801561044257600080fd5b50610434610451366004614c95565b610d73565b34801561046257600080fd5b5061046b610e47565b6040516103f29190614d13565b34801561048457600080fd5b506015546103de906001600160a01b031681565b3480156104a457600080fd5b506104b86104b3366004614d46565b610ed9565b60405190151581526020016103f2565b3480156104d457600080fd5b506104346104e3366004614d72565b610ef0565b3480156104f457600080fd5b506104116113b3565b34801561050957600080fd5b506104b8610518366004614da0565b6113cc565b34801561052957600080fd5b50610434610538366004614e3c565b611444565b34801561054957600080fd5b506104116107d081565b34801561055f57600080fd5b5061041161056e366004614ea0565b611549565b34801561057f57600080fd5b50610411601e5481565b34801561059557600080fd5b50600e5460405160ff90911681526020016103f2565b3480156105b757600080fd5b506104346105c6366004614eb9565b6115e0565b3480156105d757600080fd5b506104346105e6366004614ed6565b6116b0565b3480156105f757600080fd5b50610434610606366004614d72565b611740565b34801561061757600080fd5b506104b8610626366004614d46565b6117b9565b34801561063757600080fd5b50610434610646366004614f11565b6117f5565b34801561065757600080fd5b506016546103de906001600160a01b031681565b34801561067757600080fd5b506020546104b89060ff1681565b34801561069157600080fd5b506104346106a0366004614eb9565b611900565b3480156106b157600080fd5b506104b86106c0366004614eb9565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106ea57600080fd5b506020546104b890610100900460ff1681565b34801561070957600080fd5b50610434610718366004614eb9565b611aff565b34801561072957600080fd5b50610411612192565b34801561073e57600080fd5b5061043461074d366004614d72565b612210565b34801561075e57600080fd5b5061043461076d366004614eb9565b612289565b34801561077e57600080fd5b506104b861078d366004614eb9565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107b757600080fd5b506104116123c8565b3480156107cc57600080fd5b506104116107db366004614eb9565b6123e9565b3480156107ec57600080fd5b50610434612448565b34801561080157600080fd5b50610434610810366004614f33565b6124f8565b34801561082157600080fd5b506011546108629061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103f2565b3480156108a357600080fd5b506104346108b2366004614d72565b612592565b3480156108c357600080fd5b506104b86108d2366004614eb9565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108fc57600080fd5b506000546001600160a01b03166103de565b34801561091a57600080fd5b506104b8612753565b34801561092f57600080fd5b506104346127c2565b34801561094457600080fd5b5061046b6129b2565b34801561095957600080fd5b506104b8610968366004614d46565b6129c1565b34801561097957600080fd5b506104b8610988366004614d46565b6129f8565b34801561099957600080fd5b506104346109a8366004614f95565b612a0f565b3480156109b957600080fd5b506104346109c8366004614fd8565b612af0565b3480156109d957600080fd5b506104346109e836600461502c565b612c30565b3480156109f957600080fd5b50610434610a08366004614fd8565b612d10565b348015610a1957600080fd5b50610434610a28366004614fd8565b612e50565b348015610a3957600080fd5b506013546108629061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610a8657600080fd5b506012546108629061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610ad357600080fd5b50610434610ae236600461506c565b612f90565b348015610af357600080fd5b50601454610b249061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103f2565b348015610b5e57600080fd5b50610411610b6d366004615089565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610ba457600080fd5b50610411601b5481565b348015610bba57600080fd5b50610434610bc93660046150b7565b613032565b348015610bda57600080fd5b50610434610be9366004614eb9565b61318f565b348015610bfa57600080fd5b5061043461353e565b348015610c0f57600080fd5b50610434610c1e366004614d72565b613621565b348015610c2f57600080fd5b50601754601854601954610c50926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103f2565b348015610c8657600080fd5b50601a546104b890610100900460ff1681565b348015610ca557600080fd5b506104b8610cb4366004614eb9565b6136c9565b6000546001600160a01b03163314610d0c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601280547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000166904b002bc00640190012c179055601480547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016660c000700010004179055565b6000546001600160a01b03163314610dc15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6020546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610e119085908590600401615183565b600060405180830381600087803b158015610e2b57600080fd5b505af1158015610e3f573d6000803e3d6000fd5b505050505050565b6060600c8054610e56906151a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e82906151a7565b8015610ecf5780601f10610ea457610100808354040283529160200191610ecf565b820191906000526020600020905b815481529060010190602001808311610eb257829003601f168201915b5050505050905090565b6000610ee6338484613757565b5060015b92915050565b6000546001600160a01b03163314610f3e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b8015611093576001600160a01b03821660009081526008602052604090205460ff1615610fad5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d03565b6001600160a01b03821660009081526001602052604090205415611007576001600160a01b038216600090815260016020526040902054610fed90611549565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600860205260409020805460ff191660011790556016549091161461108f57600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b8061108f576001600160a01b03821660009081526008602052604090205460ff166111005760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d03565b6016546001600160a01b038381169116141561117b5761111e613864565b6001600160a01b038316600090815260026020526040902054611141919061522a565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690555050565b6009546001141561122b5761118e613864565b6001600160a01b0383166000908152600260205260409020546111b1919061522a565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff1916905560098054806111f8576111f8615249565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b6009548110156113ae57826001600160a01b03166009828154811061125557611255615278565b6000918252602090912001546001600160a01b0316141561139c5760098054611280906001906152a7565b8154811061129057611290615278565b600091825260209091200154600980546001600160a01b0390921691839081106112bc576112bc615278565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03948516179055918516815260029091526040812055611308613864565b6001600160a01b03841660009081526002602052604090205461132b919061522a565b6001600160a01b0384166000908152600160209081526040808320939093556008905220805460ff19169055600980548061136857611368615249565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b806113a6816152be565b91505061122e565b505050565b6000600f54600014156113c557600080fd5b50600f5490565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914611431576001600160a01b03841660009081526005602090815260408083203384529091528120805484929061142b9084906152a7565b90915550505b61143c848484613ad7565b949350505050565b80518251146114955760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d03565b60005b82518160ff1610156113ae57818160ff16815181106114b9576114b9615278565b60200260200101516114ca336123e9565b10156114d557600080fd5b61153633848360ff16815181106114ee576114ee615278565b6020908102919091010151600e5461150a9060ff16600a6153bd565b858560ff168151811061151f5761151f615278565b6020026020010151611531919061522a565b613ad7565b5080611541816153cc565b915050611498565b60006010548211156115c35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610d03565b60006115cd613864565b90506115d9818461541b565b9392505050565b6000546001600160a01b0316331461162e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6020546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b15801561169557600080fd5b505af11580156116a9573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146116fe5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b8385600f5461170d919061522a565b611717919061541b565b601d55600f54829061172a90859061522a565b611734919061541b565b601e55601b5550505050565b6000546001600160a01b0316331461178e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610ee69185906117f090869061542f565b613757565b6000546001600160a01b031633146118435760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6103e8600f54611853919061541b565b8183600f54611862919061522a565b61186c919061541b565b10156118e05760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d03565b8082600f546118ef919061522a565b6118f9919061541b565b601f555050565b6000546001600160a01b0316331461194e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6001600160a01b0381166119ca5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d03565b6001600160a01b03811661dead1415611a4b5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d03565b60008054611a64916001600160a01b0390911690612210565b611a6f816001612210565b60008054611a85906001600160a01b03166123e9565b1115611aa757600054611aa5906001600160a01b031682611531826123e9565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611b4d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b602054760100000000000000000000000000000000000000000000900460ff1615611bba5760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610d03565b602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b158015611c4c57600080fd5b505af1925050508015611c5d575060015b506000602060029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015611cd457506040513d6000823e601f3d908101601f19168201604052611cd191908101906154ab565b60015b611d205760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610d03565b8451611d3390600c906020880190614ae1565b508351611d4790600d906020870190614ae1565b50600b839055600e805460ff191660ff8416908117909155611d6a90600a6153bd565b600b54611d77919061522a565b600f819055611d8890600019615547565b611d94906000196152a7565b601055601554604080517fc45a015500000000000000000000000000000000000000000000000000000000815290519297506001600160a01b03909116955063c45a015594506004808201945060209350908290030181865afa158015611dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e23919061555b565b6001600160a01b031663c9c65396601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea8919061555b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f30919061555b565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360205260409020805460ff19166001179055600f5461271090611f8790600261522a565b611f91919061541b565b601d55600f5461271090611fa690600561522a565b611fb0919061541b565b601e55600f546103e890611fc590600561522a565b611fcf919061541b565b601f55602080547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000178155601054600080546001600160a01b039081168252600184526040808320939093558154600f549351938452169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36015546120879033906001600160a01b0316600019613757565b6015546120a19030906001600160a01b0316600019613757565b6000546120bb906001600160a01b031630611531826123e9565b506015546001600160a01b031663f305d71947306120d8816123e9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b0392831660048201526024810191909152600060448201819052606482015290851660848201524260a482015260c40160606040518083038185885af1158015612159573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061217e9190615578565b5050506121896127c2565b61108f81611900565b6000602060029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220b91906155a6565b905090565b6000546001600160a01b0316331461225e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146122d75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b602054610100900460ff161561232f5760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610d03565b6001600160a01b0381163014156123885760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610d03565b602080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600e546000906123dc9060ff16600a6153bd565b601f5461220b919061541b565b6001600160a01b03811660009081526008602052604081205460ff161561242657506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610eea90611549565b6000546001600160a01b031633146124965760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b600080546124af916001600160a01b0390911690612210565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146125465760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b601780546001600160a01b0394851673ffffffffffffffffffffffffffffffffffffffff1991821617909155601880549385169382169390931790925560198054919093169116179055565b6000546001600160a01b031633146125e05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b8061266d576001600160a01b038281166000818152600360209081526040808320805460ff19169055905490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610e2b57600080fd5b600454156126d4576203f4806004544261268791906152a7565b116126d45760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610d03565b6001600160a01b03828116600081815260036020908152604091829020805460ff19166001908117909155426004908155915492517f80c581d1000000000000000000000000000000000000000000000000000000008152918201939093526024810192909252620100009004909116906380c581d190604401610e11565b600080546001600160a01b031633146127a25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6015546127bc9030906001600160a01b0316600019613757565b50600190565b6000546001600160a01b031633146128105760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b60205460ff16156128635760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d03565b602054610100900460ff166128ba5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d03565b6020546201000090046001600160a01b031661290057602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602054601654600e546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561299157600080fd5b505af19250505080156129a2575060015b506020805460ff19166001179055565b6060600d8054610e56906151a7565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610ee69185906117f09086906152a7565b6000612a05338484613ad7565b5060019392505050565b6000546001600160a01b03163314612a5d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6014805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff868316620100000263ffffffff1990941692881692909217929092171617905580612aba83856155bf565b612ac491906155bf565b6014805461ffff9290921666010000000000000267ffff00000000000019909216919091179055505050565b6000546001600160a01b03163314612b3e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b60008183612b4c86886155bf565b612b5691906155bf565b612b6091906155bf565b90506107d08161ffff161115612b7557600080fd5b6013805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008683160267ffff000000000000191617660100000000000091851691909102179055612be985826155e5565b6013805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612c7e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6020546040517f6a34b758000000000000000000000000000000000000000000000000000000008152841515600482015283151560248201528215156044820152620100009091046001600160a01b031690636a34b75890606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314612d5e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b60008183612d6c86886155bf565b612d7691906155bf565b612d8091906155bf565b90506107d08161ffff161115612d9557600080fd5b6011805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008683160267ffff000000000000191617660100000000000091851691909102179055612e0985826155e5565b6011805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612e9e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b60008183612eac86886155bf565b612eb691906155bf565b612ec091906155bf565b90506107d08161ffff161115612ed557600080fd5b6012805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008683160267ffff000000000000191617660100000000000091851691909102179055612f4985826155e5565b6012805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612fde5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b601a80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061302790831515815260200190565b60405180910390a150565b81518351148015613044575080518251145b6130905760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d03565b60005b83518160ff16101561318957818160ff16815181106130b4576130b4615278565b6020026020010151838260ff16815181106130d1576130d1615278565b6020026020010151600f546130e6919061522a565b6130f0919061541b565b6130f9336123e9565b101561310457600080fd5b61317633858360ff168151811061311d5761311d615278565b6020026020010151848460ff168151811061313a5761313a615278565b6020026020010151868560ff168151811061315757613157615278565b6020026020010151600f5461316c919061522a565b611531919061541b565b5080613181816153cc565b915050613093565b50505050565b6000546001600160a01b031633146131dd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613246919061555b565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b7919061555b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561331a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061333e919061555b565b90506001600160a01b0381166134dc57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b0919061555b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613421919061555b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134aa919061555b565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055613505565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556113ae903090600019613757565b6000546001600160a01b0316331461358c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b602054610100900460ff16156135e45760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d03565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561361e573d6000803e3d6000fd5b50565b6000546001600160a01b0316331461366f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d03565b6020546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610e11565b6020546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015613733573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eea9190615608565b6001600160a01b0383166137ad5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d03565b6001600160a01b0382166138035760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d03565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601054600f546016546001600160a01b03166000908152600860205260408120549092919060ff161561393e576016546001600160a01b03166000908152600160205260409020548210806138d257506016546001600160a01b031660009081526002602052604090205481105b156138ee57600f546010546138e7919061541b565b9250505090565b6016546001600160a01b031660009081526001602052604090205461391390836152a7565b6016546001600160a01b031660009081526002602052604090205490925061393b90826152a7565b90505b60095415613aa65760005b60095460ff82161015613aa457826001600060098460ff168154811061397157613971615278565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806139df5750816002600060098460ff16815481106139b8576139b8615278565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156139fc57600f546010546139f4919061541b565b935050505090565b6001600060098360ff1681548110613a1657613a16615278565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613a4590846152a7565b92506002600060098360ff1681548110613a6157613a61615278565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613a9090836152a7565b915080613a9c816153cc565b915050613949565b505b600f54601054613ab6919061541b565b821015613acd57600f546010546138e7919061541b565b6138e7818361541b565b60006001600160a01b038416613b555760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d03565b6001600160a01b038316613bd15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d03565b60008211613c475760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d03565b613c518484613e95565b15613dab5760205460ff16613ca85760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d03565b6001600160a01b03841660009081526003602052604090205460ff1680613ce757506001600160a01b03831660009081526003602052604090205460ff165b15613dab576001600160a01b03841660009081526007602052604090205460ff16158015613d2e57506001600160a01b03831660009081526007602052604090205460ff16155b15613dab57601f54821115613dab5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d03565b6001600160a01b03841660009081526006602052604090205460019060ff1680613ded57506001600160a01b03841660009081526006602052604090205460ff165b15613df6575060005b6001600160a01b03841660009081526003602052604090205460ff1615613e8057601a5460ff16158015613e315750601a54610100900460ff165b15613e805742601b54601c54613e47919061542f565b11613e80576000613e57306123e9565b9050601d548110613e7e57601e548110613e705750601e545b613e7981613f69565b42601c555b505b613e8c85858584614366565b95945050505050565b600080546001600160a01b03848116911614801590613ec257506000546001600160a01b03838116911614155b8015613ed957506000546001600160a01b03163214155b8015613efe57506001600160a01b0382166000908152600a602052604090205460ff16155b8015613f2357506001600160a01b0383166000908152600a602052604090205460ff16155b8015613f3a57506001600160a01b03821661dead14155b8015613f4e57506001600160a01b03821615155b80156115d957506001600160a01b0383163014159392505050565b601a805460ff191660011790556040805160808101825260145461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052613fc75750614359565b3060009081526005602090815260408083206015546001600160a01b0316845290915290205460001914614020573060009081526005602090815260408083206015546001600160a01b03168452909152902060001990555b604080516002808252606082018352600092602083019080368337019050509050308160008151811061405557614055615278565b6001600160a01b03928316602091820292909201810191909152601554604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156140c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140eb919061555b565b816001815181106140fe576140fe615278565b6001600160a01b0392831660209182029290920101526015546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac9479061415d908690600090869030904290600401615625565b600060405180830381600087803b15801561417757600080fd5b505af115801561418b573d6000803e3d6000fd5b5050506060830151835147925060009161ffff908116916141ad91168461522a565b6141b7919061541b565b90506000846060015161ffff16856020015161ffff16846141d8919061522a565b6141e2919061541b565b90506000856060015161ffff16866040015161ffff1685614203919061522a565b61420d919061541b565b865190915060009061ffff161561427b576017546040516001600160a01b03909116906175309086906000818181858888f193505050503d8060008114614270576040519150601f19603f3d011682016040523d82523d6000602084013e614275565b606091505b50909150505b602087015161ffff16156142e6576018546040516001600160a01b03909116906175309085906000818181858888f193505050503d80600081146142db576040519150601f19603f3d011682016040523d82523d6000602084013e6142e0565b606091505b50909150505b604087015161ffff1615614351576019546040516001600160a01b03909116906175309084906000818181858888f193505050503d8060008114614346576040519150601f19603f3d011682016040523d82523d6000602084013e61434b565b606091505b50909150505b505050505050505b50601a805460ff19169055565b602054600090610100900460ff166144125761438285856145da565b602054610100900460ff1615801561439f575061439f8585613e95565b156144125760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d03565b600061442086868686614739565b60808101516001600160a01b03881660009081526001602052604081208054939450919261444f9084906152a7565b909155505060608101516001600160a01b0386166000908152600160205260408120805490919061448190849061542f565b90915550506001600160a01b03861660009081526008602052604090205460ff16156144e5576001600160a01b0386166000908152600260205260409020546144cb9085906152a7565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526008602052604090205460ff16156145455780516001600160a01b03861660009081526002602052604090205461452b919061542f565b6001600160a01b0386166000908152600260205260409020555b60008160a00151118061455c575060008160200151115b1561457d578060a001516010600082825461457791906152a7565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83600001516040516145c691815260200190565b60405180910390a350600195945050505050565b602054610100900460ff16156146585760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d03565b6146628282613e95565b15801561467c57506016546001600160a01b038281169116145b1561108f576001600160a01b038083166000908152600a60209081526040909120805460ff19166001179055805461ff0019166101001790819055620100009004166146f257602080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6147796040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6147b96040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6147c1613864565b60c082018190526147d2908561522a565b60808201526147e18686613e95565b15614894576020546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152878116602483015260448201879052600092620100009004169063ecd07a53906064016020604051808303816000875af192505050801561487d575060408051601f3d908101601f1916820190925261487a91810190615608565b60015b61488657600080fd5b90508061489257600080fd5b505b82156149b1576001600160a01b03851660009081526003602052604081205481906127109060ff16156148e15760125461ffff80821694506801000000000000000090910416915061493e565b6001600160a01b03891660009081526003602052604090205460ff16156149225760115461ffff80821694506801000000000000000090910416915061493e565b60135461ffff8082169450680100000000000000009091041691505b80614949848961522a565b614953919061541b565b602085015280614963838961522a565b61496d919061541b565b604085018190526020850151614983919061542f565b61498d90886152a7565b845260c084015160208501516149a3919061522a565b60a0850152506149ca915050565b6000602082018190526040820181905284825260a08201525b604081015115614aa1578060c0015181604001516149e8919061522a565b3060009081526001602052604081208054909190614a0790849061542f565b90915550503060009081526008602052604090205460ff1615614a4f576040808201513060009081526002602052918220805491929091614a4990849061542f565b90915550505b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360400151604051614a9891815260200190565b60405180910390a35b8060c001518160400151614ab5919061522a565b8160a00151614ac4919061542f565b8160800151614ad391906152a7565b606082015295945050505050565b828054614aed906151a7565b90600052602060002090601f016020900481019282614b0f5760008555614b55565b82601f10614b2857805160ff1916838001178555614b55565b82800160010185558215614b55579182015b82811115614b55578251825591602001919060010190614b3a565b50614b61929150614b65565b5090565b5b80821115614b615760008155600101614b66565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614bd257614bd2614b7a565b604052919050565b600067ffffffffffffffff821115614bf457614bf4614b7a565b5060051b60200190565b6001600160a01b038116811461361e57600080fd5b600082601f830112614c2457600080fd5b81356020614c39614c3483614bda565b614ba9565b82815260059290921b84018101918181019086841115614c5857600080fd5b8286015b84811015614c7c578035614c6f81614bfe565b8352918301918301614c5c565b509695505050505050565b801515811461361e57600080fd5b60008060408385031215614ca857600080fd5b823567ffffffffffffffff811115614cbf57600080fd5b614ccb85828601614c13565b9250506020830135614cdc81614c87565b809150509250929050565b60005b83811015614d02578181015183820152602001614cea565b838111156131895750506000910152565b6020815260008251806020840152614d32816040850160208701614ce7565b601f01601f19169190910160400192915050565b60008060408385031215614d5957600080fd5b8235614d6481614bfe565b946020939093013593505050565b60008060408385031215614d8557600080fd5b8235614d9081614bfe565b91506020830135614cdc81614c87565b600080600060608486031215614db557600080fd5b8335614dc081614bfe565b92506020840135614dd081614bfe565b929592945050506040919091013590565b600082601f830112614df257600080fd5b81356020614e02614c3483614bda565b82815260059290921b84018101918181019086841115614e2157600080fd5b8286015b84811015614c7c5780358352918301918301614e25565b60008060408385031215614e4f57600080fd5b823567ffffffffffffffff80821115614e6757600080fd5b614e7386838701614c13565b93506020850135915080821115614e8957600080fd5b50614e9685828601614de1565b9150509250929050565b600060208284031215614eb257600080fd5b5035919050565b600060208284031215614ecb57600080fd5b81356115d981614bfe565b600080600080600060a08688031215614eee57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215614f2457600080fd5b50508035926020909101359150565b600080600060608486031215614f4857600080fd5b8335614f5381614bfe565b92506020840135614f6381614bfe565b91506040840135614f7381614bfe565b809150509250925092565b803561ffff81168114614f9057600080fd5b919050565b600080600060608486031215614faa57600080fd5b614fb384614f7e565b9250614fc160208501614f7e565b9150614fcf60408501614f7e565b90509250925092565b60008060008060808587031215614fee57600080fd5b614ff785614f7e565b935061500560208601614f7e565b925061501360408601614f7e565b915061502160608601614f7e565b905092959194509250565b60008060006060848603121561504157600080fd5b833561504c81614c87565b9250602084013561505c81614c87565b91506040840135614f7381614c87565b60006020828403121561507e57600080fd5b81356115d981614c87565b6000806040838503121561509c57600080fd5b82356150a781614bfe565b91506020830135614cdc81614bfe565b6000806000606084860312156150cc57600080fd5b833567ffffffffffffffff808211156150e457600080fd5b6150f087838801614c13565b9450602086013591508082111561510657600080fd5b61511287838801614de1565b9350604086013591508082111561512857600080fd5b5061513586828701614de1565b9150509250925092565b600081518084526020808501945080840160005b838110156151785781516001600160a01b031687529582019590820190600101615153565b509495945050505050565b604081526000615196604083018561513f565b905082151560208301529392505050565b600181811c908216806151bb57607f821691505b602082108114156151f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000816000190483118215151615615244576152446151fb565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000828210156152b9576152b96151fb565b500390565b60006000198214156152d2576152d26151fb565b5060010190565b600181815b808511156153145781600019048211156152fa576152fa6151fb565b8085161561530757918102915b93841c93908002906152de565b509250929050565b60008261532b57506001610eea565b8161533857506000610eea565b816001811461534e576002811461535857615374565b6001915050610eea565b60ff841115615369576153696151fb565b50506001821b610eea565b5060208310610133831016604e8410600b8410161715615397575081810a610eea565b6153a183836152d9565b80600019048211156153b5576153b56151fb565b029392505050565b60006115d960ff84168361531c565b600060ff821660ff8114156153e3576153e36151fb565b60010192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261542a5761542a6153ec565b500490565b60008219821115615442576154426151fb565b500190565b600082601f83011261545857600080fd5b815167ffffffffffffffff81111561547257615472614b7a565b6154856020601f19601f84011601614ba9565b81815284602083860101111561549a57600080fd5b61143c826020830160208701614ce7565b600080600080600060a086880312156154c357600080fd5b855167ffffffffffffffff808211156154db57600080fd5b6154e789838a01615447565b965060208801519150808211156154fd57600080fd5b5061550a88828901615447565b94505060408601519250606086015160ff8116811461552857600080fd5b608087015190925061553981614bfe565b809150509295509295909350565b600082615556576155566153ec565b500690565b60006020828403121561556d57600080fd5b81516115d981614bfe565b60008060006060848603121561558d57600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156155b857600080fd5b5051919050565b600061ffff8083168185168083038211156155dc576155dc6151fb565b01949350505050565b600061ffff83811690831681811015615600576156006151fb565b039392505050565b60006020828403121561561a57600080fd5b81516115d981614c87565b85815284602082015260a06040820152600061564460a083018661513f565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220d71662e966ac5175003953732855a8fcba0485ae1e55d36757f750e98b0e9b5464736f6c634300080b0033

Deployed Bytecode Sourcemap

6686:27063:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8777:73;;;;;;;;;;;;8808:42;8777:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;8777:73:0;;;;;;;;9408:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;9408:28:0;245:177:1;20724:356:0;;;;;;;;;;;;;:::i;:::-;;20005:172;;;;;;;;;;-1:-1:-1;20005:172:0;;;;;:::i;:::-;;:::i;14497:80::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8716:26::-;;;;;;;;;;-1:-1:-1;8716:26:0;;;;-1:-1:-1;;;;;8716:26:0;;;15190:161;;;;;;;;;;-1:-1:-1;15190:161:0;;;;;:::i;:::-;;:::i;:::-;;;4092:14:1;;4085:22;4067:41;;4055:2;4040:18;15190:161:0;3927:187:1;17811:1519:0;;;;;;;;;;-1:-1:-1;17811:1519:0;;;;;:::i;:::-;;:::i;14200:115::-;;;;;;;;;;;;;:::i;15857:306::-;;;;;;;;;;-1:-1:-1;15857:306:0;;;;;:::i;:::-;;:::i;28859:373::-;;;;;;;;;;-1:-1:-1;28859:373:0;;;;;:::i;:::-;;:::i;8513:42::-;;;;;;;;;;;;8551:4;8513:42;;19338:250;;;;;;;;;;-1:-1:-1;19338:250:0;;;;;:::i;:::-;;:::i;9443:25::-;;;;;;;;;;;;;;;;14321:80;;;;;;;;;;-1:-1:-1;14389:9:0;;14321:80;;14389:9;;;;6561:36:1;;6549:2;6534:18;14321:80:0;6419:184:1;20430:108:0;;;;;;;;;;-1:-1:-1;20430:108:0;;;;;:::i;:::-;;:::i;23571:338::-;;;;;;;;;;-1:-1:-1;23571:338:0;;;;;:::i;:::-;;:::i;22896:140::-;;;;;;;;;;-1:-1:-1;22896:140:0;;;;;:::i;:::-;;:::i;16171:215::-;;;;;;;;;;-1:-1:-1;16171:215:0;;;;;:::i;:::-;;:::i;22619:269::-;;;;;;;;;;-1:-1:-1;22619:269:0;;;;;:::i;:::-;;:::i;8749:21::-;;;;;;;;;;-1:-1:-1;8749:21:0;;;;-1:-1:-1;;;;;8749:21:0;;;9518:34;;;;;;;;;;-1:-1:-1;9518:34:0;;;;;;;;13060:586;;;;;;;;;;-1:-1:-1;13060:586:0;;;;;:::i;:::-;;:::i;23182:125::-;;;;;;;;;;-1:-1:-1;23182:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;23271:28:0;23247:4;23271:28;;;:19;:28;;;;;;;;;23182:125;9559:36;;;;;;;;;;-1:-1:-1;9559:36:0;;;;;;;;;;;10750:1721;;;;;;;;;;-1:-1:-1;10750:1721:0;;;;;:::i;:::-;;:::i;20318:104::-;;;;;;;;;;;;;:::i;23315:134::-;;;;;;;;;;-1:-1:-1;23315:134:0;;;;;:::i;:::-;;:::i;19596:248::-;;;;;;;;;;-1:-1:-1;19596:248:0;;;;;:::i;:::-;;:::i;23044:130::-;;;;;;;;;;-1:-1:-1;23044:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;23136:30:0;23112:4;23136:30;;;:21;:30;;;;;;;;;23044:130;23457:106;;;;;;;;;;;;;:::i;14809:198::-;;;;;;;;;;-1:-1:-1;14809:198:0;;;;;:::i;:::-;;:::i;13654:193::-;;;;;;;;;;;;;:::i;23917:260::-;;;;;;;;;;-1:-1:-1;23917:260:0;;;;;:::i;:::-;;:::i;7869:156::-;;;;;;;;;;-1:-1:-1;7869:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8389:6:1;8422:15;;;8404:34;;8474:15;;;8469:2;8454:18;;8447:43;8526:15;;;8506:18;;;8499:43;;;;8578:15;;8573:2;8558:18;;8551:43;8631:15;;;8625:3;8610:19;;8603:44;8366:3;8351:19;7869:156:0;8130:523:1;17175:500:0;;;;;;;;;;-1:-1:-1;17175:500:0;;;;;:::i;:::-;;:::i;17683:120::-;;;;;;;;;;-1:-1:-1;17683:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;17775:20:0;17751:4;17775:20;;;:11;:20;;;;;;;;;17683:120;14583:79;;;;;;;;;;-1:-1:-1;14635:7:0;14653:6;-1:-1:-1;;;;;14653:6:0;14583:79;;15676:173;;;;;;;;;;;;;:::i;28232:429::-;;;;;;;;;;;;;:::i;14407:84::-;;;;;;;;;;;;;:::i;16394:225::-;;;;;;;;;;-1:-1:-1;16394:225:0;;;;;:::i;:::-;;:::i;15015:167::-;;;;;;;;;;-1:-1:-1;15015:167:0;;;;;:::i;:::-;;:::i;22367:244::-;;;;;;;;;;-1:-1:-1;22367:244:0;;;;;:::i;:::-;;:::i;21921:438::-;;;;;;;;;;-1:-1:-1;21921:438:0;;;;;:::i;:::-;;:::i;20546:170::-;;;;;;;;;;-1:-1:-1;20546:170:0;;;;;:::i;:::-;;:::i;21092:403::-;;;;;;;;;;-1:-1:-1;21092:403:0;;;;;:::i;:::-;;:::i;21503:410::-;;;;;;;;;;-1:-1:-1;21503:410:0;;;;;:::i;:::-;;:::i;8200:161::-;;;;;;;;;;-1:-1:-1;8200:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8034:157;;;;;;;;;;-1:-1:-1;8034:157:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24185:164;;;;;;;;;;-1:-1:-1;24185:164:0;;;;;:::i;:::-;;:::i;8370:134::-;;;;;;;;;;-1:-1:-1;8370:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10556:6:1;10589:15;;;10571:34;;10641:15;;;10636:2;10621:18;;10614:43;10693:15;;;10673:18;;;10666:43;;;;10745:15;;;10740:2;10725:18;;10718:43;10533:3;10518:19;8370:134:0;10323:444:1;14668:133:0;;;;;;;;;;-1:-1:-1;14668:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;14770:19:0;;;14752:7;14770:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;14668:133;9334:36;;;;;;;;;;;;;;;;29240:482;;;;;;;;;;-1:-1:-1;29240:482:0;;;;;:::i;:::-;;:::i;16627:540::-;;;;;;;;;;-1:-1:-1;16627:540:0;;;;;:::i;:::-;;:::i;28669:182::-;;;;;;;;;;;;;:::i;19852:145::-;;;;;;;;;;-1:-1:-1;19852:145:0;;;;;:::i;:::-;;:::i;8992:265::-;;;;;;;;;;-1:-1:-1;8992:265:0;;;;;;;;-1:-1:-1;;;;;8992:265:0;;;;;;;;;;;;;;-1:-1:-1;;;;;12320:15:1;;;12302:34;;12372:15;;;12367:2;12352:18;;12345:43;12424:15;;12404:18;;;12397:43;;;;12229:2;12214:18;8992:265:0;11991:455:1;9288:39:0;;;;;;;;;;-1:-1:-1;9288:39:0;;;;;;;;;;;20185:125;;;;;;;;;;-1:-1:-1;20185:125:0;;;;;:::i;:::-;;:::i;20724:356::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;;;;;;;;;20781:10:::1;:24:::0;;20918:38;;;;;;20967:7:::1;:19:::0;;20886:21;21054:18;;;;;20724:356::o;20005:172::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;20113:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;20113:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;20151:8;;20161:7;;20113:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20005:172:::0;;:::o;14497:80::-;14545:13;14569:5;14562:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14497:80;:::o;15190:161::-;15265:4;15282:39;189:10;15305:7;15314:6;15282:8;:39::i;:::-;-1:-1:-1;15339:4:0;15190:161;;;;;:::o;17811:1519::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;17905:7:::1;17901:1422;;;-1:-1:-1::0;;;;;17938:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;17937:21;17929:62;;;::::0;-1:-1:-1;;;17929:62:0;;14277:2:1;17929:62:0::1;::::0;::::1;14259:21:1::0;14316:2;14296:18;;;14289:30;14355;14335:18;;;14328:58;14403:18;;17929:62:0::1;14075:352:1::0;17929:62:0::1;-1:-1:-1::0;;;;;18009:16:0;::::1;18028:1;18009:16:::0;;;:7:::1;:16;::::0;;;;;:20;18006:116:::1;;-1:-1:-1::0;;;;;18089:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;18069:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;18050:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;18006:116:::1;-1:-1:-1::0;;;;;18136:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;18136:27:0::1;18159:4;18136:27;::::0;;18192:6:::1;::::0;;;::::1;18181:17;18178:79;;18218:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;18218:23:0;;;;;::::1;::::0;;-1:-1:-1;;18218:23:0::1;-1:-1:-1::0;;;;;18218:23:0;::::1;;::::0;;18178:79:::1;17811:1519:::0;;:::o;17901:1422::-:1;18279:7;18274:1049;;-1:-1:-1::0;;;;;18311:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18303:61;;;::::0;-1:-1:-1;;;18303:61:0;;14634:2:1;18303:61:0::1;::::0;::::1;14616:21:1::0;14673:2;14653:18;;;14646:30;14712;14692:18;;;14685:58;14760:18;;18303:61:0::1;14432:352:1::0;18303:61:0::1;18394:6;::::0;-1:-1:-1;;;;;18383:17:0;;::::1;18394:6:::0;::::1;18383:17;18379:933;;;18459:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;18440:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;18421:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;18488:7:::1;:16:::0;;;;;:20;;;18527:11:::1;:20:::0;;;:28;;-1:-1:-1;;18527:28:0::1;::::0;;17811:1519;;:::o;18379:933::-:1;18580:9;:16:::0;18600:1:::1;18580:21;18577:735;;;18660:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;18641:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;18622:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;18689:7:::1;:16:::0;;;;;:20;;;18728:11:::1;:20:::0;;;:28;;-1:-1:-1;;18728:28:0::1;::::0;;18775:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;18775:15:0;;;;;-1:-1:-1;;18775:15:0::1;::::0;;;;;17811:1519;;:::o;18577:735::-:1;18836:9;18831:466;18855:9;:16:::0;18851:20;::::1;18831:466;;;18921:7;-1:-1:-1::0;;;;;18905:23:0::1;:9;18915:1;18905:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;18905:12:0::1;:23;18901:377;;;18972:9;18982:16:::0;;:20:::1;::::0;19001:1:::1;::::0;18982:20:::1;:::i;:::-;18972:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;18957:9:::1;:12:::0;;-1:-1:-1;;;;;18972:31:0;;::::1;::::0;18967:1;;18957:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;18957:46:0::1;-1:-1:-1::0;;;;;18957:46:0;;::::1;;::::0;;19030:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;19115:10:::1;:8;:10::i;:::-;-1:-1:-1::0;;;;;19096:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;19077:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;19152:11:::1;:20:::0;;;:28;;-1:-1:-1;;19152:28:0::1;::::0;;19207:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19207:15:0;;;;;-1:-1:-1;;19207:15:0::1;::::0;;;;;18831:466:::1;17811:1519:::0;;:::o;18901:377::-:1;18873:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18831:466;;;;17811:1519:::0;;:::o;14200:115::-;14255:7;14270;;14281:1;14270:12;14266:31;;;14286:8;;;14266:31;-1:-1:-1;14305:7:0;;;14200:115::o;15857:306::-;-1:-1:-1;;;;;15978:19:0;;15957:4;15978:19;;;:11;:19;;;;;;;;15998:10;15978:31;;;;;;;;-1:-1:-1;;15978:52:0;15974:126;;-1:-1:-1;;;;;16047:19:0;;;;;;:11;:19;;;;;;;;16067:10;16047:31;;;;;;;:41;;16082:6;;16047:19;:41;;16082:6;;16047:41;:::i;:::-;;;;-1:-1:-1;;15974:126:0;16119:36;16129:6;16137:9;16148:6;16119:9;:36::i;:::-;16112:43;15857:306;-1:-1:-1;;;;15857:306:0:o;28859:373::-;28984:7;:14;28965:8;:15;:33;28957:67;;;;-1:-1:-1;;;28957:67:0;;16121:2:1;28957:67:0;;;16103:21:1;16160:2;16140:18;;;16133:30;16199:23;16179:18;;;16172:51;16240:18;;28957:67:0;15919:345:1;28957:67:0;29040:7;29035:190;29057:8;:15;29053:1;:19;;;29035:190;;;29127:7;29135:1;29127:10;;;;;;;;;;:::i;:::-;;;;;;;29102:21;29112:10;29102:9;:21::i;:::-;:35;;29094:44;;;;;;29153:60;29163:10;29175:8;29184:1;29175:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;29203:9;;29199:13;;29203:9;;29199:2;:13;:::i;:::-;29188:7;29196:1;29188:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;29153:9;:60::i;:::-;-1:-1:-1;29074:3:0;;;;:::i;:::-;;;;29035:190;;19338:250;19404:7;19443;;19432;:18;;19424:73;;;;-1:-1:-1;;;19424:73:0;;18154:2:1;19424:73:0;;;18136:21:1;18193:2;18173:18;;;18166:30;18232:34;18212:18;;;18205:62;18303:12;18283:18;;;18276:40;18333:19;;19424:73:0;17952:406:1;19424:73:0;19508:19;19531:10;:8;:10::i;:::-;19508:33;-1:-1:-1;19559:21:0;19508:33;19559:7;:21;:::i;:::-;19552:28;19338:250;-1:-1:-1;;;19338:250:0:o;20430:108::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;20499:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;20499:31:0::1;::::0;::::1;160:74:1::0;20499:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;20499:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20430:108:::0;:::o;23571:338::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;23785:16:::1;23765;23755:7;;:26;;;;:::i;:::-;23754:47;;;;:::i;:::-;23738:13;:63:::0;23826:7:::1;::::0;23853:13;;23826:23:::1;::::0;23836:13;;23826:23:::1;:::i;:::-;23825:41;;;;:::i;:::-;23812:10;:54:::0;23877:17:::1;:24:::0;-1:-1:-1;;;;23571:338:0:o;22896:140::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;-1:-1:-1;;;;;22988:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;22988:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22896:140::o;16171:215::-;189:10;16259:4;16308:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16308:34:0;;;;;;;;;;16259:4;;16276:80;;16299:7;;16308:47;;16345:10;;16308:47;:::i;:::-;16276:8;:80::i;22619:269::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;22760:4:::1;22750:7;;:14;;;;:::i;:::-;22738:7;22727;22717;;:17;;;;:::i;:::-;22716:29;;;;:::i;:::-;:49;;22708:117;;;::::0;-1:-1:-1;;;22708:117:0;;19012:2:1;22708:117:0::1;::::0;::::1;18994:21:1::0;19051:2;19031:18;;;19024:30;19090:34;19070:18;;;19063:62;19161:25;19141:18;;;19134:53;19204:19;;22708:117:0::1;18810:419:1::0;22708:117:0::1;22873:7;22862;22852;;:17;;;;:::i;:::-;22851:29;;;;:::i;:::-;22836:12;:44:::0;-1:-1:-1;;22619:269:0:o;13060:586::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;-1:-1:-1;;;;;13137:22:0;::::1;13129:96;;;::::0;-1:-1:-1;;;13129:96:0;;19436:2:1;13129:96:0::1;::::0;::::1;19418:21:1::0;19475:2;19455:18;;;19448:30;19514:34;19494:18;;;19487:62;19585:31;19565:18;;;19558:59;19634:19;;13129:96:0::1;19234:425:1::0;13129:96:0::1;-1:-1:-1::0;;;;;13244:16:0;::::1;8808:42;13244:16;;13236:90;;;::::0;-1:-1:-1;;;13236:90:0;;19436:2:1;13236:90:0::1;::::0;::::1;19418:21:1::0;19475:2;19455:18;;;19448:30;19514:34;19494:18;;;19487:62;19585:31;19565:18;;;19558:59;19634:19;;13236:90:0::1;19234:425:1::0;13236:90:0::1;13357:6;::::0;;13337:34:::1;::::0;-1:-1:-1;;;;;13357:6:0;;::::1;::::0;13337:19:::1;:34::i;:::-;13382:35;13402:8;13412:4;13382:19;:35::i;:::-;13461:1;13451:6:::0;;13441:17:::1;::::0;-1:-1:-1;;;;;13451:6:0::1;13441:9;:17::i;:::-;:21;13438:99;;;13489:6;::::0;13479:46:::1;::::0;-1:-1:-1;;;;;13489:6:0::1;13497:8:::0;13507:17:::1;13489:6:::0;13507:9:::1;:17::i;13479:46::-;;13438:99;13557:6;:17:::0;;-1:-1:-1;;13557:17:0::1;-1:-1:-1::0;;;;;13557:17:0;::::1;::::0;;::::1;::::0;;13590:38:::1;::::0;13557:17;;;;13590:38:::1;::::0;13557:6;13590:38:::1;13060:586:::0;:::o;10750:1721::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;10836:19:::1;::::0;;;::::1;;;10835:20;10827:34;;;::::0;-1:-1:-1;;;10827:34:0;;19866:2:1;10827:34:0::1;::::0;::::1;19848:21:1::0;19905:1;19885:18;;;19878:29;19943:3;19923:18;;;19916:31;19964:18;;10827:34:0::1;19664:324:1::0;10827:34:0::1;10872:9;:33:::0;;;::::1;::::0;-1:-1:-1;;;;;10872:33:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;10920::::1;::::0;;;;10947:4:::1;10920:33;::::0;::::1;160:74:1::0;10920:9:0;::::1;;::::0;:18:::1;::::0;133::1;;10920:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;10916:49:::0;10975:16:::1;11006:9;;;;;;;;;-1:-1:-1::0;;;;;11006:9:0::1;-1:-1:-1::0;;;;;11006:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;11006:27:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;11002:510;;11489:11;::::0;-1:-1:-1;;;11489:11:0;;21670:2:1;11489:11:0::1;::::0;::::1;21652:21:1::0;21709:1;21689:18;;;21682:29;21747:3;21727:18;;;21720:31;21768:18;;11489:11:0::1;21468:324:1::0;11002:510:0::1;11175:16:::0;;::::1;::::0;:5:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;11206:20:0;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;11241:14:0::1;:35:::0;;;11291:9:::1;:24:::0;;-1:-1:-1;;11291:24:0::1;;::::0;::::1;::::0;;::::1;::::0;;;11358:13:::1;::::0;:2:::1;:13;:::i;:::-;11340:14;;:32;;;;:::i;:::-;11330:7;:42:::0;;;11405:13:::1;::::0;-1:-1:-1;;11405:13:0::1;:::i;:::-;11398:21;::::0;-1:-1:-1;;11398:21:0::1;:::i;:::-;11387:7;:33:::0;11542:9:::1;::::0;:19:::1;::::0;;;;;;;11446:9;;-1:-1:-1;;;;;;11542:9:0;;::::1;::::0;-1:-1:-1;11542:17:0::1;::::0;-1:-1:-1;11542:19:0::1;::::0;;::::1;::::0;-1:-1:-1;11542:19:0::1;::::0;-1:-1:-1;11542:19:0;;;;;;:9;:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11531:42:0::1;;11574:9;;;;;;;;;-1:-1:-1::0;;;;;11574:9:0::1;-1:-1:-1::0;;;;;11574:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11531:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;22423:15:1;;;11531:75:0::1;::::0;::::1;22405:34:1::0;11600:4:0::1;22455:18:1::0;;;22448:43;22317:18;;11531:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11522:6;:84:::0;;-1:-1:-1;;11522:84:0::1;-1:-1:-1::0;;;;;11522:84:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;11617:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;11617:22:0::1;-1:-1:-1::0;11617:22:0::1;::::0;;11667:7:::1;::::0;11682:5:::1;::::0;11667:11:::1;::::0;11677:1:::1;11667:11;:::i;:::-;11666:21;;;;:::i;:::-;11650:13;:37:::0;11712:7:::1;::::0;11727:5:::1;::::0;11712:11:::1;::::0;11722:1:::1;11712:11;:::i;:::-;11711:21;;;;:::i;:::-;11698:10;:34:::0;11759:7:::1;::::0;11774:4:::1;::::0;11759:11:::1;::::0;11769:1:::1;11759:11;:::i;:::-;11758:20;;;;:::i;:::-;11743:12;:35:::0;11789:19:::1;:26:::0;;;::::1;::::0;::::1;::::0;;11849:7:::1;::::0;-1:-1:-1;11839:6:0;;-1:-1:-1;;;;;11839:6:0;;::::1;11831:15:::0;;-1:-1:-1;11831:15:0;;;;;;:25;;;;11893:6;;11901:7:::1;::::0;11872:37;;391:25:1;;;11893:6:0::1;::::0;-1:-1:-1;;11872:37:0::1;::::0;364:18:1;11872:37:0::1;;;;;;;11951:9;::::0;11922:59:::1;::::0;11931:10:::1;::::0;-1:-1:-1;;;;;11951:9:0::1;-1:-1:-1::0;;11922:8:0::1;:59::i;:::-;12024:9;::::0;11992:62:::1;::::0;12009:4:::1;::::0;-1:-1:-1;;;;;12024:9:0::1;-1:-1:-1::0;;11992:8:0::1;:62::i;:::-;12075:6;::::0;12065:51:::1;::::0;-1:-1:-1;;;;;12075:6:0::1;12091:4;12098:17;12075:6:::0;12098:9:::1;:17::i;12065:51::-;-1:-1:-1::0;12129:9:0::1;::::0;-1:-1:-1;;;;;12129:9:0::1;:25;12162:21;12207:4;12227:24;12207:4:::0;12227:9:::1;:24::i;:::-;12129:272;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;22884:15:1;;;12129:272:0::1;::::0;::::1;22866:34:1::0;22916:18;;;22909:34;;;;12266:1:0::1;22959:18:1::0;;;22952:34;;;23002:18;;;22995:34;23066:15;;;23045:19;;;23038:44;12375:15:0::1;23098:19:1::0;;;23091:35;22777:19;;12129:272:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12414:15;:13;:15::i;:::-;12440:23;12454:8;12440:13;:23::i;20318:104::-:0;20363:7;20390:9;;;;;;;;;-1:-1:-1;;;;;20390:9:0;-1:-1:-1;;;;;20390:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20383:31;;20318:104;:::o;23315:134::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;-1:-1:-1;;;;;23403:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;23403:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23315:134::o;19596:248::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;19680:16:::1;::::0;::::1;::::0;::::1;;;19679:17;19671:54;;;::::0;-1:-1:-1;;;19671:54:0;;23839:2:1;19671:54:0::1;::::0;::::1;23821:21:1::0;23878:2;23858:18;;;23851:30;23917:26;23897:18;;;23890:54;23961:18;;19671:54:0::1;23637:348:1::0;19671:54:0::1;-1:-1:-1::0;;;;;19744:28:0;::::1;19767:4;19744:28;;19736:55;;;::::0;-1:-1:-1;;;19736:55:0;;24192:2:1;19736:55:0::1;::::0;::::1;24174:21:1::0;24231:2;24211:18;;;24204:30;24270:16;24250:18;;;24243:44;24304:18;;19736:55:0::1;23990:338:1::0;19736:55:0::1;19802:9;:34:::0;;-1:-1:-1;;;;;19802:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;19596:248::o;23457:106::-;23545:9;;23498:7;;23541:13;;23545:9;;23541:2;:13;:::i;:::-;23525:12;;:30;;;;:::i;14809:198::-;-1:-1:-1;;;;;14899:20:0;;14875:7;14899:20;;;:11;:20;;;;;;;;14895:49;;;-1:-1:-1;;;;;;14928:16:0;;;;;:7;:16;;;;;;;14809:198::o;14895:49::-;-1:-1:-1;;;;;14982:16:0;;;;;;:7;:16;;;;;;14962:37;;:19;:37::i;13654:193::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;13739:6:::1;::::0;;13719:34:::1;::::0;-1:-1:-1;;;;;13739:6:0;;::::1;::::0;13719:19:::1;:34::i;:::-;13781:1;13764:19:::0;;-1:-1:-1;;13764:19:0::1;::::0;;13799:40:::1;::::0;13781:1;;13799:40:::1;::::0;13781:1;;13799:40:::1;13654:193::o:0;23917:260::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;24039:11:::1;:38:::0;;-1:-1:-1;;;;;24039:38:0;;::::1;-1:-1:-1::0;;24039:38:0;;::::1;;::::0;;;24088:19;:38;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;24137:16;:32;;;;;::::1;::::0;::::1;;::::0;;23917:260::o;17175:500::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;17256:16;17252:416:::1;;-1:-1:-1::0;;;;;17289:13:0;;::::1;17305:5;17289:13:::0;;;:7:::1;:13;::::0;;;;;;;:21;;-1:-1:-1;;17289:21:0::1;::::0;;17325:9;;:32;;;;;::::1;::::0;::::1;24501:74:1::0;;;;24591:18;;;24584:50;;;;17325:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;24474:18:1;;17325:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;17252:416;17394:17;::::0;:22;17390:136:::1;;17483:6;17463:17;;17445:15;:35;;;;:::i;:::-;:44;17437:73;;;::::0;-1:-1:-1;;;17437:73:0;;24847:2:1;17437:73:0::1;::::0;::::1;24829:21:1::0;24886:2;24866:18;;;24859:30;24925:18;24905;;;24898:46;24961:18;;17437:73:0::1;24645:340:1::0;17437:73:0::1;-1:-1:-1::0;;;;;17540:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;;;:20;;-1:-1:-1;;17540:20:0::1;17556:4;17540:20:::0;;::::1;::::0;;;17595:15:::1;17575:17;:35:::0;;;17625:9;;:31;;;;;;;::::1;24501:74:1::0;;;;24591:18;;;24584:50;;;;17625:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;24474:18:1;;17625:31:0::1;24333:307:1::0;15676:173:0;15740:4;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;15789:9:::1;::::0;15757:62:::1;::::0;15774:4:::1;::::0;-1:-1:-1;;;;;15789:9:0::1;-1:-1:-1::0;;15757:8:0::1;:62::i;:::-;-1:-1:-1::0;15837:4:0::1;15676:173:::0;:::o;28232:429::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;28294:14:::1;::::0;::::1;;28293:15;28285:52;;;::::0;-1:-1:-1;;;28285:52:0;;25192:2:1;28285:52:0::1;::::0;::::1;25174:21:1::0;25231:2;25211:18;;;25204:30;25270:26;25250:18;;;25243:54;25314:18;;28285:52:0::1;24990:348:1::0;28285:52:0::1;28356:16;::::0;::::1;::::0;::::1;;;28348:53;;;::::0;-1:-1:-1;;;28348:53:0;;25545:2:1;28348:53:0::1;::::0;::::1;25527:21:1::0;25584:2;25564:18;;;25557:30;25623:26;25603:18;;;25596:54;25667:18;;28348:53:0::1;25343:348:1::0;28348:53:0::1;28423:9;::::0;;;::::1;-1:-1:-1::0;;;;;28423:9:0::1;28412:99;;28463:9;:36:::0;;;::::1;28493:4;28463:36:::0;::::1;;::::0;;28412:99:::1;28525:9;::::0;28545:6:::1;::::0;28600:9:::1;::::0;28525:85:::1;::::0;;;;-1:-1:-1;;;;;28545:6:0;;::::1;28525:85;::::0;::::1;25919:74:1::0;26041:10;28560:12:0::1;26029:23:1::0;26009:18;;;26002:51;26101:18;28582:15:0::1;26089:31:1::0;26069:18;;;26062:59;28600:9:0::1;::::0;;::::1;26137:18:1::0;;;26130:45;28525:9:0;;;::::1;;::::0;:19:::1;::::0;25891::1;;28525:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;28521:101:::0;28632:14:::1;:21:::0;;-1:-1:-1;;28632:21:0::1;28649:4;28632:21;::::0;;28232:429::o;14407:84::-;14457:13;14481:7;14474:14;;;;;:::i;16394:225::-;189:10;16487:4;16536:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16536:34:0;;;;;;;;;;16487:4;;16504:85;;16527:7;;16536:52;;16573:15;;16536:52;:::i;15015:167::-;15093:4;15110:42;189:10;15134:9;15145:6;15110:9;:42::i;:::-;-1:-1:-1;15170:4:0;;15015:167;-1:-1:-1;;;15015:167:0:o;22367:244::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;22461:7:::1;:25:::0;;::::1;22533:19:::0;;::::1;::::0;::::1;::::0;22497:25;;::::1;::::0;::::1;-1:-1:-1::0;;22497:25:0;;;22461;;::::1;22497::::0;;;;;;;::::1;22533:19;;::::0;;22548:4;22579:17:::1;22515:7:::0;22479;22579:17:::1;:::i;:::-;:24;;;;:::i;:::-;22563:7;:40:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;22563:40:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;22367:244:0:o;21921:438::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;22038:12:::1;22083:4:::0;22073:7;22053:17:::1;22063:7:::0;22053;:17:::1;:::i;:::-;:27;;;;:::i;:::-;:34;;;;:::i;:::-;22038:49;;8655:4;22106:5;:25;;;;22098:34;;;::::0;::::1;;22143:14;:32:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;22186:32:0;;;;;;;;;;::::1;;;22272:26:::0;;22229:32;;;::::1;;-1:-1:-1::0;;22272:26:0;;;;;::::1;::::0;;;::::1;;::::0;;22336:15:::1;22143:32:::0;22336:5;:15:::1;:::i;:::-;22309:14;:42:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;21921:438:0:o;20546:170::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;20653:9:::1;::::0;:55:::1;::::0;;;;26846:14:1;;26839:22;20653:55:0::1;::::0;::::1;26821:41:1::0;26905:14;;26898:22;26878:18;;;26871:50;26964:14;;26957:22;26937:18;;;26930:50;20653:9:0;;;::::1;-1:-1:-1::0;;;;;20653:9:0::1;::::0;:24:::1;::::0;26794:18:1;;20653:55:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20546:170:::0;;;:::o;21092:403::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;21204:12:::1;21249:4:::0;21239:7;21219:17:::1;21229:7:::0;21219;:17:::1;:::i;:::-;:27;;;;:::i;:::-;:34;;;;:::i;:::-;21204:49;;8551:4;21272:5;:20;;;;21264:29;;;::::0;::::1;;21304:9;:27:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;21342:27:0;;;;;;;;;;::::1;;;21418:21:::0;;21380:27;;;::::1;;-1:-1:-1::0;;21418:21:0;;;;;::::1;::::0;;;::::1;;::::0;;21472:15:::1;21304:27:::0;21472:5;:15:::1;:::i;:::-;21450:9;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;21092:403:0:o;21503:410::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;21616:12:::1;21661:4:::0;21651:7;21631:17:::1;21641:7:::0;21631;:17:::1;:::i;:::-;:27;;;;:::i;:::-;:34;;;;:::i;:::-;21616:49;;8601:4;21684:5;:21;;;;21676:30;;;::::0;::::1;;21717:10;:28:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;21756:28:0;;;;;;;;;;::::1;;;21834:22:::0;;21795:28;;;::::1;;-1:-1:-1::0;;21834:22:0;;;;;::::1;::::0;;;::::1;;::::0;;21890:15:::1;21717:28:::0;21890:5;:15:::1;:::i;:::-;21867:10;:38:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;21503:410:0:o;24185:164::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;24261:19:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;24261:29:0;;::::1;;::::0;;24306:35:::1;::::0;::::1;::::0;::::1;::::0;24283:7;4092:14:1;4085:22;4067:41;;4055:2;4040:18;;3927:187;24306:35:0::1;;;;;;;;24185:164:::0;:::o;29240:482::-;29395:8;:15;29376:8;:15;:34;:72;;;;;29433:8;:15;29414:8;:15;:34;29376:72;29368:106;;;;-1:-1:-1;;;29368:106:0;;16121:2:1;29368:106:0;;;16103:21:1;16160:2;16140:18;;;16133:30;16199:23;16179:18;;;16172:51;16240:18;;29368:106:0;15919:345:1;29368:106:0;29490:7;29485:230;29507:8;:15;29503:1;:19;;;29485:230;;;29603:8;29612:1;29603:11;;;;;;;;;;:::i;:::-;;;;;;;29588:8;29597:1;29588:11;;;;;;;;;;:::i;:::-;;;;;;;29578:7;;:21;;;;:::i;:::-;29577:37;;;;:::i;:::-;29552:21;29562:10;29552:9;:21::i;:::-;:62;;29544:71;;;;;;29630:73;29640:10;29652:8;29661:1;29652:11;;;;;;;;;;:::i;:::-;;;;;;;29691:8;29700:1;29691:11;;;;;;;;;;:::i;:::-;;;;;;;29676:8;29685:1;29676:11;;;;;;;;;;:::i;:::-;;;;;;;29666:7;;:21;;;;:::i;:::-;29665:37;;;;:::i;29630:73::-;-1:-1:-1;29524:3:0;;;;:::i;:::-;;;;29485:230;;;;29240:482;;;:::o;16627:540::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;16696:20:::1;16729:9;16696:43;;16750:16;16780:10;-1:-1:-1::0;;;;;16780:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16769:40:0::1;;16818:4;16825:10;-1:-1:-1::0;;;;;16825:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16769:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;22423:15:1;;;16769:74:0::1;::::0;::::1;22405:34:1::0;22475:15;;22455:18;;;22448:43;22317:18;;16769:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16750:93:::0;-1:-1:-1;;;;;;16858:22:0;::::1;16854:200;;16917:10;-1:-1:-1::0;;;;;16917:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16906:43:0::1;;16958:4;16965:10;-1:-1:-1::0;;;;;16965:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16906:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;22423:15:1;;;16906:77:0::1;::::0;::::1;22405:34:1::0;22475:15;;22455:18;;;22448:43;22317:18;;16906:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16897:6;:86:::0;;-1:-1:-1;;16897:86:0::1;-1:-1:-1::0;;;;;16897:86:0;;;::::1;::::0;;;::::1;::::0;;16854:200:::1;;;17025:6;:17:::0;;-1:-1:-1;;17025:17:0::1;-1:-1:-1::0;;;;;17025:17:0;::::1;;::::0;;16854:200:::1;17064:9;:22:::0;;-1:-1:-1;;17064:22:0::1;-1:-1:-1::0;;;;;17064:22:0;::::1;::::0;;::::1;::::0;;;17097:62:::1;::::0;17114:4:::1;::::0;-1:-1:-1;;17097:8:0::1;:62::i;28669:182::-:0;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;28736:16:::1;::::0;::::1;::::0;::::1;;;28735:17;28727:58;;;::::0;-1:-1:-1;;;28727:58:0;;27193:2:1;28727:58:0::1;::::0;::::1;27175:21:1::0;27232:2;27212:18;;;27205:30;27271;27251:18;;;27244:58;27319:18;;28727:58:0::1;26991:352:1::0;28727:58:0::1;28804:6;::::0;;28796:47:::1;::::0;-1:-1:-1;;;;;28804:6:0;;::::1;::::0;28821:21:::1;28796:47:::0;::::1;;;::::0;28821:21;;28796:47;28804:6;28796:47;28821:21;28804:6;28796:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28669:182::o:0;19852:145::-;9956:6;;-1:-1:-1;;;;;9956:6:0;189:10;9956:22;9948:52;;;;-1:-1:-1;;;9948:52:0;;12653:2:1;9948:52:0;;;12635:21:1;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;9948:52:0;12451:341:1;9948:52:0;19942:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;24519:55:1;;;19942:47:0::1;::::0;::::1;24501:74:1::0;24618:14;;24611:22;24591:18;;;24584:50;19942:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;24474:18:1;;19942:47:0::1;24333:307:1::0;20185:125:0;20270:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;20270:32:0;;;160:74:1;20246:4:0;;20270:9;;;;;:23;;133:18:1;;20270:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15359:309::-;-1:-1:-1;;;;;15453:20:0;;15445:52;;;;-1:-1:-1;;;15445:52:0;;27800:2:1;15445:52:0;;;27782:21:1;27839:2;27819:18;;;27812:30;27878:21;27858:18;;;27851:49;27917:18;;15445:52:0;27598:343:1;15445:52:0;-1:-1:-1;;;;;15516:21:0;;15508:53;;;;-1:-1:-1;;;15508:53:0;;27800:2:1;15508:53:0;;;27782:21:1;27839:2;27819:18;;;27812:30;27878:21;27858:18;;;27851:49;27917:18;;15508:53:0;27598:343:1;15508:53:0;-1:-1:-1;;;;;15574:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;15627:33;;391:25:1;;;15627:33:0;;364:18:1;15627:33:0;;;;;;;15359:309;;;:::o;32928:818::-;33008:7;;33044;;33077:6;;-1:-1:-1;;;;;33077:6:0;32970:7;33065:19;;;:11;:19;;;;;;32970:7;;33008;33044;33065:19;;33062:217;;;33113:6;;-1:-1:-1;;;;;33113:6:0;33105:15;;;;:7;:15;;;;;;:25;-1:-1:-1;33105:25:0;:54;;-1:-1:-1;33142:6:0;;-1:-1:-1;;;;;33142:6:0;33134:15;;;;:7;:15;;;;;;:25;-1:-1:-1;33105:54:0;33101:84;;;33178:7;;33168;;:17;;;;:::i;:::-;33161:24;;;;32928:818;:::o;33101:84::-;33219:6;;-1:-1:-1;;;;;33219:6:0;33211:15;;;;:7;:15;;;;;;33200:26;;;;:::i;:::-;33260:6;;-1:-1:-1;;;;;33260:6:0;33252:15;;;;:7;:15;;;;;;33200:26;;-1:-1:-1;33241:26:0;;;;:::i;:::-;;;33062:217;33292:9;:16;:20;33289:347;;33334:7;33329:296;33351:9;:16;33347:20;;;;33329:296;;;33421:7;33397;:21;33405:9;33415:1;33405:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33405:12:0;33397:21;;;;;;;;;;;;;:31;;:66;;;33456:7;33432;:21;33440:9;33450:1;33440:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33440:12:0;33432:21;;;;;;;;;;;;;:31;33397:66;33393:96;;;33482:7;;33472;;:17;;;;:::i;:::-;33465:24;;;;;32928:818;:::o;33393:96::-;33528:7;:21;33536:9;33546:1;33536:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33536:12:0;33528:21;;;;;;;;;;;;;33518:31;;:7;:31;:::i;:::-;33508:41;;33588:7;:21;33596:9;33606:1;33596:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33596:12:0;33588:21;;;;;;;;;;;;;33578:31;;:7;:31;:::i;:::-;33568:41;-1:-1:-1;33369:3:0;;;;:::i;:::-;;;;33329:296;;;;33289:347;33670:7;;33660;;:17;;;;:::i;:::-;33650:7;:27;33646:57;;;33696:7;;33686;;:17;;;;:::i;33646:57::-;33721:17;33731:7;33721;:17;:::i;24722:1556::-;24801:4;-1:-1:-1;;;;;24826:18:0;;24818:68;;;;-1:-1:-1;;;24818:68:0;;28148:2:1;24818:68:0;;;28130:21:1;28187:2;28167:18;;;28160:30;28226:34;28206:18;;;28199:62;28297:7;28277:18;;;28270:35;28322:19;;24818:68:0;27946:401:1;24818:68:0;-1:-1:-1;;;;;24905:16:0;;24897:64;;;;-1:-1:-1;;;24897:64:0;;28554:2:1;24897:64:0;;;28536:21:1;28593:2;28573:18;;;28566:30;28632:34;28612:18;;;28605:62;28703:5;28683:18;;;28676:33;28726:19;;24897:64:0;28352:399:1;24897:64:0;24989:1;24980:6;:10;24972:64;;;;-1:-1:-1;;;24972:64:0;;28958:2:1;24972:64:0;;;28940:21:1;28997:2;28977:18;;;28970:30;29036:34;29016:18;;;29009:62;29107:11;29087:18;;;29080:39;29136:19;;24972:64:0;28756:405:1;24972:64:0;25050:20;25061:4;25067:2;25050:10;:20::i;:::-;25047:402;;;25091:14;;;;25087:89;;25126:34;;-1:-1:-1;;;25126:34:0;;29368:2:1;25126:34:0;;;29350:21:1;29407:2;29387:18;;;29380:30;29446:26;29426:18;;;29419:54;29490:18;;25126:34:0;29166:348:1;25087:89:0;-1:-1:-1;;;;;25193:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;25210:11:0;;;;;;:7;:11;;;;;;;;25193:28;25190:248;;;-1:-1:-1;;;;;25246:27:0;;;;;;:21;:27;;;;;;;;25245:28;:58;;;;-1:-1:-1;;;;;;25278:25:0;;;;;;:21;:25;;;;;;;;25277:26;25245:58;25241:182;;;25346:12;;25336:6;:22;;25328:75;;;;-1:-1:-1;;;25328:75:0;;29721:2:1;25328:75:0;;;29703:21:1;29760:2;29740:18;;;29733:30;29799:34;29779:18;;;29772:62;29870:10;29850:18;;;29843:38;29898:19;;25328:75:0;29519:404:1;25328:75:0;-1:-1:-1;;;;;25494:25:0;;25461:12;25494:25;;;:19;:25;;;;;;25476:4;;25494:25;;;:52;;-1:-1:-1;;;;;;25523:23:0;;;;;;:19;:23;;;;;;;;25494:52;25491:98;;;-1:-1:-1;25572:5:0;25491:98;-1:-1:-1;;;;;25605:11:0;;;;;;:7;:11;;;;;;;;25601:607;;;25638:6;;;;25637:7;:47;;;;-1:-1:-1;25665:19:0;;;;;;;25637:47;25633:558;;;25755:15;25734:17;;25723:8;;:28;;;;:::i;:::-;:47;25719:457;;25795:28;25826:24;25844:4;25826:9;:24::i;:::-;25795:55;;25901:13;;25877:20;:37;25873:284;;25970:10;;25946:20;:34;25943:77;;-1:-1:-1;26007:10:0;;25943:77;26046:34;26059:20;26046:12;:34::i;:::-;26118:15;26107:8;:26;25873:284;25772:404;25719:457;26226:44;26244:4;26250:2;26254:6;26262:7;26226:17;:44::i;:::-;26219:51;24722:1556;-1:-1:-1;;;;;24722:1556:0:o;24357:357::-;24425:4;24457:6;;-1:-1:-1;;;;;24449:14:0;;;24457:6;;24449:14;;;;:43;;-1:-1:-1;24486:6:0;;-1:-1:-1;;;;;24480:12:0;;;24486:6;;24480:12;;24449:43;:79;;;;-1:-1:-1;24522:6:0;;-1:-1:-1;;;;;24522:6:0;24509:9;:19;;24449:79;:118;;;;-1:-1:-1;;;;;;24546:21:0;;;;;;:17;:21;;;;;;;;24545:22;24449:118;:159;;;;-1:-1:-1;;;;;;24585:23:0;;;;;;:17;:23;;;;;;;;24584:24;24449:159;:186;;;;-1:-1:-1;;;;;;24625:10:0;;8808:42;24625:10;;24449:186;:219;;;;-1:-1:-1;;;;;;24652:16:0;;;;24449:219;:257;;;;-1:-1:-1;;;;;;24685:21:0;;24701:4;24685:21;;24442:264;24357:357;-1:-1:-1;;;24357:357:0:o;26286:1422::-;9850:6;:13;;-1:-1:-1;;9850:13:0;9859:4;9850:13;;;26369:30:::1;::::0;;::::1;::::0;::::1;::::0;;26392:7:::1;26369:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;26410:56:::1;;26448:7;;;26410:56;26501:4;26481:26;::::0;;;:11:::1;:26;::::0;;;;;;;26516:9:::1;::::0;-1:-1:-1;;;;;26516:9:0::1;26481:46:::0;;;;;;;;-1:-1:-1;;26481:67:0::1;26478:165;;26585:4;26565:26;::::0;;;:11:::1;:26;::::0;;;;;;;26600:9:::1;::::0;-1:-1:-1;;;;;26600:9:0::1;26565:46:::0;;;;;;;-1:-1:-1;;26565:66:0;;26478:165:::1;26687:16;::::0;;26701:1:::1;26687:16:::0;;;;;::::1;::::0;;26663:21:::1;::::0;26687:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26687:16:0::1;26663:40;;26732:4;26714;26719:1;26714:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26714:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;26758:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;26714:7;;26758:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26748:4;26753:1;26748:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26748:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;26787:9:::1;::::0;:199:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:199:::1;::::0;26862:20;;26787:9:::1;::::0;26913:4;;26940::::1;::::0;26960:15:::1;::::0;26787:199:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;27109:12:0::1;::::0;::::1;::::0;27091:14;;27020:21:::1;::::0;-1:-1:-1;26999:18:0::1;::::0;27077:44:::1;::::0;;::::1;::::0;27078:27:::1;::::0;::::1;27020:21:::0;27078:27:::1;:::i;:::-;27077:44;;;;:::i;:::-;27052:69;;27132:22;27189:6;:12;;;27157:44;;27171:6;:14;;;27158:27;;:10;:27;;;;:::i;:::-;27157:44;;;;:::i;:::-;27132:69;;27212:19;27263:6;:12;;;27234:41;;27248:6;:11;;;27235:24;;:10;:24;;;;:::i;:::-;27234:41;;;;:::i;:::-;27313:14:::0;;27212:63;;-1:-1:-1;27286:12:0::1;::::0;27313:18:::1;;::::0;27309:127:::1;;27361:11;:19:::0;:63:::1;::::0;-1:-1:-1;;;;;27361:19:0;;::::1;::::0;27414:5:::1;::::0;27393:14;;27361:63:::1;::::0;;;27393:14;27361:19;27414:5;27361:63:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;27348:76:0;;-1:-1:-1;;27309:127:0::1;27450:14;::::0;::::1;::::0;:18:::1;;::::0;27446:127:::1;;27498:19:::0;;:63:::1;::::0;-1:-1:-1;;;;;27498:19:0;;::::1;::::0;27551:5:::1;::::0;27530:14;;27498:63:::1;::::0;;;27530:14;27498:19;27551:5;27498:63:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;27485:76:0;;-1:-1:-1;;27446:127:0::1;27587:11;::::0;::::1;::::0;:15:::1;;::::0;27583:118:::1;;27632:16:::0;;:57:::1;::::0;-1:-1:-1;;;;;27632:16:0;;::::1;::::0;27679:5:::1;::::0;27661:11;;27632:57:::1;::::0;;;27661:11;27632:16;27679:5;27632:57:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;27619:70:0;;-1:-1:-1;;27583:118:0::1;26358:1350;;;;;;;9874:1;-1:-1:-1::0;9886:6:0;:14;;-1:-1:-1;;9886:14:0;;;26286:1422::o;29963:909::-;30086:16;;30064:4;;30086:16;;;;;30081:221;;30119:28;30138:4;30144:2;30119:18;:28::i;:::-;30167:16;;;;;;;30166:17;:41;;;;;30187:20;30198:4;30204:2;30187:10;:20::i;:::-;30162:129;;;30228:47;;-1:-1:-1;;;30228:47:0;;30950:2:1;30228:47:0;;;30932:21:1;30989:2;30969:18;;;30962:30;31028:34;31008:18;;;31001:62;31099:7;31079:18;;;31072:35;31124:19;;30228:47:0;30748:401:1;30162:129:0;30314:25;30342:38;30353:4;30359:2;30363:7;30372;30342:10;:38::i;:::-;30410:14;;;;-1:-1:-1;;;;;30393:13:0;;;;;;:7;:13;;;;;:31;;30314:66;;-1:-1:-1;30410:14:0;;30393:31;;30410:14;;30393:31;:::i;:::-;;;;-1:-1:-1;;30450:22:0;;;;-1:-1:-1;;;;;30435:11:0;;;;;;:7;:11;;;;;:37;;:11;;;:37;;30450:22;;30435:37;:::i;:::-;;;;-1:-1:-1;;;;;;;30489:17:0;;;;;;:11;:17;;;;;;;;30485:89;;;-1:-1:-1;;;;;30539:13:0;;;;;;:7;:13;;;;;;:23;;30555:7;;30539:23;:::i;:::-;-1:-1:-1;;;;;30523:13:0;;;;;;:7;:13;;;;;:39;30485:89;-1:-1:-1;;;;;30588:15:0;;;;;;:11;:15;;;;;;;;30584:98;;;30648:22;;-1:-1:-1;;;;;30634:11:0;;30648:22;30634:11;;;:7;:11;;;;;;:36;;30648:22;30634:36;:::i;:::-;-1:-1:-1;;;;;30620:11:0;;;;;;:7;:11;;;;;:50;30584:98;30712:1;30698:6;:11;;;:15;:34;;;;30731:1;30717:6;:11;;;:15;30698:34;30694:89;;;30760:6;:11;;;30749:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;30694:89:0;30815:2;-1:-1:-1;;;;;30800:42:0;30809:4;-1:-1:-1;;;;;30800:42:0;;30819:6;:22;;;30800:42;;;;391:25:1;;379:2;364:18;;245:177;30800:42:0;;;;;;;;-1:-1:-1;30860:4:0;;29963:909;-1:-1:-1;;;;;29963:909:0:o;27716:508::-;27798:16;;;;;;;27797:17;27789:65;;;;-1:-1:-1;;;27789:65:0;;31356:2:1;27789:65:0;;;31338:21:1;31395:2;31375:18;;;31368:30;31434:34;31414:18;;;31407:62;31505:5;31485:18;;;31478:33;31528:19;;27789:65:0;31154:399:1;27789:65:0;27870:20;27881:4;27887:2;27870:10;:20::i;:::-;27869:21;:37;;;;-1:-1:-1;27900:6:0;;-1:-1:-1;;;;;27894:12:0;;;27900:6;;27894:12;27869:37;27865:352;;;-1:-1:-1;;;;;27923:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;27923:30:0;27949:4;27923:30;;;27968:23;;-1:-1:-1;;27968:23:0;27923:30;27968:23;;;;;28017:9;;;;28006:107;;28061:9;:36;;;;28091:4;28061:36;;;;;28006:107;28127:19;:26;;-1:-1:-1;;28127:26:0;;;;;28173:32;;-1:-1:-1;4067:41:1;;28173:32:0;;4055:2:1;4040:18;28173:32:0;;;;;;;27716:508;;:::o;30880:2040::-;30974:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30974:18:0;31005:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31005:25:0;31062:10;:8;:10::i;:::-;31041:18;;;:31;;;31102:28;;:7;:28;:::i;:::-;31085:14;;;:45;31147:20;31158:4;31164:2;31147:10;:20::i;:::-;31143:315;;;31215:9;;:38;;;;;-1:-1:-1;;;;;31839:15:1;;;31215:38:0;;;31821:34:1;31891:15;;;31871:18;;;31864:43;31923:18;;;31916:34;;;31184:12:0;;31215:9;;;;;:19;;31733:18:1;;31215:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;31215:38:0;;;;;;;;-1:-1:-1;;31215:38:0;;;;;;;;;;;;:::i;:::-;;;31211:164;;31351:8;;;31211:164;31304:5;-1:-1:-1;31395:7:0;31391:56;;31423:8;;;31391:56;31169:289;31143:315;31473:7;31470:1012;;;-1:-1:-1;;;;;31623:11:0;;31497:22;31623:11;;;:7;:11;;;;;;31497:22;;8702:5;;31623:11;;31619:423;;;31672:10;:18;;;;;;-1:-1:-1;31723:20:0;;;;;;-1:-1:-1;31619:423:0;;;-1:-1:-1;;;;;31769:13:0;;;;;;:7;:13;;;;;;;;31765:277;;;31820:9;:17;;;;;;-1:-1:-1;31870:19:0;;;;;;-1:-1:-1;31765:277:0;;;31947:14;:22;;;;;;-1:-1:-1;32002:24:0;;;;;;-1:-1:-1;31765:277:0;32101:7;32073:24;32083:14;32073:7;:24;:::i;:::-;32072:36;;;;:::i;:::-;32058:11;;;:50;32164:7;32139:21;32149:11;32139:7;:21;:::i;:::-;32138:33;;;;:::i;:::-;32123:12;;;:48;;;32222:11;;;;:26;;32123:48;32222:26;:::i;:::-;32211:38;;:7;:38;:::i;:::-;32186:63;;32294:18;;;;32280:11;;;;:32;;32294:18;32280:32;:::i;:::-;32266:11;;;:46;-1:-1:-1;31470:1012:0;;-1:-1:-1;;31470:1012:0;;32359:1;32345:11;;;:15;;;32375:12;;;:16;;;32406:32;;;32455:11;;;:15;31470:1012;32498:12;;;;:16;32494:289;;32572:6;:18;;;32557:6;:12;;;:33;;;;:::i;:::-;32547:4;32531:22;;;;:7;:22;;;;;:59;;:22;;;:59;;;;;:::i;:::-;;;;-1:-1:-1;;32628:4:0;32608:26;;;;:11;:26;;;;;;;;32605:104;;;32681:12;;;;;32671:4;32655:22;;;;:7;:22;;;;;:38;;32681:12;;32655:22;;:38;;32681:12;;32655:38;:::i;:::-;;;;-1:-1:-1;;32605:104:0;32751:4;-1:-1:-1;;;;;32728:43:0;32737:4;-1:-1:-1;;;;;32728:43:0;;32758:6;:12;;;32728:43;;;;391:25:1;;379:2;364:18;;245:177;32728:43:0;;;;;;;;32494:289;32868:6;:18;;;32853:6;:12;;;:33;;;;:::i;:::-;32838:6;:11;;;:49;;;;:::i;:::-;32820:6;:14;;;:68;;;;:::i;:::-;32795:22;;;:93;:22;30880:2040;-1:-1:-1;;;;;30880:2040:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;427:184:1;479:77;476:1;469:88;576:4;573:1;566:15;600:4;597:1;590:15;616:334;687:2;681:9;743:2;733:13;;-1:-1:-1;;729:86:1;717:99;;846:18;831:34;;867:22;;;828:62;825:88;;;893:18;;:::i;:::-;929:2;922:22;616:334;;-1:-1:-1;616:334:1:o;955:183::-;1015:4;1048:18;1040:6;1037:30;1034:56;;;1070:18;;:::i;:::-;-1:-1:-1;1115:1:1;1111:14;1127:4;1107:25;;955:183::o;1143:154::-;-1:-1:-1;;;;;1222:5:1;1218:54;1211:5;1208:65;1198:93;;1287:1;1284;1277:12;1302:737;1356:5;1409:3;1402:4;1394:6;1390:17;1386:27;1376:55;;1427:1;1424;1417:12;1376:55;1463:6;1450:20;1489:4;1513:60;1529:43;1569:2;1529:43;:::i;:::-;1513:60;:::i;:::-;1607:15;;;1693:1;1689:10;;;;1677:23;;1673:32;;;1638:12;;;;1717:15;;;1714:35;;;1745:1;1742;1735:12;1714:35;1781:2;1773:6;1769:15;1793:217;1809:6;1804:3;1801:15;1793:217;;;1889:3;1876:17;1906:31;1931:5;1906:31;:::i;:::-;1950:18;;1988:12;;;;1826;;1793:217;;;-1:-1:-1;2028:5:1;1302:737;-1:-1:-1;;;;;;1302:737:1:o;2044:118::-;2130:5;2123:13;2116:21;2109:5;2106:32;2096:60;;2152:1;2149;2142:12;2167:477;2257:6;2265;2318:2;2306:9;2297:7;2293:23;2289:32;2286:52;;;2334:1;2331;2324:12;2286:52;2374:9;2361:23;2407:18;2399:6;2396:30;2393:50;;;2439:1;2436;2429:12;2393:50;2462:61;2515:7;2506:6;2495:9;2491:22;2462:61;:::i;:::-;2452:71;;;2573:2;2562:9;2558:18;2545:32;2586:28;2608:5;2586:28;:::i;:::-;2633:5;2623:15;;;2167:477;;;;;:::o;2649:258::-;2721:1;2731:113;2745:6;2742:1;2739:13;2731:113;;;2821:11;;;2815:18;2802:11;;;2795:39;2767:2;2760:10;2731:113;;;2862:6;2859:1;2856:13;2853:48;;;-1:-1:-1;;2897:1:1;2879:16;;2872:27;2649:258::o;2912:442::-;3061:2;3050:9;3043:21;3024:4;3093:6;3087:13;3136:6;3131:2;3120:9;3116:18;3109:34;3152:66;3211:6;3206:2;3195:9;3191:18;3186:2;3178:6;3174:15;3152:66;:::i;:::-;3270:2;3258:15;-1:-1:-1;;3254:88:1;3239:104;;;;3345:2;3235:113;;2912:442;-1:-1:-1;;2912:442:1:o;3607:315::-;3675:6;3683;3736:2;3724:9;3715:7;3711:23;3707:32;3704:52;;;3752:1;3749;3742:12;3704:52;3791:9;3778:23;3810:31;3835:5;3810:31;:::i;:::-;3860:5;3912:2;3897:18;;;;3884:32;;-1:-1:-1;;;3607:315:1:o;4119:382::-;4184:6;4192;4245:2;4233:9;4224:7;4220:23;4216:32;4213:52;;;4261:1;4258;4251:12;4213:52;4300:9;4287:23;4319:31;4344:5;4319:31;:::i;:::-;4369:5;-1:-1:-1;4426:2:1;4411:18;;4398:32;4439:30;4398:32;4439:30;:::i;4506:456::-;4583:6;4591;4599;4652:2;4640:9;4631:7;4627:23;4623:32;4620:52;;;4668:1;4665;4658:12;4620:52;4707:9;4694:23;4726:31;4751:5;4726:31;:::i;:::-;4776:5;-1:-1:-1;4833:2:1;4818:18;;4805:32;4846:33;4805:32;4846:33;:::i;:::-;4506:456;;4898:7;;-1:-1:-1;;;4952:2:1;4937:18;;;;4924:32;;4506:456::o;4967:662::-;5021:5;5074:3;5067:4;5059:6;5055:17;5051:27;5041:55;;5092:1;5089;5082:12;5041:55;5128:6;5115:20;5154:4;5178:60;5194:43;5234:2;5194:43;:::i;5178:60::-;5272:15;;;5358:1;5354:10;;;;5342:23;;5338:32;;;5303:12;;;;5382:15;;;5379:35;;;5410:1;5407;5400:12;5379:35;5446:2;5438:6;5434:15;5458:142;5474:6;5469:3;5466:15;5458:142;;;5540:17;;5528:30;;5578:12;;;;5491;;5458:142;;5634:595;5752:6;5760;5813:2;5801:9;5792:7;5788:23;5784:32;5781:52;;;5829:1;5826;5819:12;5781:52;5869:9;5856:23;5898:18;5939:2;5931:6;5928:14;5925:34;;;5955:1;5952;5945:12;5925:34;5978:61;6031:7;6022:6;6011:9;6007:22;5978:61;:::i;:::-;5968:71;;6092:2;6081:9;6077:18;6064:32;6048:48;;6121:2;6111:8;6108:16;6105:36;;;6137:1;6134;6127:12;6105:36;;6160:63;6215:7;6204:8;6193:9;6189:24;6160:63;:::i;:::-;6150:73;;;5634:595;;;;;:::o;6234:180::-;6293:6;6346:2;6334:9;6325:7;6321:23;6317:32;6314:52;;;6362:1;6359;6352:12;6314:52;-1:-1:-1;6385:23:1;;6234:180;-1:-1:-1;6234:180:1:o;6608:247::-;6667:6;6720:2;6708:9;6699:7;6695:23;6691:32;6688:52;;;6736:1;6733;6726:12;6688:52;6775:9;6762:23;6794:31;6819:5;6794:31;:::i;6860:454::-;6955:6;6963;6971;6979;6987;7040:3;7028:9;7019:7;7015:23;7011:33;7008:53;;;7057:1;7054;7047:12;7008:53;-1:-1:-1;;7080:23:1;;;7150:2;7135:18;;7122:32;;-1:-1:-1;7201:2:1;7186:18;;7173:32;;7252:2;7237:18;;7224:32;;-1:-1:-1;7303:3:1;7288:19;7275:33;;-1:-1:-1;6860:454:1;-1:-1:-1;6860:454:1:o;7319:248::-;7387:6;7395;7448:2;7436:9;7427:7;7423:23;7419:32;7416:52;;;7464:1;7461;7454:12;7416:52;-1:-1:-1;;7487:23:1;;;7557:2;7542:18;;;7529:32;;-1:-1:-1;7319:248:1:o;7572:553::-;7673:6;7681;7689;7742:2;7730:9;7721:7;7717:23;7713:32;7710:52;;;7758:1;7755;7748:12;7710:52;7797:9;7784:23;7816:31;7841:5;7816:31;:::i;:::-;7866:5;-1:-1:-1;7923:2:1;7908:18;;7895:32;7936:33;7895:32;7936:33;:::i;:::-;7988:7;-1:-1:-1;8047:2:1;8032:18;;8019:32;8060:33;8019:32;8060:33;:::i;:::-;8112:7;8102:17;;;7572:553;;;;;:::o;8658:159::-;8725:20;;8785:6;8774:18;;8764:29;;8754:57;;8807:1;8804;8797:12;8754:57;8658:159;;;:::o;8822:328::-;8896:6;8904;8912;8965:2;8953:9;8944:7;8940:23;8936:32;8933:52;;;8981:1;8978;8971:12;8933:52;9004:28;9022:9;9004:28;:::i;:::-;8994:38;;9051:37;9084:2;9073:9;9069:18;9051:37;:::i;:::-;9041:47;;9107:37;9140:2;9129:9;9125:18;9107:37;:::i;:::-;9097:47;;8822:328;;;;;:::o;9155:401::-;9237:6;9245;9253;9261;9314:3;9302:9;9293:7;9289:23;9285:33;9282:53;;;9331:1;9328;9321:12;9282:53;9354:28;9372:9;9354:28;:::i;:::-;9344:38;;9401:37;9434:2;9423:9;9419:18;9401:37;:::i;:::-;9391:47;;9457:37;9490:2;9479:9;9475:18;9457:37;:::i;:::-;9447:47;;9513:37;9546:2;9535:9;9531:18;9513:37;:::i;:::-;9503:47;;9155:401;;;;;;;:::o;9561:511::-;9629:6;9637;9645;9698:2;9686:9;9677:7;9673:23;9669:32;9666:52;;;9714:1;9711;9704:12;9666:52;9753:9;9740:23;9772:28;9794:5;9772:28;:::i;:::-;9819:5;-1:-1:-1;9876:2:1;9861:18;;9848:32;9889:30;9848:32;9889:30;:::i;:::-;9938:7;-1:-1:-1;9997:2:1;9982:18;;9969:32;10010:30;9969:32;10010:30;:::i;10077:241::-;10133:6;10186:2;10174:9;10165:7;10161:23;10157:32;10154:52;;;10202:1;10199;10192:12;10154:52;10241:9;10228:23;10260:28;10282:5;10260:28;:::i;10772:388::-;10840:6;10848;10901:2;10889:9;10880:7;10876:23;10872:32;10869:52;;;10917:1;10914;10907:12;10869:52;10956:9;10943:23;10975:31;11000:5;10975:31;:::i;:::-;11025:5;-1:-1:-1;11082:2:1;11067:18;;11054:32;11095:33;11054:32;11095:33;:::i;11165:821::-;11317:6;11325;11333;11386:2;11374:9;11365:7;11361:23;11357:32;11354:52;;;11402:1;11399;11392:12;11354:52;11442:9;11429:23;11471:18;11512:2;11504:6;11501:14;11498:34;;;11528:1;11525;11518:12;11498:34;11551:61;11604:7;11595:6;11584:9;11580:22;11551:61;:::i;:::-;11541:71;;11665:2;11654:9;11650:18;11637:32;11621:48;;11694:2;11684:8;11681:16;11678:36;;;11710:1;11707;11700:12;11678:36;11733:63;11788:7;11777:8;11766:9;11762:24;11733:63;:::i;:::-;11723:73;;11849:2;11838:9;11834:18;11821:32;11805:48;;11878:2;11868:8;11865:16;11862:36;;;11894:1;11891;11884:12;11862:36;;11917:63;11972:7;11961:8;11950:9;11946:24;11917:63;:::i;:::-;11907:73;;;11165:821;;;;;:::o;12797:484::-;12850:3;12888:5;12882:12;12915:6;12910:3;12903:19;12941:4;12970:2;12965:3;12961:12;12954:19;;13007:2;13000:5;12996:14;13028:1;13038:218;13052:6;13049:1;13046:13;13038:218;;;13117:13;;-1:-1:-1;;;;;13113:62:1;13101:75;;13196:12;;;;13231:15;;;;13074:1;13067:9;13038:218;;;-1:-1:-1;13272:3:1;;12797:484;-1:-1:-1;;;;;12797:484:1:o;13286:342::-;13487:2;13476:9;13469:21;13450:4;13507:56;13559:2;13548:9;13544:18;13536:6;13507:56;:::i;:::-;13499:64;;13613:6;13606:14;13599:22;13594:2;13583:9;13579:18;13572:50;13286:342;;;;;:::o;13633:437::-;13712:1;13708:12;;;;13755;;;13776:61;;13830:4;13822:6;13818:17;13808:27;;13776:61;13883:2;13875:6;13872:14;13852:18;13849:38;13846:218;;;13920:77;13917:1;13910:88;14021:4;14018:1;14011:15;14049:4;14046:1;14039:15;13846:218;;13633:437;;;:::o;14789:184::-;14841:77;14838:1;14831:88;14938:4;14935:1;14928:15;14962:4;14959:1;14952:15;14978:228;15018:7;15144:1;-1:-1:-1;;15072:74:1;15069:1;15066:81;15061:1;15054:9;15047:17;15043:105;15040:131;;;15151:18;;:::i;:::-;-1:-1:-1;15191:9:1;;14978:228::o;15211:184::-;15263:77;15260:1;15253:88;15360:4;15357:1;15350:15;15384:4;15381:1;15374:15;15400:184;15452:77;15449:1;15442:88;15549:4;15546:1;15539:15;15573:4;15570:1;15563:15;15589:125;15629:4;15657:1;15654;15651:8;15648:34;;;15662:18;;:::i;:::-;-1:-1:-1;15699:9:1;;15589:125::o;15719:195::-;15758:3;-1:-1:-1;;15782:5:1;15779:77;15776:103;;;15859:18;;:::i;:::-;-1:-1:-1;15906:1:1;15895:13;;15719:195::o;16269:482::-;16358:1;16401:5;16358:1;16415:330;16436:7;16426:8;16423:21;16415:330;;;16555:4;-1:-1:-1;;16483:77:1;16477:4;16474:87;16471:113;;;16564:18;;:::i;:::-;16614:7;16604:8;16600:22;16597:55;;;16634:16;;;;16597:55;16713:22;;;;16673:15;;;;16415:330;;;16419:3;16269:482;;;;;:::o;16756:866::-;16805:5;16835:8;16825:80;;-1:-1:-1;16876:1:1;16890:5;;16825:80;16924:4;16914:76;;-1:-1:-1;16961:1:1;16975:5;;16914:76;17006:4;17024:1;17019:59;;;;17092:1;17087:130;;;;16999:218;;17019:59;17049:1;17040:10;;17063:5;;;17087:130;17124:3;17114:8;17111:17;17108:43;;;17131:18;;:::i;:::-;-1:-1:-1;;17187:1:1;17173:16;;17202:5;;16999:218;;17301:2;17291:8;17288:16;17282:3;17276:4;17273:13;17269:36;17263:2;17253:8;17250:16;17245:2;17239:4;17236:12;17232:35;17229:77;17226:159;;;-1:-1:-1;17338:19:1;;;17370:5;;17226:159;17417:34;17442:8;17436:4;17417:34;:::i;:::-;17547:6;-1:-1:-1;;17475:79:1;17466:7;17463:92;17460:118;;;17558:18;;:::i;:::-;17596:20;;16756:866;-1:-1:-1;;;16756:866:1:o;17627:140::-;17685:5;17714:47;17755:4;17745:8;17741:19;17735:4;17714:47;:::i;17772:175::-;17809:3;17853:4;17846:5;17842:16;17882:4;17873:7;17870:17;17867:43;;;17890:18;;:::i;:::-;17939:1;17926:15;;17772:175;-1:-1:-1;;17772:175:1:o;18363:184::-;18415:77;18412:1;18405:88;18512:4;18509:1;18502:15;18536:4;18533:1;18526:15;18552:120;18592:1;18618;18608:35;;18623:18;;:::i;:::-;-1:-1:-1;18657:9:1;;18552:120::o;18677:128::-;18717:3;18748:1;18744:6;18741:1;18738:13;18735:39;;;18754:18;;:::i;:::-;-1:-1:-1;18790:9:1;;18677:128::o;19993:556::-;20047:5;20100:3;20093:4;20085:6;20081:17;20077:27;20067:55;;20118:1;20115;20108:12;20067:55;20147:6;20141:13;20173:18;20169:2;20166:26;20163:52;;;20195:18;;:::i;:::-;20239:114;20347:4;-1:-1:-1;;20271:4:1;20267:2;20263:13;20259:86;20255:97;20239:114;:::i;:::-;20378:2;20369:7;20362:19;20424:3;20417:4;20412:2;20404:6;20400:15;20396:26;20393:35;20390:55;;;20441:1;20438;20431:12;20390:55;20454:64;20515:2;20508:4;20499:7;20495:18;20488:4;20480:6;20476:17;20454:64;:::i;20554:909::-;20678:6;20686;20694;20702;20710;20763:3;20751:9;20742:7;20738:23;20734:33;20731:53;;;20780:1;20777;20770:12;20731:53;20813:9;20807:16;20842:18;20883:2;20875:6;20872:14;20869:34;;;20899:1;20896;20889:12;20869:34;20922:61;20975:7;20966:6;20955:9;20951:22;20922:61;:::i;:::-;20912:71;;21029:2;21018:9;21014:18;21008:25;20992:41;;21058:2;21048:8;21045:16;21042:36;;;21074:1;21071;21064:12;21042:36;;21097:63;21152:7;21141:8;21130:9;21126:24;21097:63;:::i;:::-;21087:73;;;21200:2;21189:9;21185:18;21179:25;21169:35;;21247:2;21236:9;21232:18;21226:25;21291:4;21284:5;21280:16;21273:5;21270:27;21260:55;;21311:1;21308;21301:12;21260:55;21384:3;21369:19;;21363:26;21334:5;;-1:-1:-1;21398:33:1;21363:26;21398:33;:::i;:::-;21450:7;21440:17;;;20554:909;;;;;;;;:::o;21797:112::-;21829:1;21855;21845:35;;21860:18;;:::i;:::-;-1:-1:-1;21894:9:1;;21797:112::o;21914:251::-;21984:6;22037:2;22025:9;22016:7;22012:23;22008:32;22005:52;;;22053:1;22050;22043:12;22005:52;22085:9;22079:16;22104:31;22129:5;22104:31;:::i;23137:306::-;23225:6;23233;23241;23294:2;23282:9;23273:7;23269:23;23265:32;23262:52;;;23310:1;23307;23300:12;23262:52;23339:9;23333:16;23323:26;;23389:2;23378:9;23374:18;23368:25;23358:35;;23433:2;23422:9;23418:18;23412:25;23402:35;;23137:306;;;;;:::o;23448:184::-;23518:6;23571:2;23559:9;23550:7;23546:23;23542:32;23539:52;;;23587:1;23584;23577:12;23539:52;-1:-1:-1;23610:16:1;;23448:184;-1:-1:-1;23448:184:1:o;26186:224::-;26225:3;26253:6;26286:2;26283:1;26279:10;26316:2;26313:1;26309:10;26347:3;26343:2;26339:12;26334:3;26331:21;26328:47;;;26355:18;;:::i;:::-;26391:13;;26186:224;-1:-1:-1;;;;26186:224:1:o;26415:217::-;26454:4;26483:6;26539:10;;;;26509;;26561:12;;;26558:38;;;26576:18;;:::i;:::-;26613:13;;26415:217;-1:-1:-1;;;26415:217:1:o;27348:245::-;27415:6;27468:2;27456:9;27447:7;27443:23;27439:32;27436:52;;;27484:1;27481;27474:12;27436:52;27516:9;27510:16;27535:28;27557:5;27535:28;:::i;29928:605::-;30227:6;30216:9;30209:25;30270:6;30265:2;30254:9;30250:18;30243:34;30313:3;30308:2;30297:9;30293:18;30286:31;30190:4;30334:57;30386:3;30375:9;30371:19;30363:6;30334:57;:::i;:::-;-1:-1:-1;;;;;30427:55:1;;;;30422:2;30407:18;;30400:83;-1:-1:-1;30514:3:1;30499:19;30492:35;30326:65;29928:605;-1:-1:-1;;;29928:605:1:o

Swarm Source

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