ETH Price: $2,411.05 (+1.89%)

Token

Diablo (DIABLO)
 

Overview

Max Total Supply

666,000,000,000 DIABLO

Holders

244

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7,006,869.879418757415975287 DIABLO

Value
$0.00
0x1f285e15166CCAB7d035f4dF7307821A8D58e1B7
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:
Diablo

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-10-02
*/

// SPDX-License-Identifier: MIT
/**
     
And I saw the beast, the devil, the 666.
The meme destroyer emerged from the abyss.
The memecoin space was finally ready to receive his power,
Into infernal torment were sent all the fudders.

The beast roamed the blockchain, seeking out its prey,
Targeting the memecoins that scammed all day.
No longer were the jeets safe from its wrath,
For $DIABLO sought to punish their path.

TG: t.me/diabloerc

Twitter: https://x.com/diablo_erc

Website: https://diablocoin.io/
 */

pragma solidity 0.8.9;

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



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

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

   
    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 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns(string memory);

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

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

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;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * 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;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

   
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

    
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, 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");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    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);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    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;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    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 Diablo is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable router;
    address public immutable uniswapV2Pair;


    // addresses
    address public  jeetsburnerWallet;
    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 buyJeetsburnerFee;
        uint8 buyLiquidityFee;

        uint8 sellTotalFees;
        uint8 sellMarketingFee;
        uint8 sellJeetsburnerFee;
        uint8 sellLiquidityFee;
    }  

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

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

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForJeetsburner;
    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;
     mapping(address => bool) private isearlybuyer;


    // 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("Diablo", "DIABLO") {
 
        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 = 666000000000 * 1e18;

        maxBuyAmount = totalSupply * 1 / 100; // 1% maxTransactionAmountTxn
        maxSellAmount = totalSupply * 1 / 100; // 1% maxTransactionAmountTxn
        maxWalletAmount = totalSupply * 1 / 100; // 1% maxWallet
        thresholdSwapAmount = totalSupply * 85 / 10000; // 0.85% swap wallet

        _fees.buyMarketingFee = 14;
        _fees.buyLiquidityFee = 1;
        _fees.buyJeetsburnerFee = 5;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyJeetsburnerFee;

        _fees.sellMarketingFee = 30;
        _fees.sellLiquidityFee = 1;
        _fees.sellJeetsburnerFee = 10;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellJeetsburnerFee;


        marketingWallet = address(0x83991b0999DC5972a87B38Cb8F8bE4F353197a6a);
        jeetsburnerWallet = address(0x5f87f0C632BaF55FFeD0a4180beC62B27b0a018e);

        // 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 _jeetsburnerFeeBuy,uint8 _marketingFeeSell, uint8 _liquidityFeeSell,uint8 _jeetsburnerFeeSell) external onlyOwner{
        _fees.buyMarketingFee = _marketingFeeBuy;
        _fees.buyLiquidityFee = _liquidityFeeBuy;
        _fees.buyJeetsburnerFee = _jeetsburnerFeeBuy;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyJeetsburnerFee;

        _fees.sellMarketingFee = _marketingFeeSell;
        _fees.sellLiquidityFee = _liquidityFeeSell;
        _fees.sellJeetsburnerFee = _jeetsburnerFeeSell;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellJeetsburnerFee;
        require(_fees.buyTotalFees <= 50, "Must keep fees at 50% or less");   
        require(_fees.sellTotalFees <= 50, "Must keep fees at 50% 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 updateIsEarlyBuyer(address account, bool state) external onlyOwner {
        isearlybuyer[account] = state;
    }

    function bulkIsEarlyBuyer(address[] memory accounts, bool state) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            isearlybuyer[accounts[i]] = state;
        }
    }
    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 _jeetsburnerWallet) external onlyOwner{
        marketingWallet = _marketingWallet;
        jeetsburnerWallet = _jeetsburnerWallet;
    }

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
        
    ) internal override {
        require(!isearlybuyer[sender] && !isearlybuyer[recipient],
            "You can't transfer tokens"
             );
        
        
        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;
                tokensForJeetsburner += (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;
                tokensForJeetsburner += fees * _fees.sellJeetsburnerFee / _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;
                tokensForJeetsburner += fees * _fees.buyJeetsburnerFee / _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 + tokensForJeetsburner;
        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 ethForJeetsburner = newBalance.mul(tokensForJeetsburner).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForJeetsburner);


        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForJeetsburner = 0;


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

        (success,) = address(jeetsburnerWallet).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":"buyJeetsburnerFee","type":"uint8"},{"internalType":"uint8","name":"buyLiquidityFee","type":"uint8"},{"internalType":"uint8","name":"sellTotalFees","type":"uint8"},{"internalType":"uint8","name":"sellMarketingFee","type":"uint8"},{"internalType":"uint8","name":"sellJeetsburnerFee","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":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkIsEarlyBuyer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jeetsburnerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"_jeetsburnerWallet","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":"tokensForJeetsburner","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"_jeetsburnerFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeSell","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeSell","type":"uint8"},{"internalType":"uint8","name":"_jeetsburnerFeeSell","type":"uint8"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateIsEarlyBuyer","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"}]

60c06040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550604051806101000160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff16815250600d60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055505050348015620001ad57600080fd5b506040518060400160405280600681526020017f446961626c6f00000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f444941424c4f000000000000000000000000000000000000000000000000000081525081600390805190602001906200023292919062000f95565b5080600490805190602001906200024b92919062000f95565b50505060006200026062000be560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039057600080fd5b505afa158015620003a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cb9190620010af565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043057600080fd5b505afa15801562000445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046b9190620010af565b6040518363ffffffff1660e01b81526004016200048a929190620010f2565b602060405180830381600087803b158015620004a557600080fd5b505af1158015620004ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e09190620010af565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060016013600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000620005dd62000bed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260006200069c62000bed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460006200075b62000bed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016014600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016016600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008ec6080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000c1760201b60201c565b5060006c0867f649b7c46d9e73900000009050606460018262000910919062001158565b6200091c9190620011e8565b600881905550606460018262000933919062001158565b6200093f9190620011e8565b600981905550606460018262000956919062001158565b620009629190620011e8565b600a819055506127106055826200097a919062001158565b620009869190620011e8565b600b81905550600e600d60000160016101000a81548160ff021916908360ff1602179055506001600d60000160036101000a81548160ff021916908360ff1602179055506005600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff1662000a2e91906200122d565b62000a3a91906200122d565b600d60000160006101000a81548160ff021916908360ff160217905550601e600d60000160056101000a81548160ff021916908360ff1602179055506001600d60000160076101000a81548160ff021916908360ff160217905550600a600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff1662000af991906200122d565b62000b0591906200122d565b600d60000160046101000a81548160ff021916908360ff1602179055507383991b0999dc5972a87b38cb8f8be4f353197a6a600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735f87f0c632baf55ffed0a4180bec62b27b0a018e600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000bde338262000c4a60201b60201c565b506200150e565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008062000c2a62000be560201b60201c565b905062000c3f81858562000db860201b60201c565b600191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000cbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cb490620012cc565b60405180910390fd5b62000cd16000838362000f8b60201b60201c565b806002600082825462000ce59190620012ee565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000d9891906200135c565b60405180910390a362000db46000838362000f9060201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000e2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e2290620013ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000e9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e959062001487565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000f7e91906200135c565b60405180910390a3505050565b505050565b505050565b82805462000fa390620014d8565b90600052602060002090601f01602090048101928262000fc7576000855562001013565b82601f1062000fe257805160ff191683800117855562001013565b8280016001018555821562001013579182015b828111156200101257825182559160200191906001019062000ff5565b5b50905062001022919062001026565b5090565b5b808211156200104157600081600090555060010162001027565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062001077826200104a565b9050919050565b62001089816200106a565b81146200109557600080fd5b50565b600081519050620010a9816200107e565b92915050565b600060208284031215620010c857620010c762001045565b5b6000620010d88482850162001098565b91505092915050565b620010ec816200106a565b82525050565b6000604082019050620011096000830185620010e1565b620011186020830184620010e1565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062001165826200111f565b915062001172836200111f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620011ae57620011ad62001129565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620011f5826200111f565b915062001202836200111f565b925082620012155762001214620011b9565b5b828204905092915050565b600060ff82169050919050565b60006200123a8262001220565b9150620012478362001220565b92508260ff0382111562001260576200125f62001129565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620012b4601f836200126b565b9150620012c1826200127c565b602082019050919050565b60006020820190508181036000830152620012e781620012a5565b9050919050565b6000620012fb826200111f565b915062001308836200111f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001340576200133f62001129565b5b828201905092915050565b62001356816200111f565b82525050565b60006020820190506200137360008301846200134b565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000620013d76024836200126b565b9150620013e48262001379565b604082019050919050565b600060208201905081810360008301526200140a81620013c8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200146f6022836200126b565b91506200147c8262001411565b604082019050919050565b60006020820190508181036000830152620014a28162001460565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620014f157607f821691505b60208210811415620015085762001507620014a9565b5b50919050565b60805160a05161533e6200155e600039600081816111080152611bf401526000818161232e0152818161388c0152818161397c015281816139a301528181613a3f0152613a66015261533e6000f3fe60806040526004361061024a5760003560e01c80638514022d11610139578063c0246668116100b6578063dd62ed3e1161007a578063dd62ed3e146108b4578063e16830a8146108f1578063f2fde38b1461091a578063f5b3c3bf14610943578063f887ea4014610980578063fc6224f4146109ab57610251565b8063c0246668146107de578063c16dd4a414610807578063c18bc19514610830578063d212a69a14610859578063d3f6a1571461088b57610251565b80639e252f00116100fd5780639e252f00146106f9578063a457c2d714610722578063a9059cbb1461075f578063b88631151461079c578063b9e418e7146107c757610251565b80638514022d146106145780638cd4426d1461063d5780638da5cb5b1461066657806395d89b411461069157806396880b17146106bc57610251565b80633265e846116101c75780636ddd17131161018b5780636ddd17131461054157806370a082311461056c578063715018a6146105a95780637571336a146105c05780637b913074146105e957610251565b80633265e84614610436578063395093511461045f57806349bd5a5e1461049c5780634fbee193146104c7578063555467a11461050457610251565b80631a8145bb1161020e5780631a8145bb1461034f5780631f3fed8f1461037a578063215d92a6146103a557806323b872dd146103ce578063313ce5671461040b57610251565b806306fdde0314610256578063095ea7b31461028157806310d5de53146102be57806311a582c3146102fb57806318160ddd1461032457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109d6565b6040516102789190613c82565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190613d4c565b610a68565b6040516102b59190613da7565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e09190613dc2565b610a8b565b6040516102f29190613da7565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190613def565b610aab565b005b34801561033057600080fd5b50610339610c7c565b6040516103469190613e3e565b60405180910390f35b34801561035b57600080fd5b50610364610c86565b6040516103719190613e3e565b60405180910390f35b34801561038657600080fd5b5061038f610c8c565b60405161039c9190613e3e565b60405180910390f35b3480156103b157600080fd5b506103cc60048036038101906103c79190613fcd565b610c92565b005b3480156103da57600080fd5b506103f560048036038101906103f09190614029565b610dbe565b6040516104029190613da7565b60405180910390f35b34801561041757600080fd5b50610420610ded565b60405161042d9190614098565b60405180910390f35b34801561044257600080fd5b5061045d600480360381019061045891906140df565b610df6565b005b34801561046b57600080fd5b5061048660048036038101906104819190613d4c565b6110cf565b6040516104939190613da7565b60405180910390f35b3480156104a857600080fd5b506104b1611106565b6040516104be919061417b565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190613dc2565b61112a565b6040516104fb9190613da7565b60405180910390f35b34801561051057600080fd5b5061052b60048036038101906105269190614196565b611180565b6040516105389190613da7565b60405180910390f35b34801561054d57600080fd5b50610556611229565b6040516105639190613da7565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190613dc2565b61123c565b6040516105a09190613e3e565b60405180910390f35b3480156105b557600080fd5b506105be611284565b005b3480156105cc57600080fd5b506105e760048036038101906105e291906141c3565b6113dc565b005b3480156105f557600080fd5b506105fe6114ce565b60405161060b919061417b565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906141c3565b6114f4565b005b34801561064957600080fd5b50610664600480360381019061065f9190613d4c565b6115e6565b005b34801561067257600080fd5b5061067b611716565b604051610688919061417b565b60405180910390f35b34801561069d57600080fd5b506106a6611740565b6040516106b39190613c82565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de9190613dc2565b6117d2565b6040516106f09190613da7565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b9190614196565b6117f2565b005b34801561072e57600080fd5b5061074960048036038101906107449190613d4c565b6118da565b6040516107569190613da7565b60405180910390f35b34801561076b57600080fd5b5061078660048036038101906107819190613d4c565b611951565b6040516107939190613da7565b60405180910390f35b3480156107a857600080fd5b506107b1611974565b6040516107be9190613da7565b60405180910390f35b3480156107d357600080fd5b506107dc611987565b005b3480156107ea57600080fd5b50610805600480360381019061080091906141c3565b611a69565b005b34801561081357600080fd5b5061082e600480360381019061082991906141c3565b611b5b565b005b34801561083c57600080fd5b5061085760048036038101906108529190614196565b611cdc565b005b34801561086557600080fd5b5061086e611e11565b604051610882989796959493929190614203565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad9190614281565b611eaf565b005b3480156108c057600080fd5b506108db60048036038101906108d69190614281565b611fcc565b6040516108e89190613e3e565b60405180910390f35b3480156108fd57600080fd5b50610918600480360381019061091391906141c3565b612053565b005b34801561092657600080fd5b50610941600480360381019061093c9190613dc2565b612145565b005b34801561094f57600080fd5b5061096a60048036038101906109659190613dc2565b61230c565b6040516109779190613da7565b60405180910390f35b34801561098c57600080fd5b5061099561232c565b6040516109a29190614320565b60405180910390f35b3480156109b757600080fd5b506109c0612350565b6040516109cd9190613e3e565b60405180910390f35b6060600380546109e59061436a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a119061436a565b8015610a5e5780601f10610a3357610100808354040283529160200191610a5e565b820191906000526020600020905b815481529060010190602001808311610a4157829003601f168201915b5050505050905090565b600080610a73612356565b9050610a8081858561235e565b600191505092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b610ab3612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b39906143e8565b60405180910390fd5b6064610b4c610c7c565b610b569190614466565b6103e883610b62610c7c565b610b6c9190614497565b610b769190614466565b1015610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90614563565b60405180910390fd5b6064610bc1610c7c565b610bcb9190614466565b6103e882610bd7610c7c565b610be19190614497565b610beb9190614466565b1015610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c23906145f5565b60405180910390fd5b6103e882610c38610c7c565b610c429190614497565b610c4c9190614466565b6008819055506103e881610c5e610c7c565b610c689190614497565b610c729190614466565b6009819055505050565b6000600254905090565b600f5481565b600e5481565b610c9a612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d20906143e8565b60405180910390fd5b60005b8251811015610db9578160156000858481518110610d4d57610d4c614615565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610db190614644565b915050610d2c565b505050565b600080610dc9612356565b9050610dd6858285612529565b610de18585856125b5565b60019150509392505050565b60006012905090565b610dfe612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e84906143e8565b60405180910390fd5b85600d60000160016101000a81548160ff021916908360ff16021790555084600d60000160036101000a81548160ff021916908360ff16021790555083600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff16610f2a919061468d565b610f34919061468d565b600d60000160006101000a81548160ff021916908360ff16021790555082600d60000160056101000a81548160ff021916908360ff16021790555081600d60000160076101000a81548160ff021916908360ff16021790555080600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff16610fee919061468d565b610ff8919061468d565b600d60000160046101000a81548160ff021916908360ff1602179055506032600d60000160009054906101000a900460ff1660ff16111561106e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106590614710565b60405180910390fd5b6032600d60000160049054906101000a900460ff1660ff1611156110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be90614710565b60405180910390fd5b505050505050565b6000806110da612356565b90506110fb8185856110ec8589611fcc565b6110f69190614730565b61235e565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600061118a612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611219576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611210906143e8565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61128c612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611312906143e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113e4612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a906143e8565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114fc612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611582906143e8565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6115ee612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611674906143e8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6116a1611716565b836040518363ffffffff1660e01b81526004016116bf929190614786565b602060405180830381600087803b1580156116d957600080fd5b505af11580156116ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171191906147c4565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461174f9061436a565b80601f016020809104026020016040519081016040528092919081815260200182805461177b9061436a565b80156117c85780601f1061179d576101008083540402835291602001916117c8565b820191906000526020600020905b8154815290600101906020018083116117ab57829003601f168201915b5050505050905090565b60146020528060005260406000206000915054906101000a900460ff1681565b6117fa612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611889576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611880906143e8565b60405180910390fd5b611891611716565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156118d6573d6000803e3d6000fd5b5050565b6000806118e5612356565b905060006118f38286611fcc565b905083811015611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90614863565b60405180910390fd5b611945828686840361235e565b60019250505092915050565b60008061195c612356565b90506119698185856125b5565b600191505092915050565b600c60029054906101000a900460ff1681565b61198f612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a15906143e8565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550600243611a619190614730565b601181905550565b611a71612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af7906143e8565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611b63612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be9906143e8565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c78906148cf565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611ce4612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a906143e8565b60405180910390fd5b6064611d7d610c7c565b611d879190614466565b6103e882611d93610c7c565b611d9d9190614497565b611da79190614466565b1015611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf90614961565b60405180910390fd5b6103e881611df4610c7c565b611dfe9190614497565b611e089190614466565b600a8190555050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b611eb7612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3d906143e8565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61205b612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e1906143e8565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61214d612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d3906143e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561224c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612243906149f3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60166020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60105481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c590614a85565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561243e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243590614b17565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161251c9190613e3e565b60405180910390a3505050565b60006125358484611fcc565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146125af57818110156125a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259890614b83565b60405180910390fd5b6125ae848484840361235e565b5b50505050565b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126595750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f90614bef565b60405180910390fd5b60008114156126b2576126ad8383600061316e565b613169565b6126ba611716565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561272857506126f8611716565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127415750600c60029054906101000a900460ff16155b15612ac757600c60009054906101000a900460ff1661283b57601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127fb5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61283a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283190614c5b565b60405180910390fd5b5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128de5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561292d57600854811115612928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291f90614cc7565b60405180910390fd5b612a1c565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129d05750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a1b57600954811115612a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1190614d33565b60405180910390fd5b5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ac657600a54612a798361123c565b82612a849190614730565b1115612ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abc90614d9f565b60405180910390fd5b5b5b6000612ad23061123c565b90506000600b548210159050808015612af75750600c60019054906101000a900460ff165b8015612b105750600c60029054906101000a900460ff16155b8015612b655750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612bbb5750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c115750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c55576001600c60026101000a81548160ff021916908315150217905550612c396133e6565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d0b5750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d1557600090505b801561315a576000601154431015612db757612d4e6064612d406063886136d490919063ffffffff16565b61374f90919063ffffffff16565b90506063605e82612d5f9190614497565b612d699190614466565b600e6000828254612d7a9190614730565b925050819055506063600582612d909190614497565b612d9a9190614466565b60106000828254612dab9190614730565b92505081905550613135565b601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e2557506000600d60000160049054906101000a900460ff1660ff16115b15612f7757612e656064612e57600d60000160049054906101000a900460ff1660ff16886136d490919063ffffffff16565b61374f90919063ffffffff16565b9050600d60000160049054906101000a900460ff1660ff16600d60000160079054906101000a900460ff1660ff1682612e9e9190614497565b612ea89190614466565b600f6000828254612eb99190614730565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160059054906101000a900460ff1660ff1682612ef79190614497565b612f019190614466565b600e6000828254612f129190614730565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160069054906101000a900460ff1660ff1682612f509190614497565b612f5a9190614466565b60106000828254612f6b9190614730565b92505081905550613134565b601660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fe557506000600d60000160009054906101000a900460ff1660ff16115b15613133576130256064613017600d60000160009054906101000a900460ff1660ff16886136d490919063ffffffff16565b61374f90919063ffffffff16565b9050600d60000160009054906101000a900460ff1660ff16600d60000160039054906101000a900460ff1660ff168261305e9190614497565b6130689190614466565b600f60008282546130799190614730565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160019054906101000a900460ff1660ff16826130b79190614497565b6130c19190614466565b600e60008282546130d29190614730565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160029054906101000a900460ff1660ff16826131109190614497565b61311a9190614466565b6010600082825461312b9190614730565b925050819055505b5b5b600081111561314a5761314987308361316e565b5b80856131569190614dbf565b9450505b61316586868661316e565b5050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d590614e65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561324e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324590614ef7565b60405180910390fd5b613259838383613799565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156132df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d690614f89565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133cd9190613e3e565b60405180910390a36133e084848461379e565b50505050565b60006133f13061123c565b90506000601054600e54600f546134089190614730565b6134129190614730565b90506000808314806134245750600082145b15613431575050506136d2565b6014600b546134409190614497565b831115613459576014600b546134569190614497565b92505b6000600283600f548661346c9190614497565b6134769190614466565b6134809190614466565b9050600061349782866137a390919063ffffffff16565b905060004790506134a7826137ed565b60006134bc82476137a390919063ffffffff16565b905060006134e7876134d9600e54856136d490919063ffffffff16565b61374f90919063ffffffff16565b9050600061351288613504601054866136d490919063ffffffff16565b61374f90919063ffffffff16565b9050600081836135229190614730565b8461352d9190614dbf565b90506000600f819055506000600e8190555060006010819055506000871180156135575750600081115b156135a0576135668782613a39565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051613597929190614fa9565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683476135e59190614dbf565b6040516135f190615003565b60006040518083038185875af1925050503d806000811461362e576040519150601f19603f3d011682016040523d82523d6000602084013e613633565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161367f90615003565b60006040518083038185875af1925050503d80600081146136bc576040519150601f19603f3d011682016040523d82523d6000602084013e6136c1565b606091505b505080985050505050505050505050505b565b6000808314156136e75760009050613749565b600082846136f59190614497565b90508284826137049190614466565b14613744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373b9061508a565b60405180910390fd5b809150505b92915050565b600061379183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b22565b905092915050565b505050565b505050565b60006137e583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613b85565b905092915050565b6000600267ffffffffffffffff81111561380a57613809613e5e565b5b6040519080825280602002602001820160405280156138385781602001602082028036833780820191505090505b50905030816000815181106138505761384f614615565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156138f057600080fd5b505afa158015613904573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392891906150bf565b8160018151811061393c5761393b614615565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139a1307f00000000000000000000000000000000000000000000000000000000000000008461235e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a039594939291906151e5565b600060405180830381600087803b158015613a1d57600080fd5b505af1158015613a31573d6000803e3d6000fd5b505050505050565b613a64307f00000000000000000000000000000000000000000000000000000000000000008461235e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613ac99695949392919061523f565b6060604051808303818588803b158015613ae257600080fd5b505af1158015613af6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b1b91906152b5565b5050505050565b60008083118290613b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b609190613c82565b60405180910390fd5b5060008385613b789190614466565b9050809150509392505050565b6000838311158290613bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bc49190613c82565b60405180910390fd5b5060008385613bdc9190614dbf565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c23578082015181840152602081019050613c08565b83811115613c32576000848401525b50505050565b6000601f19601f8301169050919050565b6000613c5482613be9565b613c5e8185613bf4565b9350613c6e818560208601613c05565b613c7781613c38565b840191505092915050565b60006020820190508181036000830152613c9c8184613c49565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ce382613cb8565b9050919050565b613cf381613cd8565b8114613cfe57600080fd5b50565b600081359050613d1081613cea565b92915050565b6000819050919050565b613d2981613d16565b8114613d3457600080fd5b50565b600081359050613d4681613d20565b92915050565b60008060408385031215613d6357613d62613cae565b5b6000613d7185828601613d01565b9250506020613d8285828601613d37565b9150509250929050565b60008115159050919050565b613da181613d8c565b82525050565b6000602082019050613dbc6000830184613d98565b92915050565b600060208284031215613dd857613dd7613cae565b5b6000613de684828501613d01565b91505092915050565b60008060408385031215613e0657613e05613cae565b5b6000613e1485828601613d37565b9250506020613e2585828601613d37565b9150509250929050565b613e3881613d16565b82525050565b6000602082019050613e536000830184613e2f565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613e9682613c38565b810181811067ffffffffffffffff82111715613eb557613eb4613e5e565b5b80604052505050565b6000613ec8613ca4565b9050613ed48282613e8d565b919050565b600067ffffffffffffffff821115613ef457613ef3613e5e565b5b602082029050602081019050919050565b600080fd5b6000613f1d613f1884613ed9565b613ebe565b90508083825260208201905060208402830185811115613f4057613f3f613f05565b5b835b81811015613f695780613f558882613d01565b845260208401935050602081019050613f42565b5050509392505050565b600082601f830112613f8857613f87613e59565b5b8135613f98848260208601613f0a565b91505092915050565b613faa81613d8c565b8114613fb557600080fd5b50565b600081359050613fc781613fa1565b92915050565b60008060408385031215613fe457613fe3613cae565b5b600083013567ffffffffffffffff81111561400257614001613cb3565b5b61400e85828601613f73565b925050602061401f85828601613fb8565b9150509250929050565b60008060006060848603121561404257614041613cae565b5b600061405086828701613d01565b935050602061406186828701613d01565b925050604061407286828701613d37565b9150509250925092565b600060ff82169050919050565b6140928161407c565b82525050565b60006020820190506140ad6000830184614089565b92915050565b6140bc8161407c565b81146140c757600080fd5b50565b6000813590506140d9816140b3565b92915050565b60008060008060008060c087890312156140fc576140fb613cae565b5b600061410a89828a016140ca565b965050602061411b89828a016140ca565b955050604061412c89828a016140ca565b945050606061413d89828a016140ca565b935050608061414e89828a016140ca565b92505060a061415f89828a016140ca565b9150509295509295509295565b61417581613cd8565b82525050565b6000602082019050614190600083018461416c565b92915050565b6000602082840312156141ac576141ab613cae565b5b60006141ba84828501613d37565b91505092915050565b600080604083850312156141da576141d9613cae565b5b60006141e885828601613d01565b92505060206141f985828601613fb8565b9150509250929050565b600061010082019050614219600083018b614089565b614226602083018a614089565b6142336040830189614089565b6142406060830188614089565b61424d6080830187614089565b61425a60a0830186614089565b61426760c0830185614089565b61427460e0830184614089565b9998505050505050505050565b6000806040838503121561429857614297613cae565b5b60006142a685828601613d01565b92505060206142b785828601613d01565b9150509250929050565b6000819050919050565b60006142e66142e16142dc84613cb8565b6142c1565b613cb8565b9050919050565b60006142f8826142cb565b9050919050565b600061430a826142ed565b9050919050565b61431a816142ff565b82525050565b60006020820190506143356000830184614311565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061438257607f821691505b602082108114156143965761439561433b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006143d2602083613bf4565b91506143dd8261439c565b602082019050919050565b60006020820190508181036000830152614401816143c5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061447182613d16565b915061447c83613d16565b92508261448c5761448b614408565b5b828204905092915050565b60006144a282613d16565b91506144ad83613d16565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144e6576144e5614437565b5b828202905092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b600061454d602383613bf4565b9150614558826144f1565b604082019050919050565b6000602082019050818103600083015261457c81614540565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b60006145df602483613bf4565b91506145ea82614583565b604082019050919050565b6000602082019050818103600083015261460e816145d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061464f82613d16565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561468257614681614437565b5b600182019050919050565b60006146988261407c565b91506146a38361407c565b92508260ff038211156146b9576146b8614437565b5b828201905092915050565b7f4d757374206b656570206665657320617420353025206f72206c657373000000600082015250565b60006146fa601d83613bf4565b9150614705826146c4565b602082019050919050565b60006020820190508181036000830152614729816146ed565b9050919050565b600061473b82613d16565b915061474683613d16565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561477b5761477a614437565b5b828201905092915050565b600060408201905061479b600083018561416c565b6147a86020830184613e2f565b9392505050565b6000815190506147be81613fa1565b92915050565b6000602082840312156147da576147d9613cae565b5b60006147e8848285016147af565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061484d602583613bf4565b9150614858826147f1565b604082019050919050565b6000602082019050818103600083015261487c81614840565b9050919050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b60006148b9601783613bf4565b91506148c482614883565b602082019050919050565b600060208201905081810360008301526148e8816148ac565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061494b602283613bf4565b9150614956826148ef565b604082019050919050565b6000602082019050818103600083015261497a8161493e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149dd602683613bf4565b91506149e882614981565b604082019050919050565b60006020820190508181036000830152614a0c816149d0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a6f602483613bf4565b9150614a7a82614a13565b604082019050919050565b60006020820190508181036000830152614a9e81614a62565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b01602283613bf4565b9150614b0c82614aa5565b604082019050919050565b60006020820190508181036000830152614b3081614af4565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614b6d601d83613bf4565b9150614b7882614b37565b602082019050919050565b60006020820190508181036000830152614b9c81614b60565b9050919050565b7f596f752063616e2774207472616e7366657220746f6b656e7300000000000000600082015250565b6000614bd9601983613bf4565b9150614be482614ba3565b602082019050919050565b60006020820190508181036000830152614c0881614bcc565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c45601683613bf4565b9150614c5082614c0f565b602082019050919050565b60006020820190508181036000830152614c7481614c38565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000614cb1601c83613bf4565b9150614cbc82614c7b565b602082019050919050565b60006020820190508181036000830152614ce081614ca4565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b6000614d1d601d83613bf4565b9150614d2882614ce7565b602082019050919050565b60006020820190508181036000830152614d4c81614d10565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614d89601383613bf4565b9150614d9482614d53565b602082019050919050565b60006020820190508181036000830152614db881614d7c565b9050919050565b6000614dca82613d16565b9150614dd583613d16565b925082821015614de857614de7614437565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e4f602583613bf4565b9150614e5a82614df3565b604082019050919050565b60006020820190508181036000830152614e7e81614e42565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ee1602383613bf4565b9150614eec82614e85565b604082019050919050565b60006020820190508181036000830152614f1081614ed4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f73602683613bf4565b9150614f7e82614f17565b604082019050919050565b60006020820190508181036000830152614fa281614f66565b9050919050565b6000604082019050614fbe6000830185613e2f565b614fcb6020830184613e2f565b9392505050565b600081905092915050565b50565b6000614fed600083614fd2565b9150614ff882614fdd565b600082019050919050565b600061500e82614fe0565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615074602183613bf4565b915061507f82615018565b604082019050919050565b600060208201905081810360008301526150a381615067565b9050919050565b6000815190506150b981613cea565b92915050565b6000602082840312156150d5576150d4613cae565b5b60006150e3848285016150aa565b91505092915050565b6000819050919050565b600061511161510c615107846150ec565b6142c1565b613d16565b9050919050565b615121816150f6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61515c81613cd8565b82525050565b600061516e8383615153565b60208301905092915050565b6000602082019050919050565b600061519282615127565b61519c8185615132565b93506151a783615143565b8060005b838110156151d85781516151bf8882615162565b97506151ca8361517a565b9250506001810190506151ab565b5085935050505092915050565b600060a0820190506151fa6000830188613e2f565b6152076020830187615118565b81810360408301526152198186615187565b9050615228606083018561416c565b6152356080830184613e2f565b9695505050505050565b600060c082019050615254600083018961416c565b6152616020830188613e2f565b61526e6040830187615118565b61527b6060830186615118565b615288608083018561416c565b61529560a0830184613e2f565b979650505050505050565b6000815190506152af81613d20565b92915050565b6000806000606084860312156152ce576152cd613cae565b5b60006152dc868287016152a0565b93505060206152ed868287016152a0565b92505060406152fe868287016152a0565b915050925092509256fea2646970667358221220d1625bd2b1a6d7af3265404ce073841f84da3a394259d0be94d5e1586b889ef064736f6c63430008090033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80638514022d11610139578063c0246668116100b6578063dd62ed3e1161007a578063dd62ed3e146108b4578063e16830a8146108f1578063f2fde38b1461091a578063f5b3c3bf14610943578063f887ea4014610980578063fc6224f4146109ab57610251565b8063c0246668146107de578063c16dd4a414610807578063c18bc19514610830578063d212a69a14610859578063d3f6a1571461088b57610251565b80639e252f00116100fd5780639e252f00146106f9578063a457c2d714610722578063a9059cbb1461075f578063b88631151461079c578063b9e418e7146107c757610251565b80638514022d146106145780638cd4426d1461063d5780638da5cb5b1461066657806395d89b411461069157806396880b17146106bc57610251565b80633265e846116101c75780636ddd17131161018b5780636ddd17131461054157806370a082311461056c578063715018a6146105a95780637571336a146105c05780637b913074146105e957610251565b80633265e84614610436578063395093511461045f57806349bd5a5e1461049c5780634fbee193146104c7578063555467a11461050457610251565b80631a8145bb1161020e5780631a8145bb1461034f5780631f3fed8f1461037a578063215d92a6146103a557806323b872dd146103ce578063313ce5671461040b57610251565b806306fdde0314610256578063095ea7b31461028157806310d5de53146102be57806311a582c3146102fb57806318160ddd1461032457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109d6565b6040516102789190613c82565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190613d4c565b610a68565b6040516102b59190613da7565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e09190613dc2565b610a8b565b6040516102f29190613da7565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190613def565b610aab565b005b34801561033057600080fd5b50610339610c7c565b6040516103469190613e3e565b60405180910390f35b34801561035b57600080fd5b50610364610c86565b6040516103719190613e3e565b60405180910390f35b34801561038657600080fd5b5061038f610c8c565b60405161039c9190613e3e565b60405180910390f35b3480156103b157600080fd5b506103cc60048036038101906103c79190613fcd565b610c92565b005b3480156103da57600080fd5b506103f560048036038101906103f09190614029565b610dbe565b6040516104029190613da7565b60405180910390f35b34801561041757600080fd5b50610420610ded565b60405161042d9190614098565b60405180910390f35b34801561044257600080fd5b5061045d600480360381019061045891906140df565b610df6565b005b34801561046b57600080fd5b5061048660048036038101906104819190613d4c565b6110cf565b6040516104939190613da7565b60405180910390f35b3480156104a857600080fd5b506104b1611106565b6040516104be919061417b565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190613dc2565b61112a565b6040516104fb9190613da7565b60405180910390f35b34801561051057600080fd5b5061052b60048036038101906105269190614196565b611180565b6040516105389190613da7565b60405180910390f35b34801561054d57600080fd5b50610556611229565b6040516105639190613da7565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190613dc2565b61123c565b6040516105a09190613e3e565b60405180910390f35b3480156105b557600080fd5b506105be611284565b005b3480156105cc57600080fd5b506105e760048036038101906105e291906141c3565b6113dc565b005b3480156105f557600080fd5b506105fe6114ce565b60405161060b919061417b565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906141c3565b6114f4565b005b34801561064957600080fd5b50610664600480360381019061065f9190613d4c565b6115e6565b005b34801561067257600080fd5b5061067b611716565b604051610688919061417b565b60405180910390f35b34801561069d57600080fd5b506106a6611740565b6040516106b39190613c82565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de9190613dc2565b6117d2565b6040516106f09190613da7565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b9190614196565b6117f2565b005b34801561072e57600080fd5b5061074960048036038101906107449190613d4c565b6118da565b6040516107569190613da7565b60405180910390f35b34801561076b57600080fd5b5061078660048036038101906107819190613d4c565b611951565b6040516107939190613da7565b60405180910390f35b3480156107a857600080fd5b506107b1611974565b6040516107be9190613da7565b60405180910390f35b3480156107d357600080fd5b506107dc611987565b005b3480156107ea57600080fd5b50610805600480360381019061080091906141c3565b611a69565b005b34801561081357600080fd5b5061082e600480360381019061082991906141c3565b611b5b565b005b34801561083c57600080fd5b5061085760048036038101906108529190614196565b611cdc565b005b34801561086557600080fd5b5061086e611e11565b604051610882989796959493929190614203565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad9190614281565b611eaf565b005b3480156108c057600080fd5b506108db60048036038101906108d69190614281565b611fcc565b6040516108e89190613e3e565b60405180910390f35b3480156108fd57600080fd5b50610918600480360381019061091391906141c3565b612053565b005b34801561092657600080fd5b50610941600480360381019061093c9190613dc2565b612145565b005b34801561094f57600080fd5b5061096a60048036038101906109659190613dc2565b61230c565b6040516109779190613da7565b60405180910390f35b34801561098c57600080fd5b5061099561232c565b6040516109a29190614320565b60405180910390f35b3480156109b757600080fd5b506109c0612350565b6040516109cd9190613e3e565b60405180910390f35b6060600380546109e59061436a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a119061436a565b8015610a5e5780601f10610a3357610100808354040283529160200191610a5e565b820191906000526020600020905b815481529060010190602001808311610a4157829003601f168201915b5050505050905090565b600080610a73612356565b9050610a8081858561235e565b600191505092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b610ab3612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b39906143e8565b60405180910390fd5b6064610b4c610c7c565b610b569190614466565b6103e883610b62610c7c565b610b6c9190614497565b610b769190614466565b1015610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90614563565b60405180910390fd5b6064610bc1610c7c565b610bcb9190614466565b6103e882610bd7610c7c565b610be19190614497565b610beb9190614466565b1015610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c23906145f5565b60405180910390fd5b6103e882610c38610c7c565b610c429190614497565b610c4c9190614466565b6008819055506103e881610c5e610c7c565b610c689190614497565b610c729190614466565b6009819055505050565b6000600254905090565b600f5481565b600e5481565b610c9a612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d20906143e8565b60405180910390fd5b60005b8251811015610db9578160156000858481518110610d4d57610d4c614615565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610db190614644565b915050610d2c565b505050565b600080610dc9612356565b9050610dd6858285612529565b610de18585856125b5565b60019150509392505050565b60006012905090565b610dfe612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e84906143e8565b60405180910390fd5b85600d60000160016101000a81548160ff021916908360ff16021790555084600d60000160036101000a81548160ff021916908360ff16021790555083600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff16610f2a919061468d565b610f34919061468d565b600d60000160006101000a81548160ff021916908360ff16021790555082600d60000160056101000a81548160ff021916908360ff16021790555081600d60000160076101000a81548160ff021916908360ff16021790555080600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff16610fee919061468d565b610ff8919061468d565b600d60000160046101000a81548160ff021916908360ff1602179055506032600d60000160009054906101000a900460ff1660ff16111561106e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106590614710565b60405180910390fd5b6032600d60000160049054906101000a900460ff1660ff1611156110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be90614710565b60405180910390fd5b505050505050565b6000806110da612356565b90506110fb8185856110ec8589611fcc565b6110f69190614730565b61235e565b600191505092915050565b7f0000000000000000000000009ed43ddf8f5eb5206a6f0c18b42fa698ba4532cc81565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600061118a612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611219576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611210906143e8565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61128c612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611312906143e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113e4612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a906143e8565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114fc612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611582906143e8565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6115ee612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611674906143e8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6116a1611716565b836040518363ffffffff1660e01b81526004016116bf929190614786565b602060405180830381600087803b1580156116d957600080fd5b505af11580156116ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171191906147c4565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461174f9061436a565b80601f016020809104026020016040519081016040528092919081815260200182805461177b9061436a565b80156117c85780601f1061179d576101008083540402835291602001916117c8565b820191906000526020600020905b8154815290600101906020018083116117ab57829003601f168201915b5050505050905090565b60146020528060005260406000206000915054906101000a900460ff1681565b6117fa612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611889576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611880906143e8565b60405180910390fd5b611891611716565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156118d6573d6000803e3d6000fd5b5050565b6000806118e5612356565b905060006118f38286611fcc565b905083811015611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90614863565b60405180910390fd5b611945828686840361235e565b60019250505092915050565b60008061195c612356565b90506119698185856125b5565b600191505092915050565b600c60029054906101000a900460ff1681565b61198f612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a15906143e8565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550600243611a619190614730565b601181905550565b611a71612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af7906143e8565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611b63612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be9906143e8565b60405180910390fd5b7f0000000000000000000000009ed43ddf8f5eb5206a6f0c18b42fa698ba4532cc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c78906148cf565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611ce4612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a906143e8565b60405180910390fd5b6064611d7d610c7c565b611d879190614466565b6103e882611d93610c7c565b611d9d9190614497565b611da79190614466565b1015611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf90614961565b60405180910390fd5b6103e881611df4610c7c565b611dfe9190614497565b611e089190614466565b600a8190555050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b611eb7612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3d906143e8565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61205b612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e1906143e8565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61214d612356565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d3906143e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561224c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612243906149f3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60166020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60105481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c590614a85565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561243e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243590614b17565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161251c9190613e3e565b60405180910390a3505050565b60006125358484611fcc565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146125af57818110156125a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259890614b83565b60405180910390fd5b6125ae848484840361235e565b5b50505050565b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126595750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f90614bef565b60405180910390fd5b60008114156126b2576126ad8383600061316e565b613169565b6126ba611716565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561272857506126f8611716565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127415750600c60029054906101000a900460ff16155b15612ac757600c60009054906101000a900460ff1661283b57601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127fb5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61283a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283190614c5b565b60405180910390fd5b5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128de5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561292d57600854811115612928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291f90614cc7565b60405180910390fd5b612a1c565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129d05750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a1b57600954811115612a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1190614d33565b60405180910390fd5b5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ac657600a54612a798361123c565b82612a849190614730565b1115612ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abc90614d9f565b60405180910390fd5b5b5b6000612ad23061123c565b90506000600b548210159050808015612af75750600c60019054906101000a900460ff165b8015612b105750600c60029054906101000a900460ff16155b8015612b655750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612bbb5750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c115750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c55576001600c60026101000a81548160ff021916908315150217905550612c396133e6565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d0b5750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d1557600090505b801561315a576000601154431015612db757612d4e6064612d406063886136d490919063ffffffff16565b61374f90919063ffffffff16565b90506063605e82612d5f9190614497565b612d699190614466565b600e6000828254612d7a9190614730565b925050819055506063600582612d909190614497565b612d9a9190614466565b60106000828254612dab9190614730565b92505081905550613135565b601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e2557506000600d60000160049054906101000a900460ff1660ff16115b15612f7757612e656064612e57600d60000160049054906101000a900460ff1660ff16886136d490919063ffffffff16565b61374f90919063ffffffff16565b9050600d60000160049054906101000a900460ff1660ff16600d60000160079054906101000a900460ff1660ff1682612e9e9190614497565b612ea89190614466565b600f6000828254612eb99190614730565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160059054906101000a900460ff1660ff1682612ef79190614497565b612f019190614466565b600e6000828254612f129190614730565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160069054906101000a900460ff1660ff1682612f509190614497565b612f5a9190614466565b60106000828254612f6b9190614730565b92505081905550613134565b601660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fe557506000600d60000160009054906101000a900460ff1660ff16115b15613133576130256064613017600d60000160009054906101000a900460ff1660ff16886136d490919063ffffffff16565b61374f90919063ffffffff16565b9050600d60000160009054906101000a900460ff1660ff16600d60000160039054906101000a900460ff1660ff168261305e9190614497565b6130689190614466565b600f60008282546130799190614730565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160019054906101000a900460ff1660ff16826130b79190614497565b6130c19190614466565b600e60008282546130d29190614730565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160029054906101000a900460ff1660ff16826131109190614497565b61311a9190614466565b6010600082825461312b9190614730565b925050819055505b5b5b600081111561314a5761314987308361316e565b5b80856131569190614dbf565b9450505b61316586868661316e565b5050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d590614e65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561324e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324590614ef7565b60405180910390fd5b613259838383613799565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156132df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d690614f89565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133cd9190613e3e565b60405180910390a36133e084848461379e565b50505050565b60006133f13061123c565b90506000601054600e54600f546134089190614730565b6134129190614730565b90506000808314806134245750600082145b15613431575050506136d2565b6014600b546134409190614497565b831115613459576014600b546134569190614497565b92505b6000600283600f548661346c9190614497565b6134769190614466565b6134809190614466565b9050600061349782866137a390919063ffffffff16565b905060004790506134a7826137ed565b60006134bc82476137a390919063ffffffff16565b905060006134e7876134d9600e54856136d490919063ffffffff16565b61374f90919063ffffffff16565b9050600061351288613504601054866136d490919063ffffffff16565b61374f90919063ffffffff16565b9050600081836135229190614730565b8461352d9190614dbf565b90506000600f819055506000600e8190555060006010819055506000871180156135575750600081115b156135a0576135668782613a39565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051613597929190614fa9565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683476135e59190614dbf565b6040516135f190615003565b60006040518083038185875af1925050503d806000811461362e576040519150601f19603f3d011682016040523d82523d6000602084013e613633565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161367f90615003565b60006040518083038185875af1925050503d80600081146136bc576040519150601f19603f3d011682016040523d82523d6000602084013e6136c1565b606091505b505080985050505050505050505050505b565b6000808314156136e75760009050613749565b600082846136f59190614497565b90508284826137049190614466565b14613744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373b9061508a565b60405180910390fd5b809150505b92915050565b600061379183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b22565b905092915050565b505050565b505050565b60006137e583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613b85565b905092915050565b6000600267ffffffffffffffff81111561380a57613809613e5e565b5b6040519080825280602002602001820160405280156138385781602001602082028036833780820191505090505b50905030816000815181106138505761384f614615565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156138f057600080fd5b505afa158015613904573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392891906150bf565b8160018151811061393c5761393b614615565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139a1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461235e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a039594939291906151e5565b600060405180830381600087803b158015613a1d57600080fd5b505af1158015613a31573d6000803e3d6000fd5b505050505050565b613a64307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461235e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613ac99695949392919061523f565b6060604051808303818588803b158015613ae257600080fd5b505af1158015613af6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b1b91906152b5565b5050505050565b60008083118290613b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b609190613c82565b60405180910390fd5b5060008385613b789190614466565b9050809150509392505050565b6000838311158290613bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bc49190613c82565b60405180910390fd5b5060008385613bdc9190614dbf565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c23578082015181840152602081019050613c08565b83811115613c32576000848401525b50505050565b6000601f19601f8301169050919050565b6000613c5482613be9565b613c5e8185613bf4565b9350613c6e818560208601613c05565b613c7781613c38565b840191505092915050565b60006020820190508181036000830152613c9c8184613c49565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ce382613cb8565b9050919050565b613cf381613cd8565b8114613cfe57600080fd5b50565b600081359050613d1081613cea565b92915050565b6000819050919050565b613d2981613d16565b8114613d3457600080fd5b50565b600081359050613d4681613d20565b92915050565b60008060408385031215613d6357613d62613cae565b5b6000613d7185828601613d01565b9250506020613d8285828601613d37565b9150509250929050565b60008115159050919050565b613da181613d8c565b82525050565b6000602082019050613dbc6000830184613d98565b92915050565b600060208284031215613dd857613dd7613cae565b5b6000613de684828501613d01565b91505092915050565b60008060408385031215613e0657613e05613cae565b5b6000613e1485828601613d37565b9250506020613e2585828601613d37565b9150509250929050565b613e3881613d16565b82525050565b6000602082019050613e536000830184613e2f565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613e9682613c38565b810181811067ffffffffffffffff82111715613eb557613eb4613e5e565b5b80604052505050565b6000613ec8613ca4565b9050613ed48282613e8d565b919050565b600067ffffffffffffffff821115613ef457613ef3613e5e565b5b602082029050602081019050919050565b600080fd5b6000613f1d613f1884613ed9565b613ebe565b90508083825260208201905060208402830185811115613f4057613f3f613f05565b5b835b81811015613f695780613f558882613d01565b845260208401935050602081019050613f42565b5050509392505050565b600082601f830112613f8857613f87613e59565b5b8135613f98848260208601613f0a565b91505092915050565b613faa81613d8c565b8114613fb557600080fd5b50565b600081359050613fc781613fa1565b92915050565b60008060408385031215613fe457613fe3613cae565b5b600083013567ffffffffffffffff81111561400257614001613cb3565b5b61400e85828601613f73565b925050602061401f85828601613fb8565b9150509250929050565b60008060006060848603121561404257614041613cae565b5b600061405086828701613d01565b935050602061406186828701613d01565b925050604061407286828701613d37565b9150509250925092565b600060ff82169050919050565b6140928161407c565b82525050565b60006020820190506140ad6000830184614089565b92915050565b6140bc8161407c565b81146140c757600080fd5b50565b6000813590506140d9816140b3565b92915050565b60008060008060008060c087890312156140fc576140fb613cae565b5b600061410a89828a016140ca565b965050602061411b89828a016140ca565b955050604061412c89828a016140ca565b945050606061413d89828a016140ca565b935050608061414e89828a016140ca565b92505060a061415f89828a016140ca565b9150509295509295509295565b61417581613cd8565b82525050565b6000602082019050614190600083018461416c565b92915050565b6000602082840312156141ac576141ab613cae565b5b60006141ba84828501613d37565b91505092915050565b600080604083850312156141da576141d9613cae565b5b60006141e885828601613d01565b92505060206141f985828601613fb8565b9150509250929050565b600061010082019050614219600083018b614089565b614226602083018a614089565b6142336040830189614089565b6142406060830188614089565b61424d6080830187614089565b61425a60a0830186614089565b61426760c0830185614089565b61427460e0830184614089565b9998505050505050505050565b6000806040838503121561429857614297613cae565b5b60006142a685828601613d01565b92505060206142b785828601613d01565b9150509250929050565b6000819050919050565b60006142e66142e16142dc84613cb8565b6142c1565b613cb8565b9050919050565b60006142f8826142cb565b9050919050565b600061430a826142ed565b9050919050565b61431a816142ff565b82525050565b60006020820190506143356000830184614311565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061438257607f821691505b602082108114156143965761439561433b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006143d2602083613bf4565b91506143dd8261439c565b602082019050919050565b60006020820190508181036000830152614401816143c5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061447182613d16565b915061447c83613d16565b92508261448c5761448b614408565b5b828204905092915050565b60006144a282613d16565b91506144ad83613d16565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144e6576144e5614437565b5b828202905092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b600061454d602383613bf4565b9150614558826144f1565b604082019050919050565b6000602082019050818103600083015261457c81614540565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b60006145df602483613bf4565b91506145ea82614583565b604082019050919050565b6000602082019050818103600083015261460e816145d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061464f82613d16565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561468257614681614437565b5b600182019050919050565b60006146988261407c565b91506146a38361407c565b92508260ff038211156146b9576146b8614437565b5b828201905092915050565b7f4d757374206b656570206665657320617420353025206f72206c657373000000600082015250565b60006146fa601d83613bf4565b9150614705826146c4565b602082019050919050565b60006020820190508181036000830152614729816146ed565b9050919050565b600061473b82613d16565b915061474683613d16565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561477b5761477a614437565b5b828201905092915050565b600060408201905061479b600083018561416c565b6147a86020830184613e2f565b9392505050565b6000815190506147be81613fa1565b92915050565b6000602082840312156147da576147d9613cae565b5b60006147e8848285016147af565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061484d602583613bf4565b9150614858826147f1565b604082019050919050565b6000602082019050818103600083015261487c81614840565b9050919050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b60006148b9601783613bf4565b91506148c482614883565b602082019050919050565b600060208201905081810360008301526148e8816148ac565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061494b602283613bf4565b9150614956826148ef565b604082019050919050565b6000602082019050818103600083015261497a8161493e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149dd602683613bf4565b91506149e882614981565b604082019050919050565b60006020820190508181036000830152614a0c816149d0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a6f602483613bf4565b9150614a7a82614a13565b604082019050919050565b60006020820190508181036000830152614a9e81614a62565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b01602283613bf4565b9150614b0c82614aa5565b604082019050919050565b60006020820190508181036000830152614b3081614af4565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614b6d601d83613bf4565b9150614b7882614b37565b602082019050919050565b60006020820190508181036000830152614b9c81614b60565b9050919050565b7f596f752063616e2774207472616e7366657220746f6b656e7300000000000000600082015250565b6000614bd9601983613bf4565b9150614be482614ba3565b602082019050919050565b60006020820190508181036000830152614c0881614bcc565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c45601683613bf4565b9150614c5082614c0f565b602082019050919050565b60006020820190508181036000830152614c7481614c38565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000614cb1601c83613bf4565b9150614cbc82614c7b565b602082019050919050565b60006020820190508181036000830152614ce081614ca4565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b6000614d1d601d83613bf4565b9150614d2882614ce7565b602082019050919050565b60006020820190508181036000830152614d4c81614d10565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614d89601383613bf4565b9150614d9482614d53565b602082019050919050565b60006020820190508181036000830152614db881614d7c565b9050919050565b6000614dca82613d16565b9150614dd583613d16565b925082821015614de857614de7614437565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e4f602583613bf4565b9150614e5a82614df3565b604082019050919050565b60006020820190508181036000830152614e7e81614e42565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ee1602383613bf4565b9150614eec82614e85565b604082019050919050565b60006020820190508181036000830152614f1081614ed4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f73602683613bf4565b9150614f7e82614f17565b604082019050919050565b60006020820190508181036000830152614fa281614f66565b9050919050565b6000604082019050614fbe6000830185613e2f565b614fcb6020830184613e2f565b9392505050565b600081905092915050565b50565b6000614fed600083614fd2565b9150614ff882614fdd565b600082019050919050565b600061500e82614fe0565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615074602183613bf4565b915061507f82615018565b604082019050919050565b600060208201905081810360008301526150a381615067565b9050919050565b6000815190506150b981613cea565b92915050565b6000602082840312156150d5576150d4613cae565b5b60006150e3848285016150aa565b91505092915050565b6000819050919050565b600061511161510c615107846150ec565b6142c1565b613d16565b9050919050565b615121816150f6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61515c81613cd8565b82525050565b600061516e8383615153565b60208301905092915050565b6000602082019050919050565b600061519282615127565b61519c8185615132565b93506151a783615143565b8060005b838110156151d85781516151bf8882615162565b97506151ca8361517a565b9250506001810190506151ab565b5085935050505092915050565b600060a0820190506151fa6000830188613e2f565b6152076020830187615118565b81810360408301526152198186615187565b9050615228606083018561416c565b6152356080830184613e2f565b9695505050505050565b600060c082019050615254600083018961416c565b6152616020830188613e2f565b61526e6040830187615118565b61527b6060830186615118565b615288608083018561416c565b61529560a0830184613e2f565b979650505050505050565b6000815190506152af81613d20565b92915050565b6000806000606084860312156152ce576152cd613cae565b5b60006152dc868287016152a0565b93505060206152ed868287016152a0565b92505060406152fe868287016152a0565b915050925092509256fea2646970667358221220d1625bd2b1a6d7af3265404ce073841f84da3a394259d0be94d5e1586b889ef064736f6c63430008090033

Deployed Bytecode Sourcemap

19265:13730:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2848:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4523:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20683:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23793:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3292:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20459:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20419;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26018:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4738:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3185:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24540:891;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5013:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19390:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26879:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23625:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19770:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3463:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11933:148;;;;;;;;;;;;;:::i;:::-;;25733:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19457:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25886:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26535:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11292:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3067:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20753:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26415:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5264:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3796:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19808:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23408:143;;;;;;;;;;;;;:::i;:::-;;25443:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26232:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24261:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20131:267;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;26678:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4052:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25581:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12236:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21024:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19341;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20499:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2848:100;2902:13;2935:5;2928:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2848:100;:::o;4523:201::-;4606:4;4623:13;4639:12;:10;:12::i;:::-;4623:28;;4662:32;4671:5;4678:7;4687:6;4662:8;:32::i;:::-;4712:4;4705:11;;;4523:201;;;;:::o;20683:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;23793:458::-;11513:12;:10;:12::i;:::-;11503:22;;:6;;;;;;;;;;;:22;;;11495:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23955:3:::1;23939:13;:11;:13::i;:::-;:19;;;;:::i;:::-;23929:4;23916:9;23900:13;:11;:13::i;:::-;:25;;;;:::i;:::-;23899:34;;;;:::i;:::-;23898:61;;23890:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;24076:3;24060:13;:11;:13::i;:::-;:19;;;;:::i;:::-;24050:4;24036:10;24020:13;:11;:13::i;:::-;:26;;;;:::i;:::-;24019:35;;;;:::i;:::-;24018:62;;24010:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24177:4;24164:9;24148:13;:11;:13::i;:::-;:25;;;;:::i;:::-;24147:34;;;;:::i;:::-;24132:12;:49;;;;24239:4;24225:10;24209:13;:11;:13::i;:::-;:26;;;;:::i;:::-;24208:35;;;;:::i;:::-;24192:13;:51;;;;23793:458:::0;;:::o;3292:108::-;3353:7;3380:12;;3373:19;;3292:108;:::o;20459:33::-;;;;:::o;20419:::-;;;;:::o;26018:208::-;11513:12;:10;:12::i;:::-;11503:22;;:6;;;;;;;;;;;:22;;;11495:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26118:9:::1;26113:106;26137:8;:15;26133:1;:19;26113:106;;;26202:5;26174:12;:25;26187:8;26196:1;26187:11;;;;;;;;:::i;:::-;;;;;;;;26174:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;26154:3;;;;;:::i;:::-;;;;26113:106;;;;26018:208:::0;;:::o;4738:261::-;4835:4;4852:15;4870:12;:10;:12::i;:::-;4852:30;;4893:38;4909:4;4915:7;4924:6;4893:15;:38::i;:::-;4942:27;4952:4;4958:2;4962:6;4942:9;:27::i;:::-;4987:4;4980:11;;;4738:261;;;;;:::o;3185:93::-;3243:5;3268:2;3261:9;;3185:93;:::o;24540:891::-;11513:12;:10;:12::i;:::-;11503:22;;:6;;;;;;;;;;;:22;;;11495:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24761:16:::1;24737:5;:21;;;:40;;;;;;;;;;;;;;;;;;24812:16;24788:5;:21;;;:40;;;;;;;;;;;;;;;;;;24865:18;24839:5;:23;;;:44;;;;;;;;;;;;;;;;;;24963:5;:23;;;;;;;;;;;;24939:5;:21;;;;;;;;;;;;24915:5;:21;;;;;;;;;;;;:45;;;;:::i;:::-;:71;;;;:::i;:::-;24894:5;:18;;;:92;;;;;;;;;;;;;;;;;;25024:17;24999:5;:22;;;:42;;;;;;;;;;;;;;;;;;25077:17;25052:5;:22;;;:42;;;;;;;;;;;;;;;;;;25132:19;25105:5;:24;;;:46;;;;;;;;;;;;;;;;;;25234:5;:24;;;;;;;;;;;;25209:5;:22;;;;;;;;;;;;25184:5;:22;;;;;;;;;;;;:47;;;;:::i;:::-;:74;;;;:::i;:::-;25162:5;:19;;;:96;;;;;;;;;;;;;;;;;;25299:2;25277:5;:18;;;;;;;;;;;;:24;;;;25269:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25380:2;25357:5;:19;;;;;;;;;;;;:25;;;;25349:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24540:891:::0;;;;;;:::o;5013:238::-;5101:4;5118:13;5134:12;:10;:12::i;:::-;5118:28;;5157:64;5166:5;5173:7;5210:10;5182:25;5192:5;5199:7;5182:9;:25::i;:::-;:38;;;;:::i;:::-;5157:8;:64::i;:::-;5239:4;5232:11;;;5013:238;;;;:::o;19390:38::-;;;:::o;26879:125::-;26944:4;26968:19;:28;26988:7;26968:28;;;;;;;;;;;;;;;;;;;;;;;;;26961:35;;26879:125;;;:::o;23625:158::-;23706:4;11513:12;:10;:12::i;:::-;11503:22;;:6;;;;;;;;;;;:22;;;11495:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23744:9:::1;23722:19;:31;;;;23771:4;23764:11;;23625:158:::0;;;:::o;19770:31::-;;;;;;;;;;;;;:::o;3463:127::-;3537:7;3564:9;:18;3574:7;3564:18;;;;;;;;;;;;;;;;3557:25;;3463:127;;;:::o;11933:148::-;11513:12;:10;:12::i;:::-;11503:22;;:6;;;;;;;;;;;:22;;;11495:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12040:1:::1;12003:40;;12024:6;;;;;;;;;;;12003:40;;;;;;;;;;;;12071:1;12054:6;;:19;;;;;;;;;;;;;;;;;;11933:148::o:0;25733:144::-;11513:12;:10;:12::i;:::-;11503:22;;:6;;;;;;;;;;;:22;;;11495:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25865:4:::1;25823:31;:39;25855:6;25823:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;25733:144:::0;;:::o;19457:33::-;;;;;;;;;;;;;:::o;25886:124::-;11513:12;:10;:12::i;:::-;11503:22;;:6;;;;;;;;;;;:22;;;11495:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25997:5:::1;25973:12;:21;25986:7;25973:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;25886:124:::0;;:::o;26535:135::-;11513:12;:10;:12::i;:::-;11503:22;;:6;;;;;;;;;;;:22;;;11495:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26627:8:::1;26620:25;;;26646:7;:5;:7::i;:::-;26655:6;26620:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26535:135:::0;;:::o;11292:78::-;11329:7;11356:6;;;;;;;;;;;11349:13;;11292:78;:::o;3067:104::-;3123:13;3156:7;3149:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3067:104;:::o;20753:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;26415:112::-;11513:12;:10;:12::i;:::-;11503:22;;:6;;;;;;;;;;;:22;;;11495:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26491:7:::1;:5;:7::i;:::-;26483:25;;:36;26509:9;26483:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;26415:112:::0;:::o;5264:436::-;5357:4;5374:13;5390:12;:10;:12::i;:::-;5374:28;;5413:24;5440:25;5450:5;5457:7;5440:9;:25::i;:::-;5413:52;;5504:15;5484:16;:35;;5476:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5597:60;5606:5;5613:7;5641:15;5622:16;:34;5597:8;:60::i;:::-;5688:4;5681:11;;;;5264:436;;;;:::o;3796:193::-;3875:4;3892:13;3908:12;:10;:12::i;:::-;3892:28;;3931;3941:5;3948:2;3952:6;3931:9;:28::i;:::-;3977:4;3970:11;;;3796:193;;;;:::o;19808:22::-;;;;;;;;;;;;;:::o;23408:143::-;11513:12;:10;:12::i;:::-;11503:22;;:6;;;;;;;;;;;:22;;;11495:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23473:4:::1;23461:9;;:16;;;;;;;;;;;;;;;;;;23502:4;23488:11;;:18;;;;;;;;;;;;;;;;;;23542:1;23527:12;:16;;;;:::i;:::-;23517:7;:26;;;;23408:143::o:0;25443:132::-;11513:12;:10;:12::i;:::-;11503:22;;:6;;;;;;;;;;;:22;;;11495:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25559:8:::1;25528:19;:28;25548:7;25528:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25443:132:::0;;:::o;26232:177::-;11513:12;:10;:12::i;:::-;11503:22;;:6;;;;;;;;;;;:22;;;11495:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26325:13:::1;26317:21;;:4;:21;;;;26309:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26396:5;26377:10;:16;26388:4;26377:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;26232:177:::0;;:::o;24261:271::-;11513:12;:10;:12::i;:::-;11503:22;;:6;;;;;;;;;;;:22;;;11495:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24414:3:::1;24398:13;:11;:13::i;:::-;:19;;;;:::i;:::-;24388:4;24371:13;24355;:11;:13::i;:::-;:29;;;;:::i;:::-;24354:38;;;;:::i;:::-;24353:65;;24345:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;24520:4;24503:13;24487;:11;:13::i;:::-;:29;;;;:::i;:::-;24486:38;;;;:::i;:::-;24468:15;:56;;;;24261:271:::0;:::o;20131:267::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26678:193::-;11513:12;:10;:12::i;:::-;11503:22;;:6;;;;;;;;;;;:22;;;11495:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26798:16:::1;26780:15;;:34;;;;;;;;;;;;;;;;;;26845:18;26825:17;;:38;;;;;;;;;;;;;;;;;;26678:193:::0;;:::o;4052:151::-;4141:7;4168:11;:18;4180:5;4168:18;;;;;;;;;;;;;;;:27;4187:7;4168:27;;;;;;;;;;;;;;;;4161:34;;4052:151;;;;:::o;25581:146::-;11513:12;:10;:12::i;:::-;11503:22;;:6;;;;;;;;;;;:22;;;11495:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25711:8:::1;25673:26;:35;25700:7;25673:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;25581:146:::0;;:::o;12236:244::-;11513:12;:10;:12::i;:::-;11503:22;;:6;;;;;;;;;;;:22;;;11495:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12345:1:::1;12325:22;;:8;:22;;;;12317:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12435:8;12406:38;;12427:6;;;;;;;;;;;12406:38;;;;;;;;;;;;12464:8;12455:6;;:17;;;;;;;;;;;;;;;;;;12236:244:::0;:::o;21024:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;19341:::-;;;:::o;20499:35::-;;;;:::o;2057:97::-;2109:7;2136:10;2129:17;;2057:97;:::o;7778:346::-;7897:1;7880:19;;:5;:19;;;;7872:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7978:1;7959:21;;:7;:21;;;;7951:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8062:6;8032:11;:18;8044:5;8032:18;;;;;;;;;;;;;;;:27;8051:7;8032:27;;;;;;;;;;;;;;;:36;;;;8100:7;8084:32;;8093:5;8084:32;;;8109:6;8084:32;;;;;;:::i;:::-;;;;;;;;7778:346;;;:::o;8138:419::-;8239:24;8266:25;8276:5;8283:7;8266:9;:25::i;:::-;8239:52;;8326:17;8306:16;:37;8302:248;;8388:6;8368:16;:26;;8360:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8472:51;8481:5;8488:7;8516:6;8497:16;:25;8472:8;:51::i;:::-;8302:248;8228:329;8138:419;;;:::o;27012:3437::-;27164:12;:20;27177:6;27164:20;;;;;;;;;;;;;;;;;;;;;;;;;27163:21;:49;;;;;27189:12;:23;27202:9;27189:23;;;;;;;;;;;;;;;;;;;;;;;;;27188:24;27163:49;27155:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;27315:1;27305:6;:11;27301:102;;;27333:37;27349:6;27357:9;27368:1;27333:15;:37::i;:::-;27385:7;;27301:102;27443:7;:5;:7::i;:::-;27433:17;;:6;:17;;;;:54;;;;;27480:7;:5;:7::i;:::-;27467:20;;:9;:20;;;;27433:54;:82;;;;;27505:10;;;;;;;;;;;27504:11;27433:82;27415:849;;;27549:9;;;;;;;;;;;27544:147;;27587:19;:27;27607:6;27587:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;27618:19;:30;27638:9;27618:30;;;;;;;;;;;;;;;;;;;;;;;;;27587:61;27579:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;27544:147;27709:10;:18;27720:6;27709:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;27732:31;:42;27764:9;27732:42;;;;;;;;;;;;;;;;;;;;;;;;;27731:43;27709:65;27705:360;;;27813:12;;27803:6;:22;;27795:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27705:360;;;27898:10;:21;27909:9;27898:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;27924:31;:39;27956:6;27924:39;;;;;;;;;;;;;;;;;;;;;;;;;27923:40;27898:65;27894:171;;;28002:13;;27992:6;:23;;27984:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27894:171;27705:360;28086:26;:37;28113:9;28086:37;;;;;;;;;;;;;;;;;;;;;;;;;28081:159;;28185:15;;28161:20;28171:9;28161;:20::i;:::-;28152:6;:29;;;;:::i;:::-;:48;;28144:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;28081:159;27415:849;28290:28;28321:24;28339:4;28321:9;:24::i;:::-;28290:55;;28359:12;28398:19;;28374:20;:43;;28359:58;;28448:7;:35;;;;;28472:11;;;;;;;;;;;28448:35;:63;;;;;28501:10;;;;;;;;;;;28500:11;28448:63;:101;;;;;28528:10;:21;28539:9;28528:21;;;;;;;;;;;;;;;;;;;;;;;;;28448:101;:146;;;;;28567:19;:27;28587:6;28567:27;;;;;;;;;;;;;;;;;;;;;;;;;28566:28;28448:146;:194;;;;;28612:19;:30;28632:9;28612:30;;;;;;;;;;;;;;;;;;;;;;;;;28611:31;28448:194;28430:326;;;28682:4;28669:10;;:17;;;;;;;;;;;;;;;;;;28701:10;:8;:10::i;:::-;28739:5;28726:10;;:18;;;;;;;;;;;;;;;;;;28430:326;28769:12;28785:10;;;;;;;;;;;28784:11;28769:26;;28897:19;:27;28917:6;28897:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;28928:19;:30;28948:9;28928:30;;;;;;;;;;;;;;;;;;;;;;;;;28897:61;28893:109;;;28985:5;28975:15;;28893:109;29103:7;29099:1288;;;29127:12;29176:7;;29161:12;:22;29158:1076;;;29211:23;29230:3;29211:14;29222:2;29211:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;29204:30;;29289:2;29283;29276:4;:9;;;;:::i;:::-;29275:16;;;;:::i;:::-;29253:18;;:38;;;;;;;:::i;:::-;;;;;;;;29347:2;29342:1;29335:4;:8;;;;:::i;:::-;29334:15;;;;:::i;:::-;29310:20;;:39;;;;;;;:::i;:::-;;;;;;;;29158:1076;;;29375:10;:21;29386:9;29375:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;29422:1;29400:5;:19;;;;;;;;;;;;:23;;;29375:48;29371:863;;;29451:40;29487:3;29451:31;29462:5;:19;;;;;;;;;;;;29451:31;;:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;29444:47;;29564:5;:19;;;;;;;;;;;;29532:51;;29539:5;:22;;;;;;;;;;;;29532:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;29510:18;;:73;;;;;;;:::i;:::-;;;;;;;;29656:5;:19;;;;;;;;;;;;29624:51;;29631:5;:22;;;;;;;;;;;;29624:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;29602:18;;:73;;;;;;;:::i;:::-;;;;;;;;29752:5;:19;;;;;;;;;;;;29718:53;;29725:5;:24;;;;;;;;;;;;29718:31;;:4;:31;;;;:::i;:::-;:53;;;;:::i;:::-;29694:20;;:77;;;;;;;:::i;:::-;;;;;;;;29371:863;;;29833:10;:18;29844:6;29833:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;29876:1;29855:5;:18;;;;;;;;;;;;:22;;;29833:44;29829:405;;;29905:39;29940:3;29905:30;29916:5;:18;;;;;;;;;;;;29905:30;;:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;29898:46;;30016:5;:18;;;;;;;;;;;;29985:49;;29992:5;:21;;;;;;;;;;;;29985:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;29963:18;;:71;;;;;;;:::i;:::-;;;;;;;;30106:5;:18;;;;;;;;;;;;30075:49;;30082:5;:21;;;;;;;;;;;;30075:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;30053:18;;:71;;;;;;;:::i;:::-;;;;;;;;30200:5;:18;;;;;;;;;;;;30167:51;;30174:5;:23;;;;;;;;;;;;30167:30;;:4;:30;;;;:::i;:::-;:51;;;;:::i;:::-;30143:20;;:75;;;;;;;:::i;:::-;;;;;;;;29829:405;29371:863;29158:1076;30261:1;30254:4;:8;30250:93;;;30283:44;30299:6;30315:4;30322;30283:15;:44::i;:::-;30250:93;30369:4;30359:14;;;;;:::i;:::-;;;29112:1275;29099:1288;30399:42;30415:6;30423:9;30434:6;30399:15;:42::i;:::-;27144:3305;;;27012:3437;;;;:::o;5714:806::-;5827:1;5811:18;;:4;:18;;;;5803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5904:1;5890:16;;:2;:16;;;;5882:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;5959:38;5980:4;5986:2;5990:6;5959:20;:38::i;:::-;6010:19;6032:9;:15;6042:4;6032:15;;;;;;;;;;;;;;;;6010:37;;6081:6;6066:11;:21;;6058:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;6198:6;6184:11;:20;6166:9;:15;6176:4;6166:15;;;;;;;;;;;;;;;:38;;;;6401:6;6384:9;:13;6394:2;6384:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;6451:2;6436:26;;6445:4;6436:26;;;6455:6;6436:26;;;;;;:::i;:::-;;;;;;;;6475:37;6495:4;6501:2;6505:6;6475:19;:37::i;:::-;5792:728;5714:806;;;:::o;31377:1613::-;31416:28;31447:24;31465:4;31447:9;:24::i;:::-;31416:55;;31482:14;31541:20;;31520:18;;31499;;:39;;;;:::i;:::-;:62;;;;:::i;:::-;31482:79;;31572:12;31625:1;31601:20;:25;:40;;;;31640:1;31630:6;:11;31601:40;31597:57;;;31645:7;;;;;31597:57;31715:2;31693:19;;:24;;;;:::i;:::-;31670:20;:47;31666:127;;;31779:2;31757:19;;:24;;;;:::i;:::-;31734:47;;31666:127;31854:23;31933:1;31924:6;31903:18;;31880:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;31854:80;;31945:26;31974:41;31999:15;31974:20;:24;;:41;;;;:::i;:::-;31945:70;;32029:25;32057:21;32029:49;;32091:36;32108:18;32091:16;:36::i;:::-;32142:18;32163:44;32189:17;32163:21;:25;;:44;;;;:::i;:::-;32142:65;;32221:23;32247:46;32286:6;32247:34;32262:18;;32247:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;32221:72;;32304:25;32332:48;32373:6;32332:36;32347:20;;32332:10;:14;;:36;;;;:::i;:::-;:40;;:48;;;;:::i;:::-;32304:76;;32391:23;32449:17;32431:15;:35;;;;:::i;:::-;32417:10;:50;;;;:::i;:::-;32391:76;;32503:1;32482:18;:22;;;;32536:1;32515:18;:22;;;;32571:1;32548:20;:24;;;;32609:1;32591:15;:19;:42;;;;;32632:1;32614:15;:19;32591:42;32587:192;;;32650:46;32663:15;32680;32650:12;:46::i;:::-;32716:51;32731:18;32751:15;32716:51;;;;;;;:::i;:::-;;;;;;;;32587:192;32812:17;;;;;;;;;;;32804:31;;32869:15;32845:21;:39;;;;:::i;:::-;32804:88;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32791:101;;;;;32924:15;;;;;;;;;;;32916:29;;32954:21;32916:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32903:79;;;;;31405:1585;;;;;;;;;;31377:1613;:::o;10097:256::-;10154:7;10189:1;10184;:6;10180:47;;;10214:1;10207:8;;;;10180:47;10240:9;10256:1;10252;:5;;;;:::i;:::-;10240:17;;10285:1;10280;10276;:5;;;;:::i;:::-;:10;10268:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;10344:1;10337:8;;;10097:256;;;;;:::o;10364:131::-;10421:7;10448:39;10452:1;10455;10448:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;10441:46;;10364:131;;;;:::o;8571:91::-;;;;:::o;8676:90::-;;;;:::o;9750:135::-;9807:7;9834:43;9838:1;9841;9834:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9827:50;;9750:135;;;;:::o;30457:554::-;30581:21;30619:1;30605:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30581:40;;30650:4;30632;30637:1;30632:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30676:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30666:4;30671:1;30666:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30702:49;30719:4;30734:6;30743:7;30702:8;:49::i;:::-;30790:6;:57;;;30862:7;30884:1;30928:4;30955;30975:15;30790:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30508:503;30457:554;:::o;31019:350::-;31163:49;31180:4;31195:6;31204:7;31163:8;:49::i;:::-;31255:6;:22;;;31286:9;31307:4;31314:7;31323:1;31326;31338:4;31345:15;31255:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31019:350;;:::o;10507:277::-;10592:7;10624:1;10620;:5;10627:12;10612:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10651:9;10667:1;10663;:5;;;;:::i;:::-;10651:17;;10775:1;10768:8;;;10507:277;;;;;:::o;9898:191::-;9983:7;10016:1;10011;:6;;10019:12;10003:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10043:9;10059:1;10055;:5;;;;:::i;:::-;10043:17;;10080:1;10073:8;;;9898:191;;;;;:::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;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700: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:117::-;4770:1;4767;4760:12;4784:180;4832:77;4829:1;4822:88;4929:4;4926:1;4919:15;4953:4;4950:1;4943:15;4970:281;5053:27;5075:4;5053:27;:::i;:::-;5045:6;5041:40;5183:6;5171:10;5168:22;5147:18;5135:10;5132:34;5129:62;5126:88;;;5194:18;;:::i;:::-;5126:88;5234:10;5230:2;5223:22;5013:238;4970:281;;:::o;5257:129::-;5291:6;5318:20;;:::i;:::-;5308:30;;5347:33;5375:4;5367:6;5347:33;:::i;:::-;5257:129;;;:::o;5392:311::-;5469:4;5559:18;5551:6;5548:30;5545:56;;;5581:18;;:::i;:::-;5545:56;5631:4;5623:6;5619:17;5611:25;;5691:4;5685;5681:15;5673:23;;5392:311;;;:::o;5709:117::-;5818:1;5815;5808:12;5849:710;5945:5;5970:81;5986:64;6043:6;5986:64;:::i;:::-;5970:81;:::i;:::-;5961:90;;6071:5;6100:6;6093:5;6086:21;6134:4;6127:5;6123:16;6116:23;;6187:4;6179:6;6175:17;6167:6;6163:30;6216:3;6208:6;6205:15;6202:122;;;6235:79;;:::i;:::-;6202:122;6350:6;6333:220;6367:6;6362:3;6359:15;6333:220;;;6442:3;6471:37;6504:3;6492:10;6471:37;:::i;:::-;6466:3;6459:50;6538:4;6533:3;6529:14;6522:21;;6409:144;6393:4;6388:3;6384:14;6377:21;;6333:220;;;6337:21;5951:608;;5849:710;;;;;:::o;6582:370::-;6653:5;6702:3;6695:4;6687:6;6683:17;6679:27;6669:122;;6710:79;;:::i;:::-;6669:122;6827:6;6814:20;6852:94;6942:3;6934:6;6927:4;6919:6;6915:17;6852:94;:::i;:::-;6843:103;;6659:293;6582:370;;;;:::o;6958:116::-;7028:21;7043:5;7028:21;:::i;:::-;7021:5;7018:32;7008:60;;7064:1;7061;7054:12;7008:60;6958:116;:::o;7080:133::-;7123:5;7161:6;7148:20;7139:29;;7177:30;7201:5;7177:30;:::i;:::-;7080:133;;;;:::o;7219:678::-;7309:6;7317;7366:2;7354:9;7345:7;7341:23;7337:32;7334:119;;;7372:79;;:::i;:::-;7334:119;7520:1;7509:9;7505:17;7492:31;7550:18;7542:6;7539:30;7536:117;;;7572:79;;:::i;:::-;7536:117;7677:78;7747:7;7738:6;7727:9;7723:22;7677:78;:::i;:::-;7667:88;;7463:302;7804:2;7830:50;7872:7;7863:6;7852:9;7848:22;7830:50;:::i;:::-;7820:60;;7775:115;7219:678;;;;;:::o;7903:619::-;7980:6;7988;7996;8045:2;8033:9;8024:7;8020:23;8016:32;8013:119;;;8051:79;;:::i;:::-;8013:119;8171:1;8196:53;8241:7;8232:6;8221:9;8217:22;8196:53;:::i;:::-;8186:63;;8142:117;8298:2;8324:53;8369:7;8360:6;8349:9;8345:22;8324:53;:::i;:::-;8314:63;;8269:118;8426:2;8452:53;8497:7;8488:6;8477:9;8473:22;8452:53;:::i;:::-;8442:63;;8397:118;7903:619;;;;;:::o;8528:86::-;8563:7;8603:4;8596:5;8592:16;8581:27;;8528:86;;;:::o;8620:112::-;8703:22;8719:5;8703:22;:::i;:::-;8698:3;8691:35;8620:112;;:::o;8738:214::-;8827:4;8865:2;8854:9;8850:18;8842:26;;8878:67;8942:1;8931:9;8927:17;8918:6;8878:67;:::i;:::-;8738:214;;;;:::o;8958:118::-;9029:22;9045:5;9029:22;:::i;:::-;9022:5;9019:33;9009:61;;9066:1;9063;9056:12;9009:61;8958:118;:::o;9082:135::-;9126:5;9164:6;9151:20;9142:29;;9180:31;9205:5;9180:31;:::i;:::-;9082:135;;;;:::o;9223:1033::-;9315:6;9323;9331;9339;9347;9355;9404:3;9392:9;9383:7;9379:23;9375:33;9372:120;;;9411:79;;:::i;:::-;9372:120;9531:1;9556:51;9599:7;9590:6;9579:9;9575:22;9556:51;:::i;:::-;9546:61;;9502:115;9656:2;9682:51;9725:7;9716:6;9705:9;9701:22;9682:51;:::i;:::-;9672:61;;9627:116;9782:2;9808:51;9851:7;9842:6;9831:9;9827:22;9808:51;:::i;:::-;9798:61;;9753:116;9908:2;9934:51;9977:7;9968:6;9957:9;9953:22;9934:51;:::i;:::-;9924:61;;9879:116;10034:3;10061:51;10104:7;10095:6;10084:9;10080:22;10061:51;:::i;:::-;10051:61;;10005:117;10161:3;10188:51;10231:7;10222:6;10211:9;10207:22;10188:51;:::i;:::-;10178:61;;10132:117;9223:1033;;;;;;;;:::o;10262:118::-;10349:24;10367:5;10349:24;:::i;:::-;10344:3;10337:37;10262:118;;:::o;10386:222::-;10479:4;10517:2;10506:9;10502:18;10494:26;;10530:71;10598:1;10587:9;10583:17;10574:6;10530:71;:::i;:::-;10386:222;;;;:::o;10614:329::-;10673:6;10722:2;10710:9;10701:7;10697:23;10693:32;10690:119;;;10728:79;;:::i;:::-;10690:119;10848:1;10873:53;10918:7;10909:6;10898:9;10894:22;10873:53;:::i;:::-;10863:63;;10819:117;10614:329;;;;:::o;10949:468::-;11014:6;11022;11071:2;11059:9;11050:7;11046:23;11042:32;11039:119;;;11077:79;;:::i;:::-;11039:119;11197:1;11222:53;11267:7;11258:6;11247:9;11243:22;11222:53;:::i;:::-;11212:63;;11168:117;11324:2;11350:50;11392:7;11383:6;11372:9;11368:22;11350:50;:::i;:::-;11340:60;;11295:115;10949:468;;;;;:::o;11423:933::-;11680:4;11718:3;11707:9;11703:19;11695:27;;11732:67;11796:1;11785:9;11781:17;11772:6;11732:67;:::i;:::-;11809:68;11873:2;11862:9;11858:18;11849:6;11809:68;:::i;:::-;11887;11951:2;11940:9;11936:18;11927:6;11887:68;:::i;:::-;11965;12029:2;12018:9;12014:18;12005:6;11965:68;:::i;:::-;12043:69;12107:3;12096:9;12092:19;12083:6;12043:69;:::i;:::-;12122;12186:3;12175:9;12171:19;12162:6;12122:69;:::i;:::-;12201;12265:3;12254:9;12250:19;12241:6;12201:69;:::i;:::-;12280;12344:3;12333:9;12329:19;12320:6;12280:69;:::i;:::-;11423:933;;;;;;;;;;;:::o;12362:474::-;12430:6;12438;12487:2;12475:9;12466:7;12462:23;12458:32;12455:119;;;12493:79;;:::i;:::-;12455:119;12613:1;12638:53;12683:7;12674:6;12663:9;12659:22;12638:53;:::i;:::-;12628:63;;12584:117;12740:2;12766:53;12811:7;12802:6;12791:9;12787:22;12766:53;:::i;:::-;12756:63;;12711:118;12362:474;;;;;:::o;12842:60::-;12870:3;12891:5;12884:12;;12842:60;;;:::o;12908:142::-;12958:9;12991:53;13009:34;13018:24;13036:5;13018:24;:::i;:::-;13009:34;:::i;:::-;12991:53;:::i;:::-;12978:66;;12908:142;;;:::o;13056:126::-;13106:9;13139:37;13170:5;13139:37;:::i;:::-;13126:50;;13056:126;;;:::o;13188:153::-;13265:9;13298:37;13329:5;13298:37;:::i;:::-;13285:50;;13188:153;;;:::o;13347:185::-;13461:64;13519:5;13461:64;:::i;:::-;13456:3;13449:77;13347:185;;:::o;13538:276::-;13658:4;13696:2;13685:9;13681:18;13673:26;;13709:98;13804:1;13793:9;13789:17;13780:6;13709:98;:::i;:::-;13538:276;;;;:::o;13820:180::-;13868:77;13865:1;13858:88;13965:4;13962:1;13955:15;13989:4;13986:1;13979:15;14006:320;14050:6;14087:1;14081:4;14077:12;14067:22;;14134:1;14128:4;14124:12;14155:18;14145:81;;14211:4;14203:6;14199:17;14189:27;;14145:81;14273:2;14265:6;14262:14;14242:18;14239:38;14236:84;;;14292:18;;:::i;:::-;14236:84;14057:269;14006:320;;;:::o;14332:182::-;14472:34;14468:1;14460:6;14456:14;14449:58;14332:182;:::o;14520:366::-;14662:3;14683:67;14747:2;14742:3;14683:67;:::i;:::-;14676:74;;14759:93;14848:3;14759:93;:::i;:::-;14877:2;14872:3;14868:12;14861:19;;14520:366;;;:::o;14892:419::-;15058:4;15096:2;15085:9;15081:18;15073:26;;15145:9;15139:4;15135:20;15131:1;15120:9;15116:17;15109:47;15173:131;15299:4;15173:131;:::i;:::-;15165:139;;14892:419;;;:::o;15317:180::-;15365:77;15362:1;15355:88;15462:4;15459:1;15452:15;15486:4;15483:1;15476:15;15503:180;15551:77;15548:1;15541:88;15648:4;15645:1;15638:15;15672:4;15669:1;15662:15;15689:185;15729:1;15746:20;15764:1;15746:20;:::i;:::-;15741:25;;15780:20;15798:1;15780:20;:::i;:::-;15775:25;;15819:1;15809:35;;15824:18;;:::i;:::-;15809:35;15866:1;15863;15859:9;15854:14;;15689:185;;;;:::o;15880:348::-;15920:7;15943:20;15961:1;15943:20;:::i;:::-;15938:25;;15977:20;15995:1;15977:20;:::i;:::-;15972:25;;16165:1;16097:66;16093:74;16090:1;16087:81;16082:1;16075:9;16068:17;16064:105;16061:131;;;16172:18;;:::i;:::-;16061:131;16220:1;16217;16213:9;16202:20;;15880:348;;;;:::o;16234:222::-;16374:34;16370:1;16362:6;16358:14;16351:58;16443:5;16438:2;16430:6;16426:15;16419:30;16234:222;:::o;16462:366::-;16604:3;16625:67;16689:2;16684:3;16625:67;:::i;:::-;16618:74;;16701:93;16790:3;16701:93;:::i;:::-;16819:2;16814:3;16810:12;16803:19;;16462:366;;;:::o;16834:419::-;17000:4;17038:2;17027:9;17023:18;17015:26;;17087:9;17081:4;17077:20;17073:1;17062:9;17058:17;17051:47;17115:131;17241:4;17115:131;:::i;:::-;17107:139;;16834:419;;;:::o;17259:223::-;17399:34;17395:1;17387:6;17383:14;17376:58;17468:6;17463:2;17455:6;17451:15;17444:31;17259:223;:::o;17488:366::-;17630:3;17651:67;17715:2;17710:3;17651:67;:::i;:::-;17644:74;;17727:93;17816:3;17727:93;:::i;:::-;17845:2;17840:3;17836:12;17829:19;;17488:366;;;:::o;17860:419::-;18026:4;18064:2;18053:9;18049:18;18041:26;;18113:9;18107:4;18103:20;18099:1;18088:9;18084:17;18077:47;18141:131;18267:4;18141:131;:::i;:::-;18133:139;;17860:419;;;:::o;18285:180::-;18333:77;18330:1;18323:88;18430:4;18427:1;18420:15;18454:4;18451:1;18444:15;18471:233;18510:3;18533:24;18551:5;18533:24;:::i;:::-;18524:33;;18579:66;18572:5;18569:77;18566:103;;;18649:18;;:::i;:::-;18566:103;18696:1;18689:5;18685:13;18678:20;;18471:233;;;:::o;18710:237::-;18748:3;18767:18;18783:1;18767:18;:::i;:::-;18762:23;;18799:18;18815:1;18799:18;:::i;:::-;18794:23;;18889:1;18883:4;18879:12;18876:1;18873:19;18870:45;;;18895:18;;:::i;:::-;18870:45;18939:1;18936;18932:9;18925:16;;18710:237;;;;:::o;18953:179::-;19093:31;19089:1;19081:6;19077:14;19070:55;18953:179;:::o;19138:366::-;19280:3;19301:67;19365:2;19360:3;19301:67;:::i;:::-;19294:74;;19377:93;19466:3;19377:93;:::i;:::-;19495:2;19490:3;19486:12;19479:19;;19138:366;;;:::o;19510:419::-;19676:4;19714:2;19703:9;19699:18;19691:26;;19763:9;19757:4;19753:20;19749:1;19738:9;19734:17;19727:47;19791:131;19917:4;19791:131;:::i;:::-;19783:139;;19510:419;;;:::o;19935:305::-;19975:3;19994:20;20012:1;19994:20;:::i;:::-;19989:25;;20028:20;20046:1;20028:20;:::i;:::-;20023:25;;20182:1;20114:66;20110:74;20107:1;20104:81;20101:107;;;20188:18;;:::i;:::-;20101:107;20232:1;20229;20225:9;20218:16;;19935:305;;;;:::o;20246:332::-;20367:4;20405:2;20394:9;20390:18;20382:26;;20418:71;20486:1;20475:9;20471:17;20462:6;20418:71;:::i;:::-;20499:72;20567:2;20556:9;20552:18;20543:6;20499:72;:::i;:::-;20246:332;;;;;:::o;20584:137::-;20638:5;20669:6;20663:13;20654:22;;20685:30;20709:5;20685:30;:::i;:::-;20584:137;;;;:::o;20727:345::-;20794:6;20843:2;20831:9;20822:7;20818:23;20814:32;20811:119;;;20849:79;;:::i;:::-;20811:119;20969:1;20994:61;21047:7;21038:6;21027:9;21023:22;20994:61;:::i;:::-;20984:71;;20940:125;20727:345;;;;:::o;21078:224::-;21218:34;21214:1;21206:6;21202:14;21195:58;21287:7;21282:2;21274:6;21270:15;21263:32;21078:224;:::o;21308:366::-;21450:3;21471:67;21535:2;21530:3;21471:67;:::i;:::-;21464:74;;21547:93;21636:3;21547:93;:::i;:::-;21665:2;21660:3;21656:12;21649:19;;21308:366;;;:::o;21680:419::-;21846:4;21884:2;21873:9;21869:18;21861:26;;21933:9;21927:4;21923:20;21919:1;21908:9;21904:17;21897:47;21961:131;22087:4;21961:131;:::i;:::-;21953:139;;21680:419;;;:::o;22105:173::-;22245:25;22241:1;22233:6;22229:14;22222:49;22105:173;:::o;22284:366::-;22426:3;22447:67;22511:2;22506:3;22447:67;:::i;:::-;22440:74;;22523:93;22612:3;22523:93;:::i;:::-;22641:2;22636:3;22632:12;22625:19;;22284:366;;;:::o;22656:419::-;22822:4;22860:2;22849:9;22845:18;22837:26;;22909:9;22903:4;22899:20;22895:1;22884:9;22880:17;22873:47;22937:131;23063:4;22937:131;:::i;:::-;22929:139;;22656:419;;;:::o;23081:221::-;23221:34;23217:1;23209:6;23205:14;23198:58;23290:4;23285:2;23277:6;23273:15;23266:29;23081:221;:::o;23308:366::-;23450:3;23471:67;23535:2;23530:3;23471:67;:::i;:::-;23464:74;;23547:93;23636:3;23547:93;:::i;:::-;23665:2;23660:3;23656:12;23649:19;;23308:366;;;:::o;23680:419::-;23846:4;23884:2;23873:9;23869:18;23861:26;;23933:9;23927:4;23923:20;23919:1;23908:9;23904:17;23897:47;23961:131;24087:4;23961:131;:::i;:::-;23953:139;;23680:419;;;:::o;24105:225::-;24245:34;24241:1;24233:6;24229:14;24222:58;24314:8;24309:2;24301:6;24297:15;24290:33;24105:225;:::o;24336:366::-;24478:3;24499:67;24563:2;24558:3;24499:67;:::i;:::-;24492:74;;24575:93;24664:3;24575:93;:::i;:::-;24693:2;24688:3;24684:12;24677:19;;24336:366;;;:::o;24708:419::-;24874:4;24912:2;24901:9;24897:18;24889:26;;24961:9;24955:4;24951:20;24947:1;24936:9;24932:17;24925:47;24989:131;25115:4;24989:131;:::i;:::-;24981:139;;24708:419;;;:::o;25133:223::-;25273:34;25269:1;25261:6;25257:14;25250:58;25342:6;25337:2;25329:6;25325:15;25318:31;25133:223;:::o;25362:366::-;25504:3;25525:67;25589:2;25584:3;25525:67;:::i;:::-;25518:74;;25601:93;25690:3;25601:93;:::i;:::-;25719:2;25714:3;25710:12;25703:19;;25362:366;;;:::o;25734:419::-;25900:4;25938:2;25927:9;25923:18;25915:26;;25987:9;25981:4;25977:20;25973:1;25962:9;25958:17;25951:47;26015:131;26141:4;26015:131;:::i;:::-;26007:139;;25734:419;;;:::o;26159:221::-;26299:34;26295:1;26287:6;26283:14;26276:58;26368:4;26363:2;26355:6;26351:15;26344:29;26159:221;:::o;26386:366::-;26528:3;26549:67;26613:2;26608:3;26549:67;:::i;:::-;26542:74;;26625:93;26714:3;26625:93;:::i;:::-;26743:2;26738:3;26734:12;26727:19;;26386:366;;;:::o;26758:419::-;26924:4;26962:2;26951:9;26947:18;26939:26;;27011:9;27005:4;27001:20;26997:1;26986:9;26982:17;26975:47;27039:131;27165:4;27039:131;:::i;:::-;27031:139;;26758:419;;;:::o;27183:179::-;27323:31;27319:1;27311:6;27307:14;27300:55;27183:179;:::o;27368:366::-;27510:3;27531:67;27595:2;27590:3;27531:67;:::i;:::-;27524:74;;27607:93;27696:3;27607:93;:::i;:::-;27725:2;27720:3;27716:12;27709:19;;27368:366;;;:::o;27740:419::-;27906:4;27944:2;27933:9;27929:18;27921:26;;27993:9;27987:4;27983:20;27979:1;27968:9;27964:17;27957:47;28021:131;28147:4;28021:131;:::i;:::-;28013:139;;27740:419;;;:::o;28165:175::-;28305:27;28301:1;28293:6;28289:14;28282:51;28165:175;:::o;28346:366::-;28488:3;28509:67;28573:2;28568:3;28509:67;:::i;:::-;28502:74;;28585:93;28674:3;28585:93;:::i;:::-;28703:2;28698:3;28694:12;28687:19;;28346:366;;;:::o;28718:419::-;28884:4;28922:2;28911:9;28907:18;28899:26;;28971:9;28965:4;28961:20;28957:1;28946:9;28942:17;28935:47;28999:131;29125:4;28999:131;:::i;:::-;28991:139;;28718:419;;;:::o;29143:172::-;29283:24;29279:1;29271:6;29267:14;29260:48;29143:172;:::o;29321:366::-;29463:3;29484:67;29548:2;29543:3;29484:67;:::i;:::-;29477:74;;29560:93;29649:3;29560:93;:::i;:::-;29678:2;29673:3;29669:12;29662:19;;29321:366;;;:::o;29693:419::-;29859:4;29897:2;29886:9;29882:18;29874:26;;29946:9;29940:4;29936:20;29932:1;29921:9;29917:17;29910:47;29974:131;30100:4;29974:131;:::i;:::-;29966:139;;29693:419;;;:::o;30118:178::-;30258:30;30254:1;30246:6;30242:14;30235:54;30118:178;:::o;30302:366::-;30444:3;30465:67;30529:2;30524:3;30465:67;:::i;:::-;30458:74;;30541:93;30630:3;30541:93;:::i;:::-;30659:2;30654:3;30650:12;30643:19;;30302:366;;;:::o;30674:419::-;30840:4;30878:2;30867:9;30863:18;30855:26;;30927:9;30921:4;30917:20;30913:1;30902:9;30898:17;30891:47;30955:131;31081:4;30955:131;:::i;:::-;30947:139;;30674:419;;;:::o;31099:179::-;31239:31;31235:1;31227:6;31223:14;31216:55;31099:179;:::o;31284:366::-;31426:3;31447:67;31511:2;31506:3;31447:67;:::i;:::-;31440:74;;31523:93;31612:3;31523:93;:::i;:::-;31641:2;31636:3;31632:12;31625:19;;31284:366;;;:::o;31656:419::-;31822:4;31860:2;31849:9;31845:18;31837:26;;31909:9;31903:4;31899:20;31895:1;31884:9;31880:17;31873:47;31937:131;32063:4;31937:131;:::i;:::-;31929:139;;31656:419;;;:::o;32081:169::-;32221:21;32217:1;32209:6;32205:14;32198:45;32081:169;:::o;32256:366::-;32398:3;32419:67;32483:2;32478:3;32419:67;:::i;:::-;32412:74;;32495:93;32584:3;32495:93;:::i;:::-;32613:2;32608:3;32604:12;32597:19;;32256:366;;;:::o;32628:419::-;32794:4;32832:2;32821:9;32817:18;32809:26;;32881:9;32875:4;32871:20;32867:1;32856:9;32852:17;32845:47;32909:131;33035:4;32909:131;:::i;:::-;32901:139;;32628:419;;;:::o;33053:191::-;33093:4;33113:20;33131:1;33113:20;:::i;:::-;33108:25;;33147:20;33165:1;33147:20;:::i;:::-;33142:25;;33186:1;33183;33180:8;33177:34;;;33191:18;;:::i;:::-;33177:34;33236:1;33233;33229:9;33221:17;;33053:191;;;;:::o;33250:224::-;33390:34;33386:1;33378:6;33374:14;33367:58;33459:7;33454:2;33446:6;33442:15;33435:32;33250:224;:::o;33480:366::-;33622:3;33643:67;33707:2;33702:3;33643:67;:::i;:::-;33636:74;;33719:93;33808:3;33719:93;:::i;:::-;33837:2;33832:3;33828:12;33821:19;;33480:366;;;:::o;33852:419::-;34018:4;34056:2;34045:9;34041:18;34033:26;;34105:9;34099:4;34095:20;34091:1;34080:9;34076:17;34069:47;34133:131;34259:4;34133:131;:::i;:::-;34125:139;;33852:419;;;:::o;34277:222::-;34417:34;34413:1;34405:6;34401:14;34394:58;34486:5;34481:2;34473:6;34469:15;34462:30;34277:222;:::o;34505:366::-;34647:3;34668:67;34732:2;34727:3;34668:67;:::i;:::-;34661:74;;34744:93;34833:3;34744:93;:::i;:::-;34862:2;34857:3;34853:12;34846:19;;34505:366;;;:::o;34877:419::-;35043:4;35081:2;35070:9;35066:18;35058:26;;35130:9;35124:4;35120:20;35116:1;35105:9;35101:17;35094:47;35158:131;35284:4;35158:131;:::i;:::-;35150:139;;34877:419;;;:::o;35302:225::-;35442:34;35438:1;35430:6;35426:14;35419:58;35511:8;35506:2;35498:6;35494:15;35487:33;35302:225;:::o;35533:366::-;35675:3;35696:67;35760:2;35755:3;35696:67;:::i;:::-;35689:74;;35772:93;35861:3;35772:93;:::i;:::-;35890:2;35885:3;35881:12;35874:19;;35533:366;;;:::o;35905:419::-;36071:4;36109:2;36098:9;36094:18;36086:26;;36158:9;36152:4;36148:20;36144:1;36133:9;36129:17;36122:47;36186:131;36312:4;36186:131;:::i;:::-;36178:139;;35905:419;;;:::o;36330:332::-;36451:4;36489:2;36478:9;36474:18;36466:26;;36502:71;36570:1;36559:9;36555:17;36546:6;36502:71;:::i;:::-;36583:72;36651:2;36640:9;36636:18;36627:6;36583:72;:::i;:::-;36330:332;;;;;:::o;36668:147::-;36769:11;36806:3;36791:18;;36668:147;;;;:::o;36821:114::-;;:::o;36941:398::-;37100:3;37121:83;37202:1;37197:3;37121:83;:::i;:::-;37114:90;;37213:93;37302:3;37213:93;:::i;:::-;37331:1;37326:3;37322:11;37315:18;;36941:398;;;:::o;37345:379::-;37529:3;37551:147;37694:3;37551:147;:::i;:::-;37544:154;;37715:3;37708:10;;37345:379;;;:::o;37730:220::-;37870:34;37866:1;37858:6;37854:14;37847:58;37939:3;37934:2;37926:6;37922:15;37915:28;37730:220;:::o;37956:366::-;38098:3;38119:67;38183:2;38178:3;38119:67;:::i;:::-;38112:74;;38195:93;38284:3;38195:93;:::i;:::-;38313:2;38308:3;38304:12;38297:19;;37956:366;;;:::o;38328:419::-;38494:4;38532:2;38521:9;38517:18;38509:26;;38581:9;38575:4;38571:20;38567:1;38556:9;38552:17;38545:47;38609:131;38735:4;38609:131;:::i;:::-;38601:139;;38328:419;;;:::o;38753:143::-;38810:5;38841:6;38835:13;38826:22;;38857:33;38884:5;38857:33;:::i;:::-;38753:143;;;;:::o;38902:351::-;38972:6;39021:2;39009:9;39000:7;38996:23;38992:32;38989:119;;;39027:79;;:::i;:::-;38989:119;39147:1;39172:64;39228:7;39219:6;39208:9;39204:22;39172:64;:::i;:::-;39162:74;;39118:128;38902:351;;;;:::o;39259:85::-;39304:7;39333:5;39322:16;;39259:85;;;:::o;39350:158::-;39408:9;39441:61;39459:42;39468:32;39494:5;39468:32;:::i;:::-;39459:42;:::i;:::-;39441:61;:::i;:::-;39428:74;;39350:158;;;:::o;39514:147::-;39609:45;39648:5;39609:45;:::i;:::-;39604:3;39597:58;39514:147;;:::o;39667:114::-;39734:6;39768:5;39762:12;39752:22;;39667:114;;;:::o;39787:184::-;39886:11;39920:6;39915:3;39908:19;39960:4;39955:3;39951:14;39936:29;;39787:184;;;;:::o;39977:132::-;40044:4;40067:3;40059:11;;40097:4;40092:3;40088:14;40080:22;;39977:132;;;:::o;40115:108::-;40192:24;40210:5;40192:24;:::i;:::-;40187:3;40180:37;40115:108;;:::o;40229:179::-;40298:10;40319:46;40361:3;40353:6;40319:46;:::i;:::-;40397:4;40392:3;40388:14;40374:28;;40229:179;;;;:::o;40414:113::-;40484:4;40516;40511:3;40507:14;40499:22;;40414:113;;;:::o;40563:732::-;40682:3;40711:54;40759:5;40711:54;:::i;:::-;40781:86;40860:6;40855:3;40781:86;:::i;:::-;40774:93;;40891:56;40941:5;40891:56;:::i;:::-;40970:7;41001:1;40986:284;41011:6;41008:1;41005:13;40986:284;;;41087:6;41081:13;41114:63;41173:3;41158:13;41114:63;:::i;:::-;41107:70;;41200:60;41253:6;41200:60;:::i;:::-;41190:70;;41046:224;41033:1;41030;41026:9;41021:14;;40986:284;;;40990:14;41286:3;41279:10;;40687:608;;;40563:732;;;;:::o;41301:831::-;41564:4;41602:3;41591:9;41587:19;41579:27;;41616:71;41684:1;41673:9;41669:17;41660:6;41616:71;:::i;:::-;41697:80;41773:2;41762:9;41758:18;41749:6;41697:80;:::i;:::-;41824:9;41818:4;41814:20;41809:2;41798:9;41794:18;41787:48;41852:108;41955:4;41946:6;41852:108;:::i;:::-;41844:116;;41970:72;42038:2;42027:9;42023:18;42014:6;41970:72;:::i;:::-;42052:73;42120:3;42109:9;42105:19;42096:6;42052:73;:::i;:::-;41301:831;;;;;;;;:::o;42138:807::-;42387:4;42425:3;42414:9;42410:19;42402:27;;42439:71;42507:1;42496:9;42492:17;42483:6;42439:71;:::i;:::-;42520:72;42588:2;42577:9;42573:18;42564:6;42520:72;:::i;:::-;42602:80;42678:2;42667:9;42663:18;42654:6;42602:80;:::i;:::-;42692;42768:2;42757:9;42753:18;42744:6;42692:80;:::i;:::-;42782:73;42850:3;42839:9;42835:19;42826:6;42782:73;:::i;:::-;42865;42933:3;42922:9;42918:19;42909:6;42865:73;:::i;:::-;42138:807;;;;;;;;;:::o;42951:143::-;43008:5;43039:6;43033:13;43024:22;;43055:33;43082:5;43055:33;:::i;:::-;42951:143;;;;:::o;43100:663::-;43188:6;43196;43204;43253:2;43241:9;43232:7;43228:23;43224:32;43221:119;;;43259:79;;:::i;:::-;43221:119;43379:1;43404:64;43460:7;43451:6;43440:9;43436:22;43404:64;:::i;:::-;43394:74;;43350:128;43517:2;43543:64;43599:7;43590:6;43579:9;43575:22;43543:64;:::i;:::-;43533:74;;43488:129;43656:2;43682:64;43738:7;43729:6;43718:9;43714:22;43682:64;:::i;:::-;43672:74;;43627:129;43100:663;;;;;:::o

Swarm Source

ipfs://d1625bd2b1a6d7af3265404ce073841f84da3a394259d0be94d5e1586b889ef0
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.