ETH Price: $2,954.33 (+1.06%)
Gas: 32 Gwei

Token

CATECOIN (CAT)
 

Overview

Max Total Supply

1,000,000,000,000 CAT

Holders

773

Total Transfers

-

Market

Chart

Fully Diluted Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
CATECOIN

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-20
*/

// SPDX-License-Identifier: MIT

// twitter(X) : Twitter.com/catecoinerc20
// telegram : https://t.me/catecoinportal


pragma solidity 0.8.9;
 


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 _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 {
        _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 CATECOIN is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable router;
    address public immutable uniswapV2Pair;


    // addresses
    address public  devWallet;
    address private marketingWallet;

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


    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 _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    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("CATECOIN", "CAT") {
 
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);


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

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;        
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;

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

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


        marketPair[address(uniswapV2Pair)] = true;

        approve(address(router), type(uint256).max);
        uint256 totalSupply = 1e12 * 1e18;

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

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

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


        marketingWallet = address(0x2271c16BCC28735617D51949da7F36e8B8A4664b);
        devWallet = address(0x2271c16BCC28735617D51949da7F36e8B8A4664b);

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

    receive() external payable {

    }

    // once enabled, can never be turned off
    function swapTrading() 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 updateFees(uint8 _marketingFeeBuy, uint8 _liquidityFeeBuy,uint8 _devFeeBuy,uint8 _marketingFeeSell, uint8 _liquidityFeeSell,uint8 _devFeeSell) external onlyOwner{
        _fees.buyMarketingFee = _marketingFeeBuy;
        _fees.buyLiquidityFee = _liquidityFeeBuy;
        _fees.buyDevFee = _devFeeBuy;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;

        _fees.sellMarketingFee = _marketingFeeSell;
        _fees.sellLiquidityFee = _liquidityFeeSell;
        _fees.sellDevFee = _devFeeSell;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;
        require(_fees.buyTotalFees <= 30, "Must keep fees at 30% or less");   
        require(_fees.sellTotalFees <= 30, "Must keep fees at 30% or less");
     
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedMaxWalletAmount[account] = excluded;
    }
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }


    function setMarketPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "Must keep uniswapV2Pair");
        marketPair[pair] = value;
    }
    function rescueETH(uint256 weiAmount) external onlyOwner {
        payable(owner()).transfer(weiAmount);
    }

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

    function setWallets(address _marketingWallet,address _devWallet) external onlyOwner{
        marketingWallet = _marketingWallet;
        devWallet = _devWallet;
    }

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

    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(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "Trading is not active.");
            }
            if (marketPair[sender] && !_isExcludedMaxTransactionAmount[recipient]) {
                require(amount <= maxBuyAmount, "buy transfer over max amount");
            } 
            else if (marketPair[recipient] && !_isExcludedMaxTransactionAmount[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] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[recipient]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[sender] || _isExcludedFromFees[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(99).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 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
        );

    }

    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 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 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens);
 
        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(devWallet).call{ value: (address(this).balance - ethForMarketing) } ("");
        (success,) = address(marketingWallet).call{ value: address(this).balance } ("");
    }

}

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":"_isExcludedMaxTransactionAmount","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":"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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[{"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":"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":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTrading","outputs":[],"stateMutability":"nonpayable","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":"uint8","name":"_marketingFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_devFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeSell","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeSell","type":"uint8"},{"internalType":"uint8","name":"_devFeeSell","type":"uint8"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","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"}]

60c06040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550604051806101000160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff16815250600d60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055505050348015620001ad57600080fd5b506040518060400160405280600881526020017f43415445434f494e0000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f434154000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200023292919062000f2d565b5080600490805190602001906200024b92919062000f2d565b50505060006200026062000be260201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039057600080fd5b505afa158015620003a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cb919062001047565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043057600080fd5b505afa15801562000445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046b919062001047565b6040518363ffffffff1660e01b81526004016200048a9291906200108a565b602060405180830381600087803b158015620004a557600080fd5b505af1158015620004ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e0919062001047565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060016013600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000620005dd62000bea60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260006200069c62000bea60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460006200075b62000bea60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016014600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016015600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008ec6080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000c1460201b60201c565b5060006c0c9f2c9cd04674edea400000009050606480826200090f9190620010f0565b6200091b919062001180565b60088190555060648082620009319190620010f0565b6200093d919062001180565b60098190555060648082620009539190620010f0565b6200095f919062001180565b600a81905550612710600582620009779190620010f0565b62000983919062001180565b600b819055506002600d60000160016101000a81548160ff021916908360ff1602179055506001600d60000160036101000a81548160ff021916908360ff1602179055506000600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff1662000a2b9190620011c5565b62000a379190620011c5565b600d60000160006101000a81548160ff021916908360ff1602179055506002600d60000160056101000a81548160ff021916908360ff1602179055506001600d60000160076101000a81548160ff021916908360ff1602179055506000600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff1662000af69190620011c5565b62000b029190620011c5565b600d60000160046101000a81548160ff021916908360ff160217905550732271c16bcc28735617d51949da7f36e8b8a4664b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732271c16bcc28735617d51949da7f36e8b8a4664b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000bdb338262000c4260201b60201c565b50620013e8565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600062000c3862000c2a62000be260201b60201c565b848462000ddd60201b60201c565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000cb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cac9062001264565b60405180910390fd5b62000cd18160025462000eca60201b620022421790919060201c565b60028190555062000d2f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000eca60201b620022421790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000dd1919062001297565b60405180910390a35050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000ebd919062001297565b60405180910390a3505050565b600080828462000edb9190620012b4565b90508381101562000f23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f1a9062001361565b60405180910390fd5b8091505092915050565b82805462000f3b90620013b2565b90600052602060002090601f01602090048101928262000f5f576000855562000fab565b82601f1062000f7a57805160ff191683800117855562000fab565b8280016001018555821562000fab579182015b8281111562000faa57825182559160200191906001019062000f8d565b5b50905062000fba919062000fbe565b5090565b5b8082111562000fd957600081600090555060010162000fbf565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200100f8262000fe2565b9050919050565b620010218162001002565b81146200102d57600080fd5b50565b600081519050620010418162001016565b92915050565b60006020828403121562001060576200105f62000fdd565b5b6000620010708482850162001030565b91505092915050565b620010848162001002565b82525050565b6000604082019050620010a1600083018562001079565b620010b0602083018462001079565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010fd82620010b7565b91506200110a83620010b7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620011465762001145620010c1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200118d82620010b7565b91506200119a83620010b7565b925082620011ad57620011ac62001151565b5b828204905092915050565b600060ff82169050919050565b6000620011d282620011b8565b9150620011df83620011b8565b92508260ff03821115620011f857620011f7620010c1565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200124c601f8362001203565b9150620012598262001214565b602082019050919050565b600060208201905081810360008301526200127f816200123d565b9050919050565b6200129181620010b7565b82525050565b6000602082019050620012ae600083018462001286565b92915050565b6000620012c182620010b7565b9150620012ce83620010b7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620013065762001305620010c1565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001349601b8362001203565b9150620013568262001311565b602082019050919050565b600060208201905081810360008301526200137c816200133a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620013cb57607f821691505b60208210811415620013e257620013e162001383565b5b50919050565b60805160a051614a2f62001438600039600081816110950152611ae601526000818161222001528181613513015281816136030152818161362a015281816136c601526136ed0152614a2f6000f3fe6080604052600436106102345760003560e01c80638da5cb5b1161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e14610877578063e16830a8146108b4578063f2fde38b146108dd578063f5b3c3bf14610906578063f887ea40146109435761023b565b8063c0246668146107a1578063c16dd4a4146107ca578063c18bc195146107f3578063d212a69a1461081c578063d3f6a1571461084e5761023b565b80639fccce32116100f25780639fccce32146106ba578063a457c2d7146106e5578063a9059cbb14610722578063b88631151461075f578063b9e418e71461078a5761023b565b80638da5cb5b146105d35780638ea5220f146105fe57806395d89b411461062957806396880b17146106545780639e252f00146106915761023b565b80633265e846116101bc5780636ddd1713116101805780636ddd17131461050257806370a082311461052d578063715018a61461056a5780637571336a146105815780638cd4426d146105aa5761023b565b80633265e846146103f7578063395093511461042057806349bd5a5e1461045d5780634fbee19314610488578063555467a1146104c55761023b565b806318160ddd1161020357806318160ddd1461030e5780631a8145bb146103395780631f3fed8f1461036457806323b872dd1461038f578063313ce567146103cc5761023b565b806306fdde0314610240578063095ea7b31461026b57806310d5de53146102a857806311a582c3146102e55761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561096e565b60405161026291906138a5565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190613960565b610a00565b60405161029f91906139bb565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906139d6565b610a1e565b6040516102dc91906139bb565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613a03565b610a3e565b005b34801561031a57600080fd5b50610323610c0f565b6040516103309190613a52565b60405180910390f35b34801561034557600080fd5b5061034e610c19565b60405161035b9190613a52565b60405180910390f35b34801561037057600080fd5b50610379610c1f565b6040516103869190613a52565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190613a6d565b610c25565b6040516103c391906139bb565b60405180910390f35b3480156103d857600080fd5b506103e1610cfe565b6040516103ee9190613adc565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190613b23565b610d07565b005b34801561042c57600080fd5b5061044760048036038101906104429190613960565b610fe0565b60405161045491906139bb565b60405180910390f35b34801561046957600080fd5b50610472611093565b60405161047f9190613bbf565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa91906139d6565b6110b7565b6040516104bc91906139bb565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190613bda565b61110d565b6040516104f991906139bb565b60405180910390f35b34801561050e57600080fd5b506105176111b6565b60405161052491906139bb565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f91906139d6565b6111c9565b6040516105619190613a52565b60405180910390f35b34801561057657600080fd5b5061057f611211565b005b34801561058d57600080fd5b506105a860048036038101906105a39190613c33565b611369565b005b3480156105b657600080fd5b506105d160048036038101906105cc9190613960565b61145b565b005b3480156105df57600080fd5b506105e861158b565b6040516105f59190613bbf565b60405180910390f35b34801561060a57600080fd5b506106136115b5565b6040516106209190613bbf565b60405180910390f35b34801561063557600080fd5b5061063e6115db565b60405161064b91906138a5565b60405180910390f35b34801561066057600080fd5b5061067b600480360381019061067691906139d6565b61166d565b60405161068891906139bb565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190613bda565b61168d565b005b3480156106c657600080fd5b506106cf611775565b6040516106dc9190613a52565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190613960565b61177b565b60405161071991906139bb565b60405180910390f35b34801561072e57600080fd5b5061074960048036038101906107449190613960565b611848565b60405161075691906139bb565b60405180910390f35b34801561076b57600080fd5b50610774611866565b60405161078191906139bb565b60405180910390f35b34801561079657600080fd5b5061079f611879565b005b3480156107ad57600080fd5b506107c860048036038101906107c39190613c33565b61195b565b005b3480156107d657600080fd5b506107f160048036038101906107ec9190613c33565b611a4d565b005b3480156107ff57600080fd5b5061081a60048036038101906108159190613bda565b611bce565b005b34801561082857600080fd5b50610831611d03565b604051610845989796959493929190613c73565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613cf1565b611da1565b005b34801561088357600080fd5b5061089e60048036038101906108999190613cf1565b611ebe565b6040516108ab9190613a52565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190613c33565b611f45565b005b3480156108e957600080fd5b5061090460048036038101906108ff91906139d6565b612037565b005b34801561091257600080fd5b5061092d600480360381019061092891906139d6565b6121fe565b60405161093a91906139bb565b60405180910390f35b34801561094f57600080fd5b5061095861221e565b6040516109659190613d90565b60405180910390f35b60606003805461097d90613dda565b80601f01602080910402602001604051908101604052809291908181526020018280546109a990613dda565b80156109f65780601f106109cb576101008083540402835291602001916109f6565b820191906000526020600020905b8154815290600101906020018083116109d957829003601f168201915b5050505050905090565b6000610a14610a0d6122a0565b84846122a8565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b610a466122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc90613e58565b60405180910390fd5b6064610adf610c0f565b610ae99190613ed6565b6103e883610af5610c0f565b610aff9190613f07565b610b099190613ed6565b1015610b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4190613fd3565b60405180910390fd5b6064610b54610c0f565b610b5e9190613ed6565b6103e882610b6a610c0f565b610b749190613f07565b610b7e9190613ed6565b1015610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb690614065565b60405180910390fd5b6103e882610bcb610c0f565b610bd59190613f07565b610bdf9190613ed6565b6008819055506103e881610bf1610c0f565b610bfb9190613f07565b610c059190613ed6565b6009819055505050565b6000600254905090565b600f5481565b600e5481565b6000610c32848484612393565b610cf384610c3e6122a0565b610cee856040518060600160405280602881526020016149d260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ca46122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6122a8565b600190509392505050565b60006012905090565b610d0f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613e58565b60405180910390fd5b85600d60000160016101000a81548160ff021916908360ff16021790555084600d60000160036101000a81548160ff021916908360ff16021790555083600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff16610e3b9190614085565b610e459190614085565b600d60000160006101000a81548160ff021916908360ff16021790555082600d60000160056101000a81548160ff021916908360ff16021790555081600d60000160076101000a81548160ff021916908360ff16021790555080600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff16610eff9190614085565b610f099190614085565b600d60000160046101000a81548160ff021916908360ff160217905550601e600d60000160009054906101000a900460ff1660ff161115610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7690614108565b60405180910390fd5b601e600d60000160049054906101000a900460ff1660ff161115610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf90614108565b60405180910390fd5b505050505050565b6000611089610fed6122a0565b846110848560016000610ffe6122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224290919063ffffffff16565b6122a8565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006111176122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d90613e58565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112196122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f90613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113716122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f790613e58565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6114636122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990613e58565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61151661158b565b836040518363ffffffff1660e01b8152600401611534929190614128565b602060405180830381600087803b15801561154e57600080fd5b505af1158015611562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115869190614166565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546115ea90613dda565b80601f016020809104026020016040519081016040528092919081815260200182805461161690613dda565b80156116635780601f1061163857610100808354040283529160200191611663565b820191906000526020600020905b81548152906001019060200180831161164657829003601f168201915b5050505050905090565b60146020528060005260406000206000915054906101000a900460ff1681565b6116956122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613e58565b60405180910390fd5b61172c61158b565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611771573d6000803e3d6000fd5b5050565b60105481565b600061183e6117886122a0565b846118398560405180606001604052806025815260200161498760259139600160006117b26122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6122a8565b6001905092915050565b600061185c6118556122a0565b8484612393565b6001905092915050565b600c60029054906101000a900460ff1681565b6118816122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790613e58565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055506002436119539190614193565b601181905550565b6119636122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e990613e58565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611a556122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90613e58565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90614235565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611bd66122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5c90613e58565b60405180910390fd5b6064611c6f610c0f565b611c799190613ed6565b6103e882611c85610c0f565b611c8f9190613f07565b611c999190613ed6565b1015611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd1906142c7565b60405180910390fd5b6103e881611ce6610c0f565b611cf09190613f07565b611cfa9190613ed6565b600a8190555050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b611da96122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f90613e58565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f4d6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd390613e58565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61203f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590614359565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008082846122519190614193565b905083811015612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d906143c5565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123869190613a52565b60405180910390a3505050565b60008114156123ad576123a883836000612ecd565b612e64565b6123b561158b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561242357506123f361158b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561243c5750600c60029054906101000a900460ff16155b156127c257600c60009054906101000a900460ff1661253657601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124f65750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252c90614431565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125d95750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561262857600854811115612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a9061449d565b60405180910390fd5b612717565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126cb5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561271657600954811115612715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270c90614509565b60405180910390fd5b5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127c157600a54612774836111c9565b8261277f9190614193565b11156127c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b790614575565b60405180910390fd5b5b5b60006127cd306111c9565b90506000600b5482101590508080156127f25750600c60019054906101000a900460ff165b801561280b5750600c60029054906101000a900460ff16155b80156128605750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156128b65750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561290c5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612950576001600c60026101000a81548160ff021916908315150217905550612934613077565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a065750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a1057600090505b8015612e55576000601154431015612ab257612a496064612a3b60638861336590919063ffffffff16565b6133e090919063ffffffff16565b90506063605e82612a5a9190613f07565b612a649190613ed6565b600e6000828254612a759190614193565b925050819055506063600582612a8b9190613f07565b612a959190613ed6565b60106000828254612aa69190614193565b92505081905550612e30565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b2057506000600d60000160049054906101000a900460ff1660ff16115b15612c7257612b606064612b52600d60000160049054906101000a900460ff1660ff168861336590919063ffffffff16565b6133e090919063ffffffff16565b9050600d60000160049054906101000a900460ff1660ff16600d60000160079054906101000a900460ff1660ff1682612b999190613f07565b612ba39190613ed6565b600f6000828254612bb49190614193565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160059054906101000a900460ff1660ff1682612bf29190613f07565b612bfc9190613ed6565b600e6000828254612c0d9190614193565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160069054906101000a900460ff1660ff1682612c4b9190613f07565b612c559190613ed6565b60106000828254612c669190614193565b92505081905550612e2f565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ce057506000600d60000160009054906101000a900460ff1660ff16115b15612e2e57612d206064612d12600d60000160009054906101000a900460ff1660ff168861336590919063ffffffff16565b6133e090919063ffffffff16565b9050600d60000160009054906101000a900460ff1660ff16600d60000160039054906101000a900460ff1660ff1682612d599190613f07565b612d639190613ed6565b600f6000828254612d749190614193565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160019054906101000a900460ff1660ff1682612db29190613f07565b612dbc9190613ed6565b600e6000828254612dcd9190614193565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160029054906101000a900460ff1660ff1682612e0b9190613f07565b612e159190613ed6565b60106000828254612e269190614193565b925050819055505b5b5b6000811115612e4557612e44873083612ecd565b5b8085612e519190614595565b9450505b612e60868686612ecd565b5050505b505050565b6000838311158290612eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea891906138a5565b60405180910390fd5b5060008385612ec09190614595565b9050809150509392505050565b612f38816040518060600160405280602681526020016149ac602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fcb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161306a9190613a52565b60405180910390a3505050565b6000613082306111c9565b90506000601054600e54600f546130999190614193565b6130a39190614193565b90506000808314806130b55750600082145b156130c257505050613363565b6014600b546130d19190613f07565b8311156130ea576014600b546130e79190613f07565b92505b6000600283600f54866130fd9190613f07565b6131079190613ed6565b6131119190613ed6565b90506000613128828661342a90919063ffffffff16565b9050600047905061313882613474565b600061314d824761342a90919063ffffffff16565b905060006131788761316a600e548561336590919063ffffffff16565b6133e090919063ffffffff16565b905060006131a3886131956010548661336590919063ffffffff16565b6133e090919063ffffffff16565b9050600081836131b39190614193565b846131be9190614595565b90506000600f819055506000600e8190555060006010819055506000871180156131e85750600081115b15613231576131f787826136c0565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148686826040516132289291906145c9565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683476132769190614595565b60405161328290614623565b60006040518083038185875af1925050503d80600081146132bf576040519150601f19603f3d011682016040523d82523d6000602084013e6132c4565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161331090614623565b60006040518083038185875af1925050503d806000811461334d576040519150601f19603f3d011682016040523d82523d6000602084013e613352565b606091505b505080985050505050505050505050505b565b60008083141561337857600090506133da565b600082846133869190613f07565b90508284826133959190613ed6565b146133d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cc906146aa565b60405180910390fd5b809150505b92915050565b600061342283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137a9565b905092915050565b600061346c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e69565b905092915050565b6000600267ffffffffffffffff811115613491576134906146ca565b5b6040519080825280602002602001820160405280156134bf5781602001602082028036833780820191505090505b50905030816000815181106134d7576134d66146f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561357757600080fd5b505afa15801561358b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135af919061473d565b816001815181106135c3576135c26146f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613628307f0000000000000000000000000000000000000000000000000000000000000000846122a8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161368a959493929190614863565b600060405180830381600087803b1580156136a457600080fd5b505af11580156136b8573d6000803e3d6000fd5b505050505050565b6136eb307f0000000000000000000000000000000000000000000000000000000000000000846122a8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613750969594939291906148bd565b6060604051808303818588803b15801561376957600080fd5b505af115801561377d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137a29190614933565b5050505050565b600080831182906137f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e791906138a5565b60405180910390fd5b50600083856137ff9190613ed6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561384657808201518184015260208101905061382b565b83811115613855576000848401525b50505050565b6000601f19601f8301169050919050565b60006138778261380c565b6138818185613817565b9350613891818560208601613828565b61389a8161385b565b840191505092915050565b600060208201905081810360008301526138bf818461386c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138f7826138cc565b9050919050565b613907816138ec565b811461391257600080fd5b50565b600081359050613924816138fe565b92915050565b6000819050919050565b61393d8161392a565b811461394857600080fd5b50565b60008135905061395a81613934565b92915050565b60008060408385031215613977576139766138c7565b5b600061398585828601613915565b92505060206139968582860161394b565b9150509250929050565b60008115159050919050565b6139b5816139a0565b82525050565b60006020820190506139d060008301846139ac565b92915050565b6000602082840312156139ec576139eb6138c7565b5b60006139fa84828501613915565b91505092915050565b60008060408385031215613a1a57613a196138c7565b5b6000613a288582860161394b565b9250506020613a398582860161394b565b9150509250929050565b613a4c8161392a565b82525050565b6000602082019050613a676000830184613a43565b92915050565b600080600060608486031215613a8657613a856138c7565b5b6000613a9486828701613915565b9350506020613aa586828701613915565b9250506040613ab68682870161394b565b9150509250925092565b600060ff82169050919050565b613ad681613ac0565b82525050565b6000602082019050613af16000830184613acd565b92915050565b613b0081613ac0565b8114613b0b57600080fd5b50565b600081359050613b1d81613af7565b92915050565b60008060008060008060c08789031215613b4057613b3f6138c7565b5b6000613b4e89828a01613b0e565b9650506020613b5f89828a01613b0e565b9550506040613b7089828a01613b0e565b9450506060613b8189828a01613b0e565b9350506080613b9289828a01613b0e565b92505060a0613ba389828a01613b0e565b9150509295509295509295565b613bb9816138ec565b82525050565b6000602082019050613bd46000830184613bb0565b92915050565b600060208284031215613bf057613bef6138c7565b5b6000613bfe8482850161394b565b91505092915050565b613c10816139a0565b8114613c1b57600080fd5b50565b600081359050613c2d81613c07565b92915050565b60008060408385031215613c4a57613c496138c7565b5b6000613c5885828601613915565b9250506020613c6985828601613c1e565b9150509250929050565b600061010082019050613c89600083018b613acd565b613c96602083018a613acd565b613ca36040830189613acd565b613cb06060830188613acd565b613cbd6080830187613acd565b613cca60a0830186613acd565b613cd760c0830185613acd565b613ce460e0830184613acd565b9998505050505050505050565b60008060408385031215613d0857613d076138c7565b5b6000613d1685828601613915565b9250506020613d2785828601613915565b9150509250929050565b6000819050919050565b6000613d56613d51613d4c846138cc565b613d31565b6138cc565b9050919050565b6000613d6882613d3b565b9050919050565b6000613d7a82613d5d565b9050919050565b613d8a81613d6f565b82525050565b6000602082019050613da56000830184613d81565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613df257607f821691505b60208210811415613e0657613e05613dab565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e42602083613817565b9150613e4d82613e0c565b602082019050919050565b60006020820190508181036000830152613e7181613e35565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ee18261392a565b9150613eec8361392a565b925082613efc57613efb613e78565b5b828204905092915050565b6000613f128261392a565b9150613f1d8361392a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f5657613f55613ea7565b5b828202905092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b6000613fbd602383613817565b9150613fc882613f61565b604082019050919050565b60006020820190508181036000830152613fec81613fb0565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b600061404f602483613817565b915061405a82613ff3565b604082019050919050565b6000602082019050818103600083015261407e81614042565b9050919050565b600061409082613ac0565b915061409b83613ac0565b92508260ff038211156140b1576140b0613ea7565b5b828201905092915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b60006140f2601d83613817565b91506140fd826140bc565b602082019050919050565b60006020820190508181036000830152614121816140e5565b9050919050565b600060408201905061413d6000830185613bb0565b61414a6020830184613a43565b9392505050565b60008151905061416081613c07565b92915050565b60006020828403121561417c5761417b6138c7565b5b600061418a84828501614151565b91505092915050565b600061419e8261392a565b91506141a98361392a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141de576141dd613ea7565b5b828201905092915050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b600061421f601783613817565b915061422a826141e9565b602082019050919050565b6000602082019050818103600083015261424e81614212565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006142b1602283613817565b91506142bc82614255565b604082019050919050565b600060208201905081810360008301526142e0816142a4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614343602683613817565b915061434e826142e7565b604082019050919050565b6000602082019050818103600083015261437281614336565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006143af601b83613817565b91506143ba82614379565b602082019050919050565b600060208201905081810360008301526143de816143a2565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061441b601683613817565b9150614426826143e5565b602082019050919050565b6000602082019050818103600083015261444a8161440e565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000614487601c83613817565b915061449282614451565b602082019050919050565b600060208201905081810360008301526144b68161447a565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b60006144f3601d83613817565b91506144fe826144bd565b602082019050919050565b60006020820190508181036000830152614522816144e6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061455f601383613817565b915061456a82614529565b602082019050919050565b6000602082019050818103600083015261458e81614552565b9050919050565b60006145a08261392a565b91506145ab8361392a565b9250828210156145be576145bd613ea7565b5b828203905092915050565b60006040820190506145de6000830185613a43565b6145eb6020830184613a43565b9392505050565b600081905092915050565b50565b600061460d6000836145f2565b9150614618826145fd565b600082019050919050565b600061462e82614600565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614694602183613817565b915061469f82614638565b604082019050919050565b600060208201905081810360008301526146c381614687565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614737816138fe565b92915050565b600060208284031215614753576147526138c7565b5b600061476184828501614728565b91505092915050565b6000819050919050565b600061478f61478a6147858461476a565b613d31565b61392a565b9050919050565b61479f81614774565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147da816138ec565b82525050565b60006147ec83836147d1565b60208301905092915050565b6000602082019050919050565b6000614810826147a5565b61481a81856147b0565b9350614825836147c1565b8060005b8381101561485657815161483d88826147e0565b9750614848836147f8565b925050600181019050614829565b5085935050505092915050565b600060a0820190506148786000830188613a43565b6148856020830187614796565b81810360408301526148978186614805565b90506148a66060830185613bb0565b6148b36080830184613a43565b9695505050505050565b600060c0820190506148d26000830189613bb0565b6148df6020830188613a43565b6148ec6040830187614796565b6148f96060830186614796565b6149066080830185613bb0565b61491360a0830184613a43565b979650505050505050565b60008151905061492d81613934565b92915050565b60008060006060848603121561494c5761494b6138c7565b5b600061495a8682870161491e565b935050602061496b8682870161491e565b925050604061497c8682870161491e565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220d26fe42a22f8bf77f92954bd61b3b72a0f0be6b1b46925480a81edac949678c064736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102345760003560e01c80638da5cb5b1161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e14610877578063e16830a8146108b4578063f2fde38b146108dd578063f5b3c3bf14610906578063f887ea40146109435761023b565b8063c0246668146107a1578063c16dd4a4146107ca578063c18bc195146107f3578063d212a69a1461081c578063d3f6a1571461084e5761023b565b80639fccce32116100f25780639fccce32146106ba578063a457c2d7146106e5578063a9059cbb14610722578063b88631151461075f578063b9e418e71461078a5761023b565b80638da5cb5b146105d35780638ea5220f146105fe57806395d89b411461062957806396880b17146106545780639e252f00146106915761023b565b80633265e846116101bc5780636ddd1713116101805780636ddd17131461050257806370a082311461052d578063715018a61461056a5780637571336a146105815780638cd4426d146105aa5761023b565b80633265e846146103f7578063395093511461042057806349bd5a5e1461045d5780634fbee19314610488578063555467a1146104c55761023b565b806318160ddd1161020357806318160ddd1461030e5780631a8145bb146103395780631f3fed8f1461036457806323b872dd1461038f578063313ce567146103cc5761023b565b806306fdde0314610240578063095ea7b31461026b57806310d5de53146102a857806311a582c3146102e55761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561096e565b60405161026291906138a5565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190613960565b610a00565b60405161029f91906139bb565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906139d6565b610a1e565b6040516102dc91906139bb565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613a03565b610a3e565b005b34801561031a57600080fd5b50610323610c0f565b6040516103309190613a52565b60405180910390f35b34801561034557600080fd5b5061034e610c19565b60405161035b9190613a52565b60405180910390f35b34801561037057600080fd5b50610379610c1f565b6040516103869190613a52565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190613a6d565b610c25565b6040516103c391906139bb565b60405180910390f35b3480156103d857600080fd5b506103e1610cfe565b6040516103ee9190613adc565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190613b23565b610d07565b005b34801561042c57600080fd5b5061044760048036038101906104429190613960565b610fe0565b60405161045491906139bb565b60405180910390f35b34801561046957600080fd5b50610472611093565b60405161047f9190613bbf565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa91906139d6565b6110b7565b6040516104bc91906139bb565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190613bda565b61110d565b6040516104f991906139bb565b60405180910390f35b34801561050e57600080fd5b506105176111b6565b60405161052491906139bb565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f91906139d6565b6111c9565b6040516105619190613a52565b60405180910390f35b34801561057657600080fd5b5061057f611211565b005b34801561058d57600080fd5b506105a860048036038101906105a39190613c33565b611369565b005b3480156105b657600080fd5b506105d160048036038101906105cc9190613960565b61145b565b005b3480156105df57600080fd5b506105e861158b565b6040516105f59190613bbf565b60405180910390f35b34801561060a57600080fd5b506106136115b5565b6040516106209190613bbf565b60405180910390f35b34801561063557600080fd5b5061063e6115db565b60405161064b91906138a5565b60405180910390f35b34801561066057600080fd5b5061067b600480360381019061067691906139d6565b61166d565b60405161068891906139bb565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190613bda565b61168d565b005b3480156106c657600080fd5b506106cf611775565b6040516106dc9190613a52565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190613960565b61177b565b60405161071991906139bb565b60405180910390f35b34801561072e57600080fd5b5061074960048036038101906107449190613960565b611848565b60405161075691906139bb565b60405180910390f35b34801561076b57600080fd5b50610774611866565b60405161078191906139bb565b60405180910390f35b34801561079657600080fd5b5061079f611879565b005b3480156107ad57600080fd5b506107c860048036038101906107c39190613c33565b61195b565b005b3480156107d657600080fd5b506107f160048036038101906107ec9190613c33565b611a4d565b005b3480156107ff57600080fd5b5061081a60048036038101906108159190613bda565b611bce565b005b34801561082857600080fd5b50610831611d03565b604051610845989796959493929190613c73565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613cf1565b611da1565b005b34801561088357600080fd5b5061089e60048036038101906108999190613cf1565b611ebe565b6040516108ab9190613a52565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190613c33565b611f45565b005b3480156108e957600080fd5b5061090460048036038101906108ff91906139d6565b612037565b005b34801561091257600080fd5b5061092d600480360381019061092891906139d6565b6121fe565b60405161093a91906139bb565b60405180910390f35b34801561094f57600080fd5b5061095861221e565b6040516109659190613d90565b60405180910390f35b60606003805461097d90613dda565b80601f01602080910402602001604051908101604052809291908181526020018280546109a990613dda565b80156109f65780601f106109cb576101008083540402835291602001916109f6565b820191906000526020600020905b8154815290600101906020018083116109d957829003601f168201915b5050505050905090565b6000610a14610a0d6122a0565b84846122a8565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b610a466122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc90613e58565b60405180910390fd5b6064610adf610c0f565b610ae99190613ed6565b6103e883610af5610c0f565b610aff9190613f07565b610b099190613ed6565b1015610b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4190613fd3565b60405180910390fd5b6064610b54610c0f565b610b5e9190613ed6565b6103e882610b6a610c0f565b610b749190613f07565b610b7e9190613ed6565b1015610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb690614065565b60405180910390fd5b6103e882610bcb610c0f565b610bd59190613f07565b610bdf9190613ed6565b6008819055506103e881610bf1610c0f565b610bfb9190613f07565b610c059190613ed6565b6009819055505050565b6000600254905090565b600f5481565b600e5481565b6000610c32848484612393565b610cf384610c3e6122a0565b610cee856040518060600160405280602881526020016149d260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ca46122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6122a8565b600190509392505050565b60006012905090565b610d0f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613e58565b60405180910390fd5b85600d60000160016101000a81548160ff021916908360ff16021790555084600d60000160036101000a81548160ff021916908360ff16021790555083600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff16610e3b9190614085565b610e459190614085565b600d60000160006101000a81548160ff021916908360ff16021790555082600d60000160056101000a81548160ff021916908360ff16021790555081600d60000160076101000a81548160ff021916908360ff16021790555080600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff16610eff9190614085565b610f099190614085565b600d60000160046101000a81548160ff021916908360ff160217905550601e600d60000160009054906101000a900460ff1660ff161115610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7690614108565b60405180910390fd5b601e600d60000160049054906101000a900460ff1660ff161115610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf90614108565b60405180910390fd5b505050505050565b6000611089610fed6122a0565b846110848560016000610ffe6122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224290919063ffffffff16565b6122a8565b6001905092915050565b7f000000000000000000000000ae30f13675a1b58c313663f066c43e6190457a7681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006111176122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d90613e58565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112196122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f90613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113716122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f790613e58565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6114636122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990613e58565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61151661158b565b836040518363ffffffff1660e01b8152600401611534929190614128565b602060405180830381600087803b15801561154e57600080fd5b505af1158015611562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115869190614166565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546115ea90613dda565b80601f016020809104026020016040519081016040528092919081815260200182805461161690613dda565b80156116635780601f1061163857610100808354040283529160200191611663565b820191906000526020600020905b81548152906001019060200180831161164657829003601f168201915b5050505050905090565b60146020528060005260406000206000915054906101000a900460ff1681565b6116956122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613e58565b60405180910390fd5b61172c61158b565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611771573d6000803e3d6000fd5b5050565b60105481565b600061183e6117886122a0565b846118398560405180606001604052806025815260200161498760259139600160006117b26122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6122a8565b6001905092915050565b600061185c6118556122a0565b8484612393565b6001905092915050565b600c60029054906101000a900460ff1681565b6118816122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790613e58565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055506002436119539190614193565b601181905550565b6119636122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e990613e58565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611a556122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90613e58565b60405180910390fd5b7f000000000000000000000000ae30f13675a1b58c313663f066c43e6190457a7673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90614235565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611bd66122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5c90613e58565b60405180910390fd5b6064611c6f610c0f565b611c799190613ed6565b6103e882611c85610c0f565b611c8f9190613f07565b611c999190613ed6565b1015611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd1906142c7565b60405180910390fd5b6103e881611ce6610c0f565b611cf09190613f07565b611cfa9190613ed6565b600a8190555050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b611da96122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f90613e58565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f4d6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd390613e58565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61203f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590614359565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60008082846122519190614193565b905083811015612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d906143c5565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123869190613a52565b60405180910390a3505050565b60008114156123ad576123a883836000612ecd565b612e64565b6123b561158b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561242357506123f361158b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561243c5750600c60029054906101000a900460ff16155b156127c257600c60009054906101000a900460ff1661253657601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124f65750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252c90614431565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125d95750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561262857600854811115612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a9061449d565b60405180910390fd5b612717565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126cb5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561271657600954811115612715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270c90614509565b60405180910390fd5b5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127c157600a54612774836111c9565b8261277f9190614193565b11156127c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b790614575565b60405180910390fd5b5b5b60006127cd306111c9565b90506000600b5482101590508080156127f25750600c60019054906101000a900460ff165b801561280b5750600c60029054906101000a900460ff16155b80156128605750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156128b65750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561290c5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612950576001600c60026101000a81548160ff021916908315150217905550612934613077565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a065750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a1057600090505b8015612e55576000601154431015612ab257612a496064612a3b60638861336590919063ffffffff16565b6133e090919063ffffffff16565b90506063605e82612a5a9190613f07565b612a649190613ed6565b600e6000828254612a759190614193565b925050819055506063600582612a8b9190613f07565b612a959190613ed6565b60106000828254612aa69190614193565b92505081905550612e30565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b2057506000600d60000160049054906101000a900460ff1660ff16115b15612c7257612b606064612b52600d60000160049054906101000a900460ff1660ff168861336590919063ffffffff16565b6133e090919063ffffffff16565b9050600d60000160049054906101000a900460ff1660ff16600d60000160079054906101000a900460ff1660ff1682612b999190613f07565b612ba39190613ed6565b600f6000828254612bb49190614193565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160059054906101000a900460ff1660ff1682612bf29190613f07565b612bfc9190613ed6565b600e6000828254612c0d9190614193565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160069054906101000a900460ff1660ff1682612c4b9190613f07565b612c559190613ed6565b60106000828254612c669190614193565b92505081905550612e2f565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ce057506000600d60000160009054906101000a900460ff1660ff16115b15612e2e57612d206064612d12600d60000160009054906101000a900460ff1660ff168861336590919063ffffffff16565b6133e090919063ffffffff16565b9050600d60000160009054906101000a900460ff1660ff16600d60000160039054906101000a900460ff1660ff1682612d599190613f07565b612d639190613ed6565b600f6000828254612d749190614193565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160019054906101000a900460ff1660ff1682612db29190613f07565b612dbc9190613ed6565b600e6000828254612dcd9190614193565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160029054906101000a900460ff1660ff1682612e0b9190613f07565b612e159190613ed6565b60106000828254612e269190614193565b925050819055505b5b5b6000811115612e4557612e44873083612ecd565b5b8085612e519190614595565b9450505b612e60868686612ecd565b5050505b505050565b6000838311158290612eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea891906138a5565b60405180910390fd5b5060008385612ec09190614595565b9050809150509392505050565b612f38816040518060600160405280602681526020016149ac602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fcb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161306a9190613a52565b60405180910390a3505050565b6000613082306111c9565b90506000601054600e54600f546130999190614193565b6130a39190614193565b90506000808314806130b55750600082145b156130c257505050613363565b6014600b546130d19190613f07565b8311156130ea576014600b546130e79190613f07565b92505b6000600283600f54866130fd9190613f07565b6131079190613ed6565b6131119190613ed6565b90506000613128828661342a90919063ffffffff16565b9050600047905061313882613474565b600061314d824761342a90919063ffffffff16565b905060006131788761316a600e548561336590919063ffffffff16565b6133e090919063ffffffff16565b905060006131a3886131956010548661336590919063ffffffff16565b6133e090919063ffffffff16565b9050600081836131b39190614193565b846131be9190614595565b90506000600f819055506000600e8190555060006010819055506000871180156131e85750600081115b15613231576131f787826136c0565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148686826040516132289291906145c9565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683476132769190614595565b60405161328290614623565b60006040518083038185875af1925050503d80600081146132bf576040519150601f19603f3d011682016040523d82523d6000602084013e6132c4565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161331090614623565b60006040518083038185875af1925050503d806000811461334d576040519150601f19603f3d011682016040523d82523d6000602084013e613352565b606091505b505080985050505050505050505050505b565b60008083141561337857600090506133da565b600082846133869190613f07565b90508284826133959190613ed6565b146133d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cc906146aa565b60405180910390fd5b809150505b92915050565b600061342283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137a9565b905092915050565b600061346c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e69565b905092915050565b6000600267ffffffffffffffff811115613491576134906146ca565b5b6040519080825280602002602001820160405280156134bf5781602001602082028036833780820191505090505b50905030816000815181106134d7576134d66146f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561357757600080fd5b505afa15801561358b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135af919061473d565b816001815181106135c3576135c26146f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613628307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846122a8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161368a959493929190614863565b600060405180830381600087803b1580156136a457600080fd5b505af11580156136b8573d6000803e3d6000fd5b505050505050565b6136eb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846122a8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613750969594939291906148bd565b6060604051808303818588803b15801561376957600080fd5b505af115801561377d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137a29190614933565b5050505050565b600080831182906137f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e791906138a5565b60405180910390fd5b50600083856137ff9190613ed6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561384657808201518184015260208101905061382b565b83811115613855576000848401525b50505050565b6000601f19601f8301169050919050565b60006138778261380c565b6138818185613817565b9350613891818560208601613828565b61389a8161385b565b840191505092915050565b600060208201905081810360008301526138bf818461386c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138f7826138cc565b9050919050565b613907816138ec565b811461391257600080fd5b50565b600081359050613924816138fe565b92915050565b6000819050919050565b61393d8161392a565b811461394857600080fd5b50565b60008135905061395a81613934565b92915050565b60008060408385031215613977576139766138c7565b5b600061398585828601613915565b92505060206139968582860161394b565b9150509250929050565b60008115159050919050565b6139b5816139a0565b82525050565b60006020820190506139d060008301846139ac565b92915050565b6000602082840312156139ec576139eb6138c7565b5b60006139fa84828501613915565b91505092915050565b60008060408385031215613a1a57613a196138c7565b5b6000613a288582860161394b565b9250506020613a398582860161394b565b9150509250929050565b613a4c8161392a565b82525050565b6000602082019050613a676000830184613a43565b92915050565b600080600060608486031215613a8657613a856138c7565b5b6000613a9486828701613915565b9350506020613aa586828701613915565b9250506040613ab68682870161394b565b9150509250925092565b600060ff82169050919050565b613ad681613ac0565b82525050565b6000602082019050613af16000830184613acd565b92915050565b613b0081613ac0565b8114613b0b57600080fd5b50565b600081359050613b1d81613af7565b92915050565b60008060008060008060c08789031215613b4057613b3f6138c7565b5b6000613b4e89828a01613b0e565b9650506020613b5f89828a01613b0e565b9550506040613b7089828a01613b0e565b9450506060613b8189828a01613b0e565b9350506080613b9289828a01613b0e565b92505060a0613ba389828a01613b0e565b9150509295509295509295565b613bb9816138ec565b82525050565b6000602082019050613bd46000830184613bb0565b92915050565b600060208284031215613bf057613bef6138c7565b5b6000613bfe8482850161394b565b91505092915050565b613c10816139a0565b8114613c1b57600080fd5b50565b600081359050613c2d81613c07565b92915050565b60008060408385031215613c4a57613c496138c7565b5b6000613c5885828601613915565b9250506020613c6985828601613c1e565b9150509250929050565b600061010082019050613c89600083018b613acd565b613c96602083018a613acd565b613ca36040830189613acd565b613cb06060830188613acd565b613cbd6080830187613acd565b613cca60a0830186613acd565b613cd760c0830185613acd565b613ce460e0830184613acd565b9998505050505050505050565b60008060408385031215613d0857613d076138c7565b5b6000613d1685828601613915565b9250506020613d2785828601613915565b9150509250929050565b6000819050919050565b6000613d56613d51613d4c846138cc565b613d31565b6138cc565b9050919050565b6000613d6882613d3b565b9050919050565b6000613d7a82613d5d565b9050919050565b613d8a81613d6f565b82525050565b6000602082019050613da56000830184613d81565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613df257607f821691505b60208210811415613e0657613e05613dab565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e42602083613817565b9150613e4d82613e0c565b602082019050919050565b60006020820190508181036000830152613e7181613e35565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ee18261392a565b9150613eec8361392a565b925082613efc57613efb613e78565b5b828204905092915050565b6000613f128261392a565b9150613f1d8361392a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f5657613f55613ea7565b5b828202905092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b6000613fbd602383613817565b9150613fc882613f61565b604082019050919050565b60006020820190508181036000830152613fec81613fb0565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b600061404f602483613817565b915061405a82613ff3565b604082019050919050565b6000602082019050818103600083015261407e81614042565b9050919050565b600061409082613ac0565b915061409b83613ac0565b92508260ff038211156140b1576140b0613ea7565b5b828201905092915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b60006140f2601d83613817565b91506140fd826140bc565b602082019050919050565b60006020820190508181036000830152614121816140e5565b9050919050565b600060408201905061413d6000830185613bb0565b61414a6020830184613a43565b9392505050565b60008151905061416081613c07565b92915050565b60006020828403121561417c5761417b6138c7565b5b600061418a84828501614151565b91505092915050565b600061419e8261392a565b91506141a98361392a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141de576141dd613ea7565b5b828201905092915050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b600061421f601783613817565b915061422a826141e9565b602082019050919050565b6000602082019050818103600083015261424e81614212565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006142b1602283613817565b91506142bc82614255565b604082019050919050565b600060208201905081810360008301526142e0816142a4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614343602683613817565b915061434e826142e7565b604082019050919050565b6000602082019050818103600083015261437281614336565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006143af601b83613817565b91506143ba82614379565b602082019050919050565b600060208201905081810360008301526143de816143a2565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061441b601683613817565b9150614426826143e5565b602082019050919050565b6000602082019050818103600083015261444a8161440e565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000614487601c83613817565b915061449282614451565b602082019050919050565b600060208201905081810360008301526144b68161447a565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b60006144f3601d83613817565b91506144fe826144bd565b602082019050919050565b60006020820190508181036000830152614522816144e6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061455f601383613817565b915061456a82614529565b602082019050919050565b6000602082019050818103600083015261458e81614552565b9050919050565b60006145a08261392a565b91506145ab8361392a565b9250828210156145be576145bd613ea7565b5b828203905092915050565b60006040820190506145de6000830185613a43565b6145eb6020830184613a43565b9392505050565b600081905092915050565b50565b600061460d6000836145f2565b9150614618826145fd565b600082019050919050565b600061462e82614600565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614694602183613817565b915061469f82614638565b604082019050919050565b600060208201905081810360008301526146c381614687565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614737816138fe565b92915050565b600060208284031215614753576147526138c7565b5b600061476184828501614728565b91505092915050565b6000819050919050565b600061478f61478a6147858461476a565b613d31565b61392a565b9050919050565b61479f81614774565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147da816138ec565b82525050565b60006147ec83836147d1565b60208301905092915050565b6000602082019050919050565b6000614810826147a5565b61481a81856147b0565b9350614825836147c1565b8060005b8381101561485657815161483d88826147e0565b9750614848836147f8565b925050600181019050614829565b5085935050505092915050565b600060a0820190506148786000830188613a43565b6148856020830187614796565b81810360408301526148978186614805565b90506148a66060830185613bb0565b6148b36080830184613a43565b9695505050505050565b600060c0820190506148d26000830189613bb0565b6148df6020830188613a43565b6148ec6040830187614796565b6148f96060830186614796565b6149066080830185613bb0565b61491360a0830184613a43565b979650505050505050565b60008151905061492d81613934565b92915050565b60008060006060848603121561494c5761494b6138c7565b5b600061495a8682870161491e565b935050602061496b8682870161491e565b925050604061497c8682870161491e565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220d26fe42a22f8bf77f92954bd61b3b72a0f0be6b1b46925480a81edac949678c064736f6c63430008090033

Deployed Bytecode Sourcemap

13947:12931:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1901:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2848:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15319:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18333:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2235:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15103:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15063;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3030:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2130:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19080:827;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3398:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14074:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20986:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18165:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14446:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2356:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6922:148;;;;;;;;;;;;;:::i;:::-;;20209:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20666:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6618:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14141:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2013:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15389:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20546:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15143:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3629:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2496:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14484:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17948:143;;;;;;;;;;;;;:::i;:::-;;19919:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20363:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18801:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14791:251;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;20809:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2684:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20057:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7084:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15605:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14025;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1901:99;1954:13;1987:5;1980:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1901:99;:::o;2848:168::-;2930:4;2947:39;2956:12;:10;:12::i;:::-;2970:7;2979:6;2947:8;:39::i;:::-;3004:4;2997:11;;2848:168;;;;:::o;15319:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;18333:458::-;6839:12;:10;:12::i;:::-;6829:22;;:6;;;;;;;;;;;:22;;;6821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18495:3:::1;18479:13;:11;:13::i;:::-;:19;;;;:::i;:::-;18469:4;18456:9;18440:13;:11;:13::i;:::-;:25;;;;:::i;:::-;18439:34;;;;:::i;:::-;18438:61;;18430:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;18616:3;18600:13;:11;:13::i;:::-;:19;;;;:::i;:::-;18590:4;18576:10;18560:13;:11;:13::i;:::-;:26;;;;:::i;:::-;18559:35;;;;:::i;:::-;18558:62;;18550:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;18717:4;18704:9;18688:13;:11;:13::i;:::-;:25;;;;:::i;:::-;18687:34;;;;:::i;:::-;18672:12;:49;;;;18779:4;18765:10;18749:13;:11;:13::i;:::-;:26;;;;:::i;:::-;18748:35;;;;:::i;:::-;18732:13;:51;;;;18333:458:::0;;:::o;2235:107::-;2295:7;2322:12;;2315:19;;2235:107;:::o;15103:33::-;;;;:::o;15063:::-;;;;:::o;3030:354::-;3169:4;3186:36;3196:6;3204:9;3215:6;3186:9;:36::i;:::-;3233:121;3242:6;3250:12;:10;:12::i;:::-;3264:89;3302:6;3264:89;;;;;;;;;;;;;;;;;:11;:19;3276:6;3264:19;;;;;;;;;;;;;;;:33;3284:12;:10;:12::i;:::-;3264:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;3233:8;:121::i;:::-;3372:4;3365:11;;3030:354;;;;;:::o;2130:92::-;2187:5;2212:2;2205:9;;2130:92;:::o;19080:827::-;6839:12;:10;:12::i;:::-;6829:22;;:6;;;;;;;;;;;:22;;;6821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19285:16:::1;19261:5;:21;;;:40;;;;;;;;;;;;;;;;;;19336:16;19312:5;:21;;;:40;;;;;;;;;;;;;;;;;;19381:10;19363:5;:15;;;:28;;;;;;;;;;;;;;;;;;19471:5;:15;;;;;;;;;;;;19447:5;:21;;;;;;;;;;;;19423:5;:21;;;;;;;;;;;;:45;;;;:::i;:::-;:63;;;;:::i;:::-;19402:5;:18;;;:84;;;;;;;;;;;;;;;;;;19524:17;19499:5;:22;;;:42;;;;;;;;;;;;;;;;;;19577:17;19552:5;:22;;;:42;;;;;;;;;;;;;;;;;;19624:11;19605:5;:16;;;:30;;;;;;;;;;;;;;;;;;19718:5;:16;;;;;;;;;;;;19693:5;:22;;;;;;;;;;;;19668:5;:22;;;;;;;;;;;;:47;;;;:::i;:::-;:66;;;;:::i;:::-;19646:5;:19;;;:88;;;;;;;;;;;;;;;;;;19775:2;19753:5;:18;;;;;;;;;;;;:24;;;;19745:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;19856:2;19833:5;:19;;;;;;;;;;;;:25;;;;19825:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19080:827:::0;;;;;;:::o;3398:217::-;3485:4;3502:83;3511:12;:10;:12::i;:::-;3525:7;3534:50;3573:10;3534:11;:25;3546:12;:10;:12::i;:::-;3534:25;;;;;;;;;;;;;;;:34;3560:7;3534:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;3502:8;:83::i;:::-;3603:4;3596:11;;3398:217;;;;:::o;14074:38::-;;;:::o;20986:125::-;21051:4;21075:19;:28;21095:7;21075:28;;;;;;;;;;;;;;;;;;;;;;;;;21068:35;;20986:125;;;:::o;18165:158::-;18246:4;6839:12;:10;:12::i;:::-;6829:22;;:6;;;;;;;;;;;:22;;;6821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18284:9:::1;18262:19;:31;;;;18311:4;18304:11;;18165:158:::0;;;:::o;14446:31::-;;;;;;;;;;;;;:::o;2356:126::-;2429:7;2456:9;:18;2466:7;2456:18;;;;;;;;;;;;;;;;2449:25;;2356:126;;;:::o;6922:148::-;6839:12;:10;:12::i;:::-;6829:22;;:6;;;;;;;;;;;:22;;;6821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7029:1:::1;6992:40;;7013:6;;;;;;;;;;;6992:40;;;;;;;;;;;;7060:1;7043:6;;:19;;;;;;;;;;;;;;;;;;6922:148::o:0;20209:144::-;6839:12;:10;:12::i;:::-;6829:22;;:6;;;;;;;;;;;:22;;;6821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20341:4:::1;20299:31;:39;20331:6;20299:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20209:144:::0;;:::o;20666:135::-;6839:12;:10;:12::i;:::-;6829:22;;:6;;;;;;;;;;;:22;;;6821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20758:8:::1;20751:25;;;20777:7;:5;:7::i;:::-;20786:6;20751:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20666:135:::0;;:::o;6618:78::-;6655:7;6682:6;;;;;;;;;;;6675:13;;6618:78;:::o;14141:25::-;;;;;;;;;;;;;:::o;2013:103::-;2068:13;2101:7;2094:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2013:103;:::o;15389:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;20546:112::-;6839:12;:10;:12::i;:::-;6829:22;;:6;;;;;;;;;;;:22;;;6821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20622:7:::1;:5;:7::i;:::-;20614:25;;:36;20640:9;20614:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;20546:112:::0;:::o;15143:27::-;;;;:::o;3629:268::-;3721:4;3738:129;3747:12;:10;:12::i;:::-;3761:7;3770:96;3809:15;3770:96;;;;;;;;;;;;;;;;;:11;:25;3782:12;:10;:12::i;:::-;3770:25;;;;;;;;;;;;;;;:34;3796:7;3770:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;3738:8;:129::i;:::-;3885:4;3878:11;;3629:268;;;;:::o;2496:174::-;2581:4;2598:42;2608:12;:10;:12::i;:::-;2622:9;2633:6;2598:9;:42::i;:::-;2658:4;2651:11;;2496:174;;;;:::o;14484:22::-;;;;;;;;;;;;;:::o;17948:143::-;6839:12;:10;:12::i;:::-;6829:22;;:6;;;;;;;;;;;:22;;;6821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18013:4:::1;18001:9;;:16;;;;;;;;;;;;;;;;;;18042:4;18028:11;;:18;;;;;;;;;;;;;;;;;;18082:1;18067:12;:16;;;;:::i;:::-;18057:7;:26;;;;17948:143::o:0;19919:132::-;6839:12;:10;:12::i;:::-;6829:22;;:6;;;;;;;;;;;:22;;;6821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20035:8:::1;20004:19;:28;20024:7;20004:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19919:132:::0;;:::o;20363:177::-;6839:12;:10;:12::i;:::-;6829:22;;:6;;;;;;;;;;;:22;;;6821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20456:13:::1;20448:21;;:4;:21;;;;20440:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20527:5;20508:10;:16;20519:4;20508:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;20363:177:::0;;:::o;18801:271::-;6839:12;:10;:12::i;:::-;6829:22;;:6;;;;;;;;;;;:22;;;6821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18954:3:::1;18938:13;:11;:13::i;:::-;:19;;;;:::i;:::-;18928:4;18911:13;18895;:11;:13::i;:::-;:29;;;;:::i;:::-;18894:38;;;;:::i;:::-;18893:65;;18885:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;19060:4;19043:13;19027;:11;:13::i;:::-;:29;;;;:::i;:::-;19026:38;;;;:::i;:::-;19008:15;:56;;;;18801:271:::0;:::o;14791:251::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20809:169::-;6839:12;:10;:12::i;:::-;6829:22;;:6;;;;;;;;;;;:22;;;6821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20921:16:::1;20903:15;;:34;;;;;;;;;;;;;;;;;;20960:10;20948:9;;:22;;;;;;;;;;;;;;;;;;20809:169:::0;;:::o;2684:150::-;2772:7;2799:11;:18;2811:5;2799:18;;;;;;;;;;;;;;;:27;2818:7;2799:27;;;;;;;;;;;;;;;;2792:34;;2684:150;;;;:::o;20057:146::-;6839:12;:10;:12::i;:::-;6829:22;;:6;;;;;;;;;;;:22;;;6821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20187:8:::1;20149:26;:35;20176:7;20149:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20057:146:::0;;:::o;7084:244::-;6839:12;:10;:12::i;:::-;6829:22;;:6;;;;;;;;;;;:22;;;6821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7193:1:::1;7173:22;;:8;:22;;;;7165:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7283:8;7254:38;;7275:6;;;;;;;;;;;7254:38;;;;;;;;;;;;7312:8;7303:6;;:17;;;;;;;;;;;;;;;;;;7084:244:::0;:::o;15605:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;14025:::-;;;:::o;4883:180::-;4940:7;4960:9;4976:1;4972;:5;;;;:::i;:::-;4960:17;;5001:1;4996;:6;;4988:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5054:1;5047:8;;;4883:180;;;;:::o;1333:97::-;1385:7;1412:10;1405:17;;1333:97;:::o;4618:220::-;4776:6;4746:11;:18;4758:5;4746:18;;;;;;;;;;;;;;;:27;4765:7;4746:27;;;;;;;;;;;;;;;:36;;;;4814:7;4798:32;;4807:5;4798:32;;;4823:6;4798:32;;;;;;:::i;:::-;;;;;;;;4618:220;;;:::o;21119:3261::-;21286:1;21276:6;:11;21272:102;;;21304:37;21320:6;21328:9;21339:1;21304:15;:37::i;:::-;21356:7;;21272:102;21414:7;:5;:7::i;:::-;21404:17;;:6;:17;;;;:54;;;;;21451:7;:5;:7::i;:::-;21438:20;;:9;:20;;;;21404:54;:82;;;;;21476:10;;;;;;;;;;;21475:11;21404:82;21386:849;;;21520:9;;;;;;;;;;;21515:147;;21558:19;:27;21578:6;21558:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;21589:19;:30;21609:9;21589:30;;;;;;;;;;;;;;;;;;;;;;;;;21558:61;21550:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;21515:147;21680:10;:18;21691:6;21680:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;21703:31;:42;21735:9;21703:42;;;;;;;;;;;;;;;;;;;;;;;;;21702:43;21680:65;21676:360;;;21784:12;;21774:6;:22;;21766:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21676:360;;;21869:10;:21;21880:9;21869:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;21895:31;:39;21927:6;21895:39;;;;;;;;;;;;;;;;;;;;;;;;;21894:40;21869:65;21865:171;;;21973:13;;21963:6;:23;;21955:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21865:171;21676:360;22057:26;:37;22084:9;22057:37;;;;;;;;;;;;;;;;;;;;;;;;;22052:159;;22156:15;;22132:20;22142:9;22132;:20::i;:::-;22123:6;:29;;;;:::i;:::-;:48;;22115:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;22052:159;21386:849;22261:28;22292:24;22310:4;22292:9;:24::i;:::-;22261:55;;22330:12;22369:19;;22345:20;:43;;22330:58;;22419:7;:35;;;;;22443:11;;;;;;;;;;;22419:35;:63;;;;;22472:10;;;;;;;;;;;22471:11;22419:63;:101;;;;;22499:10;:21;22510:9;22499:21;;;;;;;;;;;;;;;;;;;;;;;;;22419:101;:146;;;;;22538:19;:27;22558:6;22538:27;;;;;;;;;;;;;;;;;;;;;;;;;22537:28;22419:146;:194;;;;;22583:19;:30;22603:9;22583:30;;;;;;;;;;;;;;;;;;;;;;;;;22582:31;22419:194;22401:326;;;22653:4;22640:10;;:17;;;;;;;;;;;;;;;;;;22672:10;:8;:10::i;:::-;22710:5;22697:10;;:18;;;;;;;;;;;;;;;;;;22401:326;22740:12;22756:10;;;;;;;;;;;22755:11;22740:26;;22868:19;:27;22888:6;22868:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;22899:19;:30;22919:9;22899:30;;;;;;;;;;;;;;;;;;;;;;;;;22868:61;22864:109;;;22956:5;22946:15;;22864:109;23074:7;23070:1248;;;23098:12;23147:7;;23132:12;:22;23129:1036;;;23182:23;23201:3;23182:14;23193:2;23182:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;23175:30;;23260:2;23254;23247:4;:9;;;;:::i;:::-;23246:16;;;;:::i;:::-;23224:18;;:38;;;;;;;:::i;:::-;;;;;;;;23310:2;23305:1;23298:4;:8;;;;:::i;:::-;23297:15;;;;:::i;:::-;23281:12;;:31;;;;;;;:::i;:::-;;;;;;;;23129:1036;;;23338:10;:21;23349:9;23338:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;23385:1;23363:5;:19;;;;;;;;;;;;:23;;;23338:48;23334:831;;;23414:40;23450:3;23414:31;23425:5;:19;;;;;;;;;;;;23414:31;;:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;23407:47;;23527:5;:19;;;;;;;;;;;;23495:51;;23502:5;:22;;;;;;;;;;;;23495:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;23473:18;;:73;;;;;;;:::i;:::-;;;;;;;;23619:5;:19;;;;;;;;;;;;23587:51;;23594:5;:22;;;;;;;;;;;;23587:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;23565:18;;:73;;;;;;;:::i;:::-;;;;;;;;23699:5;:19;;;;;;;;;;;;23673:45;;23680:5;:16;;;;;;;;;;;;23673:23;;:4;:23;;;;:::i;:::-;:45;;;;:::i;:::-;23657:12;;:61;;;;;;;:::i;:::-;;;;;;;;23334:831;;;23780:10;:18;23791:6;23780:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;23823:1;23802:5;:18;;;;;;;;;;;;:22;;;23780:44;23776:389;;;23852:39;23887:3;23852:30;23863:5;:18;;;;;;;;;;;;23852:30;;:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;23845:46;;23963:5;:18;;;;;;;;;;;;23932:49;;23939:5;:21;;;;;;;;;;;;23932:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;23910:18;;:71;;;;;;;:::i;:::-;;;;;;;;24053:5;:18;;;;;;;;;;;;24022:49;;24029:5;:21;;;;;;;;;;;;24022:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;24000:18;;:71;;;;;;;:::i;:::-;;;;;;;;24131:5;:18;;;;;;;;;;;;24106:43;;24113:5;:15;;;;;;;;;;;;24106:22;;:4;:22;;;;:::i;:::-;:43;;;;:::i;:::-;24090:12;;:59;;;;;;;:::i;:::-;;;;;;;;23776:389;23334:831;23129:1036;24192:1;24185:4;:8;24181:93;;;24214:44;24230:6;24246:4;24253;24214:15;:44::i;:::-;24181:93;24300:4;24290:14;;;;;:::i;:::-;;;23083:1235;23070:1248;24330:42;24346:6;24354:9;24365:6;24330:15;:42::i;:::-;21251:3129;;;21119:3261;;;;:::o;5224:191::-;5309:7;5342:1;5337;:6;;5345:12;5329:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5369:9;5385:1;5381;:5;;;;:::i;:::-;5369:17;;5406:1;5399:8;;;5224:191;;;;;:::o;3911:358::-;4073:71;4095:6;4073:71;;;;;;;;;;;;;;;;;:9;:17;4083:6;4073:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;4053:9;:17;4063:6;4053:17;;;;;;;;;;;;;;;:91;;;;4178:32;4203:6;4178:9;:20;4188:9;4178:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4155:9;:20;4165:9;4155:20;;;;;;;;;;;;;;;:55;;;;4243:9;4226:35;;4235:6;4226:35;;;4254:6;4226:35;;;;;;:::i;:::-;;;;;;;;3911:358;;;:::o;25308:1565::-;25347:28;25378:24;25396:4;25378:9;:24::i;:::-;25347:55;;25413:14;25472:12;;25451:18;;25430;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;25413:71;;25495:12;25548:1;25524:20;:25;:40;;;;25563:1;25553:6;:11;25524:40;25520:57;;;25568:7;;;;;25520:57;25638:2;25616:19;;:24;;;;:::i;:::-;25593:20;:47;25589:127;;;25702:2;25680:19;;:24;;;;:::i;:::-;25657:47;;25589:127;25777:23;25856:1;25847:6;25826:18;;25803:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;25777:80;;25868:26;25897:41;25922:15;25897:20;:24;;:41;;;;:::i;:::-;25868:70;;25952:25;25980:21;25952:49;;26014:36;26031:18;26014:16;:36::i;:::-;26065:18;26086:44;26112:17;26086:21;:25;;:44;;;;:::i;:::-;26065:65;;26144:23;26170:46;26209:6;26170:34;26185:18;;26170:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;26144:72;;26227:17;26247:40;26280:6;26247:28;26262:12;;26247:10;:14;;:28;;;;:::i;:::-;:32;;:40;;;;:::i;:::-;26227:60;;26298:23;26356:9;26338:15;:27;;;;:::i;:::-;26324:10;:42;;;;:::i;:::-;26298:68;;26402:1;26381:18;:22;;;;26435:1;26414:18;:22;;;;26462:1;26447:12;:16;;;;26500:1;26482:15;:19;:42;;;;;26523:1;26505:15;:19;26482:42;26478:192;;;26541:46;26554:15;26571;26541:12;:46::i;:::-;26607:51;26622:18;26642:15;26607:51;;;;;;;:::i;:::-;;;;;;;;26478:192;26703:9;;;;;;;;;;;26695:23;;26752:15;26728:21;:39;;;;:::i;:::-;26695:80;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26682:93;;;;;26807:15;;;;;;;;;;;26799:29;;26837:21;26799:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26786:79;;;;;25336:1537;;;;;;;;;;25308:1565;:::o;5423:256::-;5480:7;5515:1;5510;:6;5506:47;;;5540:1;5533:8;;;;5506:47;5566:9;5582:1;5578;:5;;;;:::i;:::-;5566:17;;5611:1;5606;5602;:5;;;;:::i;:::-;:10;5594:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5670:1;5663:8;;;5423:256;;;;;:::o;5690:131::-;5747:7;5774:39;5778:1;5781;5774:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5767:46;;5690:131;;;;:::o;5076:135::-;5133:7;5160:43;5164:1;5167;5160:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5153:50;;5076:135;;;;:::o;24388:554::-;24512:21;24550:1;24536:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24512:40;;24581:4;24563;24568:1;24563:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24607:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24597:4;24602:1;24597:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24633:49;24650:4;24665:6;24674:7;24633:8;:49::i;:::-;24721:6;:57;;;24793:7;24815:1;24859:4;24886;24906:15;24721:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24439:503;24388:554;:::o;24950:350::-;25094:49;25111:4;25126:6;25135:7;25094:8;:49::i;:::-;25186:6;:22;;;25217:9;25238:4;25245:7;25254:1;25257;25269:4;25276:15;25186:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24950:350;;:::o;5833:277::-;5918:7;5950:1;5946;:5;5953:12;5938:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5977:9;5993:1;5989;:5;;;;:::i;:::-;5977:17;;6101:1;6094:8;;;5833: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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:474::-;3897:6;3905;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;4207:2;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4178:118;3829:474;;;;;:::o;4309:118::-;4396:24;4414:5;4396:24;:::i;:::-;4391:3;4384:37;4309:118;;:::o;4433:222::-;4526:4;4564:2;4553:9;4549:18;4541:26;;4577:71;4645:1;4634:9;4630:17;4621:6;4577:71;:::i;:::-;4433:222;;;;:::o;4661:619::-;4738:6;4746;4754;4803:2;4791:9;4782:7;4778:23;4774:32;4771:119;;;4809:79;;:::i;:::-;4771:119;4929:1;4954:53;4999:7;4990:6;4979:9;4975:22;4954:53;:::i;:::-;4944:63;;4900:117;5056:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5027:118;5184:2;5210:53;5255:7;5246:6;5235:9;5231:22;5210:53;:::i;:::-;5200:63;;5155:118;4661:619;;;;;:::o;5286:86::-;5321:7;5361:4;5354:5;5350:16;5339:27;;5286:86;;;:::o;5378:112::-;5461:22;5477:5;5461:22;:::i;:::-;5456:3;5449:35;5378:112;;:::o;5496:214::-;5585:4;5623:2;5612:9;5608:18;5600:26;;5636:67;5700:1;5689:9;5685:17;5676:6;5636:67;:::i;:::-;5496:214;;;;:::o;5716:118::-;5787:22;5803:5;5787:22;:::i;:::-;5780:5;5777:33;5767:61;;5824:1;5821;5814:12;5767:61;5716:118;:::o;5840:135::-;5884:5;5922:6;5909:20;5900:29;;5938:31;5963:5;5938:31;:::i;:::-;5840:135;;;;:::o;5981:1033::-;6073:6;6081;6089;6097;6105;6113;6162:3;6150:9;6141:7;6137:23;6133:33;6130:120;;;6169:79;;:::i;:::-;6130:120;6289:1;6314:51;6357:7;6348:6;6337:9;6333:22;6314:51;:::i;:::-;6304:61;;6260:115;6414:2;6440:51;6483:7;6474:6;6463:9;6459:22;6440:51;:::i;:::-;6430:61;;6385:116;6540:2;6566:51;6609:7;6600:6;6589:9;6585:22;6566:51;:::i;:::-;6556:61;;6511:116;6666:2;6692:51;6735:7;6726:6;6715:9;6711:22;6692:51;:::i;:::-;6682:61;;6637:116;6792:3;6819:51;6862:7;6853:6;6842:9;6838:22;6819:51;:::i;:::-;6809:61;;6763:117;6919:3;6946:51;6989:7;6980:6;6969:9;6965:22;6946:51;:::i;:::-;6936:61;;6890:117;5981:1033;;;;;;;;:::o;7020:118::-;7107:24;7125:5;7107:24;:::i;:::-;7102:3;7095:37;7020:118;;:::o;7144:222::-;7237:4;7275:2;7264:9;7260:18;7252:26;;7288:71;7356:1;7345:9;7341:17;7332:6;7288:71;:::i;:::-;7144:222;;;;:::o;7372:329::-;7431:6;7480:2;7468:9;7459:7;7455:23;7451:32;7448:119;;;7486:79;;:::i;:::-;7448:119;7606:1;7631:53;7676:7;7667:6;7656:9;7652:22;7631:53;:::i;:::-;7621:63;;7577:117;7372:329;;;;:::o;7707:116::-;7777:21;7792:5;7777:21;:::i;:::-;7770:5;7767:32;7757:60;;7813:1;7810;7803:12;7757:60;7707:116;:::o;7829:133::-;7872:5;7910:6;7897:20;7888:29;;7926:30;7950:5;7926:30;:::i;:::-;7829:133;;;;:::o;7968:468::-;8033:6;8041;8090:2;8078:9;8069:7;8065:23;8061:32;8058:119;;;8096:79;;:::i;:::-;8058:119;8216:1;8241:53;8286:7;8277:6;8266:9;8262:22;8241:53;:::i;:::-;8231:63;;8187:117;8343:2;8369:50;8411:7;8402:6;8391:9;8387:22;8369:50;:::i;:::-;8359:60;;8314:115;7968:468;;;;;:::o;8442:933::-;8699:4;8737:3;8726:9;8722:19;8714:27;;8751:67;8815:1;8804:9;8800:17;8791:6;8751:67;:::i;:::-;8828:68;8892:2;8881:9;8877:18;8868:6;8828:68;:::i;:::-;8906;8970:2;8959:9;8955:18;8946:6;8906:68;:::i;:::-;8984;9048:2;9037:9;9033:18;9024:6;8984:68;:::i;:::-;9062:69;9126:3;9115:9;9111:19;9102:6;9062:69;:::i;:::-;9141;9205:3;9194:9;9190:19;9181:6;9141:69;:::i;:::-;9220;9284:3;9273:9;9269:19;9260:6;9220:69;:::i;:::-;9299;9363:3;9352:9;9348:19;9339:6;9299:69;:::i;:::-;8442:933;;;;;;;;;;;:::o;9381:474::-;9449:6;9457;9506:2;9494:9;9485:7;9481:23;9477:32;9474:119;;;9512:79;;:::i;:::-;9474:119;9632:1;9657:53;9702:7;9693:6;9682:9;9678:22;9657:53;:::i;:::-;9647:63;;9603:117;9759:2;9785:53;9830:7;9821:6;9810:9;9806:22;9785:53;:::i;:::-;9775:63;;9730:118;9381:474;;;;;:::o;9861:60::-;9889:3;9910:5;9903:12;;9861:60;;;:::o;9927:142::-;9977:9;10010:53;10028:34;10037:24;10055:5;10037:24;:::i;:::-;10028:34;:::i;:::-;10010:53;:::i;:::-;9997:66;;9927:142;;;:::o;10075:126::-;10125:9;10158:37;10189:5;10158:37;:::i;:::-;10145:50;;10075:126;;;:::o;10207:153::-;10284:9;10317:37;10348:5;10317:37;:::i;:::-;10304:50;;10207:153;;;:::o;10366:185::-;10480:64;10538:5;10480:64;:::i;:::-;10475:3;10468:77;10366:185;;:::o;10557:276::-;10677:4;10715:2;10704:9;10700:18;10692:26;;10728:98;10823:1;10812:9;10808:17;10799:6;10728:98;:::i;:::-;10557:276;;;;:::o;10839:180::-;10887:77;10884:1;10877:88;10984:4;10981:1;10974:15;11008:4;11005:1;10998:15;11025:320;11069:6;11106:1;11100:4;11096:12;11086:22;;11153:1;11147:4;11143:12;11174:18;11164:81;;11230:4;11222:6;11218:17;11208:27;;11164:81;11292:2;11284:6;11281:14;11261:18;11258:38;11255:84;;;11311:18;;:::i;:::-;11255:84;11076:269;11025:320;;;:::o;11351:182::-;11491:34;11487:1;11479:6;11475:14;11468:58;11351:182;:::o;11539:366::-;11681:3;11702:67;11766:2;11761:3;11702:67;:::i;:::-;11695:74;;11778:93;11867:3;11778:93;:::i;:::-;11896:2;11891:3;11887:12;11880:19;;11539:366;;;:::o;11911:419::-;12077:4;12115:2;12104:9;12100:18;12092:26;;12164:9;12158:4;12154:20;12150:1;12139:9;12135:17;12128:47;12192:131;12318:4;12192:131;:::i;:::-;12184:139;;11911:419;;;:::o;12336:180::-;12384:77;12381:1;12374:88;12481:4;12478:1;12471:15;12505:4;12502:1;12495:15;12522:180;12570:77;12567:1;12560:88;12667:4;12664:1;12657:15;12691:4;12688:1;12681:15;12708:185;12748:1;12765:20;12783:1;12765:20;:::i;:::-;12760:25;;12799:20;12817:1;12799:20;:::i;:::-;12794:25;;12838:1;12828:35;;12843:18;;:::i;:::-;12828:35;12885:1;12882;12878:9;12873:14;;12708:185;;;;:::o;12899:348::-;12939:7;12962:20;12980:1;12962:20;:::i;:::-;12957:25;;12996:20;13014:1;12996:20;:::i;:::-;12991:25;;13184:1;13116:66;13112:74;13109:1;13106:81;13101:1;13094:9;13087:17;13083:105;13080:131;;;13191:18;;:::i;:::-;13080:131;13239:1;13236;13232:9;13221:20;;12899:348;;;;:::o;13253:222::-;13393:34;13389:1;13381:6;13377:14;13370:58;13462:5;13457:2;13449:6;13445:15;13438:30;13253:222;:::o;13481:366::-;13623:3;13644:67;13708:2;13703:3;13644:67;:::i;:::-;13637:74;;13720:93;13809:3;13720:93;:::i;:::-;13838:2;13833:3;13829:12;13822:19;;13481:366;;;:::o;13853:419::-;14019:4;14057:2;14046:9;14042:18;14034:26;;14106:9;14100:4;14096:20;14092:1;14081:9;14077:17;14070:47;14134:131;14260:4;14134:131;:::i;:::-;14126:139;;13853:419;;;:::o;14278:223::-;14418:34;14414:1;14406:6;14402:14;14395:58;14487:6;14482:2;14474:6;14470:15;14463:31;14278:223;:::o;14507:366::-;14649:3;14670:67;14734:2;14729:3;14670:67;:::i;:::-;14663:74;;14746:93;14835:3;14746:93;:::i;:::-;14864:2;14859:3;14855:12;14848:19;;14507:366;;;:::o;14879:419::-;15045:4;15083:2;15072:9;15068:18;15060:26;;15132:9;15126:4;15122:20;15118:1;15107:9;15103:17;15096:47;15160:131;15286:4;15160:131;:::i;:::-;15152:139;;14879:419;;;:::o;15304:237::-;15342:3;15361:18;15377:1;15361:18;:::i;:::-;15356:23;;15393:18;15409:1;15393:18;:::i;:::-;15388:23;;15483:1;15477:4;15473:12;15470:1;15467:19;15464:45;;;15489:18;;:::i;:::-;15464:45;15533:1;15530;15526:9;15519:16;;15304:237;;;;:::o;15547:179::-;15687:31;15683:1;15675:6;15671:14;15664:55;15547:179;:::o;15732:366::-;15874:3;15895:67;15959:2;15954:3;15895:67;:::i;:::-;15888:74;;15971:93;16060:3;15971:93;:::i;:::-;16089:2;16084:3;16080:12;16073:19;;15732:366;;;:::o;16104:419::-;16270:4;16308:2;16297:9;16293:18;16285:26;;16357:9;16351:4;16347:20;16343:1;16332:9;16328:17;16321:47;16385:131;16511:4;16385:131;:::i;:::-;16377:139;;16104:419;;;:::o;16529:332::-;16650:4;16688:2;16677:9;16673:18;16665:26;;16701:71;16769:1;16758:9;16754:17;16745:6;16701:71;:::i;:::-;16782:72;16850:2;16839:9;16835:18;16826:6;16782:72;:::i;:::-;16529:332;;;;;:::o;16867:137::-;16921:5;16952:6;16946:13;16937:22;;16968:30;16992:5;16968:30;:::i;:::-;16867:137;;;;:::o;17010:345::-;17077:6;17126:2;17114:9;17105:7;17101:23;17097:32;17094:119;;;17132:79;;:::i;:::-;17094:119;17252:1;17277:61;17330:7;17321:6;17310:9;17306:22;17277:61;:::i;:::-;17267:71;;17223:125;17010:345;;;;:::o;17361:305::-;17401:3;17420:20;17438:1;17420:20;:::i;:::-;17415:25;;17454:20;17472:1;17454:20;:::i;:::-;17449:25;;17608:1;17540:66;17536:74;17533:1;17530:81;17527:107;;;17614:18;;:::i;:::-;17527:107;17658:1;17655;17651:9;17644:16;;17361:305;;;;:::o;17672:173::-;17812:25;17808:1;17800:6;17796:14;17789:49;17672:173;:::o;17851:366::-;17993:3;18014:67;18078:2;18073:3;18014:67;:::i;:::-;18007:74;;18090:93;18179:3;18090:93;:::i;:::-;18208:2;18203:3;18199:12;18192:19;;17851:366;;;:::o;18223:419::-;18389:4;18427:2;18416:9;18412:18;18404:26;;18476:9;18470:4;18466:20;18462:1;18451:9;18447:17;18440:47;18504:131;18630:4;18504:131;:::i;:::-;18496:139;;18223:419;;;:::o;18648:221::-;18788:34;18784:1;18776:6;18772:14;18765:58;18857:4;18852:2;18844:6;18840:15;18833:29;18648:221;:::o;18875:366::-;19017:3;19038:67;19102:2;19097:3;19038:67;:::i;:::-;19031:74;;19114:93;19203:3;19114:93;:::i;:::-;19232:2;19227:3;19223:12;19216:19;;18875:366;;;:::o;19247:419::-;19413:4;19451:2;19440:9;19436:18;19428:26;;19500:9;19494:4;19490:20;19486:1;19475:9;19471:17;19464:47;19528:131;19654:4;19528:131;:::i;:::-;19520:139;;19247:419;;;:::o;19672:225::-;19812:34;19808:1;19800:6;19796:14;19789:58;19881:8;19876:2;19868:6;19864:15;19857:33;19672:225;:::o;19903:366::-;20045:3;20066:67;20130:2;20125:3;20066:67;:::i;:::-;20059:74;;20142:93;20231:3;20142:93;:::i;:::-;20260:2;20255:3;20251:12;20244:19;;19903:366;;;:::o;20275:419::-;20441:4;20479:2;20468:9;20464:18;20456:26;;20528:9;20522:4;20518:20;20514:1;20503:9;20499:17;20492:47;20556:131;20682:4;20556:131;:::i;:::-;20548:139;;20275:419;;;:::o;20700:177::-;20840:29;20836:1;20828:6;20824:14;20817:53;20700:177;:::o;20883:366::-;21025:3;21046:67;21110:2;21105:3;21046:67;:::i;:::-;21039:74;;21122:93;21211:3;21122:93;:::i;:::-;21240:2;21235:3;21231:12;21224:19;;20883:366;;;:::o;21255:419::-;21421:4;21459:2;21448:9;21444:18;21436:26;;21508:9;21502:4;21498:20;21494:1;21483:9;21479:17;21472:47;21536:131;21662:4;21536:131;:::i;:::-;21528:139;;21255:419;;;:::o;21680:172::-;21820:24;21816:1;21808:6;21804:14;21797:48;21680:172;:::o;21858:366::-;22000:3;22021:67;22085:2;22080:3;22021:67;:::i;:::-;22014:74;;22097:93;22186:3;22097:93;:::i;:::-;22215:2;22210:3;22206:12;22199:19;;21858:366;;;:::o;22230:419::-;22396:4;22434:2;22423:9;22419:18;22411:26;;22483:9;22477:4;22473:20;22469:1;22458:9;22454:17;22447:47;22511:131;22637:4;22511:131;:::i;:::-;22503:139;;22230:419;;;:::o;22655:178::-;22795:30;22791:1;22783:6;22779:14;22772:54;22655:178;:::o;22839:366::-;22981:3;23002:67;23066:2;23061:3;23002:67;:::i;:::-;22995:74;;23078:93;23167:3;23078:93;:::i;:::-;23196:2;23191:3;23187:12;23180:19;;22839:366;;;:::o;23211:419::-;23377:4;23415:2;23404:9;23400:18;23392:26;;23464:9;23458:4;23454:20;23450:1;23439:9;23435:17;23428:47;23492:131;23618:4;23492:131;:::i;:::-;23484:139;;23211:419;;;:::o;23636:179::-;23776:31;23772:1;23764:6;23760:14;23753:55;23636:179;:::o;23821:366::-;23963:3;23984:67;24048:2;24043:3;23984:67;:::i;:::-;23977:74;;24060:93;24149:3;24060:93;:::i;:::-;24178:2;24173:3;24169:12;24162:19;;23821:366;;;:::o;24193:419::-;24359:4;24397:2;24386:9;24382:18;24374:26;;24446:9;24440:4;24436:20;24432:1;24421:9;24417:17;24410:47;24474:131;24600:4;24474:131;:::i;:::-;24466:139;;24193:419;;;:::o;24618:169::-;24758:21;24754:1;24746:6;24742:14;24735:45;24618:169;:::o;24793:366::-;24935:3;24956:67;25020:2;25015:3;24956:67;:::i;:::-;24949:74;;25032:93;25121:3;25032:93;:::i;:::-;25150:2;25145:3;25141:12;25134:19;;24793:366;;;:::o;25165:419::-;25331:4;25369:2;25358:9;25354:18;25346:26;;25418:9;25412:4;25408:20;25404:1;25393:9;25389:17;25382:47;25446:131;25572:4;25446:131;:::i;:::-;25438:139;;25165:419;;;:::o;25590:191::-;25630:4;25650:20;25668:1;25650:20;:::i;:::-;25645:25;;25684:20;25702:1;25684:20;:::i;:::-;25679:25;;25723:1;25720;25717:8;25714:34;;;25728:18;;:::i;:::-;25714:34;25773:1;25770;25766:9;25758:17;;25590:191;;;;:::o;25787:332::-;25908:4;25946:2;25935:9;25931:18;25923:26;;25959:71;26027:1;26016:9;26012:17;26003:6;25959:71;:::i;:::-;26040:72;26108:2;26097:9;26093:18;26084:6;26040:72;:::i;:::-;25787:332;;;;;:::o;26125:147::-;26226:11;26263:3;26248:18;;26125:147;;;;:::o;26278:114::-;;:::o;26398:398::-;26557:3;26578:83;26659:1;26654:3;26578:83;:::i;:::-;26571:90;;26670:93;26759:3;26670:93;:::i;:::-;26788:1;26783:3;26779:11;26772:18;;26398:398;;;:::o;26802:379::-;26986:3;27008:147;27151:3;27008:147;:::i;:::-;27001:154;;27172:3;27165:10;;26802:379;;;:::o;27187:220::-;27327:34;27323:1;27315:6;27311:14;27304:58;27396:3;27391:2;27383:6;27379:15;27372:28;27187:220;:::o;27413:366::-;27555:3;27576:67;27640:2;27635:3;27576:67;:::i;:::-;27569:74;;27652:93;27741:3;27652:93;:::i;:::-;27770:2;27765:3;27761:12;27754:19;;27413:366;;;:::o;27785:419::-;27951:4;27989:2;27978:9;27974:18;27966:26;;28038:9;28032:4;28028:20;28024:1;28013:9;28009:17;28002:47;28066:131;28192:4;28066:131;:::i;:::-;28058:139;;27785:419;;;:::o;28210:180::-;28258:77;28255:1;28248:88;28355:4;28352:1;28345:15;28379:4;28376:1;28369:15;28396:180;28444:77;28441:1;28434:88;28541:4;28538:1;28531:15;28565:4;28562:1;28555:15;28582:143;28639:5;28670:6;28664:13;28655:22;;28686:33;28713:5;28686:33;:::i;:::-;28582:143;;;;:::o;28731:351::-;28801:6;28850:2;28838:9;28829:7;28825:23;28821:32;28818:119;;;28856:79;;:::i;:::-;28818:119;28976:1;29001:64;29057:7;29048:6;29037:9;29033:22;29001:64;:::i;:::-;28991:74;;28947:128;28731:351;;;;:::o;29088:85::-;29133:7;29162:5;29151:16;;29088:85;;;:::o;29179:158::-;29237:9;29270:61;29288:42;29297:32;29323:5;29297:32;:::i;:::-;29288:42;:::i;:::-;29270:61;:::i;:::-;29257:74;;29179:158;;;:::o;29343:147::-;29438:45;29477:5;29438:45;:::i;:::-;29433:3;29426:58;29343:147;;:::o;29496:114::-;29563:6;29597:5;29591:12;29581:22;;29496:114;;;:::o;29616:184::-;29715:11;29749:6;29744:3;29737:19;29789:4;29784:3;29780:14;29765:29;;29616:184;;;;:::o;29806:132::-;29873:4;29896:3;29888:11;;29926:4;29921:3;29917:14;29909:22;;29806:132;;;:::o;29944:108::-;30021:24;30039:5;30021:24;:::i;:::-;30016:3;30009:37;29944:108;;:::o;30058:179::-;30127:10;30148:46;30190:3;30182:6;30148:46;:::i;:::-;30226:4;30221:3;30217:14;30203:28;;30058:179;;;;:::o;30243:113::-;30313:4;30345;30340:3;30336:14;30328:22;;30243:113;;;:::o;30392:732::-;30511:3;30540:54;30588:5;30540:54;:::i;:::-;30610:86;30689:6;30684:3;30610:86;:::i;:::-;30603:93;;30720:56;30770:5;30720:56;:::i;:::-;30799:7;30830:1;30815:284;30840:6;30837:1;30834:13;30815:284;;;30916:6;30910:13;30943:63;31002:3;30987:13;30943:63;:::i;:::-;30936:70;;31029:60;31082:6;31029:60;:::i;:::-;31019:70;;30875:224;30862:1;30859;30855:9;30850:14;;30815:284;;;30819:14;31115:3;31108:10;;30516:608;;;30392:732;;;;:::o;31130:831::-;31393:4;31431:3;31420:9;31416:19;31408:27;;31445:71;31513:1;31502:9;31498:17;31489:6;31445:71;:::i;:::-;31526:80;31602:2;31591:9;31587:18;31578:6;31526:80;:::i;:::-;31653:9;31647:4;31643:20;31638:2;31627:9;31623:18;31616:48;31681:108;31784:4;31775:6;31681:108;:::i;:::-;31673:116;;31799:72;31867:2;31856:9;31852:18;31843:6;31799:72;:::i;:::-;31881:73;31949:3;31938:9;31934:19;31925:6;31881:73;:::i;:::-;31130:831;;;;;;;;:::o;31967:807::-;32216:4;32254:3;32243:9;32239:19;32231:27;;32268:71;32336:1;32325:9;32321:17;32312:6;32268:71;:::i;:::-;32349:72;32417:2;32406:9;32402:18;32393:6;32349:72;:::i;:::-;32431:80;32507:2;32496:9;32492:18;32483:6;32431:80;:::i;:::-;32521;32597:2;32586:9;32582:18;32573:6;32521:80;:::i;:::-;32611:73;32679:3;32668:9;32664:19;32655:6;32611:73;:::i;:::-;32694;32762:3;32751:9;32747:19;32738:6;32694:73;:::i;:::-;31967:807;;;;;;;;;:::o;32780:143::-;32837:5;32868:6;32862:13;32853:22;;32884:33;32911:5;32884:33;:::i;:::-;32780:143;;;;:::o;32929:663::-;33017:6;33025;33033;33082:2;33070:9;33061:7;33057:23;33053:32;33050:119;;;33088:79;;:::i;:::-;33050:119;33208:1;33233:64;33289:7;33280:6;33269:9;33265:22;33233:64;:::i;:::-;33223:74;;33179:128;33346:2;33372:64;33428:7;33419:6;33408:9;33404:22;33372:64;:::i;:::-;33362:74;;33317:129;33485:2;33511:64;33567:7;33558:6;33547:9;33543:22;33511:64;:::i;:::-;33501:74;;33456:129;32929:663;;;;;:::o

Swarm Source

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