ETH Price: $3,072.70 (-7.92%)
 

Overview

Max Total Supply

100,000,000 supernova

Holders

19

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
94,000 supernova

Value
$0.00
0xcf15e42c77212c18dafbf3cbea5bc217d9c49514
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
supernova

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *The contract is automated to dynamically modify tax, which is exactly proportional to the MC/LP ratio - notice that this will not raise or reduce overall taxes, just the percentage of taxes that go towards LP. As MC increases, so does the proportion of tax devoted to created LP, and the same holds true for sales up to a particular MC/LP ratio (complicated math).

The really distinctive characteristic is:

Contract-related taxes will create LP, which will be stored. This will allow the contract to automatically/manually delete the created LP, buy on the open market, and burn the supply in the event of a price decline. Example: 50k in created LP minus a 25k purchase of tokens with the same amount of eth put into the chart and burned.


It's similar to a highly optimised and efficient method of buybacks and burns, only it's done using LP, which also increases liquidity continuously.


P.S. - The brilliant aspect of this is as follows. As the MC and LP ratio gets closer, say 500kmc to 250klp, the price impact decreases and selling becomes easier (this fattens the generated LP). As the MC begins to be sold off, the taxes at first still heavily go into LP, but when the ratio of the MC/LP becomes wider, say 500k MC to 80k LP, then the generated LP will have a decent price impact on our buybacks.

Simply:

Tax function for a dynamic LP.

And the use of dynamic LPs to support the graph

In excess deflationary.
https://t.me/SuperNovaERC
*/

// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity 0.8.15;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        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 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 IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

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

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    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 addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IPriceFeed {
    function latestAnswer() external returns (int256);
}

contract supernova is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    IPriceFeed internal immutable priceFeed;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public operationsAddress;
    address public devAddress;
    address public futureOwner;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public boughtEarly;
    address[] public earlyBuyers;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public constant FEE_DIVISOR = 10000;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    // floating liquidity settings
    bool public customLiquidityActive = true;
    uint256 public latestEthPrice = 0;
    uint256 public minimumBuyLiqPerc = 50;
    uint256 public minimumSellLiqPerc = 33;
    uint256 public maximumBuyLiqPerc = 80;
    uint256 public maximumSellLiqPerc = 50;
    uint256 public mcapComparisonValue = 10 * 1e6;

    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event UpdatedDevAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event AutoBurnLP(uint256 indexed tokensBurned);

    event ManualBurnLP(uint256 indexed tokensBurned);

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("supernova", "supernova") payable {
        
        address newOwner = msg.sender; // can leave alone if owner is deployer.
        address _dexRouter;
        address _priceFeed;

        if(block.chainid == 1){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
            _priceFeed = 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419;
        } else if(block.chainid == 4){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Rinkeby ETH: Uniswap V2
            _priceFeed = 0x8A753747A1Fa494EC906cE90E9f37563A8AF630e;
        } else if(block.chainid == 56){
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
            _priceFeed = 0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE;
        } else if(block.chainid == 97){
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain Testnet: PCS V2
            _priceFeed = 0x2514895c72f50D8bd4B4F9b1110F0D6bD2c97526;
        } else if(block.chainid == 42161){
            _dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap
            _priceFeed = 0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612;
        } else {
            revert("Chain not configured");
        }

        priceFeed = IPriceFeed(_priceFeed);
        require(priceFeed.latestAnswer() > 0, "wrong price feed");

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        uint256 totalSupply = 100 * 1e6 * (10 ** decimals());
        
        maxBuyAmount = totalSupply * 5 / 10000;
        maxSellAmount = totalSupply * 5 / 10000;
        maxWallet = totalSupply * 1 / 1000;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyOperationsFee = 100;
        buyLiquidityFee = 300;
        buyDevFee = 200;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;

        sellOperationsFee = 3333;
        sellLiquidityFee = 3333;
        sellDevFee = 3333;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;

        if(block.chainid == 1){
            operationsAddress = address(0x0f4534F63ebfcCa9Ff75e519EdBb7230F2390B0c);
            devAddress = address(0x0f4534F63ebfcCa9Ff75e519EdBb7230F2390B0c);
            futureOwner = address(0x0f4534F63ebfcCa9Ff75e519EdBb7230F2390B0c);
        } else {
            operationsAddress = address(msg.sender);
            devAddress = address(msg.sender);
            futureOwner = address(msg.sender);
        }

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(operationsAddress), true);
        _excludeFromMaxTransaction(address(dexRouter), true);
        _excludeFromMaxTransaction(address(futureOwner), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(operationsAddress), true);
        excludeFromFees(address(dexRouter), true);
        excludeFromFees(address(futureOwner), true);

        
        _createInitialSupply(address(this), totalSupply * 66 / 100);  // update with % for LP
        _createInitialSupply(futureOwner, totalSupply - balanceOf(address(this)));
        transferOwnership(newOwner);
    }

    receive() external payable {}

    function setCustomLiquidityActive(bool active) external onlyOwner {
        customLiquidityActive = active;
    }
    
    function enableTrading(uint256 blocksForPenalty, address _lpPair) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        require(blocksForPenalty <= 10, "Cannot make penalty blocks more than 10");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        
        // set pair
        lpPair = _lpPair;
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {

        limitsInEffect = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();

        emit RemovedLimits();
    }

    function getEarlyBuyers() external view returns (address[] memory){
        return earlyBuyers;
    }

    function massManageRestrictedWallets(address[] calldata accounts, bool restricted) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            boughtEarly[accounts[i]] = restricted;
        }
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10 ** decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10 ** decimals());
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100) / (10 ** decimals()), "Cannot set max sell amount lower than 1%");
        maxWallet = newNum * (10 ** decimals());
        emit UpdatedMaxWalletAmount(maxWallet);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount;
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 300, "Can only airdrop 300 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 15 * FEE_DIVISOR / 100, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 20 * FEE_DIVISOR / 100, "Must keep fees at 20% or less");
    }

    function massExcludeFromFees(address[] calldata accounts, bool excluded) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            _isExcludedFromFees[accounts[i]] = excluded;
            emit ExcludeFromFees(accounts[i], excluded);
        }
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(tradingActive){
            require((!boughtEarly[from] && !boughtEarly[to]) || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                    require(amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                } else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;

        if(customLiquidityActive && tradingActive && !swapping){
            latestEthPrice = uint256(priceFeed.latestAnswer());
            setCustomFees();
        }

        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && !_isExcludedFromFees[to] && buyTotalFees > 0){
                
                if(!earlyBuyPenaltyInEffect()){
                    // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*)
                    maxBuyAmount -= 1;
                }

                if(!boughtEarly[to]){
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    earlyBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

                fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / FEE_DIVISOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function earlyBuyPenaltyInEffect() public view returns (bool){
        return block.number < blockForPenaltyEnd;
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForDev;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
            contractBalance = swapTokensAtAmount * 20;
        }

        bool success;
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        swapTokensForEth(contractBalance - liquidityTokens); 
        
        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForDev;
            
        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForDev = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(devAddress).call{value: ethForDev}("");

        (success,) = address(operationsAddress).call{value: address(this).balance}("");
    }

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this) || !tradingActive, "Can't withdraw native tokens while trading is active");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }
    
    function setDevAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_operationsAddress address cannot be 0");
        devAddress = payable(_devAddress);
        emit UpdatedDevAddress(_devAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    function launch(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);
   
        // add the liquidity

        require(address(this).balance > 0, "Must have ETH on contract to launch");

        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");

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

        latestEthPrice = uint256(priceFeed.latestAnswer());

        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();
    }

    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function autoBurnLiquidityPairTokens() internal {
        
        lastLpBurnTime = block.timestamp;
        
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percentForLPBurn / 10000;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit AutoBurnLP(lpAmount);
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner {
        require(percent <= 5000, "May not burn more than 50% of contract's LP at a time");
        require(lastManualLpBurnTime <= block.timestamp - manualBurnFrequency, "Burn too soon");
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percent / 10000;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit ManualBurnLP(lpAmount);
    }

    function buyBackTokens(uint256 amountInWei) internal {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0,
            path,
            address(0xdead),
            block.timestamp
        );
    }

    function getMcap() public view returns (uint256){
        return (IERC20(dexRouter.WETH()).balanceOf(address(lpPair)) * 1e18 * latestEthPrice / balanceOf(address(lpPair)) * (totalSupply()-balanceOf(address(0xdead))) / 1e18 / 1e8); 
    }

    function customLiquiditySettings(bool _customLiquidityActive, uint256 _minimumBuyLiqPerc, uint256 _maximumBuyLiqPerc, uint256 _minimumSellLiqPerc, uint256 _maximumSellLiqPerc, uint256 _mcapComparisonValue) external onlyOwner {
        require(_minimumBuyLiqPerc <= 100 && _maximumBuyLiqPerc <= 100 && _minimumBuyLiqPerc <= _maximumBuyLiqPerc, "Buy settings incorrect");
        require(_minimumSellLiqPerc <= 100 && _maximumSellLiqPerc <= 100 && _minimumSellLiqPerc <= _maximumSellLiqPerc, "Sell settings incorrect");
        customLiquidityActive = _customLiquidityActive;
        minimumBuyLiqPerc = _minimumBuyLiqPerc;
        maximumBuyLiqPerc = _maximumBuyLiqPerc;
        minimumSellLiqPerc = _minimumSellLiqPerc;
        maximumSellLiqPerc = _maximumSellLiqPerc;
        mcapComparisonValue = _mcapComparisonValue;
    }

    function setCustomFees() internal {
        uint256 mcap = getMcap();
        uint256 newLiquidityPercBuy = (mcap / mcapComparisonValue) * maximumBuyLiqPerc / 1e18 + minimumBuyLiqPerc;
        uint256 newLiquidityPercSell = (mcap / mcapComparisonValue) * maximumSellLiqPerc / 1e18 + minimumSellLiqPerc;
        if(newLiquidityPercBuy > maximumBuyLiqPerc){
            newLiquidityPercBuy = maximumBuyLiqPerc;
        }
        if(newLiquidityPercSell > maximumSellLiqPerc){
            newLiquidityPercSell = maximumSellLiqPerc;
        }
        buyLiquidityFee = buyTotalFees * newLiquidityPercBuy / 100;
        buyOperationsFee = (buyTotalFees - buyLiquidityFee) * 33 / 100;
        buyDevFee = buyTotalFees - buyOperationsFee - buyLiquidityFee;
            
        sellLiquidityFee = sellTotalFees * newLiquidityPercSell / 100;
        sellOperationsFee = (sellTotalFees - sellLiquidityFee) * 50 / 100;
        sellDevFee = sellTotalFees - sellOperationsFee - sellLiquidityFee;
    }
}

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":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"AutoBurnLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"ManualBurnLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"customLiquidityActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_customLiquidityActive","type":"bool"},{"internalType":"uint256","name":"_minimumBuyLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_maximumBuyLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_minimumSellLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_maximumSellLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_mcapComparisonValue","type":"uint256"}],"name":"customLiquiditySettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"},{"internalType":"address","name":"_lpPair","type":"address"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"futureOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMcap","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":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestEthPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"massExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"restricted","type":"bool"}],"name":"massManageRestrictedWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumBuyLiqPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumSellLiqPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mcapComparisonValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumBuyLiqPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumSellLiqPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"setCustomLiquidityActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","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":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600f8190556014805462ffffff191660019081179091556016805460ff19908116831790915560196022556023805482169055610e106024556107086026556028805490911690911790556029556032602a8190556021602b556050602c55602d5562989680602e55600960a08181526873757065726e6f766160b81b60c081905261012060405260e092835261010052906003620000a18382620009bd565b506004620000b08282620009bd565b5050506000620000c56200062560201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005f1c833981519152908290a3503360008046600103620001425750737a250d5630b4cf539739df2c5dacb4c659f2488d9050735f4ec3df9cbd43714fe2740f5e3616155c5b841962000280565b466004036200017e5750737a250d5630b4cf539739df2c5dacb4c659f2488d9050738a753747a1fa494ec906ce90e9f37563a8af630e62000280565b46603803620001ba57507310ed43c718714eb63d5aa57b78b54704e256024e9050730567f2323251f0aab15c8dfb1967e4e8a7d42aee62000280565b46606103620001f6575073d99d1c33f9fc3444f8101754abc46c52416550d19050732514895c72f50d8bd4b4f9b1110f0d6bd2c9752662000280565b4661a4b103620002335750731b02da8cb0d097eb8d57a175b88c7d8b47997506905073639fe6ab55c921f74e7fac1ee960c0b6293ba61262000280565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166080819052604080516350d25bcd60e01b81529051600092916350d25bcd916004808301926020929190829003018187875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062000a89565b13620003375760405162461bcd60e51b815260206004820152601060248201526f1ddc9bdb99c81c1c9a58d9481999595960821b604482015260640162000277565b600980546001600160a01b0319166001600160a01b03841617905560006200035d601290565b6200036a90600a62000bb8565b6200037a906305f5e10062000bd0565b90506127106200038c82600562000bd0565b62000398919062000bf2565b600655612710620003ab82600562000bd0565b620003b7919062000bf2565b6007556103e8620003ca82600162000bd0565b620003d6919062000bf2565b600855620186a0620003ea82601962000bd0565b620003f6919062000bf2565b600b556064601881905561012c601981905560c8601a819055916200041c919062000c15565b62000428919062000c15565b601755610d05601c819055601d819055601e81905562000449818062000c15565b62000455919062000c15565b601b5546600103620004a757600c8054730f4534f63ebfcca9ff75e519edbb7230f2390b0c6001600160a01b03199182168117909255600d8054821683179055600e80549091169091179055620004d4565b600c8054336001600160a01b03199182168117909255600d8054821683179055600e805490911690911790555b620004e184600162000629565b620004ee30600162000629565b620004fd61dead600162000629565b600c5462000516906001600160a01b0316600162000629565b6009546200052f906001600160a01b0316600162000629565b600e5462000548906001600160a01b0316600162000629565b620005558460016200068c565b620005623060016200068c565b6200057161dead60016200068c565b600c546200058a906001600160a01b031660016200068c565b600954620005a3906001600160a01b031660016200068c565b600e54620005bc906001600160a01b031660016200068c565b620005e2306064620005d084604262000bd0565b620005dc919062000bf2565b62000736565b600e543060009081526020819052604090205462000610916001600160a01b031690620005dc908462000c30565b6200061b846200081b565b5050505062000c4a565b3390565b6001600160a01b038216600081815260306020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620006d75760405162461bcd60e51b8152602060048201819052602482015260008051602062005efc833981519152604482015260640162000277565b6001600160a01b0382166000818152602f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200078e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000277565b8060026000828254620007a2919062000c15565b90915550506001600160a01b03821660009081526020819052604081208054839290620007d190849062000c15565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620008665760405162461bcd60e51b8152602060048201819052602482015260008051602062005efc833981519152604482015260640162000277565b6001600160a01b038116620008cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000277565b6005546040516001600160a01b0380841692169060008051602062005f1c83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200094357607f821691505b6020821081036200096457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620009b857600081815260208120601f850160051c81016020861015620009935750805b601f850160051c820191505b81811015620009b4578281556001016200099f565b5050505b505050565b81516001600160401b03811115620009d957620009d962000918565b620009f181620009ea84546200092e565b846200096a565b602080601f83116001811462000a29576000841562000a105750858301515b600019600386901b1c1916600185901b178555620009b4565b600085815260208120601f198616915b8281101562000a5a5788860151825594840194600190910190840162000a39565b508582101562000a795787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a9c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000afa57816000190482111562000ade5762000ade62000aa3565b8085161562000aec57918102915b93841c939080029062000abe565b509250929050565b60008262000b135750600162000bb2565b8162000b225750600062000bb2565b816001811462000b3b576002811462000b465762000b66565b600191505062000bb2565b60ff84111562000b5a5762000b5a62000aa3565b50506001821b62000bb2565b5060208310610133831016604e8410600b841016171562000b8b575081810a62000bb2565b62000b97838362000ab9565b806000190482111562000bae5762000bae62000aa3565b0290505b92915050565b600062000bc960ff84168362000b02565b9392505050565b600081600019048311821515161562000bed5762000bed62000aa3565b500290565b60008262000c1057634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000c2b5762000c2b62000aa3565b500190565b60008282101562000c455762000c4562000aa3565b500390565b60805161528f62000c6d6000396000818161203f0152613b2d015261528f6000f3fe6080604052600436106104c45760003560e01c806388e765ff11610276578063c18bc1951161014f578063ea4cfe12116100c1578063f5648a4f11610085578063f5648a4f14610e0e578063f5f4a97d14610e23578063f637434214610e39578063f8b45b0514610e4f578063fb002c9714610e65578063fe72b27a14610e7b57600080fd5b8063ea4cfe1214610d82578063eb472fc414610da2578063ee40166e14610dc2578063f11a24d314610dd8578063f2fde38b14610dee57600080fd5b8063d85ba06311610113578063d85ba06314610cc5578063dc3f0d0f14610cdb578063dd62ed3e14610cfb578063e1ade1fe14610d41578063e2f4560514610d57578063e884f26014610d6d57600080fd5b8063c18bc19514610c35578063c876d0b914610c55578063d0d41fe114610c6f578063d0e7d33f14610c8f578063d257b34f14610ca557600080fd5b8063a4c82a00116101e8578063b9e9d1aa116101ac578063b9e9d1aa14610b81578063bbc0c74214610ba1578063bd5fb92014610bc0578063c024666814610be0578063c077ab4b14610c00578063c17b5b8c14610c1557600080fd5b8063a4c82a0014610ae5578063a62068ce14610afb578063a9059cbb14610b11578063b3e4c17914610b31578063b62496f514610b5157600080fd5b80639c3b4fdc1161023a5780639c3b4fdc14610a575780639e93ad8e14610a6d5780639ec22c0e14610a835780639fccce3214610a99578063a0d82dc514610aaf578063a457c2d714610ac557600080fd5b806388e765ff146109cc5780638da5cb5b146109e257806395d89b4114610a005780639a5bd2dd14610a155780639a7a23d614610a3757600080fd5b806342088f1e116103a85780636b0a894c1161031a578063751039fc116102de578063751039fc146109075780637571336a1461091c5780638095d5641461093c5780638366e79a1461095c57806385b12c7c1461097c57806385ecfd281461099c57600080fd5b80636b0a894c1461087c5780636ddd17131461089257806370a08231146108b2578063715018a6146108d2578063730c1888146108e757600080fd5b806351f205e41161036c57806351f205e4146107ee578063552fd1481461080357806358a6d531146108235780635a139dd41461083a57806366d602ae146108505780636a486a8e1461086657600080fd5b806342088f1e14610768578063452ed4f11461077e578063499b83941461079e5780634a62bb65146107be5780634f77f6c0146107d857600080fd5b8063199ffc72116104415780632c3e486c116104055780632c3e486c146106bc5780632e82f1a0146106d25780632f1ffebf146106ec578063313ce5671461070c57806339509351146107285780633ad10ef61461074857600080fd5b8063199ffc72146106305780631a8145bb146106465780632307b4411461065c57806323b872dd1461067c5780632be32b611461069c57600080fd5b80630d3cbb22116104885780630d3cbb221461059957806310d5de53146105bb5780631708da75146105eb57806318160ddd14610605578063184c16c51461061a57600080fd5b8063046f9c3f146104d057806306fdde03146104f95780630758d9241461051b578063095ea7b3146105535780630d3141e01461058357600080fd5b366104cb57005b600080fd5b3480156104dc57600080fd5b506104e6602a5481565b6040519081526020015b60405180910390f35b34801561050557600080fd5b5061050e610e9b565b6040516104f0919061493a565b34801561052757600080fd5b5060095461053b906001600160a01b031681565b6040516001600160a01b0390911681526020016104f0565b34801561055f57600080fd5b5061057361056e3660046149a7565b610f2d565b60405190151581526020016104f0565b34801561058f57600080fd5b506104e6602e5481565b3480156105a557600080fd5b506105b96105b43660046149e1565b610f44565b005b3480156105c757600080fd5b506105736105d6366004614a05565b60306020526000908152604090205460ff1681565b3480156105f757600080fd5b506028546105739060ff1681565b34801561061157600080fd5b506002546104e6565b34801561062657600080fd5b506104e660265481565b34801561063c57600080fd5b506104e660225481565b34801561065257600080fd5b506104e660205481565b34801561066857600080fd5b506105b9610677366004614af8565b610f8a565b34801561068857600080fd5b50610573610697366004614bba565b6110e3565b3480156106a857600080fd5b506105b96106b7366004614bfb565b61118d565b3480156106c857600080fd5b506104e660245481565b3480156106de57600080fd5b506023546105739060ff1681565b3480156106f857600080fd5b506105b9610707366004614c14565b6112a1565b34801561071857600080fd5b50604051601281526020016104f0565b34801561073457600080fd5b506105736107433660046149a7565b611416565b34801561075457600080fd5b50600d5461053b906001600160a01b031681565b34801561077457600080fd5b506104e660295481565b34801561078a57600080fd5b50600a5461053b906001600160a01b031681565b3480156107aa57600080fd5b506105b96107b9366004614a05565b611452565b3480156107ca57600080fd5b506014546105739060ff1681565b3480156107e457600080fd5b506104e6601c5481565b3480156107fa57600080fd5b506105b96114ec565b34801561080f57600080fd5b506105b961081e366004614c44565b6115f5565b34801561082f57600080fd5b506010544310610573565b34801561084657600080fd5b506104e660185481565b34801561085c57600080fd5b506104e660075481565b34801561087257600080fd5b506104e6601b5481565b34801561088857600080fd5b506104e660135481565b34801561089e57600080fd5b506014546105739062010000900460ff1681565b3480156108be57600080fd5b506104e66108cd366004614a05565b611696565b3480156108de57600080fd5b506105b96116b1565b3480156108f357600080fd5b506105b9610902366004614cca565b611725565b34801561091357600080fd5b506105b961184e565b34801561092857600080fd5b506105b9610937366004614cf8565b6118c5565b34801561094857600080fd5b506105b9610957366004614d26565b61198d565b34801561096857600080fd5b50610573610977366004614d52565b611a48565b34801561098857600080fd5b506105b9610997366004614bfb565b611c82565b3480156109a857600080fd5b506105736109b7366004614a05565b60116020526000908152604090205460ff1681565b3480156109d857600080fd5b506104e660065481565b3480156109ee57600080fd5b506005546001600160a01b031661053b565b348015610a0c57600080fd5b5061050e612115565b348015610a2157600080fd5b50610a2a612124565b6040516104f09190614dc4565b348015610a4357600080fd5b506105b9610a52366004614cf8565b612185565b348015610a6357600080fd5b506104e6601a5481565b348015610a7957600080fd5b506104e661271081565b348015610a8f57600080fd5b506104e660275481565b348015610aa557600080fd5b506104e660215481565b348015610abb57600080fd5b506104e6601e5481565b348015610ad157600080fd5b50610573610ae03660046149a7565b612279565b348015610af157600080fd5b506104e660255481565b348015610b0757600080fd5b506104e660105481565b348015610b1d57600080fd5b50610573610b2c3660046149a7565b612312565b348015610b3d57600080fd5b506105b9610b4c366004614dd7565b61231f565b348015610b5d57600080fd5b50610573610b6c366004614a05565b60316020526000908152604090205460ff1681565b348015610b8d57600080fd5b50600e5461053b906001600160a01b031681565b348015610bad57600080fd5b5060145461057390610100900460ff1681565b348015610bcc57600080fd5b506105b9610bdb366004614c44565b61243f565b348015610bec57600080fd5b506105b9610bfb366004614cf8565b612545565b348015610c0c57600080fd5b506104e66125ce565b348015610c2157600080fd5b506105b9610c30366004614d26565b61273b565b348015610c4157600080fd5b506105b9610c50366004614bfb565b6127f6565b348015610c6157600080fd5b506016546105739060ff1681565b348015610c7b57600080fd5b506105b9610c8a366004614a05565b612901565b348015610c9b57600080fd5b506104e6602d5481565b348015610cb157600080fd5b506105b9610cc0366004614bfb565b61299b565b348015610cd157600080fd5b506104e660175481565b348015610ce757600080fd5b506105b9610cf6366004614bfb565b612ae6565b348015610d0757600080fd5b506104e6610d16366004614d52565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d4d57600080fd5b506104e6602b5481565b348015610d6357600080fd5b506104e6600b5481565b348015610d7957600080fd5b506105b9612bf4565b348015610d8e57600080fd5b50600c5461053b906001600160a01b031681565b348015610dae57600080fd5b5061053b610dbd366004614bfb565b612c2a565b348015610dce57600080fd5b506104e6600f5481565b348015610de457600080fd5b506104e660195481565b348015610dfa57600080fd5b506105b9610e09366004614a05565b612c54565b348015610e1a57600080fd5b506105b9612d3f565b348015610e2f57600080fd5b506104e6602c5481565b348015610e4557600080fd5b506104e6601d5481565b348015610e5b57600080fd5b506104e660085481565b348015610e7157600080fd5b506104e6601f5481565b348015610e8757600080fd5b506105b9610e96366004614bfb565b612dab565b606060038054610eaa90614e23565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed690614e23565b8015610f235780601f10610ef857610100808354040283529160200191610f23565b820191906000526020600020905b815481529060010190602001808311610f0657829003601f168201915b5050505050905090565b6000610f3a3384846130a5565b5060015b92915050565b6005546001600160a01b03163314610f775760405162461bcd60e51b8152600401610f6e90614e5d565b60405180910390fd5b6028805460ff1916911515919091179055565b6005546001600160a01b03163314610fb45760405162461bcd60e51b8152600401610f6e90614e5d565b80518251146110055760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f6e565b61012c8251106110765760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f6e565b60005b82518110156110de57600083828151811061109657611096614e92565b6020026020010151905060008383815181106110b4576110b4614e92565b602002602001015190506110c93383836131c9565b505080806110d690614ebe565b915050611079565b505050565b60006110f084848461331e565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156111755760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f6e565b61118285338584036130a5565b506001949350505050565b6005546001600160a01b031633146111b75760405162461bcd60e51b8152600401610f6e90614e5d565b6111c36012600a614fbb565b6103e86111cf60025490565b6111da906001614fca565b6111e49190614fe9565b6111ee9190614fe9565b81101561124f5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f6e565b61125b6012600a614fbb565b6112659082614fca565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146112cb5760405162461bcd60e51b8152600401610f6e90614e5d565b601454610100900460ff16156113235760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f6e565b600a8211156113845760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610f6e565b6014805462ffff0019166201010017905543600f8190556113a690839061500b565b601055600a80546001600160a01b0319166001600160a01b0383169081179091556113d2906001613fc9565b600a546113e9906001600160a01b0316600161402c565b6040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a15050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f3a91859061144d90869061500b565b6130a5565b6005546001600160a01b0316331461147c5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0381166114a25760405162461bcd60e51b8152600401610f6e90615023565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146115165760405162461bcd60e51b8152600401610f6e90614e5d565b600b5461152230611696565b1015611598576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f6e565b600a805460ff60a01b1916600160a01b1790556115b361405a565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461161f5760405162461bcd60e51b8152600401610f6e90614e5d565b60005b8281101561169057816011600086868581811061164157611641614e92565b90506020020160208101906116569190614a05565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061168881614ebe565b915050611622565b50505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146116db5760405162461bcd60e51b8152600401610f6e90614e5d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461174f5760405162461bcd60e51b8152600401610f6e90614e5d565b6102588310156117bd5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f6e565b6103e882111580156117cd575060015b6118325760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f6e565b6024929092556022556023805460ff1916911515919091179055565b6005546001600160a01b031633146118785760405162461bcd60e51b8152600401610f6e90614e5d565b6014805460ff199081169091556016805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146118ef5760405162461bcd60e51b8152600401610f6e90614e5d565b8061196257600a546001600160a01b03908116908316036119625760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f6e565b6001600160a01b03919091166000908152603060205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146119b75760405162461bcd60e51b8152600401610f6e90614e5d565b60188390556019829055601a819055806119d1838561500b565b6119db919061500b565b60175560646119ed612710600f614fca565b6119f79190614fe9565b60175411156110de5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610f6e565b6005546000906001600160a01b03163314611a755760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b038316611acb5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f6e565b6001600160a01b03831630141580611aeb5750601454610100900460ff16155b611b545760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f6e565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbf9190615069565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c369190615082565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611cac5760405162461bcd60e51b8152600401610f6e90614e5d565b601454610100900460ff1615611d185760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f6e565b600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8f919061509f565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e15919061509f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e86919061509f565b600a80546001600160a01b0319166001600160a01b03929092169182179055611eb0906001613fc9565b600a54611ec7906001600160a01b0316600161402c565b60004711611f235760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f6e565b6000611f2e30611696565b11611f8a5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f6e565b600954611fa59030906001600160a01b031661144d82611696565b6009546001600160a01b031663f305d7194730611fc181611696565b600e546040516001600160e01b031960e087901b168152611ff793929160009182916001600160a01b03169042906004016150bc565b60606040518083038185885af1158015612015573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061203a91906150f7565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af115801561209d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c19190615069565b6029556014805462ffff0019166201010017905543600f8190556120e690829061500b565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b606060048054610eaa90614e23565b60606012805480602002602001604051908101604052809291908181526020018280548015610f2357602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161215e575050505050905090565b6005546001600160a01b031633146121af5760405162461bcd60e51b8152600401610f6e90614e5d565b600a546001600160a01b03908116908316036122335760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f6e565b61223d828261402c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122fb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f6e565b61230833858584036130a5565b5060019392505050565b6000610f3a33848461331e565b6005546001600160a01b031633146123495760405162461bcd60e51b8152600401610f6e90614e5d565b6064851115801561235b575060648411155b80156123675750838511155b6123ac5760405162461bcd60e51b8152602060048201526016602482015275109d5e481cd95d1d1a5b99dcc81a5b98dbdc9c9958dd60521b6044820152606401610f6e565b606483111580156123be575060648211155b80156123ca5750818311155b6124165760405162461bcd60e51b815260206004820152601760248201527f53656c6c2073657474696e677320696e636f72726563740000000000000000006044820152606401610f6e565b6028805460ff191696151596909617909555602a93909355602c91909155602b55602d55602e55565b6005546001600160a01b031633146124695760405162461bcd60e51b8152600401610f6e90614e5d565b60005b828110156116905781602f600086868581811061248b5761248b614e92565b90506020020160208101906124a09190614a05565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558383828181106124da576124da614e92565b90506020020160208101906124ef9190614a05565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78360405161252b911515815260200190565b60405180910390a28061253d81614ebe565b91505061246c565b6005546001600160a01b0316331461256f5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0382166000818152602f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60006305f5e100670de0b6b3a76400006125e961dead611696565b6002546125f69190615125565b600a5461260b906001600160a01b0316611696565b602954600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612661573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612685919061509f565b600a546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa1580156126ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f29190615069565b61270490670de0b6b3a7640000614fca565b61270e9190614fca565b6127189190614fe9565b6127229190614fca565b61272c9190614fe9565b6127369190614fe9565b905090565b6005546001600160a01b031633146127655760405162461bcd60e51b8152600401610f6e90614e5d565b601c839055601d829055601e8190558061277f838561500b565b612789919061500b565b601b55606461279b6127106014614fca565b6127a59190614fe9565b601b5411156110de5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f6e565b6005546001600160a01b031633146128205760405162461bcd60e51b8152600401610f6e90614e5d565b61282c6012600a614fbb565b606461283760025490565b612842906001614fca565b61284c9190614fe9565b6128569190614fe9565b8110156128b65760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015267207468616e20312560c01b6064820152608401610f6e565b6128c26012600a614fbb565b6128cc9082614fca565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611296565b6005546001600160a01b0316331461292b5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0381166129515760405162461bcd60e51b8152600401610f6e90615023565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad5490600090a250565b6005546001600160a01b031633146129c55760405162461bcd60e51b8152600401610f6e90614e5d565b620186a06129d260025490565b6129dd906001614fca565b6129e79190614fe9565b811015612a545760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f6e565b6103e8612a6060025490565b612a6b906001614fca565b612a759190614fe9565b811115612ae15760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f6e565b600b55565b6005546001600160a01b03163314612b105760405162461bcd60e51b8152600401610f6e90614e5d565b612b1c6012600a614fbb565b6103e8612b2860025490565b612b33906001614fca565b612b3d9190614fe9565b612b479190614fe9565b811015612ba95760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f6e565b612bb56012600a614fbb565b612bbf9082614fca565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611296565b6005546001600160a01b03163314612c1e5760405162461bcd60e51b8152600401610f6e90614e5d565b6016805460ff19169055565b60128181548110612c3a57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612c7e5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b038116612ce35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f6e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612d695760405162461bcd60e51b8152600401610f6e90614e5d565b604051600090339047908381818185875af1925050503d8060008114611690576040519150601f19603f3d011682016040523d82523d6000602084013e611690565b6005546001600160a01b03163314612dd55760405162461bcd60e51b8152600401610f6e90614e5d565b611388811115612e455760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20353025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f6e565b602654612e529042615125565b6027541115612e935760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f6e565b42602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612ee0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f049190615069565b90506000612f1130611696565b90506000612710612f228585614fca565b612f2c9190614fe9565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015612f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612faa9190615082565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90612fe590309086906001908190849042906004016150bc565b60408051808303816000875af1158015613003573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613027919061513c565b505060008361303530611696565b61303f9190615125565b90508015613054576130543061dead836131c9565b60006130608347615125565b905080156130715761307181614262565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166131075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f6e565b6001600160a01b0382166131685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f6e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166131ef5760405162461bcd60e51b8152600401610f6e90615160565b6001600160a01b0382166132155760405162461bcd60e51b8152600401610f6e906151a5565b6001600160a01b0383166000908152602081905260409020548181101561328d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f6e565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906132c490849061500b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161331091815260200190565b60405180910390a350505050565b6001600160a01b0383166133445760405162461bcd60e51b8152600401610f6e90615160565b6001600160a01b03821661336a5760405162461bcd60e51b8152600401610f6e906151a5565b600081116133ba5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f6e565b601454610100900460ff1661344d576001600160a01b0383166000908152602f602052604090205460ff168061340857506001600160a01b0382166000908152602f602052604090205460ff165b61344d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f6e565b601454610100900460ff161561354d576001600160a01b03831660009081526011602052604090205460ff1615801561349f57506001600160a01b03821660009081526011602052604090205460ff16155b806134b757506005546001600160a01b038381169116145b806134cc57506001600160a01b03821661dead145b61354d5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f6e565b60145460ff161561393f576005546001600160a01b0384811691161480159061358457506005546001600160a01b03838116911614155b801561359857506001600160a01b03821615155b80156135af57506001600160a01b03821661dead14155b80156135d457506001600160a01b0383166000908152602f602052604090205460ff16155b80156135f957506001600160a01b0382166000908152602f602052604090205460ff16155b1561393f5760165460ff1615613712576009546001600160a01b038381169116148015906136355750600a546001600160a01b03838116911614155b1561371257613645600243615125565b326000908152601560205260409020541080156136835750613668600243615125565b6001600160a01b038316600090815260156020526040902054105b6136ed5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f6e565b3260009081526015602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526031602052604090205460ff16801561375357506001600160a01b03821660009081526030602052604090205460ff16155b1561381a576006548111156137bb5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f6e565b6008546137c783611696565b6137d1908361500b565b11156138155760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f6e565b61393f565b6001600160a01b03821660009081526031602052604090205460ff16801561385b57506001600160a01b03831660009081526030602052604090205460ff16155b156138c5576007548111156138155760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f6e565b6001600160a01b03821660009081526030602052604090205460ff1661393f576008546138f183611696565b6138fb908361500b565b111561393f5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f6e565b600061394a30611696565b600b5490915081108015908190613969575060145462010000900460ff165b801561397f5750600a54600160a01b900460ff16155b80156139a457506001600160a01b03851660009081526031602052604090205460ff16155b80156139c957506001600160a01b0385166000908152602f602052604090205460ff16155b80156139ee57506001600160a01b0384166000908152602f602052604090205460ff16155b15613a1c57600a805460ff60a01b1916600160a01b179055613a0e61405a565b600a805460ff60a01b191690555b600a54600160a01b900460ff16158015613a4e57506001600160a01b03841660009081526031602052604090205460ff165b8015613a5c575060235460ff165b8015613a775750602454602554613a73919061500b565b4210155b8015613a9c57506001600160a01b0385166000908152602f602052604090205460ff16155b15613aa957613aa96143ac565b6001600160a01b0385166000908152602f602052604090205460019060ff1680613aeb57506001600160a01b0385166000908152602f602052604090205460ff165b15613af4575060005b60285460009060ff168015613b105750601454610100900460ff165b8015613b265750600a54600160a01b900460ff16155b15613bba577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015613b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613baf9190615069565b602955613bba6145c6565b8115613fb55760105443108015613be957506001600160a01b03871660009081526031602052604090205460ff165b8015613c0e57506001600160a01b03861660009081526031602052604090205460ff16155b8015613c3357506001600160a01b0386166000908152602f602052604090205460ff16155b8015613c4157506000601754115b15613dfc576010544310613c6857600160066000828254613c629190615125565b90915550505b6001600160a01b03861660009081526011602052604090205460ff16613d48576001600160a01b0386166000908152601160205260408120805460ff191660019081179091556013805491929091613cc190849061500b565b9091555050601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b61271060175486613d599190614fca565b613d639190614fe9565b905060175460195482613d769190614fca565b613d809190614fe9565b60206000828254613d91919061500b565b9091555050601754601854613da69083614fca565b613db09190614fe9565b601f6000828254613dc1919061500b565b9091555050601754601a54613dd69083614fca565b613de09190614fe9565b60216000828254613df1919061500b565b90915550613f979050565b6001600160a01b03861660009081526031602052604090205460ff168015613e2657506000601b54115b15613eb957612710601b5486613e3c9190614fca565b613e469190614fe9565b9050601b54601d5482613e599190614fca565b613e639190614fe9565b60206000828254613e74919061500b565b9091555050601b54601c54613e899083614fca565b613e939190614fe9565b601f6000828254613ea4919061500b565b9091555050601b54601e54613dd69083614fca565b6001600160a01b03871660009081526031602052604090205460ff168015613ee357506000601754115b15613f975761271060175486613ef99190614fca565b613f039190614fe9565b905060175460195482613f169190614fca565b613f209190614fe9565b60206000828254613f31919061500b565b9091555050601754601854613f469083614fca565b613f509190614fe9565b601f6000828254613f61919061500b565b9091555050601754601a54613f769083614fca565b613f809190614fe9565b60216000828254613f91919061500b565b90915550505b8015613fa857613fa88730836131c9565b613fb28186615125565b94505b613fc08787876131c9565b50505050505050565b6001600160a01b038216600081815260306020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152603160205260409020805460ff191682151517905561223d8282613fc9565b600061406530611696565b90506000602154601f5460205461407c919061500b565b614086919061500b565b9050811580614093575080155b1561409c575050565b600b546140aa906014614fca565b8211156140c257600b546140bf906014614fca565b91505b600080600283602054866140d69190614fca565b6140e09190614fe9565b6140ea9190614fe9565b90506140fe6140f98286615125565b614741565b6020544790819060009061411490600290614fe9565b61411e9087615125565b601f5461412b9085614fca565b6141359190614fe9565b9050600060026020546141489190614fe9565b6141529088615125565b60215461415f9086614fca565b6141699190614fe9565b9050614175818361500b565b61417f9084615125565b60006020819055601f8190556021559250841580159061419f5750600083115b156141ae576141ae858461489b565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146141fb576040519150601f19603f3d011682016040523d82523d6000602084013e614200565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114614250576040519150601f19603f3d011682016040523d82523d6000602084013e614255565b606091505b5050505050505050505050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156142cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f0919061509f565b8160008151811061430357614303614e92565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061433757614337614e92565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de9590849061437f90600090869061dead9042906004016151e8565b6000604051808303818588803b15801561439857600080fd5b505af1158015613fc0573d6000803e3d6000fd5b426025819055602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156143fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144229190615069565b9050600061442f30611696565b90506000612710602254846144449190614fca565b61444e9190614fe9565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156144a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144cc9190615082565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061450790309086906001908190849042906004016150bc565b60408051808303816000875af1158015614525573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614549919061513c565b505060008361455730611696565b6145619190615125565b90508015614576576145763061dead836131c9565b60006145828347615125565b905080156145935761459381614262565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b60006145d06125ce565b90506000602a54670de0b6b3a7640000602c54602e54856145f19190614fe9565b6145fb9190614fca565b6146059190614fe9565b61460f919061500b565b90506000602b54670de0b6b3a7640000602d54602e54866146309190614fe9565b61463a9190614fca565b6146449190614fe9565b61464e919061500b565b9050602c5482111561466057602c5491505b602d5481111561466f5750602d545b60648260175461467f9190614fca565b6146899190614fe9565b601981905560175460649161469d91615125565b6146a8906021614fca565b6146b29190614fe9565b601881905560195460175490916146c891615125565b6146d29190615125565b601a55601b546064906146e6908390614fca565b6146f09190614fe9565b601d819055601b5460649161470491615125565b61470f906032614fca565b6147199190614fe9565b601c819055601d54601b54909161472f91615125565b6147399190615125565b601e55505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061477657614776614e92565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156147cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147f3919061509f565b8160018151811061480657614806614e92565b6001600160a01b03928316602091820292909201015260095461482c91309116846130a5565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061486590859060009086903090429060040161521d565b600060405180830381600087803b15801561487f57600080fd5b505af1158015614893573d6000803e3d6000fd5b505050505050565b6009546148b39030906001600160a01b0316846130a5565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906148f090309087906000908190849042906004016150bc565b60606040518083038185885af115801561490e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061493391906150f7565b5050505050565b600060208083528351808285015260005b818110156149675785810183015185820160400152820161494b565b81811115614979576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146149a457600080fd5b50565b600080604083850312156149ba57600080fd5b82356149c58161498f565b946020939093013593505050565b80151581146149a457600080fd5b6000602082840312156149f357600080fd5b81356149fe816149d3565b9392505050565b600060208284031215614a1757600080fd5b81356149fe8161498f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614a6157614a61614a22565b604052919050565b600067ffffffffffffffff821115614a8357614a83614a22565b5060051b60200190565b600082601f830112614a9e57600080fd5b81356020614ab3614aae83614a69565b614a38565b82815260059290921b84018101918181019086841115614ad257600080fd5b8286015b84811015614aed5780358352918301918301614ad6565b509695505050505050565b60008060408385031215614b0b57600080fd5b823567ffffffffffffffff80821115614b2357600080fd5b818501915085601f830112614b3757600080fd5b81356020614b47614aae83614a69565b82815260059290921b84018101918181019089841115614b6657600080fd5b948201945b83861015614b8d578535614b7e8161498f565b82529482019490820190614b6b565b96505086013592505080821115614ba357600080fd5b50614bb085828601614a8d565b9150509250929050565b600080600060608486031215614bcf57600080fd5b8335614bda8161498f565b92506020840135614bea8161498f565b929592945050506040919091013590565b600060208284031215614c0d57600080fd5b5035919050565b60008060408385031215614c2757600080fd5b823591506020830135614c398161498f565b809150509250929050565b600080600060408486031215614c5957600080fd5b833567ffffffffffffffff80821115614c7157600080fd5b818601915086601f830112614c8557600080fd5b813581811115614c9457600080fd5b8760208260051b8501011115614ca957600080fd5b60209283019550935050840135614cbf816149d3565b809150509250925092565b600080600060608486031215614cdf57600080fd5b83359250602084013591506040840135614cbf816149d3565b60008060408385031215614d0b57600080fd5b8235614d168161498f565b91506020830135614c39816149d3565b600080600060608486031215614d3b57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614d6557600080fd5b8235614d708161498f565b91506020830135614c398161498f565b600081518084526020808501945080840160005b83811015614db95781516001600160a01b031687529582019590820190600101614d94565b509495945050505050565b6020815260006149fe6020830184614d80565b60008060008060008060c08789031215614df057600080fd5b8635614dfb816149d3565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b600181811c90821680614e3757607f821691505b602082108103614e5757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614ed057614ed0614ea8565b5060010190565b600181815b80851115614f12578160001904821115614ef857614ef8614ea8565b80851615614f0557918102915b93841c9390800290614edc565b509250929050565b600082614f2957506001610f3e565b81614f3657506000610f3e565b8160018114614f4c5760028114614f5657614f72565b6001915050610f3e565b60ff841115614f6757614f67614ea8565b50506001821b610f3e565b5060208310610133831016604e8410600b8410161715614f95575081810a610f3e565b614f9f8383614ed7565b8060001904821115614fb357614fb3614ea8565b029392505050565b60006149fe60ff841683614f1a565b6000816000190483118215151615614fe457614fe4614ea8565b500290565b60008261500657634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561501e5761501e614ea8565b500190565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60006020828403121561507b57600080fd5b5051919050565b60006020828403121561509457600080fd5b81516149fe816149d3565b6000602082840312156150b157600080fd5b81516149fe8161498f565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561510c57600080fd5b8351925060208401519150604084015190509250925092565b60008282101561513757615137614ea8565b500390565b6000806040838503121561514f57600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006152016080830186614d80565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061523c60a0830186614d80565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220ade71fa7a201bc9f101be25aa014b3bb59743ea29dd6724e7305080f6718310f64736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104c45760003560e01c806388e765ff11610276578063c18bc1951161014f578063ea4cfe12116100c1578063f5648a4f11610085578063f5648a4f14610e0e578063f5f4a97d14610e23578063f637434214610e39578063f8b45b0514610e4f578063fb002c9714610e65578063fe72b27a14610e7b57600080fd5b8063ea4cfe1214610d82578063eb472fc414610da2578063ee40166e14610dc2578063f11a24d314610dd8578063f2fde38b14610dee57600080fd5b8063d85ba06311610113578063d85ba06314610cc5578063dc3f0d0f14610cdb578063dd62ed3e14610cfb578063e1ade1fe14610d41578063e2f4560514610d57578063e884f26014610d6d57600080fd5b8063c18bc19514610c35578063c876d0b914610c55578063d0d41fe114610c6f578063d0e7d33f14610c8f578063d257b34f14610ca557600080fd5b8063a4c82a00116101e8578063b9e9d1aa116101ac578063b9e9d1aa14610b81578063bbc0c74214610ba1578063bd5fb92014610bc0578063c024666814610be0578063c077ab4b14610c00578063c17b5b8c14610c1557600080fd5b8063a4c82a0014610ae5578063a62068ce14610afb578063a9059cbb14610b11578063b3e4c17914610b31578063b62496f514610b5157600080fd5b80639c3b4fdc1161023a5780639c3b4fdc14610a575780639e93ad8e14610a6d5780639ec22c0e14610a835780639fccce3214610a99578063a0d82dc514610aaf578063a457c2d714610ac557600080fd5b806388e765ff146109cc5780638da5cb5b146109e257806395d89b4114610a005780639a5bd2dd14610a155780639a7a23d614610a3757600080fd5b806342088f1e116103a85780636b0a894c1161031a578063751039fc116102de578063751039fc146109075780637571336a1461091c5780638095d5641461093c5780638366e79a1461095c57806385b12c7c1461097c57806385ecfd281461099c57600080fd5b80636b0a894c1461087c5780636ddd17131461089257806370a08231146108b2578063715018a6146108d2578063730c1888146108e757600080fd5b806351f205e41161036c57806351f205e4146107ee578063552fd1481461080357806358a6d531146108235780635a139dd41461083a57806366d602ae146108505780636a486a8e1461086657600080fd5b806342088f1e14610768578063452ed4f11461077e578063499b83941461079e5780634a62bb65146107be5780634f77f6c0146107d857600080fd5b8063199ffc72116104415780632c3e486c116104055780632c3e486c146106bc5780632e82f1a0146106d25780632f1ffebf146106ec578063313ce5671461070c57806339509351146107285780633ad10ef61461074857600080fd5b8063199ffc72146106305780631a8145bb146106465780632307b4411461065c57806323b872dd1461067c5780632be32b611461069c57600080fd5b80630d3cbb22116104885780630d3cbb221461059957806310d5de53146105bb5780631708da75146105eb57806318160ddd14610605578063184c16c51461061a57600080fd5b8063046f9c3f146104d057806306fdde03146104f95780630758d9241461051b578063095ea7b3146105535780630d3141e01461058357600080fd5b366104cb57005b600080fd5b3480156104dc57600080fd5b506104e6602a5481565b6040519081526020015b60405180910390f35b34801561050557600080fd5b5061050e610e9b565b6040516104f0919061493a565b34801561052757600080fd5b5060095461053b906001600160a01b031681565b6040516001600160a01b0390911681526020016104f0565b34801561055f57600080fd5b5061057361056e3660046149a7565b610f2d565b60405190151581526020016104f0565b34801561058f57600080fd5b506104e6602e5481565b3480156105a557600080fd5b506105b96105b43660046149e1565b610f44565b005b3480156105c757600080fd5b506105736105d6366004614a05565b60306020526000908152604090205460ff1681565b3480156105f757600080fd5b506028546105739060ff1681565b34801561061157600080fd5b506002546104e6565b34801561062657600080fd5b506104e660265481565b34801561063c57600080fd5b506104e660225481565b34801561065257600080fd5b506104e660205481565b34801561066857600080fd5b506105b9610677366004614af8565b610f8a565b34801561068857600080fd5b50610573610697366004614bba565b6110e3565b3480156106a857600080fd5b506105b96106b7366004614bfb565b61118d565b3480156106c857600080fd5b506104e660245481565b3480156106de57600080fd5b506023546105739060ff1681565b3480156106f857600080fd5b506105b9610707366004614c14565b6112a1565b34801561071857600080fd5b50604051601281526020016104f0565b34801561073457600080fd5b506105736107433660046149a7565b611416565b34801561075457600080fd5b50600d5461053b906001600160a01b031681565b34801561077457600080fd5b506104e660295481565b34801561078a57600080fd5b50600a5461053b906001600160a01b031681565b3480156107aa57600080fd5b506105b96107b9366004614a05565b611452565b3480156107ca57600080fd5b506014546105739060ff1681565b3480156107e457600080fd5b506104e6601c5481565b3480156107fa57600080fd5b506105b96114ec565b34801561080f57600080fd5b506105b961081e366004614c44565b6115f5565b34801561082f57600080fd5b506010544310610573565b34801561084657600080fd5b506104e660185481565b34801561085c57600080fd5b506104e660075481565b34801561087257600080fd5b506104e6601b5481565b34801561088857600080fd5b506104e660135481565b34801561089e57600080fd5b506014546105739062010000900460ff1681565b3480156108be57600080fd5b506104e66108cd366004614a05565b611696565b3480156108de57600080fd5b506105b96116b1565b3480156108f357600080fd5b506105b9610902366004614cca565b611725565b34801561091357600080fd5b506105b961184e565b34801561092857600080fd5b506105b9610937366004614cf8565b6118c5565b34801561094857600080fd5b506105b9610957366004614d26565b61198d565b34801561096857600080fd5b50610573610977366004614d52565b611a48565b34801561098857600080fd5b506105b9610997366004614bfb565b611c82565b3480156109a857600080fd5b506105736109b7366004614a05565b60116020526000908152604090205460ff1681565b3480156109d857600080fd5b506104e660065481565b3480156109ee57600080fd5b506005546001600160a01b031661053b565b348015610a0c57600080fd5b5061050e612115565b348015610a2157600080fd5b50610a2a612124565b6040516104f09190614dc4565b348015610a4357600080fd5b506105b9610a52366004614cf8565b612185565b348015610a6357600080fd5b506104e6601a5481565b348015610a7957600080fd5b506104e661271081565b348015610a8f57600080fd5b506104e660275481565b348015610aa557600080fd5b506104e660215481565b348015610abb57600080fd5b506104e6601e5481565b348015610ad157600080fd5b50610573610ae03660046149a7565b612279565b348015610af157600080fd5b506104e660255481565b348015610b0757600080fd5b506104e660105481565b348015610b1d57600080fd5b50610573610b2c3660046149a7565b612312565b348015610b3d57600080fd5b506105b9610b4c366004614dd7565b61231f565b348015610b5d57600080fd5b50610573610b6c366004614a05565b60316020526000908152604090205460ff1681565b348015610b8d57600080fd5b50600e5461053b906001600160a01b031681565b348015610bad57600080fd5b5060145461057390610100900460ff1681565b348015610bcc57600080fd5b506105b9610bdb366004614c44565b61243f565b348015610bec57600080fd5b506105b9610bfb366004614cf8565b612545565b348015610c0c57600080fd5b506104e66125ce565b348015610c2157600080fd5b506105b9610c30366004614d26565b61273b565b348015610c4157600080fd5b506105b9610c50366004614bfb565b6127f6565b348015610c6157600080fd5b506016546105739060ff1681565b348015610c7b57600080fd5b506105b9610c8a366004614a05565b612901565b348015610c9b57600080fd5b506104e6602d5481565b348015610cb157600080fd5b506105b9610cc0366004614bfb565b61299b565b348015610cd157600080fd5b506104e660175481565b348015610ce757600080fd5b506105b9610cf6366004614bfb565b612ae6565b348015610d0757600080fd5b506104e6610d16366004614d52565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d4d57600080fd5b506104e6602b5481565b348015610d6357600080fd5b506104e6600b5481565b348015610d7957600080fd5b506105b9612bf4565b348015610d8e57600080fd5b50600c5461053b906001600160a01b031681565b348015610dae57600080fd5b5061053b610dbd366004614bfb565b612c2a565b348015610dce57600080fd5b506104e6600f5481565b348015610de457600080fd5b506104e660195481565b348015610dfa57600080fd5b506105b9610e09366004614a05565b612c54565b348015610e1a57600080fd5b506105b9612d3f565b348015610e2f57600080fd5b506104e6602c5481565b348015610e4557600080fd5b506104e6601d5481565b348015610e5b57600080fd5b506104e660085481565b348015610e7157600080fd5b506104e6601f5481565b348015610e8757600080fd5b506105b9610e96366004614bfb565b612dab565b606060038054610eaa90614e23565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed690614e23565b8015610f235780601f10610ef857610100808354040283529160200191610f23565b820191906000526020600020905b815481529060010190602001808311610f0657829003601f168201915b5050505050905090565b6000610f3a3384846130a5565b5060015b92915050565b6005546001600160a01b03163314610f775760405162461bcd60e51b8152600401610f6e90614e5d565b60405180910390fd5b6028805460ff1916911515919091179055565b6005546001600160a01b03163314610fb45760405162461bcd60e51b8152600401610f6e90614e5d565b80518251146110055760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f6e565b61012c8251106110765760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f6e565b60005b82518110156110de57600083828151811061109657611096614e92565b6020026020010151905060008383815181106110b4576110b4614e92565b602002602001015190506110c93383836131c9565b505080806110d690614ebe565b915050611079565b505050565b60006110f084848461331e565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156111755760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f6e565b61118285338584036130a5565b506001949350505050565b6005546001600160a01b031633146111b75760405162461bcd60e51b8152600401610f6e90614e5d565b6111c36012600a614fbb565b6103e86111cf60025490565b6111da906001614fca565b6111e49190614fe9565b6111ee9190614fe9565b81101561124f5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f6e565b61125b6012600a614fbb565b6112659082614fca565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146112cb5760405162461bcd60e51b8152600401610f6e90614e5d565b601454610100900460ff16156113235760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f6e565b600a8211156113845760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610f6e565b6014805462ffff0019166201010017905543600f8190556113a690839061500b565b601055600a80546001600160a01b0319166001600160a01b0383169081179091556113d2906001613fc9565b600a546113e9906001600160a01b0316600161402c565b6040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a15050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f3a91859061144d90869061500b565b6130a5565b6005546001600160a01b0316331461147c5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0381166114a25760405162461bcd60e51b8152600401610f6e90615023565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146115165760405162461bcd60e51b8152600401610f6e90614e5d565b600b5461152230611696565b1015611598576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f6e565b600a805460ff60a01b1916600160a01b1790556115b361405a565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461161f5760405162461bcd60e51b8152600401610f6e90614e5d565b60005b8281101561169057816011600086868581811061164157611641614e92565b90506020020160208101906116569190614a05565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061168881614ebe565b915050611622565b50505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146116db5760405162461bcd60e51b8152600401610f6e90614e5d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461174f5760405162461bcd60e51b8152600401610f6e90614e5d565b6102588310156117bd5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f6e565b6103e882111580156117cd575060015b6118325760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f6e565b6024929092556022556023805460ff1916911515919091179055565b6005546001600160a01b031633146118785760405162461bcd60e51b8152600401610f6e90614e5d565b6014805460ff199081169091556016805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146118ef5760405162461bcd60e51b8152600401610f6e90614e5d565b8061196257600a546001600160a01b03908116908316036119625760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f6e565b6001600160a01b03919091166000908152603060205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146119b75760405162461bcd60e51b8152600401610f6e90614e5d565b60188390556019829055601a819055806119d1838561500b565b6119db919061500b565b60175560646119ed612710600f614fca565b6119f79190614fe9565b60175411156110de5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610f6e565b6005546000906001600160a01b03163314611a755760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b038316611acb5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f6e565b6001600160a01b03831630141580611aeb5750601454610100900460ff16155b611b545760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f6e565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbf9190615069565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c369190615082565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611cac5760405162461bcd60e51b8152600401610f6e90614e5d565b601454610100900460ff1615611d185760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f6e565b600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8f919061509f565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e15919061509f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e86919061509f565b600a80546001600160a01b0319166001600160a01b03929092169182179055611eb0906001613fc9565b600a54611ec7906001600160a01b0316600161402c565b60004711611f235760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f6e565b6000611f2e30611696565b11611f8a5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f6e565b600954611fa59030906001600160a01b031661144d82611696565b6009546001600160a01b031663f305d7194730611fc181611696565b600e546040516001600160e01b031960e087901b168152611ff793929160009182916001600160a01b03169042906004016150bc565b60606040518083038185885af1158015612015573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061203a91906150f7565b5050507f0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af115801561209d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c19190615069565b6029556014805462ffff0019166201010017905543600f8190556120e690829061500b565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b606060048054610eaa90614e23565b60606012805480602002602001604051908101604052809291908181526020018280548015610f2357602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161215e575050505050905090565b6005546001600160a01b031633146121af5760405162461bcd60e51b8152600401610f6e90614e5d565b600a546001600160a01b03908116908316036122335760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f6e565b61223d828261402c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122fb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f6e565b61230833858584036130a5565b5060019392505050565b6000610f3a33848461331e565b6005546001600160a01b031633146123495760405162461bcd60e51b8152600401610f6e90614e5d565b6064851115801561235b575060648411155b80156123675750838511155b6123ac5760405162461bcd60e51b8152602060048201526016602482015275109d5e481cd95d1d1a5b99dcc81a5b98dbdc9c9958dd60521b6044820152606401610f6e565b606483111580156123be575060648211155b80156123ca5750818311155b6124165760405162461bcd60e51b815260206004820152601760248201527f53656c6c2073657474696e677320696e636f72726563740000000000000000006044820152606401610f6e565b6028805460ff191696151596909617909555602a93909355602c91909155602b55602d55602e55565b6005546001600160a01b031633146124695760405162461bcd60e51b8152600401610f6e90614e5d565b60005b828110156116905781602f600086868581811061248b5761248b614e92565b90506020020160208101906124a09190614a05565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558383828181106124da576124da614e92565b90506020020160208101906124ef9190614a05565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78360405161252b911515815260200190565b60405180910390a28061253d81614ebe565b91505061246c565b6005546001600160a01b0316331461256f5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0382166000818152602f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60006305f5e100670de0b6b3a76400006125e961dead611696565b6002546125f69190615125565b600a5461260b906001600160a01b0316611696565b602954600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612661573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612685919061509f565b600a546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa1580156126ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f29190615069565b61270490670de0b6b3a7640000614fca565b61270e9190614fca565b6127189190614fe9565b6127229190614fca565b61272c9190614fe9565b6127369190614fe9565b905090565b6005546001600160a01b031633146127655760405162461bcd60e51b8152600401610f6e90614e5d565b601c839055601d829055601e8190558061277f838561500b565b612789919061500b565b601b55606461279b6127106014614fca565b6127a59190614fe9565b601b5411156110de5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f6e565b6005546001600160a01b031633146128205760405162461bcd60e51b8152600401610f6e90614e5d565b61282c6012600a614fbb565b606461283760025490565b612842906001614fca565b61284c9190614fe9565b6128569190614fe9565b8110156128b65760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015267207468616e20312560c01b6064820152608401610f6e565b6128c26012600a614fbb565b6128cc9082614fca565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611296565b6005546001600160a01b0316331461292b5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0381166129515760405162461bcd60e51b8152600401610f6e90615023565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad5490600090a250565b6005546001600160a01b031633146129c55760405162461bcd60e51b8152600401610f6e90614e5d565b620186a06129d260025490565b6129dd906001614fca565b6129e79190614fe9565b811015612a545760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f6e565b6103e8612a6060025490565b612a6b906001614fca565b612a759190614fe9565b811115612ae15760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f6e565b600b55565b6005546001600160a01b03163314612b105760405162461bcd60e51b8152600401610f6e90614e5d565b612b1c6012600a614fbb565b6103e8612b2860025490565b612b33906001614fca565b612b3d9190614fe9565b612b479190614fe9565b811015612ba95760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f6e565b612bb56012600a614fbb565b612bbf9082614fca565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611296565b6005546001600160a01b03163314612c1e5760405162461bcd60e51b8152600401610f6e90614e5d565b6016805460ff19169055565b60128181548110612c3a57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612c7e5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b038116612ce35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f6e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612d695760405162461bcd60e51b8152600401610f6e90614e5d565b604051600090339047908381818185875af1925050503d8060008114611690576040519150601f19603f3d011682016040523d82523d6000602084013e611690565b6005546001600160a01b03163314612dd55760405162461bcd60e51b8152600401610f6e90614e5d565b611388811115612e455760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20353025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f6e565b602654612e529042615125565b6027541115612e935760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f6e565b42602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612ee0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f049190615069565b90506000612f1130611696565b90506000612710612f228585614fca565b612f2c9190614fe9565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015612f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612faa9190615082565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90612fe590309086906001908190849042906004016150bc565b60408051808303816000875af1158015613003573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613027919061513c565b505060008361303530611696565b61303f9190615125565b90508015613054576130543061dead836131c9565b60006130608347615125565b905080156130715761307181614262565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166131075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f6e565b6001600160a01b0382166131685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f6e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166131ef5760405162461bcd60e51b8152600401610f6e90615160565b6001600160a01b0382166132155760405162461bcd60e51b8152600401610f6e906151a5565b6001600160a01b0383166000908152602081905260409020548181101561328d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f6e565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906132c490849061500b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161331091815260200190565b60405180910390a350505050565b6001600160a01b0383166133445760405162461bcd60e51b8152600401610f6e90615160565b6001600160a01b03821661336a5760405162461bcd60e51b8152600401610f6e906151a5565b600081116133ba5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f6e565b601454610100900460ff1661344d576001600160a01b0383166000908152602f602052604090205460ff168061340857506001600160a01b0382166000908152602f602052604090205460ff165b61344d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f6e565b601454610100900460ff161561354d576001600160a01b03831660009081526011602052604090205460ff1615801561349f57506001600160a01b03821660009081526011602052604090205460ff16155b806134b757506005546001600160a01b038381169116145b806134cc57506001600160a01b03821661dead145b61354d5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f6e565b60145460ff161561393f576005546001600160a01b0384811691161480159061358457506005546001600160a01b03838116911614155b801561359857506001600160a01b03821615155b80156135af57506001600160a01b03821661dead14155b80156135d457506001600160a01b0383166000908152602f602052604090205460ff16155b80156135f957506001600160a01b0382166000908152602f602052604090205460ff16155b1561393f5760165460ff1615613712576009546001600160a01b038381169116148015906136355750600a546001600160a01b03838116911614155b1561371257613645600243615125565b326000908152601560205260409020541080156136835750613668600243615125565b6001600160a01b038316600090815260156020526040902054105b6136ed5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f6e565b3260009081526015602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526031602052604090205460ff16801561375357506001600160a01b03821660009081526030602052604090205460ff16155b1561381a576006548111156137bb5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f6e565b6008546137c783611696565b6137d1908361500b565b11156138155760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f6e565b61393f565b6001600160a01b03821660009081526031602052604090205460ff16801561385b57506001600160a01b03831660009081526030602052604090205460ff16155b156138c5576007548111156138155760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f6e565b6001600160a01b03821660009081526030602052604090205460ff1661393f576008546138f183611696565b6138fb908361500b565b111561393f5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f6e565b600061394a30611696565b600b5490915081108015908190613969575060145462010000900460ff165b801561397f5750600a54600160a01b900460ff16155b80156139a457506001600160a01b03851660009081526031602052604090205460ff16155b80156139c957506001600160a01b0385166000908152602f602052604090205460ff16155b80156139ee57506001600160a01b0384166000908152602f602052604090205460ff16155b15613a1c57600a805460ff60a01b1916600160a01b179055613a0e61405a565b600a805460ff60a01b191690555b600a54600160a01b900460ff16158015613a4e57506001600160a01b03841660009081526031602052604090205460ff165b8015613a5c575060235460ff165b8015613a775750602454602554613a73919061500b565b4210155b8015613a9c57506001600160a01b0385166000908152602f602052604090205460ff16155b15613aa957613aa96143ac565b6001600160a01b0385166000908152602f602052604090205460019060ff1680613aeb57506001600160a01b0385166000908152602f602052604090205460ff165b15613af4575060005b60285460009060ff168015613b105750601454610100900460ff165b8015613b265750600a54600160a01b900460ff16155b15613bba577f0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015613b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613baf9190615069565b602955613bba6145c6565b8115613fb55760105443108015613be957506001600160a01b03871660009081526031602052604090205460ff165b8015613c0e57506001600160a01b03861660009081526031602052604090205460ff16155b8015613c3357506001600160a01b0386166000908152602f602052604090205460ff16155b8015613c4157506000601754115b15613dfc576010544310613c6857600160066000828254613c629190615125565b90915550505b6001600160a01b03861660009081526011602052604090205460ff16613d48576001600160a01b0386166000908152601160205260408120805460ff191660019081179091556013805491929091613cc190849061500b565b9091555050601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b61271060175486613d599190614fca565b613d639190614fe9565b905060175460195482613d769190614fca565b613d809190614fe9565b60206000828254613d91919061500b565b9091555050601754601854613da69083614fca565b613db09190614fe9565b601f6000828254613dc1919061500b565b9091555050601754601a54613dd69083614fca565b613de09190614fe9565b60216000828254613df1919061500b565b90915550613f979050565b6001600160a01b03861660009081526031602052604090205460ff168015613e2657506000601b54115b15613eb957612710601b5486613e3c9190614fca565b613e469190614fe9565b9050601b54601d5482613e599190614fca565b613e639190614fe9565b60206000828254613e74919061500b565b9091555050601b54601c54613e899083614fca565b613e939190614fe9565b601f6000828254613ea4919061500b565b9091555050601b54601e54613dd69083614fca565b6001600160a01b03871660009081526031602052604090205460ff168015613ee357506000601754115b15613f975761271060175486613ef99190614fca565b613f039190614fe9565b905060175460195482613f169190614fca565b613f209190614fe9565b60206000828254613f31919061500b565b9091555050601754601854613f469083614fca565b613f509190614fe9565b601f6000828254613f61919061500b565b9091555050601754601a54613f769083614fca565b613f809190614fe9565b60216000828254613f91919061500b565b90915550505b8015613fa857613fa88730836131c9565b613fb28186615125565b94505b613fc08787876131c9565b50505050505050565b6001600160a01b038216600081815260306020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152603160205260409020805460ff191682151517905561223d8282613fc9565b600061406530611696565b90506000602154601f5460205461407c919061500b565b614086919061500b565b9050811580614093575080155b1561409c575050565b600b546140aa906014614fca565b8211156140c257600b546140bf906014614fca565b91505b600080600283602054866140d69190614fca565b6140e09190614fe9565b6140ea9190614fe9565b90506140fe6140f98286615125565b614741565b6020544790819060009061411490600290614fe9565b61411e9087615125565b601f5461412b9085614fca565b6141359190614fe9565b9050600060026020546141489190614fe9565b6141529088615125565b60215461415f9086614fca565b6141699190614fe9565b9050614175818361500b565b61417f9084615125565b60006020819055601f8190556021559250841580159061419f5750600083115b156141ae576141ae858461489b565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146141fb576040519150601f19603f3d011682016040523d82523d6000602084013e614200565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114614250576040519150601f19603f3d011682016040523d82523d6000602084013e614255565b606091505b5050505050505050505050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156142cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f0919061509f565b8160008151811061430357614303614e92565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061433757614337614e92565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de9590849061437f90600090869061dead9042906004016151e8565b6000604051808303818588803b15801561439857600080fd5b505af1158015613fc0573d6000803e3d6000fd5b426025819055602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156143fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144229190615069565b9050600061442f30611696565b90506000612710602254846144449190614fca565b61444e9190614fe9565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156144a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144cc9190615082565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061450790309086906001908190849042906004016150bc565b60408051808303816000875af1158015614525573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614549919061513c565b505060008361455730611696565b6145619190615125565b90508015614576576145763061dead836131c9565b60006145828347615125565b905080156145935761459381614262565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b60006145d06125ce565b90506000602a54670de0b6b3a7640000602c54602e54856145f19190614fe9565b6145fb9190614fca565b6146059190614fe9565b61460f919061500b565b90506000602b54670de0b6b3a7640000602d54602e54866146309190614fe9565b61463a9190614fca565b6146449190614fe9565b61464e919061500b565b9050602c5482111561466057602c5491505b602d5481111561466f5750602d545b60648260175461467f9190614fca565b6146899190614fe9565b601981905560175460649161469d91615125565b6146a8906021614fca565b6146b29190614fe9565b601881905560195460175490916146c891615125565b6146d29190615125565b601a55601b546064906146e6908390614fca565b6146f09190614fe9565b601d819055601b5460649161470491615125565b61470f906032614fca565b6147199190614fe9565b601c819055601d54601b54909161472f91615125565b6147399190615125565b601e55505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061477657614776614e92565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156147cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147f3919061509f565b8160018151811061480657614806614e92565b6001600160a01b03928316602091820292909201015260095461482c91309116846130a5565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061486590859060009086903090429060040161521d565b600060405180830381600087803b15801561487f57600080fd5b505af1158015614893573d6000803e3d6000fd5b505050505050565b6009546148b39030906001600160a01b0316846130a5565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906148f090309087906000908190849042906004016150bc565b60606040518083038185885af115801561490e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061493391906150f7565b5050505050565b600060208083528351808285015260005b818110156149675785810183015185820160400152820161494b565b81811115614979576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146149a457600080fd5b50565b600080604083850312156149ba57600080fd5b82356149c58161498f565b946020939093013593505050565b80151581146149a457600080fd5b6000602082840312156149f357600080fd5b81356149fe816149d3565b9392505050565b600060208284031215614a1757600080fd5b81356149fe8161498f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614a6157614a61614a22565b604052919050565b600067ffffffffffffffff821115614a8357614a83614a22565b5060051b60200190565b600082601f830112614a9e57600080fd5b81356020614ab3614aae83614a69565b614a38565b82815260059290921b84018101918181019086841115614ad257600080fd5b8286015b84811015614aed5780358352918301918301614ad6565b509695505050505050565b60008060408385031215614b0b57600080fd5b823567ffffffffffffffff80821115614b2357600080fd5b818501915085601f830112614b3757600080fd5b81356020614b47614aae83614a69565b82815260059290921b84018101918181019089841115614b6657600080fd5b948201945b83861015614b8d578535614b7e8161498f565b82529482019490820190614b6b565b96505086013592505080821115614ba357600080fd5b50614bb085828601614a8d565b9150509250929050565b600080600060608486031215614bcf57600080fd5b8335614bda8161498f565b92506020840135614bea8161498f565b929592945050506040919091013590565b600060208284031215614c0d57600080fd5b5035919050565b60008060408385031215614c2757600080fd5b823591506020830135614c398161498f565b809150509250929050565b600080600060408486031215614c5957600080fd5b833567ffffffffffffffff80821115614c7157600080fd5b818601915086601f830112614c8557600080fd5b813581811115614c9457600080fd5b8760208260051b8501011115614ca957600080fd5b60209283019550935050840135614cbf816149d3565b809150509250925092565b600080600060608486031215614cdf57600080fd5b83359250602084013591506040840135614cbf816149d3565b60008060408385031215614d0b57600080fd5b8235614d168161498f565b91506020830135614c39816149d3565b600080600060608486031215614d3b57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614d6557600080fd5b8235614d708161498f565b91506020830135614c398161498f565b600081518084526020808501945080840160005b83811015614db95781516001600160a01b031687529582019590820190600101614d94565b509495945050505050565b6020815260006149fe6020830184614d80565b60008060008060008060c08789031215614df057600080fd5b8635614dfb816149d3565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b600181811c90821680614e3757607f821691505b602082108103614e5757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614ed057614ed0614ea8565b5060010190565b600181815b80851115614f12578160001904821115614ef857614ef8614ea8565b80851615614f0557918102915b93841c9390800290614edc565b509250929050565b600082614f2957506001610f3e565b81614f3657506000610f3e565b8160018114614f4c5760028114614f5657614f72565b6001915050610f3e565b60ff841115614f6757614f67614ea8565b50506001821b610f3e565b5060208310610133831016604e8410600b8410161715614f95575081810a610f3e565b614f9f8383614ed7565b8060001904821115614fb357614fb3614ea8565b029392505050565b60006149fe60ff841683614f1a565b6000816000190483118215151615614fe457614fe4614ea8565b500290565b60008261500657634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561501e5761501e614ea8565b500190565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60006020828403121561507b57600080fd5b5051919050565b60006020828403121561509457600080fd5b81516149fe816149d3565b6000602082840312156150b157600080fd5b81516149fe8161498f565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561510c57600080fd5b8351925060208401519150604084015190509250925092565b60008282101561513757615137614ea8565b500390565b6000806040838503121561514f57600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006152016080830186614d80565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061523c60a0830186614d80565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220ade71fa7a201bc9f101be25aa014b3bb59743ea29dd6724e7305080f6718310f64736f6c634300080f0033

Deployed Bytecode Sourcemap

11245:29786:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13137:37;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;13137:37:0;;;;;;;;5561:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11393:27::-;;;;;;;;;;-1:-1:-1;11393:27:0;;;;-1:-1:-1;;;;;11393:27:0;;;;;;-1:-1:-1;;;;;980:32:1;;;962:51;;950:2;935:18;11393:27:0;798:221:1;6475:169:0;;;;;;;;;;-1:-1:-1;6475:169:0;;;;;:::i;:::-;;:::i;:::-;;;1645:14:1;;1638:22;1620:41;;1608:2;1593:18;6475:169:0;1480:187:1;13315:45:0;;;;;;;;;;;;;;;;18318:115;;;;;;;;;;-1:-1:-1;18318:115:0;;;;;:::i;:::-;;:::i;:::-;;13516:64;;;;;;;;;;-1:-1:-1;13516:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13050:40;;;;;;;;;;-1:-1:-1;13050:40:0;;;;;;;;5882:108;;;;;;;;;;-1:-1:-1;5970:12:0;;5882:108;;12916:47;;;;;;;;;;;;;;;;12726:36;;;;;;;;;;;;;;;;12650:33;;;;;;;;;;;;;;;;21433:618;;;;;;;;;;-1:-1:-1;21433:618:0;;;;;:::i;:::-;;:::i;6652:492::-;;;;;;;;;;-1:-1:-1;6652:492:0;;;;;:::i;:::-;;:::i;19882:295::-;;;;;;;;;;-1:-1:-1;19882:295:0;;;;;:::i;:::-;;:::i;12822:45::-;;;;;;;;;;;;;;;;12782:33;;;;;;;;;;-1:-1:-1;12782:33:0;;;;;;;;18445:626;;;;;;;;;;-1:-1:-1;18445:626:0;;;;;:::i;:::-;;:::i;5781:93::-;;;;;;;;;;-1:-1:-1;5781:93:0;;5864:2;5888:36:1;;5876:2;5861:18;5781:93:0;5746:184:1;7152:215:0;;;;;;;;;;-1:-1:-1;7152:215:0;;;;;:::i;:::-;;:::i;11614:25::-;;;;;;;;;;-1:-1:-1;11614:25:0;;;;-1:-1:-1;;;;;11614:25:0;;;13097:33;;;;;;;;;;;;;;;;11427:21;;;;;;;;;;-1:-1:-1;11427:21:0;;;;-1:-1:-1;;;;;11427:21:0;;;33189:297;;;;;;;;;;-1:-1:-1;33189:297:0;;;;;:::i;:::-;;:::i;11918:33::-;;;;;;;;;;-1:-1:-1;11918:33:0;;;;;;;;12446:32;;;;;;;;;;;;;;;;33798:312;;;;;;;;;;;;;:::i;19483:228::-;;;;;;;;;;-1:-1:-1;19483:228:0;;;;;:::i;:::-;;:::i;29763:120::-;;;;;;;;;;-1:-1:-1;29857:18:0;;29842:12;:33;29763:120;;12303:31;;;;;;;;;;;;;;;;11325:28;;;;;;;;;;;;;;;;12411;;;;;;;;;;;;;;;;11884:25;;;;;;;;;;;;;;;;11998:31;;;;;;;;;;-1:-1:-1;11998:31:0;;;;;;;;;;;5998:127;;;;;;;;;;-1:-1:-1;5998:127:0;;;;;:::i;:::-;;:::i;9642:150::-;;;;;;;;;;;;;:::i;35415:447::-;;;;;;;;;;-1:-1:-1;35415:447:0;;;;;:::i;:::-;;:::i;19127:237::-;;;;;;;;;;;;;:::i;22063:260::-;;;;;;;;;;-1:-1:-1;22063:260:0;;;;;:::i;:::-;;:::i;22876:393::-;;;;;;;;;;-1:-1:-1;22876:393:0;;;;;:::i;:::-;;:::i;32453:498::-;;;;;;;;;;-1:-1:-1;32453:498:0;;;;;:::i;:::-;;:::i;34118:1289::-;;;;;;;;;;-1:-1:-1;34118:1289:0;;;;;:::i;:::-;;:::i;11798:44::-;;;;;;;;;;-1:-1:-1;11798:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11291:27;;;;;;;;;;;;;;;;9428:79;;;;;;;;;;-1:-1:-1;9493:6:0;;-1:-1:-1;;;;;9493:6:0;9428:79;;5669:104;;;;;;;;;;;;;:::i;19372:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22331:293::-;;;;;;;;;;-1:-1:-1;22331:293:0;;;;;:::i;:::-;;:::i;12378:24::-;;;;;;;;;;;;;;;;12557:43;;;;;;;;;;;;12595:5;12557:43;;12970:35;;;;;;;;;;;;;;;;12690:27;;;;;;;;;;;;;;;;12523:25;;;;;;;;;;;;;;;;7375:413;;;;;;;;;;-1:-1:-1;7375:413:0;;;;;:::i;:::-;;:::i;12874:29::-;;;;;;;;;;;;;;;;11758:33;;;;;;;;;;;;;;;;6133:175;;;;;;;;;;-1:-1:-1;6133:175:0;;;;;:::i;:::-;;:::i;39178:836::-;;;;;;;;;;-1:-1:-1;39178:836:0;;;;;:::i;:::-;;:::i;13738:58::-;;;;;;;;;;-1:-1:-1;13738:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11646:26;;;;;;;;;;-1:-1:-1;11646:26:0;;;;-1:-1:-1;;;;;11646:26:0;;;11958:33;;;;;;;;;;-1:-1:-1;11958:33:0;;;;;;;;;;;23687:282;;;;;;;;;;-1:-1:-1;23687:282:0;;;;;:::i;:::-;;:::i;23977:182::-;;;;;;;;;;-1:-1:-1;23977:182:0;;;;;:::i;:::-;;:::i;38931:239::-;;;;;;;;;;;;;:::i;23277:402::-;;;;;;;;;;-1:-1:-1;23277:402:0;;;;;:::i;:::-;;:::i;20497:293::-;;;;;;;;;;-1:-1:-1;20497:293:0;;;;;:::i;:::-;;:::i;12221:39::-;;;;;;;;;;-1:-1:-1;12221:39:0;;;;;;;;33498:248;;;;;;;;;;-1:-1:-1;33498:248:0;;;;;:::i;:::-;;:::i;13270:38::-;;;;;;;;;;;;;;;;20860:346;;;;;;;;;;-1:-1:-1;20860:346:0;;;;;:::i;:::-;;:::i;12269:27::-;;;;;;;;;;;;;;;;20189:300;;;;;;;;;;-1:-1:-1;20189:300:0;;;;;:::i;:::-;;:::i;6316:151::-;;;;;;;;;;-1:-1:-1;6316:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;6432:18:0;;;6405:7;6432:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6316:151;13181:38;;;;;;;;;;;;;;;;11533:33;;;;;;;;;;;;;;;;19772:98;;;;;;;;;;;;;:::i;11575:32::-;;;;;;;;;;-1:-1:-1;11575:32:0;;;;-1:-1:-1;;;;;11575:32:0;;;11849:28;;;;;;;;;;-1:-1:-1;11849:28:0;;;;;:::i;:::-;;:::i;11681:37::-;;;;;;;;;;;;;;;;12341:30;;;;;;;;;;;;;;;;9800:244;;;;;;;;;;-1:-1:-1;9800:244:0;;;;;:::i;:::-;;:::i;33021:160::-;;;;;;;;;;;;;:::i;13226:37::-;;;;;;;;;;;;;;;;12485:31;;;;;;;;;;;;;;;;11360:24;;;;;;;;;;;;;;;;12609:34;;;;;;;;;;;;;;;;37134:1399;;;;;;;;;;-1:-1:-1;37134:1399:0;;;;;:::i;:::-;;:::i;5561:100::-;5615:13;5648:5;5641:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5561:100;:::o;6475:169::-;6558:4;6575:39;1790:10;6598:7;6607:6;6575:8;:39::i;:::-;-1:-1:-1;6632:4:0;6475:169;;;;;:::o;18318:115::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;;;;;;;;;18395:21:::1;:30:::0;;-1:-1:-1;;18395:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18318:115::o;21433:618::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;21575:15:::1;:22;21557:7;:14;:40;21549:83;;;::::0;-1:-1:-1;;;21549:83:0;;10650:2:1;21549:83:0::1;::::0;::::1;10632:21:1::0;10689:2;10669:18;;;10662:30;10728:32;10708:18;;;10701:60;10778:18;;21549:83:0::1;10448:354:1::0;21549:83:0::1;21668:3;21651:7;:14;:20;21643:87;;;::::0;-1:-1:-1;;;21643:87:0;;11009:2:1;21643:87:0::1;::::0;::::1;10991:21:1::0;11048:2;11028:18;;;11021:30;11087:34;11067:18;;;11060:62;-1:-1:-1;;;11138:18:1;;;11131:52;11200:19;;21643:87:0::1;10807:418:1::0;21643:87:0::1;21843:9;21839:205;21862:7;:14;21858:1;:18;21839:205;;;21897:14;21914:7;21922:1;21914:10;;;;;;;;:::i;:::-;;;;;;;21897:27;;21939:14;21956:15;21972:1;21956:18;;;;;;;;:::i;:::-;;;;;;;21939:35;;21989:43;22005:10;22017:6;22025;21989:15;:43::i;:::-;21882:162;;21878:3;;;;;:::i;:::-;;;;21839:205;;;;21433:618:::0;;:::o;6652:492::-;6792:4;6809:36;6819:6;6827:9;6838:6;6809:9;:36::i;:::-;-1:-1:-1;;;;;6885:19:0;;6858:24;6885:19;;;:11;:19;;;;;;;;1790:10;6885:33;;;;;;;;6937:26;;;;6929:79;;;;-1:-1:-1;;;6929:79:0;;11836:2:1;6929:79:0;;;11818:21:1;11875:2;11855:18;;;11848:30;11914:34;11894:18;;;11887:62;-1:-1:-1;;;11965:18:1;;;11958:38;12013:19;;6929:79:0;11634:404:1;6929:79:0;7044:57;7053:6;1790:10;7094:6;7075:16;:25;7044:8;:57::i;:::-;-1:-1:-1;7132:4:0;;6652:492;-1:-1:-1;;;;6652:492:0:o;19882:295::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;20004:16:::1;5864:2:::0;20004::::1;:16;:::i;:::-;19995:4;19975:13;5970:12:::0;;;5882:108;19975:13:::1;:17;::::0;19991:1:::1;19975:17;:::i;:::-;:24;;;;:::i;:::-;19974:47;;;;:::i;:::-;19964:6;:57;;19956:111;;;::::0;-1:-1:-1;;;19956:111:0;;14023:2:1;19956:111:0::1;::::0;::::1;14005:21:1::0;14062:2;14042:18;;;14035:30;14101:34;14081:18;;;14074:62;-1:-1:-1;;;14152:18:1;;;14145:39;14201:19;;19956:111:0::1;13821:405:1::0;19956:111:0::1;20103:16;5864:2:::0;20103::::1;:16;:::i;:::-;20093:27;::::0;:6;:27:::1;:::i;:::-;20078:12;:42:::0;;;20136:33:::1;::::0;160:25:1;;;20136:33:0::1;::::0;148:2:1;133:18;20136:33:0::1;;;;;;;;19882:295:::0;:::o;18445:626::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;18550:13:::1;::::0;::::1;::::0;::::1;;;18549:14;18541:50;;;::::0;-1:-1:-1;;;18541:50:0;;14433:2:1;18541:50:0::1;::::0;::::1;14415:21:1::0;14472:2;14452:18;;;14445:30;14511:25;14491:18;;;14484:53;14554:18;;18541:50:0::1;14231:347:1::0;18541:50:0::1;18630:2;18610:16;:22;;18602:74;;;::::0;-1:-1:-1;;;18602:74:0;;14785:2:1;18602:74:0::1;::::0;::::1;14767:21:1::0;14824:2;14804:18;;;14797:30;14863:34;14843:18;;;14836:62;-1:-1:-1;;;14914:18:1;;;14907:37;14961:19;;18602:74:0::1;14583:403:1::0;18602:74:0::1;18687:13;:20:::0;;-1:-1:-1;;18718:18:0;;;;;18768:12:::1;18747:18;:33:::0;;;18812:37:::1;::::0;18833:16;;18812:37:::1;:::i;:::-;18791:18;:58:::0;18891:6:::1;:16:::0;;-1:-1:-1;;;;;;18891:16:0::1;-1:-1:-1::0;;;;;18891:16:0;::::1;::::0;;::::1;::::0;;;18918:49:::1;::::0;-1:-1:-1;18918:26:0::1;:49::i;:::-;19015:6;::::0;18978:51:::1;::::0;-1:-1:-1;;;;;19015:6:0::1;::::0;18978:28:::1;:51::i;:::-;19047:16;::::0;::::1;::::0;;;::::1;18445:626:::0;;:::o;7152:215::-;1790:10;7240:4;7289:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7289:34:0;;;;;;;;;;7240:4;;7257:80;;7280:7;;7289:47;;7326:10;;7289:47;:::i;:::-;7257:8;:80::i;33189:297::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33285:32:0;::::1;33277:83;;;;-1:-1:-1::0;;;33277:83:0::1;;;;;;;:::i;:::-;33371:17;:47:::0;;-1:-1:-1;;;;;;33371:47:0::1;-1:-1:-1::0;;;;;33371:47:0;::::1;::::0;;::::1;::::0;;;33434:44:::1;::::0;::::1;::::0;-1:-1:-1;;33434:44:0::1;33189:297:::0;:::o;33798:312::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;33889:18:::1;;33861:24;33879:4;33861:9;:24::i;:::-;:46;;33853:123;;;::::0;;-1:-1:-1;;;33853:123:0;;15733:2:1;33853:123:0::1;::::0;::::1;15715:21:1::0;15752:18;;;15745:30;;;;15811:34;15791:18;;;15784:62;15882:34;15862:18;;;15855:62;15934:19;;33853:123:0::1;15531:428:1::0;33853:123:0::1;33987:8;:15:::0;;-1:-1:-1;;;;33987:15:0::1;-1:-1:-1::0;;;33987:15:0::1;::::0;;34013:10:::1;:8;:10::i;:::-;34034:8;:16:::0;;-1:-1:-1;;;;34034:16:0::1;::::0;;34066:36:::1;::::0;34086:15:::1;160:25:1::0;;34066:36:0::1;::::0;148:2:1;133:18;34066:36:0::1;;;;;;;33798:312::o:0;19483:228::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;19600:9:::1;19596:108;19615:19:::0;;::::1;19596:108;;;19682:10;19655:11;:24;19667:8;;19676:1;19667:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19655:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19655:24:0;:37;;-1:-1:-1;;19655:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19636:3;::::1;::::0;::::1;:::i;:::-;;;;19596:108;;;;19483:228:::0;;;:::o;5998:127::-;-1:-1:-1;;;;;6099:18:0;6072:7;6099:18;;;;;;;;;;;;5998:127::o;9642:150::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;9735:6:::1;::::0;9714:40:::1;::::0;9751:1:::1;::::0;-1:-1:-1;;;;;9735:6:0::1;::::0;9714:40:::1;::::0;9751:1;;9714:40:::1;9765:6;:19:::0;;-1:-1:-1;;;;;;9765:19:0::1;::::0;;9642:150::o;35415:447::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;35569:3:::1;35546:19;:26;;35538:90;;;::::0;-1:-1:-1;;;35538:90:0;;16166:2:1;35538:90:0::1;::::0;::::1;16148:21:1::0;16205:2;16185:18;;;16178:30;16244:34;16224:18;;;16217:62;-1:-1:-1;;;16295:18:1;;;16288:49;16354:19;;35538:90:0::1;15964:415:1::0;35538:90:0::1;35659:4;35647:8;:16;;:33;;;;-1:-1:-1::0;35667:13:0;35647:33:::1;35639:94;;;::::0;-1:-1:-1;;;35639:94:0;;16586:2:1;35639:94:0::1;::::0;::::1;16568:21:1::0;16625:2;16605:18;;;16598:30;16664:34;16644:18;;;16637:62;-1:-1:-1;;;16715:18:1;;;16708:46;16771:19;;35639:94:0::1;16384:412:1::0;35639:94:0::1;35744:15;:37:::0;;;;35792:16:::1;:27:::0;35830:13:::1;:24:::0;;-1:-1:-1;;35830:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35415:447::o;19127:237::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;19183:14:::1;:22:::0;;-1:-1:-1;;19183:22:0;;::::1;::::0;;;19216:20:::1;:28:::0;;;;::::1;::::0;;5970:12;;19255::::1;:28:::0;5970:12;;19294:13:::1;:29:::0;19341:15:::1;::::0;::::1;::::0;;;::::1;19127:237::o:0;22063:260::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;22159:4:::1;22155:104;;22197:6;::::0;-1:-1:-1;;;;;22197:6:0;;::::1;22187:16:::0;;::::1;::::0;22179:68:::1;;;::::0;-1:-1:-1;;;22179:68:0;;17003:2:1;22179:68:0::1;::::0;::::1;16985:21:1::0;17042:2;17022:18;;;17015:30;17081:34;17061:18;;;17054:62;-1:-1:-1;;;17132:18:1;;;17125:37;17179:19;;22179:68:0::1;16801:403:1::0;22179:68:0::1;-1:-1:-1::0;;;;;22269:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;22269:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22063:260::o;22876:393::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;22993:16:::1;:33:::0;;;23037:15:::1;:31:::0;;;23079:9:::1;:19:::0;;;23091:7;23124:34:::1;23055:13:::0;23012:14;23124:34:::1;:::i;:::-;:46;;;;:::i;:::-;23109:12;:61:::0;23224:3:::1;23205:16;12595:5;23205:2;:16;:::i;:::-;:22;;;;:::i;:::-;23189:12;;:38;;23181:80;;;::::0;-1:-1:-1;;;23181:80:0;;17411:2:1;23181:80:0::1;::::0;::::1;17393:21:1::0;17450:2;17430:18;;;17423:30;17489:31;17469:18;;;17462:59;17538:18;;23181:80:0::1;17209:353:1::0;32453:498:0;9555:6;;32540:10;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32571:20:0;::::1;32563:59;;;::::0;-1:-1:-1;;;32563:59:0;;17769:2:1;32563:59:0::1;::::0;::::1;17751:21:1::0;17808:2;17788:18;;;17781:30;17847:28;17827:18;;;17820:56;17893:18;;32563:59:0::1;17567:350:1::0;32563:59:0::1;-1:-1:-1::0;;;;;32641:23:0;::::1;32659:4;32641:23;;::::0;:41:::1;;-1:-1:-1::0;32669:13:0::1;::::0;::::1;::::0;::::1;;;32668:14;32641:41;32633:106;;;::::0;-1:-1:-1;;;32633:106:0;;18124:2:1;32633:106:0::1;::::0;::::1;18106:21:1::0;18163:2;18143:18;;;18136:30;18202:34;18182:18;;;18175:62;-1:-1:-1;;;18253:18:1;;;18246:50;18313:19;;32633:106:0::1;17922:416:1::0;32633:106:0::1;32777:39;::::0;-1:-1:-1;;;32777:39:0;;32810:4:::1;32777:39;::::0;::::1;962:51:1::0;32750:24:0::1;::::0;-1:-1:-1;;;;;32777:24:0;::::1;::::0;::::1;::::0;935:18:1;;32777:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32835:46;::::0;-1:-1:-1;;;32835:46:0;;-1:-1:-1;;;;;18724:32:1;;;32835:46:0::1;::::0;::::1;18706:51:1::0;18773:18;;;18766:34;;;32750:66:0;;-1:-1:-1;32835:23:0;;::::1;::::0;::::1;::::0;18679:18:1;;32835:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32897;::::0;;-1:-1:-1;;;;;18724:32:1;;18706:51;;18788:2;18773:18;;18766:34;;;32827:54:0;;-1:-1:-1;32897:46:0::1;::::0;18679:18:1;32897:46:0::1;;;;;;;32552:399;32453:498:::0;;;;:::o;34118:1289::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;34199:13:::1;::::0;::::1;::::0;::::1;;;34198:14;34190:70;;;::::0;-1:-1:-1;;;34190:70:0;;19263:2:1;34190:70:0::1;::::0;::::1;19245:21:1::0;19302:2;19282:18;;;19275:30;19341:34;19321:18;;;19314:62;-1:-1:-1;;;19392:18:1;;;19385:41;19443:19;;34190:70:0::1;19061:407:1::0;34190:70:0::1;34318:9;;;;;;;;;-1:-1:-1::0;;;;;34318:9:0::1;-1:-1:-1::0;;;;;34318:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34306:43:0::1;;34358:4;34365:9;;;;;;;;;-1:-1:-1::0;;;;;34365:9:0::1;-1:-1:-1::0;;;;;34365:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34306:76;::::0;-1:-1:-1;;;;;;34306:76:0::1;::::0;;;;;;-1:-1:-1;;;;;19959:15:1;;;34306:76:0::1;::::0;::::1;19941:34:1::0;20011:15;;19991:18;;;19984:43;19876:18;;34306:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34297:6;:85:::0;;-1:-1:-1;;;;;;34297:85:0::1;-1:-1:-1::0;;;;;34297:85:0;;;::::1;::::0;;::::1;::::0;;34393:49:::1;::::0;-1:-1:-1;34393:26:0::1;:49::i;:::-;34490:6;::::0;34453:51:::1;::::0;-1:-1:-1;;;;;34490:6:0::1;::::0;34453:28:::1;:51::i;:::-;34584:1;34560:21;:25;34552:73;;;::::0;-1:-1:-1;;;34552:73:0;;20240:2:1;34552:73:0::1;::::0;::::1;20222:21:1::0;20279:2;20259:18;;;20252:30;20318:34;20298:18;;;20291:62;-1:-1:-1;;;20369:18:1;;;20362:33;20412:19;;34552:73:0::1;20038:399:1::0;34552:73:0::1;34673:1;34646:24;34664:4;34646:9;:24::i;:::-;:28;34638:79;;;::::0;-1:-1:-1;;;34638:79:0;;20644:2:1;34638:79:0::1;::::0;::::1;20626:21:1::0;20683:2;20663:18;;;20656:30;20722:34;20702:18;;;20695:62;-1:-1:-1;;;20773:18:1;;;20766:36;20819:19;;34638:79:0::1;20442:402:1::0;34638:79:0::1;34762:9;::::0;34730:69:::1;::::0;34747:4:::1;::::0;-1:-1:-1;;;;;34762:9:0::1;34774:24;34747:4:::0;34774:9:::1;:24::i;34730:69::-;34810:9;::::0;-1:-1:-1;;;;;34810:9:0::1;:25;34843:21;34888:4;34908:24;34888:4:::0;34908:9:::1;:24::i;:::-;35041:11;::::0;34810:284:::1;::::0;-1:-1:-1;;;;;;34810:284:0::1;::::0;;;;;;::::1;::::0;;;34947:1:::1;::::0;;;-1:-1:-1;;;;;35041:11:0::1;::::0;35068:15:::1;::::0;34810:284:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35132:9;-1:-1:-1::0;;;;;35132:22:0::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35107:14;:50:::0;35205:13:::1;:20:::0;;-1:-1:-1;;35236:18:0;;;;;35286:12:::1;35265:18;:33:::0;;;35330:37:::1;::::0;35351:16;;35330:37:::1;:::i;:::-;35309:18;:58:::0;35383:16:::1;::::0;::::1;::::0;;;::::1;34118:1289:::0;:::o;5669:104::-;5725:13;5758:7;5751:14;;;;;:::i;19372:103::-;19421:16;19456:11;19449:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19449:18:0;;;;;;;;;;;;;;;;;;;;;;19372:103;:::o;22331:293::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;22440:6:::1;::::0;-1:-1:-1;;;;;22440:6:0;;::::1;22432:14:::0;;::::1;::::0;22424:84:::1;;;::::0;-1:-1:-1;;;22424:84:0;;22162:2:1;22424:84:0::1;::::0;::::1;22144:21:1::0;22201:2;22181:18;;;22174:30;22240:34;22220:18;;;22213:62;22311:27;22291:18;;;22284:55;22356:19;;22424:84:0::1;21960:421:1::0;22424:84:0::1;22519:41;22548:4;22554:5;22519:28;:41::i;:::-;22576:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;22576:40:0;::::1;::::0;::::1;::::0;;;::::1;22331:293:::0;;:::o;7375:413::-;1790:10;7468:4;7512:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7512:34:0;;;;;;;;;;7565:35;;;;7557:85;;;;-1:-1:-1;;;7557:85:0;;22588:2:1;7557:85:0;;;22570:21:1;22627:2;22607:18;;;22600:30;22666:34;22646:18;;;22639:62;-1:-1:-1;;;22717:18:1;;;22710:35;22762:19;;7557:85:0;22386:401:1;7557:85:0;7678:67;1790:10;7701:7;7729:15;7710:16;:34;7678:8;:67::i;:::-;-1:-1:-1;7776:4:0;;7375:413;-1:-1:-1;;;7375:413:0:o;6133:175::-;6219:4;6236:42;1790:10;6260:9;6271:6;6236:9;:42::i;39178:836::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;39444:3:::1;39422:18;:25;;:54;;;;;39473:3;39451:18;:25;;39422:54;:98;;;;;39502:18;39480;:40;;39422:98;39414:133;;;::::0;-1:-1:-1;;;39414:133:0;;22994:2:1;39414:133:0::1;::::0;::::1;22976:21:1::0;23033:2;23013:18;;;23006:30;-1:-1:-1;;;23052:18:1;;;23045:52;23114:18;;39414:133:0::1;22792:346:1::0;39414:133:0::1;39589:3;39566:19;:26;;:56;;;;;39619:3;39596:19;:26;;39566:56;:102;;;;;39649:19;39626;:42;;39566:102;39558:138;;;::::0;-1:-1:-1;;;39558:138:0;;23345:2:1;39558:138:0::1;::::0;::::1;23327:21:1::0;23384:2;23364:18;;;23357:30;23423:25;23403:18;;;23396:53;23466:18;;39558:138:0::1;23143:347:1::0;39558:138:0::1;39707:21;:46:::0;;-1:-1:-1;;39707:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;39764:17:::1;:38:::0;;;;39813:17:::1;:38:::0;;;;39862:18:::1;:40:::0;39913:18:::1;:40:::0;39964:19:::1;:42:::0;39178:836::o;23687:282::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;23794:9:::1;23790:172;23809:19:::0;;::::1;23790:172;;;23884:8;23849:19;:32;23869:8;;23878:1;23869:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23849:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;23849:32:0;:43;;-1:-1:-1;;23849:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23928:8;;23937:1;23928:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23912:38:0::1;;23941:8;23912:38;;;;1645:14:1::0;1638:22;1620:41;;1608:2;1593:18;;1480:187;23912:38:0::1;;;;;;;;23830:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23790:172;;23977:182:::0;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24062:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;24062:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24117:34;;1620:41:1;;;24117:34:0::1;::::0;1593:18:1;24117:34:0::1;;;;;;;23977:182:::0;;:::o;38931:239::-;38971:7;39157:3;39150:4;39120:26;39138:6;39120:9;:26::i;:::-;5970:12;;39106:40;;;;:::i;:::-;39094:6;;39076:26;;-1:-1:-1;;;;;39094:6:0;39076:9;:26::i;:::-;39059:14;;39005:9;;;;;;;;;-1:-1:-1;;;;;39005:9:0;-1:-1:-1;;;;;39005:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39041:6;;38998:51;;-1:-1:-1;;;38998:51:0;;-1:-1:-1;;;;;39041:6:0;;;38998:51;;;962::1;38998:34:0;;;;;935:18:1;;38998:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;39052:4;38998:58;:::i;:::-;:75;;;;:::i;:::-;:104;;;;:::i;:::-;:149;;;;:::i;:::-;:156;;;;:::i;:::-;:162;;;;:::i;:::-;38990:171;;38931:239;:::o;23277:402::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;23395:17:::1;:34:::0;;;23440:16:::1;:32:::0;;;23483:10:::1;:20:::0;;;23496:7;23530:36:::1;23459:13:::0;23415:14;23530:36:::1;:::i;:::-;:49;;;;:::i;:::-;23514:13;:65:::0;23634:3:::1;23615:16;12595:5;23615:2;:16;:::i;:::-;:22;;;;:::i;:::-;23598:13;;:39;;23590:81;;;::::0;-1:-1:-1;;;23590:81:0;;23827:2:1;23590:81:0::1;::::0;::::1;23809:21:1::0;23866:2;23846:18;;;23839:30;23905:31;23885:18;;;23878:59;23954:18;;23590:81:0::1;23625:353:1::0;20497:293:0;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;20621:16:::1;5864:2:::0;20621::::1;:16;:::i;:::-;20613:3;20593:13;5970:12:::0;;;5882:108;20593:13:::1;:17;::::0;20609:1:::1;20593:17;:::i;:::-;:23;;;;:::i;:::-;20592:46;;;;:::i;:::-;20582:6;:56;;20574:109;;;::::0;-1:-1:-1;;;20574:109:0;;24185:2:1;20574:109:0::1;::::0;::::1;24167:21:1::0;24224:2;24204:18;;;24197:30;24263:34;24243:18;;;24236:62;-1:-1:-1;;;24314:18:1;;;24307:38;24362:19;;20574:109:0::1;23983:404:1::0;20574:109:0::1;20716:16;5864:2:::0;20716::::1;:16;:::i;:::-;20706:27;::::0;:6;:27:::1;:::i;:::-;20694:9;:39:::0;;;20749:33:::1;::::0;160:25:1;;;20749:33:0::1;::::0;148:2:1;133:18;20749:33:0::1;14:177:1::0;33498:248:0;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33580:25:0;::::1;33572:76;;;;-1:-1:-1::0;;;33572:76:0::1;;;;;;;:::i;:::-;33659:10;:33:::0;;-1:-1:-1;;;;;;33659:33:0::1;-1:-1:-1::0;;;;;33659:33:0;::::1;::::0;;::::1;::::0;;;33708:30:::1;::::0;::::1;::::0;-1:-1:-1;;33708:30:0::1;33498:248:::0;:::o;20860:346::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;20983:6:::1;20963:13;5970:12:::0;;;5882:108;20963:13:::1;:17;::::0;20979:1:::1;20963:17;:::i;:::-;:26;;;;:::i;:::-;20950:9;:39;;20942:105;;;::::0;-1:-1:-1;;;20942:105:0;;24594:2:1;20942:105:0::1;::::0;::::1;24576:21:1::0;24633:2;24613:18;;;24606:30;24672:34;24652:18;;;24645:62;-1:-1:-1;;;24723:18:1;;;24716:51;24784:19;;20942:105:0::1;24392:417:1::0;20942:105:0::1;21098:4;21078:13;5970:12:::0;;;5882:108;21078:13:::1;:17;::::0;21094:1:::1;21078:17;:::i;:::-;:24;;;;:::i;:::-;21065:9;:37;;21057:102;;;::::0;-1:-1:-1;;;21057:102:0;;25016:2:1;21057:102:0::1;::::0;::::1;24998:21:1::0;25055:2;25035:18;;;25028:30;25094:34;25074:18;;;25067:62;-1:-1:-1;;;25145:18:1;;;25138:50;25205:19;;21057:102:0::1;24814:416:1::0;21057:102:0::1;21169:18;:30:::0;20860:346::o;20189:300::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;20312:16:::1;5864:2:::0;20312::::1;:16;:::i;:::-;20303:4;20283:13;5970:12:::0;;;5882:108;20283:13:::1;:17;::::0;20299:1:::1;20283:17;:::i;:::-;:24;;;;:::i;:::-;20282:47;;;;:::i;:::-;20272:6;:57;;20264:112;;;::::0;-1:-1:-1;;;20264:112:0;;25437:2:1;20264:112:0::1;::::0;::::1;25419:21:1::0;25476:2;25456:18;;;25449:30;25515:34;25495:18;;;25488:62;-1:-1:-1;;;25566:18:1;;;25559:40;25616:19;;20264:112:0::1;25235:406:1::0;20264:112:0::1;20413:16;5864:2:::0;20413::::1;:16;:::i;:::-;20403:27;::::0;:6;:27:::1;:::i;:::-;20387:13;:43:::0;;;20446:35:::1;::::0;160:25:1;;;20446:35:0::1;::::0;148:2:1;133:18;20446:35:0::1;14:177:1::0;19772:98:0;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;19834:20:::1;:28:::0;;-1:-1:-1;;19834:28:0::1;::::0;;19772:98::o;11849:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11849:28:0;;-1:-1:-1;11849:28:0;:::o;9800:244::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9889:22:0;::::1;9881:73;;;::::0;-1:-1:-1;;;9881:73:0;;25848:2:1;9881:73:0::1;::::0;::::1;25830:21:1::0;25887:2;25867:18;;;25860:30;25926:34;25906:18;;;25899:62;-1:-1:-1;;;25977:18:1;;;25970:36;26023:19;;9881:73:0::1;25646:402:1::0;9881:73:0::1;9991:6;::::0;9970:38:::1;::::0;-1:-1:-1;;;;;9970:38:0;;::::1;::::0;9991:6:::1;::::0;9970:38:::1;::::0;9991:6:::1;::::0;9970:38:::1;10019:6;:17:::0;;-1:-1:-1;;;;;;10019:17:0::1;-1:-1:-1::0;;;;;10019:17:0;;;::::1;::::0;;;::::1;::::0;;9800:244::o;33021:160::-;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;33115:58:::1;::::0;33079:12:::1;::::0;33123:10:::1;::::0;33147:21:::1;::::0;33079:12;33115:58;33079:12;33115:58;33147:21;33123:10;33115:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37134:1399:::0;9555:6;;-1:-1:-1;;;;;9555:6:0;1790:10;9555:22;9547:67;;;;-1:-1:-1;;;9547:67:0;;;;;;;:::i;:::-;37239:4:::1;37228:7;:15;;37220:81;;;::::0;-1:-1:-1;;;37220:81:0;;26465:2:1;37220:81:0::1;::::0;::::1;26447:21:1::0;26504:2;26484:18;;;26477:30;26543:34;26523:18;;;26516:62;-1:-1:-1;;;26594:18:1;;;26587:51;26655:19;;37220:81:0::1;26263:417:1::0;37220:81:0::1;37362:19;::::0;37344:37:::1;::::0;:15:::1;:37;:::i;:::-;37320:20;;:61;;37312:87;;;::::0;-1:-1:-1;;;37312:87:0;;26887:2:1;37312:87:0::1;::::0;::::1;26869:21:1::0;26926:2;26906:18;;;26899:30;-1:-1:-1;;;26945:18:1;;;26938:43;26998:18;;37312:87:0::1;26685:337:1::0;37312:87:0::1;37433:15;37410:20;:38:::0;37486:6:::1;::::0;37479:39:::1;::::0;-1:-1:-1;;;37479:39:0;;37512:4:::1;37479:39;::::0;::::1;962:51:1::0;37459:17:0::1;::::0;-1:-1:-1;;;;;37486:6:0::1;::::0;37479:24:::1;::::0;935:18:1;;37479:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37459:59;;37529:20;37552:24;37570:4;37552:9;:24::i;:::-;37529:47:::0;-1:-1:-1;37587:16:0::1;37628:5;37606:19;37618:7:::0;37606:9;:19:::1;:::i;:::-;:27;;;;:::i;:::-;37780:6;::::0;37804:9:::1;::::0;37773:52:::1;::::0;-1:-1:-1;;;37773:52:0;;-1:-1:-1;;;;;37804:9:0;;::::1;37773:52;::::0;::::1;18706:51:1::0;18773:18;;;18766:34;;;37587:46:0;;-1:-1:-1;37672:21:0::1;::::0;37780:6;::::1;::::0;37773:22:::1;::::0;18679:18:1;;37773:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;37871:9:0::1;::::0;:234:::1;::::0;-1:-1:-1;;;37871:234:0;;-1:-1:-1;;;;;37871:9:0;;::::1;::::0;:28:::1;::::0;:234:::1;::::0;37922:4:::1;::::0;37942:8;;37871:9;;;;37922:4;;38079:15:::1;::::0;37871:234:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38118:25;38173:12;38146:24;38164:4;38146:9;:24::i;:::-;:39;;;;:::i;:::-;38118:67:::0;-1:-1:-1;38199:21:0;;38196:118:::1;;38236:66;38260:4;38275:6;38284:17;38236:15;:66::i;:::-;38326:23;38352:41;38376:17:::0;38352:21:::1;:41;:::i;:::-;38326:67:::0;-1:-1:-1;38409:19:0;;38406:80:::1;;38444:30;38458:15;38444:13;:30::i;:::-;38503:22;::::0;38516:8;;38503:22:::1;::::0;;;::::1;37209:1324;;;;;;37134:1399:::0;:::o;8717:380::-;-1:-1:-1;;;;;8853:19:0;;8845:68;;;;-1:-1:-1;;;8845:68:0;;28091:2:1;8845:68:0;;;28073:21:1;28130:2;28110:18;;;28103:30;28169:34;28149:18;;;28142:62;-1:-1:-1;;;28220:18:1;;;28213:34;28264:19;;8845:68:0;27889:400:1;8845:68:0;-1:-1:-1;;;;;8932:21:0;;8924:68;;;;-1:-1:-1;;;8924:68:0;;28496:2:1;8924:68:0;;;28478:21:1;28535:2;28515:18;;;28508:30;28574:34;28554:18;;;28547:62;-1:-1:-1;;;28625:18:1;;;28618:32;28667:19;;8924:68:0;28294:398:1;8924:68:0;-1:-1:-1;;;;;9005:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9057:32;;160:25:1;;;9057:32:0;;133:18:1;9057:32:0;;;;;;;8717:380;;;:::o;7796:614::-;-1:-1:-1;;;;;7936:20:0;;7928:70;;;;-1:-1:-1;;;7928:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8017:23:0;;8009:71;;;;-1:-1:-1;;;8009:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8117:17:0;;8093:21;8117:17;;;;;;;;;;;8153:23;;;;8145:74;;;;-1:-1:-1;;;8145:74:0;;29709:2:1;8145:74:0;;;29691:21:1;29748:2;29728:18;;;29721:30;29787:34;29767:18;;;29760:62;-1:-1:-1;;;29838:18:1;;;29831:36;29884:19;;8145:74:0;29507:402:1;8145:74:0;-1:-1:-1;;;;;8255:17:0;;;:9;:17;;;;;;;;;;;8275:22;;;8255:42;;8319:20;;;;;;;;:30;;8291:6;;8255:9;8319:30;;8291:6;;8319:30;:::i;:::-;;;;;;;;8384:9;-1:-1:-1;;;;;8367:35:0;8376:6;-1:-1:-1;;;;;8367:35:0;;8395:6;8367:35;;;;160:25:1;;148:2;133:18;;14:177;8367:35:0;;;;;;;;7917:493;7796:614;;;:::o;24167:5588::-;-1:-1:-1;;;;;24267:18:0;;24259:68;;;;-1:-1:-1;;;24259:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24346:16:0;;24338:64;;;;-1:-1:-1;;;24338:64:0;;;;;;;:::i;:::-;24430:1;24421:6;:10;24413:52;;;;-1:-1:-1;;;24413:52:0;;30116:2:1;24413:52:0;;;30098:21:1;30155:2;30135:18;;;30128:30;30194:31;30174:18;;;30167:59;30243:18;;24413:52:0;29914:353:1;24413:52:0;24490:13;;;;;;;24486:132;;-1:-1:-1;;;;;24527:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24556:23:0;;;;;;:19;:23;;;;;;;;24527:52;24519:87;;;;-1:-1:-1;;;24519:87:0;;30474:2:1;24519:87:0;;;30456:21:1;30513:2;30493:18;;;30486:30;-1:-1:-1;;;30532:18:1;;;30525:52;30594:18;;24519:87:0;30272:346:1;24519:87:0;24633:13;;;;;;;24630:209;;;-1:-1:-1;;;;;24672:17:0;;;;;;:11;:17;;;;;;;;24671:18;:38;;;;-1:-1:-1;;;;;;24694:15:0;;;;;;:11;:15;;;;;;;;24693:16;24671:38;24670:57;;;-1:-1:-1;9493:6:0;;-1:-1:-1;;;;;24714:13:0;;;9493:6;;24714:13;24670:57;:82;;;-1:-1:-1;;;;;;24731:21:0;;24745:6;24731:21;24670:82;24662:165;;;;-1:-1:-1;;;24662:165:0;;30825:2:1;24662:165:0;;;30807:21:1;30864:2;30844:18;;;30837:30;30903:34;30883:18;;;30876:62;30974:34;30954:18;;;30947:62;-1:-1:-1;;;31025:19:1;;;31018:37;31072:19;;24662:165:0;30623:474:1;24662:165:0;24862:14;;;;24859:1634;;;9493:6;;-1:-1:-1;;;;;24896:15:0;;;9493:6;;24896:15;;;;:32;;-1:-1:-1;9493:6:0;;-1:-1:-1;;;;;24915:13:0;;;9493:6;;24915:13;;24896:32;:52;;;;-1:-1:-1;;;;;;24932:16:0;;;;24896:52;:77;;;;-1:-1:-1;;;;;;24952:21:0;;24966:6;24952:21;;24896:77;:107;;;;-1:-1:-1;;;;;;24978:25:0;;;;;;:19;:25;;;;;;;;24977:26;24896:107;:135;;;;-1:-1:-1;;;;;;25008:23:0;;;;;;:19;:23;;;;;;;;25007:24;24896:135;24892:1590;;;25207:20;;;;25203:506;;;25269:9;;-1:-1:-1;;;;;25255:24:0;;;25269:9;;25255:24;;;;:49;;-1:-1:-1;25297:6:0;;-1:-1:-1;;;;;25283:21:0;;;25297:6;;25283:21;;25255:49;25251:439;;;25382:16;25397:1;25382:12;:16;:::i;:::-;25369:9;25340:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;25437:16:0;25452:1;25437:12;:16;:::i;:::-;-1:-1:-1;;;;;25402:32:0;;;;;;:28;:32;;;;;;:51;25340:113;25332:179;;;;-1:-1:-1;;;25332:179:0;;31304:2:1;25332:179:0;;;31286:21:1;31343:2;31323:18;;;31316:30;31382:34;31362:18;;;31355:62;-1:-1:-1;;;31433:18:1;;;31426:51;31494:19;;25332:179:0;31102:417:1;25332:179:0;25567:9;25538:39;;;;:28;:39;;;;;;25580:12;25538:54;;;;-1:-1:-1;;;;;25619:32:0;;;;;;:47;25251:439;-1:-1:-1;;;;;25778:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;25814:35:0;;;;;;:31;:35;;;;;;;;25813:36;25778:71;25774:693;;;25892:12;;25882:6;:22;;25874:75;;;;-1:-1:-1;;;25874:75:0;;31726:2:1;25874:75:0;;;31708:21:1;31765:2;31745:18;;;31738:30;31804:34;31784:18;;;31777:62;-1:-1:-1;;;31855:18:1;;;31848:38;31903:19;;25874:75:0;31524:404:1;25874:75:0;26006:9;;25989:13;25999:2;25989:9;:13::i;:::-;25980:22;;:6;:22;:::i;:::-;:35;;25972:67;;;;-1:-1:-1;;;25972:67:0;;32135:2:1;25972:67:0;;;32117:21:1;32174:2;32154:18;;;32147:30;-1:-1:-1;;;32193:18:1;;;32186:49;32252:18;;25972:67:0;31933:343:1;25972:67:0;25774:693;;;-1:-1:-1;;;;;26116:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;26150:37:0;;;;;;:31;:37;;;;;;;;26149:38;26116:71;26112:355;;;26230:13;;26220:6;:23;;26212:78;;;;-1:-1:-1;;;26212:78:0;;32483:2:1;26212:78:0;;;32465:21:1;32522:2;32502:18;;;32495:30;32561:34;32541:18;;;32534:62;-1:-1:-1;;;32612:18:1;;;32605:40;32662:19;;26212:78:0;32281:406:1;26112:355:0;-1:-1:-1;;;;;26321:35:0;;;;;;:31;:35;;;;;;;;26316:151;;26414:9;;26397:13;26407:2;26397:9;:13::i;:::-;26388:22;;:6;:22;:::i;:::-;:35;;26380:67;;;;-1:-1:-1;;;26380:67:0;;32135:2:1;26380:67:0;;;32117:21:1;32174:2;32154:18;;;32147:30;-1:-1:-1;;;32193:18:1;;;32186:49;32252:18;;26380:67:0;31933:343:1;26380:67:0;26505:28;26536:24;26554:4;26536:9;:24::i;:::-;26620:18;;26505:55;;-1:-1:-1;26596:42:0;;;;;;;26654:22;;-1:-1:-1;26665:11:0;;;;;;;26654:22;:35;;;;-1:-1:-1;26681:8:0;;-1:-1:-1;;;26681:8:0;;;;26680:9;26654:35;:71;;;;-1:-1:-1;;;;;;26694:31:0;;;;;;:25;:31;;;;;;;;26693:32;26654:71;:101;;;;-1:-1:-1;;;;;;26730:25:0;;;;;;:19;:25;;;;;;;;26729:26;26654:101;:129;;;;-1:-1:-1;;;;;;26760:23:0;;;;;;:19;:23;;;;;;;;26759:24;26654:129;26651:232;;;26800:8;:15;;-1:-1:-1;;;;26800:15:0;-1:-1:-1;;;26800:15:0;;;26830:10;:8;:10::i;:::-;26855:8;:16;;-1:-1:-1;;;;26855:16:0;;;26651:232;26899:8;;-1:-1:-1;;;26899:8:0;;;;26898:9;:42;;;;-1:-1:-1;;;;;;26911:29:0;;;;;;:25;:29;;;;;;;;26898:42;:59;;;;-1:-1:-1;26944:13:0;;;;26898:59;:114;;;;;26997:15;;26980:14;;:32;;;;:::i;:::-;26961:15;:51;;26898:114;:144;;;;-1:-1:-1;;;;;;27017:25:0;;;;;;:19;:25;;;;;;;;27016:26;26898:144;26895:204;;;27058:29;:27;:29::i;:::-;-1:-1:-1;;;;;27229:25:0;;27111:12;27229:25;;;:19;:25;;;;;;27126:4;;27229:25;;;:52;;-1:-1:-1;;;;;;27258:23:0;;;;;;:19;:23;;;;;;;;27229:52;27226:99;;;-1:-1:-1;27308:5:0;27226:99;27377:21;;27345:12;;27377:21;;:38;;;;-1:-1:-1;27402:13:0;;;;;;;27377:38;:51;;;;-1:-1:-1;27420:8:0;;-1:-1:-1;;;27420:8:0;;;;27419:9;27377:51;27374:162;;;27469:9;-1:-1:-1;;;;;27469:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27444:14;:50;27509:15;:13;:15::i;:::-;27625:7;27622:2080;;;29857:18;;29842:12;:33;27687:60;;;;-1:-1:-1;;;;;;27716:31:0;;;;;;:25;:31;;;;;;;;27687:60;:94;;;;-1:-1:-1;;;;;;27752:29:0;;;;;;:25;:29;;;;;;;;27751:30;27687:94;:122;;;;-1:-1:-1;;;;;;27786:23:0;;;;;;:19;:23;;;;;;;;27785:24;27687:122;:142;;;;;27828:1;27813:12;;:16;27687:142;27684:1849;;;29857:18;;29842:12;:33;27867:330;;28176:1;28160:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;27867:330:0;-1:-1:-1;;;;;28221:15:0;;;;;;:11;:15;;;;;;;;28217:214;;-1:-1:-1;;;;;28260:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;28260:22:0;28278:4;28260:22;;;;;;28305:10;:15;;28278:4;;28305:10;;:15;;28278:4;;28305:15;:::i;:::-;;;;-1:-1:-1;;28343:11:0;:20;;;;;;;-1:-1:-1;28343:20:0;;;;;;;;-1:-1:-1;;;;;;28343:20:0;-1:-1:-1;;;;;28343:20:0;;;;;;;;28391;;962:51:1;;;28391:20:0;;950:2:1;935:18;28391:20:0;;;;;;;28217:214;12595:5;28467:12;;28458:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;28451:42;;28556:12;;28538:15;;28531:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;28509:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;28636:12:0;;28617:16;;28610:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;28587:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28702:12:0;;28690:9;;28683:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;28667:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;27684:1849:0;;-1:-1:-1;27684:1849:0;;-1:-1:-1;;;;;28779:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;28828:1;28812:13;;:17;28779:50;28775:758;;;12595:5;28865:13;;28856:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;28849:43;;28959:13;;28940:16;;28933:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;28911:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;29041:13:0;;29021:17;;29014:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;28991:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;29109:13:0;;29096:10;;29089:17;;:4;:17;:::i;28775:758::-;-1:-1:-1;;;;;29185:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;29235:1;29220:12;;:16;29185:51;29182:351;;;12595:5;29270:12;;29261:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;29254:42;;29359:12;;29341:15;;29334:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;29312:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;29439:12:0;;29420:16;;29413:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;29390:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;29505:12:0;;29493:9;;29486:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;29470:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;29182:351:0;29564:8;;29561:93;;29596:42;29612:4;29626;29633;29596:15;:42::i;:::-;29676:14;29686:4;29676:14;;:::i;:::-;;;27622:2080;29714:33;29730:4;29736:2;29740:6;29714:15;:33::i;:::-;24246:5509;;;;24167:5588;;;:::o;21218:207::-;-1:-1:-1;;;;;21306:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;21306:52:0;;;;;;;;;;21374:43;;32860:51:1;;;32927:18;;;32920:50;21374:43:0;;32833:18:1;21374:43:0;;;;;;;21218:207;;:::o;22632:236::-;-1:-1:-1;;;;;22715:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;22715:39:0;;;;;;;22765;22715:31;:39;22765:26;:39::i;30991:1454::-;31032:23;31058:24;31076:4;31058:9;:24::i;:::-;31032:50;;31093:25;31164:12;;31142:19;;31121:18;;:40;;;;:::i;:::-;:55;;;;:::i;:::-;31093:83;-1:-1:-1;31200:20:0;;;:46;;-1:-1:-1;31224:22:0;;31200:46;31197:60;;;31249:7;;30991:1454::o;31197:60::-;31290:18;;:23;;31311:2;31290:23;:::i;:::-;31272:15;:41;31269:113;;;31347:18;;:23;;31368:2;31347:23;:::i;:::-;31329:41;;31269:113;31394:12;31476:23;31561:1;31541:17;31520:18;;31502:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;31476:86;-1:-1:-1;31583:51:0;31600:33;31476:86;31600:15;:33;:::i;:::-;31583:16;:51::i;:::-;31842:18;;31677:21;;;;31656:18;;31842:20;;31861:1;;31842:20;:::i;:::-;31821:42;;:17;:42;:::i;:::-;31798:19;;31785:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;31758:106;;31875:17;31964:1;31945:18;;:20;;;;:::i;:::-;31924:42;;:17;:42;:::i;:::-;31908:12;;31895:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;31875:92;-1:-1:-1;31999:28:0;31875:92;31999:16;:28;:::i;:::-;31980:47;;;;:::i;:::-;32073:1;32052:18;:22;;;32085:19;:23;;;32119:12;:16;31980:47;-1:-1:-1;32159:19:0;;;;;:42;;;32200:1;32182:15;:19;32159:42;32156:119;;;32217:46;32230:15;32247;32217:12;:46::i;:::-;32308:10;;32300:46;;-1:-1:-1;;;;;32308:10:0;;;;32332:9;;32300:46;;;;32332:9;32308:10;32300:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32380:17:0;;32372:65;;32287:59;;-1:-1:-1;;;;;;32380:17:0;;32411:21;;32372:65;;;;32411:21;32380:17;32372:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;30991:1454:0:o;38541:382::-;38629:16;;;38643:1;38629:16;;;;;;;;38605:21;;38629:16;;;;;;;;-1:-1:-1;;38666:9:0;;:16;;;-1:-1:-1;;;38666:16:0;;;;38605:40;;-1:-1:-1;;;;;;38666:9:0;;;;:14;;-1:-1:-1;38666:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38656:4;38661:1;38656:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;38656:26:0;;;-1:-1:-1;;;;;38656:26:0;;;;;38711:4;38693;38698:1;38693:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38693:23:0;;;:7;;;;;;;;;:23;38729:9;;:186;;-1:-1:-1;;;38729:186:0;;:9;;;:60;;38797:11;;38729:186;;:9;;38840:4;;38867:6;;38889:15;;38729:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35874:1252;35960:15;35943:14;:32;;;35996:20;:38;36072:6;;36065:39;;-1:-1:-1;;;36065:39:0;;36098:4;36065:39;;;962:51:1;-1:-1:-1;;;;;;;36072:6:0;;36065:24;;935:18:1;;36065:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36045:59;;36115:20;36138:24;36156:4;36138:9;:24::i;:::-;36115:47;;36173:16;36223:5;36204:16;;36192:9;:28;;;;:::i;:::-;:36;;;;:::i;:::-;36375:6;;36399:9;;36368:52;;-1:-1:-1;;;36368:52:0;;-1:-1:-1;;;;;36399:9:0;;;36368:52;;;18706:51:1;18773:18;;;18766:34;;;36173:55:0;;-1:-1:-1;36267:21:0;;36375:6;;;36368:22;;18679:18:1;;36368:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;36466:9:0;;:234;;-1:-1:-1;;;36466:234:0;;-1:-1:-1;;;;;36466:9:0;;;;:28;;:234;;36517:4;;36537:8;;36466:9;;;;36517:4;;36674:15;;36466:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36713:25;36768:12;36741:24;36759:4;36741:9;:24::i;:::-;:39;;;;:::i;:::-;36713:67;-1:-1:-1;36794:21:0;;36791:118;;36831:66;36855:4;36870:6;36879:17;36831:15;:66::i;:::-;36921:23;36947:41;36971:17;36947:21;:41;:::i;:::-;36921:67;-1:-1:-1;37004:19:0;;37001:80;;37039:30;37053:15;37039:13;:30::i;:::-;37098:20;;37109:8;;37098:20;;;;;35922:1204;;;;;;35874:1252::o;40022:1006::-;40067:12;40082:9;:7;:9::i;:::-;40067:24;;40102:27;40190:17;;40183:4;40163:17;;40140:19;;40133:4;:26;;;;:::i;:::-;40132:48;;;;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;40102:105;;40218:28;40308:18;;40301:4;40280:18;;40257:19;;40250:4;:26;;;;:::i;:::-;40249:49;;;;:::i;:::-;:56;;;;:::i;:::-;:77;;;;:::i;:::-;40218:108;;40362:17;;40340:19;:39;40337:109;;;40417:17;;40395:39;;40337:109;40482:18;;40459:20;:41;40456:113;;;-1:-1:-1;40539:18:0;;40456:113;40634:3;40612:19;40597:12;;:34;;;;:::i;:::-;:40;;;;:::i;:::-;40579:15;:58;;;40668:12;;40707:3;;40668:30;;;:::i;:::-;40667:37;;40702:2;40667:37;:::i;:::-;:43;;;;:::i;:::-;40648:16;:62;;;40767:15;;40733:12;;40767:15;;40733:31;;;:::i;:::-;:49;;;;:::i;:::-;40721:9;:61;40826:13;;40865:3;;40826:36;;40842:20;;40826:36;:::i;:::-;:42;;;;:::i;:::-;40807:16;:61;;;40900:13;;40941:3;;40900:32;;;:::i;:::-;40899:39;;40936:2;40899:39;:::i;:::-;:45;;;;:::i;:::-;40879:17;:65;;;41004:16;;40968:13;;41004:16;;40968:33;;;:::i;:::-;:52;;;;:::i;:::-;40955:10;:65;-1:-1:-1;;;40022:1006:0:o;29891:573::-;30043:16;;;30057:1;30043:16;;;;;;;;30019:21;;30043:16;;;;;;;;;;-1:-1:-1;30043:16:0;30019:40;;30088:4;30070;30075:1;30070:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30070:23:0;;;:7;;;;;;;;;;:23;;;;30114:9;;:16;;;-1:-1:-1;;;30114:16:0;;;;:9;;;;;:14;;:16;;;;;30070:7;;30114:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30104:4;30109:1;30104:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30104:26:0;;;:7;;;;;;;;;:26;30175:9;;30143:56;;30160:4;;30175:9;30187:11;30143:8;:56::i;:::-;30238:9;;:218;;-1:-1:-1;;;30238:218:0;;-1:-1:-1;;;;;30238:9:0;;;;:60;;:218;;30313:11;;30238:9;;30383:4;;30410;;30430:15;;30238:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29946:518;29891:573;:::o;30476:507::-;30656:9;;30624:56;;30641:4;;-1:-1:-1;;;;;30656:9:0;30668:11;30624:8;:56::i;:::-;30723:9;;:252;;-1:-1:-1;;;30723:252:0;;-1:-1:-1;;;;;30723:9:0;;;;:25;;30756:9;;30723:252;;30789:4;;30809:11;;30723:9;;;;30789:4;;30949:15;;30723:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30476:507;;:::o;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;1024:131::-;-1:-1:-1;;;;;1099:31:1;;1089:42;;1079:70;;1145:1;1142;1135:12;1079:70;1024:131;:::o;1160:315::-;1228:6;1236;1289:2;1277:9;1268:7;1264:23;1260:32;1257:52;;;1305:1;1302;1295:12;1257:52;1344:9;1331:23;1363:31;1388:5;1363:31;:::i;:::-;1413:5;1465:2;1450:18;;;;1437:32;;-1:-1:-1;;;1160:315:1:o;1672:118::-;1758:5;1751:13;1744:21;1737:5;1734:32;1724:60;;1780:1;1777;1770:12;1795:241;1851:6;1904:2;1892:9;1883:7;1879:23;1875:32;1872:52;;;1920:1;1917;1910:12;1872:52;1959:9;1946:23;1978:28;2000:5;1978:28;:::i;:::-;2025:5;1795:241;-1:-1:-1;;;1795:241:1:o;2041:247::-;2100:6;2153:2;2141:9;2132:7;2128:23;2124:32;2121:52;;;2169:1;2166;2159:12;2121:52;2208:9;2195:23;2227:31;2252:5;2227:31;:::i;2293:127::-;2354:10;2349:3;2345:20;2342:1;2335:31;2385:4;2382:1;2375:15;2409:4;2406:1;2399:15;2425:275;2496:2;2490:9;2561:2;2542:13;;-1:-1:-1;;2538:27:1;2526:40;;2596:18;2581:34;;2617:22;;;2578:62;2575:88;;;2643:18;;:::i;:::-;2679:2;2672:22;2425:275;;-1:-1:-1;2425:275:1:o;2705:183::-;2765:4;2798:18;2790:6;2787:30;2784:56;;;2820:18;;:::i;:::-;-1:-1:-1;2865:1:1;2861:14;2877:4;2857:25;;2705:183::o;2893:662::-;2947:5;3000:3;2993:4;2985:6;2981:17;2977:27;2967:55;;3018:1;3015;3008:12;2967:55;3054:6;3041:20;3080:4;3104:60;3120:43;3160:2;3120:43;:::i;:::-;3104:60;:::i;:::-;3198:15;;;3284:1;3280:10;;;;3268:23;;3264:32;;;3229:12;;;;3308:15;;;3305:35;;;3336:1;3333;3326:12;3305:35;3372:2;3364:6;3360:15;3384:142;3400:6;3395:3;3392:15;3384:142;;;3466:17;;3454:30;;3504:12;;;;3417;;3384:142;;;-1:-1:-1;3544:5:1;2893:662;-1:-1:-1;;;;;;2893:662:1:o;3560:1215::-;3678:6;3686;3739:2;3727:9;3718:7;3714:23;3710:32;3707:52;;;3755:1;3752;3745:12;3707:52;3795:9;3782:23;3824:18;3865:2;3857:6;3854:14;3851:34;;;3881:1;3878;3871:12;3851:34;3919:6;3908:9;3904:22;3894:32;;3964:7;3957:4;3953:2;3949:13;3945:27;3935:55;;3986:1;3983;3976:12;3935:55;4022:2;4009:16;4044:4;4068:60;4084:43;4124:2;4084:43;:::i;4068:60::-;4162:15;;;4244:1;4240:10;;;;4232:19;;4228:28;;;4193:12;;;;4268:19;;;4265:39;;;4300:1;4297;4290:12;4265:39;4324:11;;;;4344:217;4360:6;4355:3;4352:15;4344:217;;;4440:3;4427:17;4457:31;4482:5;4457:31;:::i;:::-;4501:18;;4377:12;;;;4539;;;;4344:217;;;4580:5;-1:-1:-1;;4623:18:1;;4610:32;;-1:-1:-1;;4654:16:1;;;4651:36;;;4683:1;4680;4673:12;4651:36;;4706:63;4761:7;4750:8;4739:9;4735:24;4706:63;:::i;:::-;4696:73;;;3560:1215;;;;;:::o;4780:456::-;4857:6;4865;4873;4926:2;4914:9;4905:7;4901:23;4897:32;4894:52;;;4942:1;4939;4932:12;4894:52;4981:9;4968:23;5000:31;5025:5;5000:31;:::i;:::-;5050:5;-1:-1:-1;5107:2:1;5092:18;;5079:32;5120:33;5079:32;5120:33;:::i;:::-;4780:456;;5172:7;;-1:-1:-1;;;5226:2:1;5211:18;;;;5198:32;;4780:456::o;5241:180::-;5300:6;5353:2;5341:9;5332:7;5328:23;5324:32;5321:52;;;5369:1;5366;5359:12;5321:52;-1:-1:-1;5392:23:1;;5241:180;-1:-1:-1;5241:180:1:o;5426:315::-;5494:6;5502;5555:2;5543:9;5534:7;5530:23;5526:32;5523:52;;;5571:1;5568;5561:12;5523:52;5607:9;5594:23;5584:33;;5667:2;5656:9;5652:18;5639:32;5680:31;5705:5;5680:31;:::i;:::-;5730:5;5720:15;;;5426:315;;;;;:::o;6143:750::-;6235:6;6243;6251;6304:2;6292:9;6283:7;6279:23;6275:32;6272:52;;;6320:1;6317;6310:12;6272:52;6360:9;6347:23;6389:18;6430:2;6422:6;6419:14;6416:34;;;6446:1;6443;6436:12;6416:34;6484:6;6473:9;6469:22;6459:32;;6529:7;6522:4;6518:2;6514:13;6510:27;6500:55;;6551:1;6548;6541:12;6500:55;6591:2;6578:16;6617:2;6609:6;6606:14;6603:34;;;6633:1;6630;6623:12;6603:34;6688:7;6681:4;6671:6;6668:1;6664:14;6660:2;6656:23;6652:34;6649:47;6646:67;;;6709:1;6706;6699:12;6646:67;6740:4;6732:13;;;;-1:-1:-1;6764:6:1;-1:-1:-1;;6805:20:1;;6792:34;6835:28;6792:34;6835:28;:::i;:::-;6882:5;6872:15;;;6143:750;;;;;:::o;6898:377::-;6972:6;6980;6988;7041:2;7029:9;7020:7;7016:23;7012:32;7009:52;;;7057:1;7054;7047:12;7009:52;7093:9;7080:23;7070:33;;7150:2;7139:9;7135:18;7122:32;7112:42;;7204:2;7193:9;7189:18;7176:32;7217:28;7239:5;7217:28;:::i;7280:382::-;7345:6;7353;7406:2;7394:9;7385:7;7381:23;7377:32;7374:52;;;7422:1;7419;7412:12;7374:52;7461:9;7448:23;7480:31;7505:5;7480:31;:::i;:::-;7530:5;-1:-1:-1;7587:2:1;7572:18;;7559:32;7600:30;7559:32;7600:30;:::i;7667:316::-;7744:6;7752;7760;7813:2;7801:9;7792:7;7788:23;7784:32;7781:52;;;7829:1;7826;7819:12;7781:52;-1:-1:-1;;7852:23:1;;;7922:2;7907:18;;7894:32;;-1:-1:-1;7973:2:1;7958:18;;;7945:32;;7667:316;-1:-1:-1;7667:316:1:o;7988:388::-;8056:6;8064;8117:2;8105:9;8096:7;8092:23;8088:32;8085:52;;;8133:1;8130;8123:12;8085:52;8172:9;8159:23;8191:31;8216:5;8191:31;:::i;:::-;8241:5;-1:-1:-1;8298:2:1;8283:18;;8270:32;8311:33;8270:32;8311:33;:::i;8381:461::-;8434:3;8472:5;8466:12;8499:6;8494:3;8487:19;8525:4;8554:2;8549:3;8545:12;8538:19;;8591:2;8584:5;8580:14;8612:1;8622:195;8636:6;8633:1;8630:13;8622:195;;;8701:13;;-1:-1:-1;;;;;8697:39:1;8685:52;;8757:12;;;;8792:15;;;;8733:1;8651:9;8622:195;;;-1:-1:-1;8833:3:1;;8381:461;-1:-1:-1;;;;;8381:461:1:o;8847:261::-;9026:2;9015:9;9008:21;8989:4;9046:56;9098:2;9087:9;9083:18;9075:6;9046:56;:::i;9113:584::-;9214:6;9222;9230;9238;9246;9254;9307:3;9295:9;9286:7;9282:23;9278:33;9275:53;;;9324:1;9321;9314:12;9275:53;9363:9;9350:23;9382:28;9404:5;9382:28;:::i;:::-;9429:5;9481:2;9466:18;;9453:32;;-1:-1:-1;9532:2:1;9517:18;;9504:32;;9583:2;9568:18;;9555:32;;-1:-1:-1;9634:3:1;9619:19;;9606:33;;-1:-1:-1;9686:3:1;9671:19;9658:33;;-1:-1:-1;9113:584:1;-1:-1:-1;;;9113:584:1:o;9702:380::-;9781:1;9777:12;;;;9824;;;9845:61;;9899:4;9891:6;9887:17;9877:27;;9845:61;9952:2;9944:6;9941:14;9921:18;9918:38;9915:161;;9998:10;9993:3;9989:20;9986:1;9979:31;10033:4;10030:1;10023:15;10061:4;10058:1;10051:15;9915:161;;9702:380;;;:::o;10087:356::-;10289:2;10271:21;;;10308:18;;;10301:30;10367:34;10362:2;10347:18;;10340:62;10434:2;10419:18;;10087:356::o;11230:127::-;11291:10;11286:3;11282:20;11279:1;11272:31;11322:4;11319:1;11312:15;11346:4;11343:1;11336:15;11362:127;11423:10;11418:3;11414:20;11411:1;11404:31;11454:4;11451:1;11444:15;11478:4;11475:1;11468:15;11494:135;11533:3;11554:17;;;11551:43;;11574:18;;:::i;:::-;-1:-1:-1;11621:1:1;11610:13;;11494:135::o;12043:422::-;12132:1;12175:5;12132:1;12189:270;12210:7;12200:8;12197:21;12189:270;;;12269:4;12265:1;12261:6;12257:17;12251:4;12248:27;12245:53;;;12278:18;;:::i;:::-;12328:7;12318:8;12314:22;12311:55;;;12348:16;;;;12311:55;12427:22;;;;12387:15;;;;12189:270;;;12193:3;12043:422;;;;;:::o;12470:806::-;12519:5;12549:8;12539:80;;-1:-1:-1;12590:1:1;12604:5;;12539:80;12638:4;12628:76;;-1:-1:-1;12675:1:1;12689:5;;12628:76;12720:4;12738:1;12733:59;;;;12806:1;12801:130;;;;12713:218;;12733:59;12763:1;12754:10;;12777:5;;;12801:130;12838:3;12828:8;12825:17;12822:43;;;12845:18;;:::i;:::-;-1:-1:-1;;12901:1:1;12887:16;;12916:5;;12713:218;;13015:2;13005:8;13002:16;12996:3;12990:4;12987:13;12983:36;12977:2;12967:8;12964:16;12959:2;12953:4;12950:12;12946:35;12943:77;12940:159;;;-1:-1:-1;13052:19:1;;;13084:5;;12940:159;13131:34;13156:8;13150:4;13131:34;:::i;:::-;13201:6;13197:1;13193:6;13189:19;13180:7;13177:32;13174:58;;;13212:18;;:::i;:::-;13250:20;;12470:806;-1:-1:-1;;;12470:806:1:o;13281:140::-;13339:5;13368:47;13409:4;13399:8;13395:19;13389:4;13368:47;:::i;13426:168::-;13466:7;13532:1;13528;13524:6;13520:14;13517:1;13514:21;13509:1;13502:9;13495:17;13491:45;13488:71;;;13539:18;;:::i;:::-;-1:-1:-1;13579:9:1;;13426:168::o;13599:217::-;13639:1;13665;13655:132;;13709:10;13704:3;13700:20;13697:1;13690:31;13744:4;13741:1;13734:15;13772:4;13769:1;13762:15;13655:132;-1:-1:-1;13801:9:1;;13599:217::o;14991:128::-;15031:3;15062:1;15058:6;15055:1;15052:13;15049:39;;;15068:18;;:::i;:::-;-1:-1:-1;15104:9:1;;14991:128::o;15124:402::-;15326:2;15308:21;;;15365:2;15345:18;;;15338:30;15404:34;15399:2;15384:18;;15377:62;-1:-1:-1;;;15470:2:1;15455:18;;15448:36;15516:3;15501:19;;15124:402::o;18343:184::-;18413:6;18466:2;18454:9;18445:7;18441:23;18437:32;18434:52;;;18482:1;18479;18472:12;18434:52;-1:-1:-1;18505:16:1;;18343:184;-1:-1:-1;18343:184:1:o;18811:245::-;18878:6;18931:2;18919:9;18910:7;18906:23;18902:32;18899:52;;;18947:1;18944;18937:12;18899:52;18979:9;18973:16;18998:28;19020:5;18998:28;:::i;19473:251::-;19543:6;19596:2;19584:9;19575:7;19571:23;19567:32;19564:52;;;19612:1;19609;19602:12;19564:52;19644:9;19638:16;19663:31;19688:5;19663:31;:::i;20849:607::-;-1:-1:-1;;;;;21208:15:1;;;21190:34;;21255:2;21240:18;;21233:34;;;;21298:2;21283:18;;21276:34;;;;21341:2;21326:18;;21319:34;;;;21390:15;;;21384:3;21369:19;;21362:44;21170:3;21422:19;;21415:35;;;;21139:3;21124:19;;20849:607::o;21461:306::-;21549:6;21557;21565;21618:2;21606:9;21597:7;21593:23;21589:32;21586:52;;;21634:1;21631;21624:12;21586:52;21663:9;21657:16;21647:26;;21713:2;21702:9;21698:18;21692:25;21682:35;;21757:2;21746:9;21742:18;21736:25;21726:35;;21461:306;;;;;:::o;23495:125::-;23535:4;23563:1;23560;23557:8;23554:34;;;23568:18;;:::i;:::-;-1:-1:-1;23605:9:1;;23495:125::o;27639:245::-;27718:6;27726;27779:2;27767:9;27758:7;27754:23;27750:32;27747:52;;;27795:1;27792;27785:12;27747:52;-1:-1:-1;;27818:16:1;;27874:2;27859:18;;;27853:25;27818:16;;27853:25;;-1:-1:-1;27639:245:1:o;28697:401::-;28899:2;28881:21;;;28938:2;28918:18;;;28911:30;28977:34;28972:2;28957:18;;28950:62;-1:-1:-1;;;29043:2:1;29028:18;;29021:35;29088:3;29073:19;;28697:401::o;29103:399::-;29305:2;29287:21;;;29344:2;29324:18;;;29317:30;29383:34;29378:2;29363:18;;29356:62;-1:-1:-1;;;29449:2:1;29434:18;;29427:33;29492:3;29477:19;;29103:399::o;32981:510::-;33252:6;33241:9;33234:25;33295:3;33290:2;33279:9;33275:18;33268:31;33215:4;33316:57;33368:3;33357:9;33353:19;33345:6;33316:57;:::i;:::-;-1:-1:-1;;;;;33409:32:1;;;;33404:2;33389:18;;33382:60;-1:-1:-1;33473:2:1;33458:18;33451:34;33308:65;32981:510;-1:-1:-1;;32981:510:1:o;33496:582::-;33795:6;33784:9;33777:25;33838:6;33833:2;33822:9;33818:18;33811:34;33881:3;33876:2;33865:9;33861:18;33854:31;33758:4;33902:57;33954:3;33943:9;33939:19;33931:6;33902:57;:::i;:::-;-1:-1:-1;;;;;33995:32:1;;;;33990:2;33975:18;;33968:60;-1:-1:-1;34059:3:1;34044:19;34037:35;33894:65;33496:582;-1:-1:-1;;;33496:582:1:o

Swarm Source

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