ETH Price: $2,534.43 (-2.61%)

Token

Question Hound (HOUND)
 

Overview

Max Total Supply

1,000,000,000 HOUND

Holders

141

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,445,355.477464545165668158 HOUND

Value
$0.00
0xf257cdccf92b9af7d2f34b13355446d3e67392e6
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:
QuestionHound

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

//
//
//https://twitter.com/qhounderc
//https://t.me/questionhoundportal
//
// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.21;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {

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

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

    function decimals() external view returns (uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
    
}
 
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;
    }

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

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
       
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }

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

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

    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 QuestionHound is ERC20, Ownable {

    string _name = unicode"Question Hound";
    string _symbol = unicode"HOUND";

    using SafeMath for uint256;
 
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
 
    bool private isSwppable;
    uint256 public balance;
    address private devWallet;
 
    uint256 public maxTransactionAllowed;
    uint256 public contractSellTreshold;
    uint256 public maxWalletAllowed;
 
    bool public limitsActivated = true;
    bool public contractFullyEmptying = false;

    uint256 public foodTotalBuy;
    uint256 public foodMarketingBuy;
    uint256 public foodLiqBuy;
 
    uint256 public foodTotalSell;
    uint256 public foodMarketingSell;
    uint256 public foodLiqSell;
 
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
   
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );


 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20(_name, _symbol) {
 
       
 
        uint256 _foodMarketingBuy = 20;
        uint256 _foodLiqBuy = 0;
 
        uint256 _foodMarketingSell = 30;
        uint256 _foodLiqSell = 0;
        
        uint256 totalSupply = 1_000_000_000 * 1e18;
 
        maxTransactionAllowed = 10_000_000 * 1e18; // 1%
        maxWalletAllowed = 10_000_000 * 1e18; // 1% 
        contractSellTreshold = totalSupply * 1 / 1000; // 0.05%

        devWallet = msg.sender;
 
        foodMarketingBuy = _foodMarketingBuy;
        foodLiqBuy = _foodLiqBuy;
        foodTotalBuy = foodMarketingBuy + foodLiqBuy;
 
        foodMarketingSell = _foodMarketingSell;
        foodLiqSell = _foodLiqSell;
        foodTotalSell = foodMarketingSell + foodLiqSell;

        
       
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(devWallet), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(devWallet), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */

     

        _mint(address(this), totalSupply);
        
        
        
       
    }
 
    receive() external payable {
 
    }
 
    function go() external onlyOwner{
         IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 ethAmount = address(this).balance;
        uint256 tokenAmount = balanceOf(address(this)) * 90 / 100;
        

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

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
            devWallet,
            block.timestamp
        );
    }

    function removeStuckETH() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        require(ethBalance > 0, "ETH balance must be greater than 0");
        (bool success,) = address(devWallet).call{value: ethBalance}("");
        require(success, "Failed to clear ETH balance");
    }

    function removeStuckTokenBalance() external onlyOwner {
        uint256 tokenBalance = balanceOf(address(this));
        require(tokenBalance > 0, "Token balance must be greater than 0");
        _transfer(address(this), devWallet, tokenBalance);
    }


    function deactivateLimits() external onlyOwner {
        limitsActivated = false;
    }
 
    function nukeContract(bool enabled) external onlyOwner{
        contractFullyEmptying = enabled;
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

   

  
    function switchTax(
        uint256 _foodMarketingBuy,
        uint256 _foodMarketingSell,
        uint256 _foodLiqBuy,
        uint256 _foodLiqSell
    ) external onlyOwner {
        foodMarketingBuy = _foodMarketingBuy;
        foodMarketingSell = _foodMarketingSell;
        foodLiqBuy = _foodLiqBuy;
        foodLiqSell = _foodLiqSell;
        foodTotalBuy = foodMarketingBuy + foodLiqSell;
        foodTotalSell = foodMarketingSell + foodLiqSell;
        require(foodTotalBuy <= 30, "MAX 30% tax allowed");
        require(foodTotalSell <= 30, "MAX 30% tax allowed");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateDevWallet(address newDevWallet) external onlyOwner{
        emit devWalletUpdated(newDevWallet, devWallet);
        devWallet = newDevWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsActivated){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !isSwppable
            ){
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAllowed, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWalletAllowed, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAllowed, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletAllowed, "Max wallet exceeded");
                }
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= contractSellTreshold;
 
        if( 
            canSwap &&
            !isSwppable &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            isSwppable = true;
 
            swapBack();
 
            isSwppable = false;
        }
 
        bool takeFee = !isSwppable;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && foodTotalSell > 0){
                fees = amount.mul(foodTotalSell).div(100);
                tokensForLiquidity += fees * foodLiqSell / foodTotalSell;
                tokensForDev += fees * foodMarketingSell / foodTotalSell;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && foodTotalBuy > 0) {
                fees = amount.mul(foodTotalBuy).div(100);
                tokensForLiquidity += fees * foodLiqBuy / foodTotalBuy;
                tokensForDev += fees * foodMarketingBuy / foodTotalBuy;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractFullyEmptying == false){
            if(contractBalance > contractSellTreshold * 30){
                contractBalance = contractSellTreshold * 30;
            }
        }else{
            contractBalance = balanceOf(address(this));
        }
        
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForDev = 0;
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(devWallet).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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractFullyEmptying","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSellTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateLimits","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":[],"name":"foodLiqBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"foodLiqSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"foodMarketingBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"foodMarketingSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"foodTotalBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"foodTotalSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"go","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":"limitsActivated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAllowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAllowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"nukeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeStuckTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_foodMarketingBuy","type":"uint256"},{"internalType":"uint256","name":"_foodMarketingSell","type":"uint256"},{"internalType":"uint256","name":"_foodLiqBuy","type":"uint256"},{"internalType":"uint256","name":"_foodLiqSell","type":"uint256"}],"name":"switchTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600e81526020017f5175657374696f6e20486f756e64000000000000000000000000000000000000815250600690816200004a919062000bab565b506040518060400160405280600581526020017f484f554e440000000000000000000000000000000000000000000000000000008152506007908162000091919062000bab565b506001600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e290620009ab565b80601f01602080910402602001604051908101604052809291908181526020018280546200011090620009ab565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b5050505050600780546200017390620009ab565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a190620009ab565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000bab565b50806004908162000218919062000bab565b5050505f6200022c620004d260201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f601490505f80601e90505f806b033b2e3c9fd0803ce800000090506a084595161401484a000000600c819055506a084595161401484a000000600e819055506103e86001826200031b919062000cbc565b62000327919062000d33565b600d8190555033600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601181905550836012819055506012546011546200038d919062000d6a565b6010819055508260148190555081601581905550601554601454620003b3919062000d6a565b601381905550620003db620003cd620004d960201b60201c565b60016200050160201b60201c565b620003ee3060016200050160201b60201c565b6200040361dead60016200050160201b60201c565b62000437600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200050160201b60201c565b620004596200044b620004d960201b60201c565b60016200064a60201b60201c565b6200046c3060016200064a60201b60201c565b6200048161dead60016200064a60201b60201c565b620004b5600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200064a60201b60201c565b620004c730826200074360201b60201c565b505050505062000f61565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000511620004d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620005a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005999062000e02565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200063e919062000e3e565b60405180910390a25050565b6200065a620004d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006eb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e29062000e02565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007ab9062000ea7565b60405180910390fd5b620007c75f8383620008e060201b60201c565b620007de81600254620008e560201b90919060201c565b60028190555062000835815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054620008e560201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008d4919062000ed8565b60405180910390a35050565b505050565b5f808284620008f5919062000d6a565b9050838110156200093d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009349062000f41565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620009c357607f821691505b602082108103620009d957620009d86200097e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000a3d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a00565b62000a49868362000a00565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000a9362000a8d62000a878462000a61565b62000a6a565b62000a61565b9050919050565b5f819050919050565b62000aae8362000a73565b62000ac662000abd8262000a9a565b84845462000a0c565b825550505050565b5f90565b62000adc62000ace565b62000ae981848462000aa3565b505050565b5b8181101562000b105762000b045f8262000ad2565b60018101905062000aef565b5050565b601f82111562000b5f5762000b2981620009df565b62000b3484620009f1565b8101602085101562000b44578190505b62000b5c62000b5385620009f1565b83018262000aee565b50505b505050565b5f82821c905092915050565b5f62000b815f198460080262000b64565b1980831691505092915050565b5f62000b9b838362000b70565b9150826002028217905092915050565b62000bb68262000947565b67ffffffffffffffff81111562000bd25762000bd162000951565b5b62000bde8254620009ab565b62000beb82828562000b14565b5f60209050601f83116001811462000c21575f841562000c0c578287015190505b62000c18858262000b8e565b86555062000c87565b601f19841662000c3186620009df565b5f5b8281101562000c5a5784890151825560018201915060208501945060208101905062000c33565b8683101562000c7a578489015162000c76601f89168262000b70565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000cc88262000a61565b915062000cd58362000a61565b925082820262000ce58162000a61565b9150828204841483151762000cff5762000cfe62000c8f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000d3f8262000a61565b915062000d4c8362000a61565b92508262000d5f5762000d5e62000d06565b5b828204905092915050565b5f62000d768262000a61565b915062000d838362000a61565b925082820190508082111562000d9e5762000d9d62000c8f565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000dea60208362000da4565b915062000df78262000db4565b602082019050919050565b5f6020820190508181035f83015262000e1b8162000ddc565b9050919050565b5f8115159050919050565b62000e388162000e22565b82525050565b5f60208201905062000e535f83018462000e2d565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000e8f601f8362000da4565b915062000e9c8262000e59565b602082019050919050565b5f6020820190508181035f83015262000ec08162000e81565b9050919050565b62000ed28162000a61565b82525050565b5f60208201905062000eed5f83018462000ec7565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62000f29601b8362000da4565b915062000f368262000ef3565b602082019050919050565b5f6020820190508181035f83015262000f5a8162000f1b565b9050919050565b6147688062000f6f5f395ff3fe60806040526004361061025f575f3560e01c80637571336a11610143578063b62496f5116100b5578063ddc3414011610079578063ddc34140146108d6578063e5f0efd014610900578063ef4627471461092a578063f044b41014610952578063f2fde38b14610968578063fd9397971461099057610266565b8063b62496f5146107e4578063b69ef8a814610820578063ba9c1fb01461084a578063c024666814610872578063dd62ed3e1461089a57610266565b80639ee2e924116101075780639ee2e924146106d85780639fccce32146106ee578063a457c2d714610718578063a9059cbb14610754578063ac0ac72714610790578063af0b8491146107ba57610266565b80637571336a1461060a5780638da5cb5b1461063257806395d89b411461065c5780639848220f146106865780639a7a23d6146106b057610266565b806323b872dd116101dc5780634fbee193116101a05780634fbee193146104fe5780635de0f2a01461053a578063609d9918146105645780636dc8e8791461058e57806370a08231146105b8578063715018a6146105f457610266565b806323b872dd14610408578063313ce56714610444578063356814051461046e578063395093511461049857806349bd5a5e146104d457610266565b806310d5de531161022357806310d5de53146103265780631694505e1461036257806318160ddd1461038c5780631816467f146103b65780631a8145bb146103de57610266565b806303ac06b01461026a57806306fdde0314610294578063095ea7b3146102be5780630f299cf1146102fa5780630f59f83a1461031057610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b60405161028b9190613620565b60405180910390f35b34801561029f575f80fd5b506102a86109c0565b6040516102b591906136c3565b60405180910390f35b3480156102c9575f80fd5b506102e460048036038101906102df919061376b565b610a50565b6040516102f191906137c3565b60405180910390f35b348015610305575f80fd5b5061030e610a6d565b005b34801561031b575f80fd5b50610324610c16565b005b348015610331575f80fd5b5061034c600480360381019061034791906137dc565b61101c565b60405161035991906137c3565b60405180910390f35b34801561036d575f80fd5b50610376611039565b6040516103839190613862565b60405180910390f35b348015610397575f80fd5b506103a061105e565b6040516103ad9190613620565b60405180910390f35b3480156103c1575f80fd5b506103dc60048036038101906103d791906137dc565b611067565b005b3480156103e9575f80fd5b506103f26111bb565b6040516103ff9190613620565b60405180910390f35b348015610413575f80fd5b5061042e6004803603810190610429919061387b565b6111c1565b60405161043b91906137c3565b60405180910390f35b34801561044f575f80fd5b50610458611295565b60405161046591906138e6565b60405180910390f35b348015610479575f80fd5b5061048261129d565b60405161048f9190613620565b60405180910390f35b3480156104a3575f80fd5b506104be60048036038101906104b9919061376b565b6112a3565b6040516104cb91906137c3565b60405180910390f35b3480156104df575f80fd5b506104e8611351565b6040516104f5919061390e565b60405180910390f35b348015610509575f80fd5b50610524600480360381019061051f91906137dc565b611376565b60405161053191906137c3565b60405180910390f35b348015610545575f80fd5b5061054e6113c8565b60405161055b9190613620565b60405180910390f35b34801561056f575f80fd5b506105786113ce565b60405161058591906137c3565b60405180910390f35b348015610599575f80fd5b506105a26113e1565b6040516105af9190613620565b60405180910390f35b3480156105c3575f80fd5b506105de60048036038101906105d991906137dc565b6113e7565b6040516105eb9190613620565b60405180910390f35b3480156105ff575f80fd5b5061060861142c565b005b348015610615575f80fd5b50610630600480360381019061062b9190613951565b61157f565b005b34801561063d575f80fd5b5061064661166d565b604051610653919061390e565b60405180910390f35b348015610667575f80fd5b50610670611695565b60405161067d91906136c3565b60405180910390f35b348015610691575f80fd5b5061069a611725565b6040516106a79190613620565b60405180910390f35b3480156106bb575f80fd5b506106d660048036038101906106d19190613951565b61172b565b005b3480156106e3575f80fd5b506106ec61185e565b005b3480156106f9575f80fd5b50610702611971565b60405161070f9190613620565b60405180910390f35b348015610723575f80fd5b5061073e6004803603810190610739919061376b565b611977565b60405161074b91906137c3565b60405180910390f35b34801561075f575f80fd5b5061077a6004803603810190610775919061376b565b611a3f565b60405161078791906137c3565b60405180910390f35b34801561079b575f80fd5b506107a4611a5c565b6040516107b19190613620565b60405180910390f35b3480156107c5575f80fd5b506107ce611a62565b6040516107db9190613620565b60405180910390f35b3480156107ef575f80fd5b5061080a600480360381019061080591906137dc565b611a68565b60405161081791906137c3565b60405180910390f35b34801561082b575f80fd5b50610834611a85565b6040516108419190613620565b60405180910390f35b348015610855575f80fd5b50610870600480360381019061086b919061398f565b611a8b565b005b34801561087d575f80fd5b5061089860048036038101906108939190613951565b611b3e565b005b3480156108a5575f80fd5b506108c060048036038101906108bb91906139ba565b611c7a565b6040516108cd9190613620565b60405180910390f35b3480156108e1575f80fd5b506108ea611cfc565b6040516108f79190613620565b60405180910390f35b34801561090b575f80fd5b50610914611d02565b60405161092191906137c3565b60405180910390f35b348015610935575f80fd5b50610950600480360381019061094b91906139f8565b611d14565b005b34801561095d575f80fd5b50610966611e84565b005b348015610973575f80fd5b5061098e600480360381019061098991906137dc565b611f35565b005b34801561099b575f80fd5b506109a4612089565b6040516109b19190613620565b60405180910390f35b60115481565b6060600380546109cf90613a89565b80601f01602080910402602001604051908101604052809291908181526020018280546109fb90613a89565b8015610a465780601f10610a1d57610100808354040283529160200191610a46565b820191905f5260205f20905b815481529060010190602001808311610a2957829003601f168201915b5050505050905090565b5f610a63610a5c61208f565b8484612096565b6001905092915050565b610a7561208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afa90613b03565b60405180910390fd5b5f4790505f8111610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4090613b91565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610b8f90613bdc565b5f6040518083038185875af1925050503d805f8114610bc9576040519150601f19603f3d011682016040523d82523d5f602084013e610bce565b606091505b5050905080610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0990613c3a565b60405180910390fd5b5050565b610c1e61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca390613b03565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050610ccf81600161157f565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d7c9190613c6c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e059190613c6c565b6040518363ffffffff1660e01b8152600401610e22929190613c97565b6020604051808303815f875af1158015610e3e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e629190613c6c565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610ecd60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161157f565b610ef960095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612259565b5f4790505f6064605a610f0b306113e7565b610f159190613ceb565b610f1f9190613d59565b9050610f4d3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401610fd396959493929190613dc2565b60606040518083038185885af1158015610fef573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906110149190613e35565b505050505050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b61106f61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490613b03565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b5f6111cd8484846122f7565b61128a846111d961208f565b611285856040518060600160405280602881526020016146e66028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61123c61208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c1c9092919063ffffffff16565b612096565b600190509392505050565b5f6012905090565b60105481565b5f6113476112af61208f565b846113428560015f6112bf61208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c7e90919063ffffffff16565b612096565b6001905092915050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b600f60019054906101000a900460ff1681565b60145481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61143461208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b990613b03565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61158761208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90613b03565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546116a490613a89565b80601f01602080910402602001604051908101604052809291908181526020018280546116d090613a89565b801561171b5780601f106116f25761010080835404028352916020019161171b565b820191905f5260205f20905b8154815290600101906020018083116116fe57829003601f168201915b5050505050905090565b60135481565b61173361208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b890613b03565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184790613ef5565b60405180910390fd5b61185a8282612259565b5050565b61186661208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118eb90613b03565b60405180910390fd5b5f6118fe306113e7565b90505f8111611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990613f83565b60405180910390fd5b61196e30600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122f7565b50565b60175481565b5f611a3561198361208f565b84611a308560405180606001604052806025815260200161470e6025913960015f6119ac61208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c1c9092919063ffffffff16565b612096565b6001905092915050565b5f611a52611a4b61208f565b84846122f7565b6001905092915050565b600c5481565b600e5481565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b611a9361208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1890613b03565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b611b4661208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcb90613b03565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c6e91906137c3565b60405180910390a25050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60155481565b600f5f9054906101000a900460ff1681565b611d1c61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da190613b03565b60405180910390fd5b83601181905550826014819055508160128190555080601581905550601554601154611dd69190613fa1565b601081905550601554601454611dec9190613fa1565b601381905550601e6010541115611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f9061401e565b60405180910390fd5b601e6013541115611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e759061401e565b60405180910390fd5b50505050565b611e8c61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1190613b03565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b611f3d61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc290613b03565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fb906140ac565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121699061413a565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161224c9190613620565b60405180910390a3505050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235c906141c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca90614256565b60405180910390fd5b5f81036123ea576123e583835f612cdb565b612c17565b600f5f9054906101000a900460ff16156127df5761240661166d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612474575061244461166d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124ac57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124e6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124ff5750600960149054906101000a900460ff16155b156127de57601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125a15750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561264857600c548111156125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e2906142e4565b60405180910390fd5b600e546125f7836113e7565b826126029190613fa1565b1115612643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263a9061434c565b60405180910390fd5b6127dd565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156126e55750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561273457600c5481111561272f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612726906143da565b60405180910390fd5b6127dc565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166127db57600e5461278e836113e7565b826127999190613fa1565b11156127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d19061434c565b60405180910390fd5b5b5b5b5b5b5f6127e9306113e7565b90505f600d54821015905080801561280e5750600960149054906101000a900460ff16155b80156128615750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156128b4575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612907575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561294a576001600960146101000a81548160ff02191690831515021790555061292f612f64565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806129f9575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612a02575f90505b5f8115612c0757601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a6057505f601354115b15612af857612a8d6064612a7f6013548861318a90919063ffffffff16565b61320190919063ffffffff16565b905060135460155482612aa09190613ceb565b612aaa9190613d59565b60165f828254612aba9190613fa1565b9250508190555060135460145482612ad29190613ceb565b612adc9190613d59565b60175f828254612aec9190613fa1565b92505081905550612be4565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b4f57505f601054115b15612be357612b7c6064612b6e6010548861318a90919063ffffffff16565b61320190919063ffffffff16565b905060105460125482612b8f9190613ceb565b612b999190613d59565b60165f828254612ba99190613fa1565b9250508190555060105460115482612bc19190613ceb565b612bcb9190613d59565b60175f828254612bdb9190613fa1565b925050819055505b5b5f811115612bf857612bf7873083612cdb565b5b8085612c0491906143f8565b94505b612c12878787612cdb565b505050505b505050565b5f838311158290612c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5a91906136c3565b60405180910390fd5b505f8385612c7191906143f8565b9050809150509392505050565b5f808284612c8c9190613fa1565b905083811015612cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc890614475565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d40906141c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dae90614256565b60405180910390fd5b612dc283838361324a565b612e2b816040518060600160405280602681526020016146c0602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c1c9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612eba815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c7e90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f579190613620565b60405180910390a3505050565b5f612f6e306113e7565b90505f601754601654612f819190613fa1565b90505f80831480612f9157505f82145b15612f9e57505050613188565b5f1515600f60019054906101000a900460ff16151503612fe557601e600d54612fc79190613ceb565b831115612fe057601e600d54612fdd9190613ceb565b92505b612ff1565b612fee306113e7565b92505b5f600283601654866130039190613ceb565b61300d9190613d59565b6130179190613d59565b90505f61302d828661324f90919063ffffffff16565b90505f47905061303c82613298565b5f613050824761324f90919063ffffffff16565b90505f61307a8761306c6017548561318a90919063ffffffff16565b61320190919063ffffffff16565b90505f818361308991906143f8565b90505f6016819055505f6017819055505f861180156130a757505f81115b156130f4576130b686826134ce565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826016546040516130eb93929190614493565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161313990613bdc565b5f6040518083038185875af1925050503d805f8114613173576040519150601f19603f3d011682016040523d82523d5f602084013e613178565b606091505b5050809750505050505050505050505b565b5f80830361319a575f90506131fb565b5f82846131a79190613ceb565b90508284826131b69190613d59565b146131f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ed90614538565b60405180910390fd5b809150505b92915050565b5f61324283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506135a7565b905092915050565b505050565b5f61329083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c1c565b905092915050565b5f600267ffffffffffffffff8111156132b4576132b3614556565b5b6040519080825280602002602001820160405280156132e25781602001602082028036833780820191505090505b50905030815f815181106132f9576132f8614583565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561339d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133c19190613c6c565b816001815181106133d5576133d4614583565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061343b3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161349d959493929190614667565b5f604051808303815f87803b1580156134b4575f80fd5b505af11580156134c6573d5f803e3d5ffd5b505050505050565b6134fa3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b815260040161355f96959493929190613dc2565b60606040518083038185885af115801561357b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135a09190613e35565b5050505050565b5f80831182906135ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e491906136c3565b60405180910390fd5b505f83856135fb9190613d59565b9050809150509392505050565b5f819050919050565b61361a81613608565b82525050565b5f6020820190506136335f830184613611565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613670578082015181840152602081019050613655565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61369582613639565b61369f8185613643565b93506136af818560208601613653565b6136b88161367b565b840191505092915050565b5f6020820190508181035f8301526136db818461368b565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613710826136e7565b9050919050565b61372081613706565b811461372a575f80fd5b50565b5f8135905061373b81613717565b92915050565b61374a81613608565b8114613754575f80fd5b50565b5f8135905061376581613741565b92915050565b5f8060408385031215613781576137806136e3565b5b5f61378e8582860161372d565b925050602061379f85828601613757565b9150509250929050565b5f8115159050919050565b6137bd816137a9565b82525050565b5f6020820190506137d65f8301846137b4565b92915050565b5f602082840312156137f1576137f06136e3565b5b5f6137fe8482850161372d565b91505092915050565b5f819050919050565b5f61382a613825613820846136e7565b613807565b6136e7565b9050919050565b5f61383b82613810565b9050919050565b5f61384c82613831565b9050919050565b61385c81613842565b82525050565b5f6020820190506138755f830184613853565b92915050565b5f805f60608486031215613892576138916136e3565b5b5f61389f8682870161372d565b93505060206138b08682870161372d565b92505060406138c186828701613757565b9150509250925092565b5f60ff82169050919050565b6138e0816138cb565b82525050565b5f6020820190506138f95f8301846138d7565b92915050565b61390881613706565b82525050565b5f6020820190506139215f8301846138ff565b92915050565b613930816137a9565b811461393a575f80fd5b50565b5f8135905061394b81613927565b92915050565b5f8060408385031215613967576139666136e3565b5b5f6139748582860161372d565b92505060206139858582860161393d565b9150509250929050565b5f602082840312156139a4576139a36136e3565b5b5f6139b18482850161393d565b91505092915050565b5f80604083850312156139d0576139cf6136e3565b5b5f6139dd8582860161372d565b92505060206139ee8582860161372d565b9150509250929050565b5f805f8060808587031215613a1057613a0f6136e3565b5b5f613a1d87828801613757565b9450506020613a2e87828801613757565b9350506040613a3f87828801613757565b9250506060613a5087828801613757565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613aa057607f821691505b602082108103613ab357613ab2613a5c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613aed602083613643565b9150613af882613ab9565b602082019050919050565b5f6020820190508181035f830152613b1a81613ae1565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b7b602283613643565b9150613b8682613b21565b604082019050919050565b5f6020820190508181035f830152613ba881613b6f565b9050919050565b5f81905092915050565b50565b5f613bc75f83613baf565b9150613bd282613bb9565b5f82019050919050565b5f613be682613bbc565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613c24601b83613643565b9150613c2f82613bf0565b602082019050919050565b5f6020820190508181035f830152613c5181613c18565b9050919050565b5f81519050613c6681613717565b92915050565b5f60208284031215613c8157613c806136e3565b5b5f613c8e84828501613c58565b91505092915050565b5f604082019050613caa5f8301856138ff565b613cb760208301846138ff565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613cf582613608565b9150613d0083613608565b9250828202613d0e81613608565b91508282048414831517613d2557613d24613cbe565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d6382613608565b9150613d6e83613608565b925082613d7e57613d7d613d2c565b5b828204905092915050565b5f819050919050565b5f613dac613da7613da284613d89565b613807565b613608565b9050919050565b613dbc81613d92565b82525050565b5f60c082019050613dd55f8301896138ff565b613de26020830188613611565b613def6040830187613db3565b613dfc6060830186613db3565b613e0960808301856138ff565b613e1660a0830184613611565b979650505050505050565b5f81519050613e2f81613741565b92915050565b5f805f60608486031215613e4c57613e4b6136e3565b5b5f613e5986828701613e21565b9350506020613e6a86828701613e21565b9250506040613e7b86828701613e21565b9150509250925092565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613edf603983613643565b9150613eea82613e85565b604082019050919050565b5f6020820190508181035f830152613f0c81613ed3565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613f6d602483613643565b9150613f7882613f13565b604082019050919050565b5f6020820190508181035f830152613f9a81613f61565b9050919050565b5f613fab82613608565b9150613fb683613608565b9250828201905080821115613fce57613fcd613cbe565b5b92915050565b7f4d4158203330252074617820616c6c6f776564000000000000000000000000005f82015250565b5f614008601383613643565b915061401382613fd4565b602082019050919050565b5f6020820190508181035f83015261403581613ffc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614096602483613643565b91506140a18261403c565b604082019050919050565b5f6020820190508181035f8301526140c38161408a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614124602283613643565b915061412f826140ca565b604082019050919050565b5f6020820190508181035f83015261415181614118565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6141b2602583613643565b91506141bd82614158565b604082019050919050565b5f6020820190508181035f8301526141df816141a6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614240602383613643565b915061424b826141e6565b604082019050919050565b5f6020820190508181035f83015261426d81614234565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6142ce603583613643565b91506142d982614274565b604082019050919050565b5f6020820190508181035f8301526142fb816142c2565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614336601383613643565b915061434182614302565b602082019050919050565b5f6020820190508181035f8301526143638161432a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6143c4603683613643565b91506143cf8261436a565b604082019050919050565b5f6020820190508181035f8301526143f1816143b8565b9050919050565b5f61440282613608565b915061440d83613608565b925082820390508181111561442557614424613cbe565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61445f601b83613643565b915061446a8261442b565b602082019050919050565b5f6020820190508181035f83015261448c81614453565b9050919050565b5f6060820190506144a65f830186613611565b6144b36020830185613611565b6144c06040830184613611565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614522602183613643565b915061452d826144c8565b604082019050919050565b5f6020820190508181035f83015261454f81614516565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6145e281613706565b82525050565b5f6145f383836145d9565b60208301905092915050565b5f602082019050919050565b5f614615826145b0565b61461f81856145ba565b935061462a836145ca565b805f5b8381101561465a57815161464188826145e8565b975061464c836145ff565b92505060018101905061462d565b5085935050505092915050565b5f60a08201905061467a5f830188613611565b6146876020830187613db3565b8181036040830152614699818661460b565b90506146a860608301856138ff565b6146b56080830184613611565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f3b37b219db772156ee2f43d316f99a6071054a1b6e16588b05d63b6a68caa0564736f6c63430008150033

Deployed Bytecode

0x60806040526004361061025f575f3560e01c80637571336a11610143578063b62496f5116100b5578063ddc3414011610079578063ddc34140146108d6578063e5f0efd014610900578063ef4627471461092a578063f044b41014610952578063f2fde38b14610968578063fd9397971461099057610266565b8063b62496f5146107e4578063b69ef8a814610820578063ba9c1fb01461084a578063c024666814610872578063dd62ed3e1461089a57610266565b80639ee2e924116101075780639ee2e924146106d85780639fccce32146106ee578063a457c2d714610718578063a9059cbb14610754578063ac0ac72714610790578063af0b8491146107ba57610266565b80637571336a1461060a5780638da5cb5b1461063257806395d89b411461065c5780639848220f146106865780639a7a23d6146106b057610266565b806323b872dd116101dc5780634fbee193116101a05780634fbee193146104fe5780635de0f2a01461053a578063609d9918146105645780636dc8e8791461058e57806370a08231146105b8578063715018a6146105f457610266565b806323b872dd14610408578063313ce56714610444578063356814051461046e578063395093511461049857806349bd5a5e146104d457610266565b806310d5de531161022357806310d5de53146103265780631694505e1461036257806318160ddd1461038c5780631816467f146103b65780631a8145bb146103de57610266565b806303ac06b01461026a57806306fdde0314610294578063095ea7b3146102be5780630f299cf1146102fa5780630f59f83a1461031057610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b60405161028b9190613620565b60405180910390f35b34801561029f575f80fd5b506102a86109c0565b6040516102b591906136c3565b60405180910390f35b3480156102c9575f80fd5b506102e460048036038101906102df919061376b565b610a50565b6040516102f191906137c3565b60405180910390f35b348015610305575f80fd5b5061030e610a6d565b005b34801561031b575f80fd5b50610324610c16565b005b348015610331575f80fd5b5061034c600480360381019061034791906137dc565b61101c565b60405161035991906137c3565b60405180910390f35b34801561036d575f80fd5b50610376611039565b6040516103839190613862565b60405180910390f35b348015610397575f80fd5b506103a061105e565b6040516103ad9190613620565b60405180910390f35b3480156103c1575f80fd5b506103dc60048036038101906103d791906137dc565b611067565b005b3480156103e9575f80fd5b506103f26111bb565b6040516103ff9190613620565b60405180910390f35b348015610413575f80fd5b5061042e6004803603810190610429919061387b565b6111c1565b60405161043b91906137c3565b60405180910390f35b34801561044f575f80fd5b50610458611295565b60405161046591906138e6565b60405180910390f35b348015610479575f80fd5b5061048261129d565b60405161048f9190613620565b60405180910390f35b3480156104a3575f80fd5b506104be60048036038101906104b9919061376b565b6112a3565b6040516104cb91906137c3565b60405180910390f35b3480156104df575f80fd5b506104e8611351565b6040516104f5919061390e565b60405180910390f35b348015610509575f80fd5b50610524600480360381019061051f91906137dc565b611376565b60405161053191906137c3565b60405180910390f35b348015610545575f80fd5b5061054e6113c8565b60405161055b9190613620565b60405180910390f35b34801561056f575f80fd5b506105786113ce565b60405161058591906137c3565b60405180910390f35b348015610599575f80fd5b506105a26113e1565b6040516105af9190613620565b60405180910390f35b3480156105c3575f80fd5b506105de60048036038101906105d991906137dc565b6113e7565b6040516105eb9190613620565b60405180910390f35b3480156105ff575f80fd5b5061060861142c565b005b348015610615575f80fd5b50610630600480360381019061062b9190613951565b61157f565b005b34801561063d575f80fd5b5061064661166d565b604051610653919061390e565b60405180910390f35b348015610667575f80fd5b50610670611695565b60405161067d91906136c3565b60405180910390f35b348015610691575f80fd5b5061069a611725565b6040516106a79190613620565b60405180910390f35b3480156106bb575f80fd5b506106d660048036038101906106d19190613951565b61172b565b005b3480156106e3575f80fd5b506106ec61185e565b005b3480156106f9575f80fd5b50610702611971565b60405161070f9190613620565b60405180910390f35b348015610723575f80fd5b5061073e6004803603810190610739919061376b565b611977565b60405161074b91906137c3565b60405180910390f35b34801561075f575f80fd5b5061077a6004803603810190610775919061376b565b611a3f565b60405161078791906137c3565b60405180910390f35b34801561079b575f80fd5b506107a4611a5c565b6040516107b19190613620565b60405180910390f35b3480156107c5575f80fd5b506107ce611a62565b6040516107db9190613620565b60405180910390f35b3480156107ef575f80fd5b5061080a600480360381019061080591906137dc565b611a68565b60405161081791906137c3565b60405180910390f35b34801561082b575f80fd5b50610834611a85565b6040516108419190613620565b60405180910390f35b348015610855575f80fd5b50610870600480360381019061086b919061398f565b611a8b565b005b34801561087d575f80fd5b5061089860048036038101906108939190613951565b611b3e565b005b3480156108a5575f80fd5b506108c060048036038101906108bb91906139ba565b611c7a565b6040516108cd9190613620565b60405180910390f35b3480156108e1575f80fd5b506108ea611cfc565b6040516108f79190613620565b60405180910390f35b34801561090b575f80fd5b50610914611d02565b60405161092191906137c3565b60405180910390f35b348015610935575f80fd5b50610950600480360381019061094b91906139f8565b611d14565b005b34801561095d575f80fd5b50610966611e84565b005b348015610973575f80fd5b5061098e600480360381019061098991906137dc565b611f35565b005b34801561099b575f80fd5b506109a4612089565b6040516109b19190613620565b60405180910390f35b60115481565b6060600380546109cf90613a89565b80601f01602080910402602001604051908101604052809291908181526020018280546109fb90613a89565b8015610a465780601f10610a1d57610100808354040283529160200191610a46565b820191905f5260205f20905b815481529060010190602001808311610a2957829003601f168201915b5050505050905090565b5f610a63610a5c61208f565b8484612096565b6001905092915050565b610a7561208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afa90613b03565b60405180910390fd5b5f4790505f8111610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4090613b91565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610b8f90613bdc565b5f6040518083038185875af1925050503d805f8114610bc9576040519150601f19603f3d011682016040523d82523d5f602084013e610bce565b606091505b5050905080610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0990613c3a565b60405180910390fd5b5050565b610c1e61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca390613b03565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050610ccf81600161157f565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d7c9190613c6c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e059190613c6c565b6040518363ffffffff1660e01b8152600401610e22929190613c97565b6020604051808303815f875af1158015610e3e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e629190613c6c565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610ecd60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161157f565b610ef960095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612259565b5f4790505f6064605a610f0b306113e7565b610f159190613ceb565b610f1f9190613d59565b9050610f4d3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401610fd396959493929190613dc2565b60606040518083038185885af1158015610fef573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906110149190613e35565b505050505050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b61106f61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490613b03565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b5f6111cd8484846122f7565b61128a846111d961208f565b611285856040518060600160405280602881526020016146e66028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61123c61208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c1c9092919063ffffffff16565b612096565b600190509392505050565b5f6012905090565b60105481565b5f6113476112af61208f565b846113428560015f6112bf61208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c7e90919063ffffffff16565b612096565b6001905092915050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b600f60019054906101000a900460ff1681565b60145481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61143461208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b990613b03565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61158761208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90613b03565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546116a490613a89565b80601f01602080910402602001604051908101604052809291908181526020018280546116d090613a89565b801561171b5780601f106116f25761010080835404028352916020019161171b565b820191905f5260205f20905b8154815290600101906020018083116116fe57829003601f168201915b5050505050905090565b60135481565b61173361208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b890613b03565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184790613ef5565b60405180910390fd5b61185a8282612259565b5050565b61186661208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118eb90613b03565b60405180910390fd5b5f6118fe306113e7565b90505f8111611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990613f83565b60405180910390fd5b61196e30600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122f7565b50565b60175481565b5f611a3561198361208f565b84611a308560405180606001604052806025815260200161470e6025913960015f6119ac61208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c1c9092919063ffffffff16565b612096565b6001905092915050565b5f611a52611a4b61208f565b84846122f7565b6001905092915050565b600c5481565b600e5481565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b611a9361208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1890613b03565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b611b4661208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcb90613b03565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c6e91906137c3565b60405180910390a25050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60155481565b600f5f9054906101000a900460ff1681565b611d1c61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da190613b03565b60405180910390fd5b83601181905550826014819055508160128190555080601581905550601554601154611dd69190613fa1565b601081905550601554601454611dec9190613fa1565b601381905550601e6010541115611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f9061401e565b60405180910390fd5b601e6013541115611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e759061401e565b60405180910390fd5b50505050565b611e8c61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1190613b03565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b611f3d61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc290613b03565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fb906140ac565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121699061413a565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161224c9190613620565b60405180910390a3505050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235c906141c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca90614256565b60405180910390fd5b5f81036123ea576123e583835f612cdb565b612c17565b600f5f9054906101000a900460ff16156127df5761240661166d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612474575061244461166d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124ac57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124e6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124ff5750600960149054906101000a900460ff16155b156127de57601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125a15750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561264857600c548111156125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e2906142e4565b60405180910390fd5b600e546125f7836113e7565b826126029190613fa1565b1115612643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263a9061434c565b60405180910390fd5b6127dd565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156126e55750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561273457600c5481111561272f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612726906143da565b60405180910390fd5b6127dc565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166127db57600e5461278e836113e7565b826127999190613fa1565b11156127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d19061434c565b60405180910390fd5b5b5b5b5b5b5f6127e9306113e7565b90505f600d54821015905080801561280e5750600960149054906101000a900460ff16155b80156128615750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156128b4575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612907575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561294a576001600960146101000a81548160ff02191690831515021790555061292f612f64565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806129f9575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612a02575f90505b5f8115612c0757601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a6057505f601354115b15612af857612a8d6064612a7f6013548861318a90919063ffffffff16565b61320190919063ffffffff16565b905060135460155482612aa09190613ceb565b612aaa9190613d59565b60165f828254612aba9190613fa1565b9250508190555060135460145482612ad29190613ceb565b612adc9190613d59565b60175f828254612aec9190613fa1565b92505081905550612be4565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b4f57505f601054115b15612be357612b7c6064612b6e6010548861318a90919063ffffffff16565b61320190919063ffffffff16565b905060105460125482612b8f9190613ceb565b612b999190613d59565b60165f828254612ba99190613fa1565b9250508190555060105460115482612bc19190613ceb565b612bcb9190613d59565b60175f828254612bdb9190613fa1565b925050819055505b5b5f811115612bf857612bf7873083612cdb565b5b8085612c0491906143f8565b94505b612c12878787612cdb565b505050505b505050565b5f838311158290612c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5a91906136c3565b60405180910390fd5b505f8385612c7191906143f8565b9050809150509392505050565b5f808284612c8c9190613fa1565b905083811015612cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc890614475565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d40906141c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dae90614256565b60405180910390fd5b612dc283838361324a565b612e2b816040518060600160405280602681526020016146c0602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c1c9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612eba815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c7e90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f579190613620565b60405180910390a3505050565b5f612f6e306113e7565b90505f601754601654612f819190613fa1565b90505f80831480612f9157505f82145b15612f9e57505050613188565b5f1515600f60019054906101000a900460ff16151503612fe557601e600d54612fc79190613ceb565b831115612fe057601e600d54612fdd9190613ceb565b92505b612ff1565b612fee306113e7565b92505b5f600283601654866130039190613ceb565b61300d9190613d59565b6130179190613d59565b90505f61302d828661324f90919063ffffffff16565b90505f47905061303c82613298565b5f613050824761324f90919063ffffffff16565b90505f61307a8761306c6017548561318a90919063ffffffff16565b61320190919063ffffffff16565b90505f818361308991906143f8565b90505f6016819055505f6017819055505f861180156130a757505f81115b156130f4576130b686826134ce565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826016546040516130eb93929190614493565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161313990613bdc565b5f6040518083038185875af1925050503d805f8114613173576040519150601f19603f3d011682016040523d82523d5f602084013e613178565b606091505b5050809750505050505050505050505b565b5f80830361319a575f90506131fb565b5f82846131a79190613ceb565b90508284826131b69190613d59565b146131f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ed90614538565b60405180910390fd5b809150505b92915050565b5f61324283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506135a7565b905092915050565b505050565b5f61329083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c1c565b905092915050565b5f600267ffffffffffffffff8111156132b4576132b3614556565b5b6040519080825280602002602001820160405280156132e25781602001602082028036833780820191505090505b50905030815f815181106132f9576132f8614583565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561339d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133c19190613c6c565b816001815181106133d5576133d4614583565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061343b3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161349d959493929190614667565b5f604051808303815f87803b1580156134b4575f80fd5b505af11580156134c6573d5f803e3d5ffd5b505050505050565b6134fa3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b815260040161355f96959493929190613dc2565b60606040518083038185885af115801561357b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135a09190613e35565b5050505050565b5f80831182906135ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e491906136c3565b60405180910390fd5b505f83856135fb9190613d59565b9050809150509392505050565b5f819050919050565b61361a81613608565b82525050565b5f6020820190506136335f830184613611565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613670578082015181840152602081019050613655565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61369582613639565b61369f8185613643565b93506136af818560208601613653565b6136b88161367b565b840191505092915050565b5f6020820190508181035f8301526136db818461368b565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613710826136e7565b9050919050565b61372081613706565b811461372a575f80fd5b50565b5f8135905061373b81613717565b92915050565b61374a81613608565b8114613754575f80fd5b50565b5f8135905061376581613741565b92915050565b5f8060408385031215613781576137806136e3565b5b5f61378e8582860161372d565b925050602061379f85828601613757565b9150509250929050565b5f8115159050919050565b6137bd816137a9565b82525050565b5f6020820190506137d65f8301846137b4565b92915050565b5f602082840312156137f1576137f06136e3565b5b5f6137fe8482850161372d565b91505092915050565b5f819050919050565b5f61382a613825613820846136e7565b613807565b6136e7565b9050919050565b5f61383b82613810565b9050919050565b5f61384c82613831565b9050919050565b61385c81613842565b82525050565b5f6020820190506138755f830184613853565b92915050565b5f805f60608486031215613892576138916136e3565b5b5f61389f8682870161372d565b93505060206138b08682870161372d565b92505060406138c186828701613757565b9150509250925092565b5f60ff82169050919050565b6138e0816138cb565b82525050565b5f6020820190506138f95f8301846138d7565b92915050565b61390881613706565b82525050565b5f6020820190506139215f8301846138ff565b92915050565b613930816137a9565b811461393a575f80fd5b50565b5f8135905061394b81613927565b92915050565b5f8060408385031215613967576139666136e3565b5b5f6139748582860161372d565b92505060206139858582860161393d565b9150509250929050565b5f602082840312156139a4576139a36136e3565b5b5f6139b18482850161393d565b91505092915050565b5f80604083850312156139d0576139cf6136e3565b5b5f6139dd8582860161372d565b92505060206139ee8582860161372d565b9150509250929050565b5f805f8060808587031215613a1057613a0f6136e3565b5b5f613a1d87828801613757565b9450506020613a2e87828801613757565b9350506040613a3f87828801613757565b9250506060613a5087828801613757565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613aa057607f821691505b602082108103613ab357613ab2613a5c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613aed602083613643565b9150613af882613ab9565b602082019050919050565b5f6020820190508181035f830152613b1a81613ae1565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b7b602283613643565b9150613b8682613b21565b604082019050919050565b5f6020820190508181035f830152613ba881613b6f565b9050919050565b5f81905092915050565b50565b5f613bc75f83613baf565b9150613bd282613bb9565b5f82019050919050565b5f613be682613bbc565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613c24601b83613643565b9150613c2f82613bf0565b602082019050919050565b5f6020820190508181035f830152613c5181613c18565b9050919050565b5f81519050613c6681613717565b92915050565b5f60208284031215613c8157613c806136e3565b5b5f613c8e84828501613c58565b91505092915050565b5f604082019050613caa5f8301856138ff565b613cb760208301846138ff565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613cf582613608565b9150613d0083613608565b9250828202613d0e81613608565b91508282048414831517613d2557613d24613cbe565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d6382613608565b9150613d6e83613608565b925082613d7e57613d7d613d2c565b5b828204905092915050565b5f819050919050565b5f613dac613da7613da284613d89565b613807565b613608565b9050919050565b613dbc81613d92565b82525050565b5f60c082019050613dd55f8301896138ff565b613de26020830188613611565b613def6040830187613db3565b613dfc6060830186613db3565b613e0960808301856138ff565b613e1660a0830184613611565b979650505050505050565b5f81519050613e2f81613741565b92915050565b5f805f60608486031215613e4c57613e4b6136e3565b5b5f613e5986828701613e21565b9350506020613e6a86828701613e21565b9250506040613e7b86828701613e21565b9150509250925092565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613edf603983613643565b9150613eea82613e85565b604082019050919050565b5f6020820190508181035f830152613f0c81613ed3565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613f6d602483613643565b9150613f7882613f13565b604082019050919050565b5f6020820190508181035f830152613f9a81613f61565b9050919050565b5f613fab82613608565b9150613fb683613608565b9250828201905080821115613fce57613fcd613cbe565b5b92915050565b7f4d4158203330252074617820616c6c6f776564000000000000000000000000005f82015250565b5f614008601383613643565b915061401382613fd4565b602082019050919050565b5f6020820190508181035f83015261403581613ffc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614096602483613643565b91506140a18261403c565b604082019050919050565b5f6020820190508181035f8301526140c38161408a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614124602283613643565b915061412f826140ca565b604082019050919050565b5f6020820190508181035f83015261415181614118565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6141b2602583613643565b91506141bd82614158565b604082019050919050565b5f6020820190508181035f8301526141df816141a6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614240602383613643565b915061424b826141e6565b604082019050919050565b5f6020820190508181035f83015261426d81614234565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6142ce603583613643565b91506142d982614274565b604082019050919050565b5f6020820190508181035f8301526142fb816142c2565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614336601383613643565b915061434182614302565b602082019050919050565b5f6020820190508181035f8301526143638161432a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6143c4603683613643565b91506143cf8261436a565b604082019050919050565b5f6020820190508181035f8301526143f1816143b8565b9050919050565b5f61440282613608565b915061440d83613608565b925082820390508181111561442557614424613cbe565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61445f601b83613643565b915061446a8261442b565b602082019050919050565b5f6020820190508181035f83015261448c81614453565b9050919050565b5f6060820190506144a65f830186613611565b6144b36020830185613611565b6144c06040830184613611565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614522602183613643565b915061452d826144c8565b604082019050919050565b5f6020820190508181035f83015261454f81614516565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6145e281613706565b82525050565b5f6145f383836145d9565b60208301905092915050565b5f602082019050919050565b5f614615826145b0565b61461f81856145ba565b935061462a836145ca565b805f5b8381101561465a57815161464188826145e8565b975061464c836145ff565b92505060018101905061462d565b5085935050505092915050565b5f60a08201905061467a5f830188613611565b6146876020830187613db3565b8181036040830152614699818661460b565b90506146a860608301856138ff565b6146b56080830184613611565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f3b37b219db772156ee2f43d316f99a6071054a1b6e16588b05d63b6a68caa0564736f6c63430008150033

Deployed Bytecode Sourcemap

17568:12830:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18170:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4831:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5745:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22108:311;;;;;;;;;;;;;:::i;:::-;;21072:1028;;;;;;;;;;;;;:::i;:::-;;18644:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17739:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5152:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24309:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18353:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5922:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5051:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18136:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6285:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17787:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24482:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17962:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18086:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18278:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5268:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10812:148;;;;;;;;;;;;;:::i;:::-;;22904:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10598:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4939:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18243:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23858:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22427:256;;;;;;;;;;;;;:::i;:::-;;18393:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6511:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5403:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17919:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18004:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18867:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17855:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22791:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23667:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5586:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18317:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18045:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23067:592;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22693:89;;;;;;;;;;;;;:::i;:::-;;10968:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18208:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18170:31;;;;:::o;4831:100::-;4885:13;4918:5;4911:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4831:100;:::o;5745:169::-;5828:4;5845:39;5854:12;:10;:12::i;:::-;5868:7;5877:6;5845:8;:39::i;:::-;5902:4;5895:11;;5745:169;;;;:::o;22108:311::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22164:18:::1;22185:21;22164:42;;22238:1;22225:10;:14;22217:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22290:12;22315:9;;;;;;;;;;;22307:23;;22338:10;22307:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22289:64;;;22372:7;22364:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22153:266;;22108:311::o:0;21072:1028::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21116:35:::1;21173:42;21116:100;;21230:58;21264:16;21283:4;21230:25;:58::i;:::-;21317:16;21299:15;;:34;;;;;;;;;;;;;;;;;;21381:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21363:56;;;21428:4;21435:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21363:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21347:13;;:112;;;;;;;;;;;;;;;;;;21470:55;21504:13;;;;;;;;;;;21520:4;21470:25;:55::i;:::-;21536:58;21573:13;;;;;;;;;;;21589:4;21536:28;:58::i;:::-;21615:17;21635:21;21615:41;;21667:19;21721:3;21716:2;21689:24;21707:4;21689:9;:24::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;21667:57;;21755:62;21772:4;21787:15;;;;;;;;;;;21805:11;21755:8;:62::i;:::-;21830:15;;;;;;;;;;;:31;;;21869:9;21902:4;21922:11;21952:1;21999::::0;22042:9:::1;;;;;;;;;;;22066:15;21830:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21104:996;;;21072:1028::o:0;18644:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17739:41::-;;;;;;;;;;;;;:::o;5152:108::-;5213:7;5240:12;;5233:19;;5152:108;:::o;24309:165::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24421:9:::1;;;;;;;;;;;24390:41;;24407:12;24390:41;;;;;;;;;;;;24454:12;24442:9;;:24;;;;;;;;;;;;;;;;;;24309:165:::0;:::o;18353:33::-;;;;:::o;5922:355::-;6062:4;6079:36;6089:6;6097:9;6108:6;6079:9;:36::i;:::-;6126:121;6135:6;6143:12;:10;:12::i;:::-;6157:89;6195:6;6157:89;;;;;;;;;;;;;;;;;:11;:19;6169:6;6157:19;;;;;;;;;;;;;;;:33;6177:12;:10;:12::i;:::-;6157:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6126:8;:121::i;:::-;6265:4;6258:11;;5922:355;;;;;:::o;5051:93::-;5109:5;5134:2;5127:9;;5051:93;:::o;18136:27::-;;;;:::o;6285:218::-;6373:4;6390:83;6399:12;:10;:12::i;:::-;6413:7;6422:50;6461:10;6422:11;:25;6434:12;:10;:12::i;:::-;6422:25;;;;;;;;;;;;;;;:34;6448:7;6422:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6390:8;:83::i;:::-;6491:4;6484:11;;6285:218;;;;:::o;17787:28::-;;;;;;;;;;;;;:::o;24482:125::-;24547:4;24571:19;:28;24591:7;24571:28;;;;;;;;;;;;;;;;;;;;;;;;;24564:35;;24482:125;;;:::o;17962:35::-;;;;:::o;18086:41::-;;;;;;;;;;;;;:::o;18278:32::-;;;;:::o;5268:127::-;5342:7;5369:9;:18;5379:7;5369:18;;;;;;;;;;;;;;;;5362:25;;5268:127;;;:::o;10812:148::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10919:1:::1;10882:40;;10903:6;;;;;;;;;;;10882:40;;;;;;;;;;;;10950:1;10933:6;;:19;;;;;;;;;;;;;;;;;;10812:148::o:0;22904:144::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23036:4:::1;22994:31;:39;23026:6;22994:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22904:144:::0;;:::o;10598:79::-;10636:7;10663:6;;;;;;;;;;;10656:13;;10598:79;:::o;4939:104::-;4995:13;5028:7;5021:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4939:104;:::o;18243:28::-;;;;:::o;23858:245::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23965:13:::1;;;;;;;;;;;23957:21;;:4;:21;;::::0;23949:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24054:41;24083:4;24089:5;24054:28;:41::i;:::-;23858:245:::0;;:::o;22427:256::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22492:20:::1;22515:24;22533:4;22515:9;:24::i;:::-;22492:47;;22573:1;22558:12;:16;22550:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22626:49;22644:4;22651:9;;;;;;;;;;;22662:12;22626:9;:49::i;:::-;22481:202;22427:256::o:0;18393:27::-;;;;:::o;6511:269::-;6604:4;6621:129;6630:12;:10;:12::i;:::-;6644:7;6653:96;6692:15;6653:96;;;;;;;;;;;;;;;;;:11;:25;6665:12;:10;:12::i;:::-;6653:25;;;;;;;;;;;;;;;:34;6679:7;6653:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6621:8;:129::i;:::-;6768:4;6761:11;;6511:269;;;;:::o;5403:175::-;5489:4;5506:42;5516:12;:10;:12::i;:::-;5530:9;5541:6;5506:9;:42::i;:::-;5566:4;5559:11;;5403:175;;;;:::o;17919:36::-;;;;:::o;18004:31::-;;;;:::o;18867:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17855:22::-;;;;:::o;22791:104::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22880:7:::1;22856:21;;:31;;;;;;;;;;;;;;;;;;22791:104:::0;:::o;23667:182::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23783:8:::1;23752:19;:28;23772:7;23752:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23823:7;23807:34;;;23832:8;23807:34;;;;;;:::i;:::-;;;;;;;;23667:182:::0;;:::o;5586:151::-;5675:7;5702:11;:18;5714:5;5702:18;;;;;;;;;;;;;;;:27;5721:7;5702:27;;;;;;;;;;;;;;;;5695:34;;5586:151;;;;:::o;18317:26::-;;;;:::o;18045:34::-;;;;;;;;;;;;;:::o;23067:592::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23276:17:::1;23257:16;:36;;;;23324:18;23304:17;:38;;;;23366:11;23353:10;:24;;;;23402:12;23388:11;:26;;;;23459:11;;23440:16;;:30;;;;:::i;:::-;23425:12;:45;;;;23517:11;;23497:17;;:31;;;;:::i;:::-;23481:13;:47;;;;23563:2;23547:12;;:18;;23539:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;23625:2;23608:13;;:19;;23600:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;23067:592:::0;;;;:::o;22693:89::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22769:5:::1;22751:15;;:23;;;;;;;;;;;;;;;;;;22693:89::o:0;10968:169::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11092:8:::1;11063:38;;11084:6;;;;;;;;;;;11063:38;;;;;;;;;;;;11121:8;11112:6;;:17;;;;;;;;;;;;;;;;;;10968:169:::0;:::o;18208:25::-;;;;:::o;184:98::-;237:7;264:10;257:17;;184:98;:::o;8187:381::-;8340:1;8323:19;;:5;:19;;;8315:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8421:1;8402:21;;:7;:21;;;8394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8506:6;8476:11;:18;8488:5;8476:18;;;;;;;;;;;;;;;:27;8495:7;8476:27;;;;;;;;;;;;;;;:36;;;;8544:7;8528:32;;8537:5;8528:32;;;8553:6;8528:32;;;;;;:::i;:::-;;;;;;;;8187:381;;;:::o;24112:189::-;24229:5;24195:25;:31;24221:4;24195:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24287:5;24253:40;;24281:4;24253:40;;;;;;;;;;;;24112:189;;:::o;24616:3154::-;24764:1;24748:18;;:4;:18;;;24740:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24841:1;24827:16;;:2;:16;;;24819:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24908:1;24898:6;:11;24895:92;;24926:28;24942:4;24948:2;24952:1;24926:15;:28::i;:::-;24969:7;;24895:92;25003:15;;;;;;;;;;;25000:1101;;;25064:7;:5;:7::i;:::-;25056:15;;:4;:15;;;;:49;;;;;25098:7;:5;:7::i;:::-;25092:13;;:2;:13;;;;25056:49;:86;;;;;25140:1;25126:16;;:2;:16;;;;25056:86;:128;;;;;25177:6;25163:21;;:2;:21;;;;25056:128;:160;;;;;25206:10;;;;;;;;;;;25205:11;25056:160;25034:1056;;;25300:25;:31;25326:4;25300:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25336:31;:35;25368:2;25336:35;;;;;;;;;;;;;;;;;;;;;;;;;25335:36;25300:71;25296:779;;;25418:21;;25408:6;:31;;25400:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;25558:16;;25541:13;25551:2;25541:9;:13::i;:::-;25532:6;:22;;;;:::i;:::-;:42;;25524:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25296:779;;;25677:25;:29;25703:2;25677:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25711:31;:37;25743:4;25711:37;;;;;;;;;;;;;;;;;;;;;;;;;25710:38;25677:71;25673:402;;;25795:21;;25785:6;:31;;25777:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;25673:402;;;25922:31;:35;25954:2;25922:35;;;;;;;;;;;;;;;;;;;;;;;;;25918:157;;26015:16;;25998:13;26008:2;25998:9;:13::i;:::-;25989:6;:22;;;;:::i;:::-;:42;;25981:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25918:157;25673:402;25296:779;25034:1056;25000:1101;26114:28;26145:24;26163:4;26145:9;:24::i;:::-;26114:55;;26183:12;26222:20;;26198;:44;;26183:59;;26274:7;:35;;;;;26299:10;;;;;;;;;;;26298:11;26274:35;:84;;;;;26327:25;:31;26353:4;26327:31;;;;;;;;;;;;;;;;;;;;;;;;;26326:32;26274:84;:127;;;;;26376:19;:25;26396:4;26376:25;;;;;;;;;;;;;;;;;;;;;;;;;26375:26;26274:127;:168;;;;;26419:19;:23;26439:2;26419:23;;;;;;;;;;;;;;;;;;;;;;;;;26418:24;26274:168;26256:306;;;26482:4;26469:10;;:17;;;;;;;;;;;;;;;;;;26504:10;:8;:10::i;:::-;26545:5;26532:10;;:18;;;;;;;;;;;;;;;;;;26256:306;26575:12;26591:10;;;;;;;;;;;26590:11;26575:26;;26703:19;:25;26723:4;26703:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26732:19;:23;26752:2;26732:23;;;;;;;;;;;;;;;;;;;;;;;;;26703:52;26700:99;;;26782:5;26772:15;;26700:99;26812:12;26916:7;26913:803;;;26967:25;:29;26993:2;26967:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27016:1;27000:13;;:17;26967:50;26963:600;;;27044:34;27074:3;27044:25;27055:13;;27044:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;27037:41;;27140:13;;27126:11;;27119:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;27097:18;;:56;;;;;;;:::i;:::-;;;;;;;;27215:13;;27195:17;;27188:4;:24;;;;:::i;:::-;:40;;;;:::i;:::-;27172:12;;:56;;;;;;;:::i;:::-;;;;;;;;26963:600;;;27289:25;:31;27315:4;27289:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;27339:1;27324:12;;:16;27289:51;27286:277;;;27368:33;27397:3;27368:24;27379:12;;27368:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27361:40;;27462:12;;27449:10;;27442:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;27420:18;;:54;;;;;;;:::i;:::-;;;;;;;;27535:12;;27516:16;;27509:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;27493:12;;:54;;;;;;;:::i;:::-;;;;;;;;27286:277;26963:600;27590:1;27583:4;:8;27580:93;;;27615:42;27631:4;27645;27652;27615:15;:42::i;:::-;27580:93;27700:4;27690:14;;;;;:::i;:::-;;;26913:803;27729:33;27745:4;27751:2;27755:6;27729:15;:33::i;:::-;24729:3041;;;;24616:3154;;;;:::o;9075:193::-;9161:7;9194:1;9189;:6;;9197:12;9181:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9221:9;9237:1;9233;:5;;;;:::i;:::-;9221:17;;9259:1;9252:8;;;9075:193;;;;;:::o;8741:182::-;8799:7;8819:9;8835:1;8831;:5;;;;:::i;:::-;8819:17;;8860:1;8855;:6;;8847:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8914:1;8907:8;;;8741:182;;;;:::o;6788:575::-;6946:1;6928:20;;:6;:20;;;6920:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7030:1;7009:23;;:9;:23;;;7001:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7086:47;7107:6;7115:9;7126:6;7086:20;:47::i;:::-;7167:71;7189:6;7167:71;;;;;;;;;;;;;;;;;:9;:17;7177:6;7167:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7147:9;:17;7157:6;7147:17;;;;;;;;;;;;;;;:91;;;;7272:32;7297:6;7272:9;:20;7282:9;7272:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7249:9;:20;7259:9;7249:20;;;;;;;;;;;;;;;:55;;;;7337:9;7320:35;;7329:6;7320:35;;;7348:6;7320:35;;;;;;:::i;:::-;;;;;;;;6788:575;;;:::o;28914:1481::-;28953:23;28979:24;28997:4;28979:9;:24::i;:::-;28953:50;;29014:25;29063:12;;29042:18;;:33;;;;:::i;:::-;29014:61;;29086:12;29134:1;29115:15;:20;:46;;;;29160:1;29139:17;:22;29115:46;29112:60;;;29164:7;;;;;29112:60;29213:5;29188:30;;:21;;;;;;;;;;;:30;;;29185:258;;29278:2;29255:20;;:25;;;;:::i;:::-;29237:15;:43;29234:125;;;29341:2;29318:20;;:25;;;;:::i;:::-;29300:43;;29234:125;29185:258;;;29407:24;29425:4;29407:9;:24::i;:::-;29389:42;;29185:258;29515:23;29600:1;29580:17;29559:18;;29541:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29515:86;;29612:26;29641:36;29661:15;29641;:19;;:36;;;;:::i;:::-;29612:65;;29691:25;29719:21;29691:49;;29754:36;29771:18;29754:16;:36::i;:::-;29805:18;29826:44;29852:17;29826:21;:25;;:44;;;;:::i;:::-;29805:65;;29884:17;29904:51;29937:17;29904:28;29919:12;;29904:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29884:71;;29966:23;30005:9;29992:10;:22;;;;:::i;:::-;29966:48;;30052:1;30031:18;:22;;;;30079:1;30064:12;:16;;;;30115:1;30097:15;:19;:42;;;;;30138:1;30120:15;:19;30097:42;30094:210;;;30155:46;30168:15;30185;30155:12;:46::i;:::-;30221:71;30236:18;30256:15;30273:18;;30221:71;;;;;;;;:::i;:::-;;;;;;;;30094:210;30338:9;;;;;;;;;;;30330:23;;30361:21;30330:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30317:70;;;;;28942:1453;;;;;;;;;28914:1481;:::o;9276:254::-;9334:7;9365:1;9360;:6;9356:47;;9390:1;9383:8;;;;9356:47;9416:9;9432:1;9428;:5;;;;:::i;:::-;9416:17;;9461:1;9456;9452;:5;;;;:::i;:::-;:10;9444:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9521:1;9514:8;;;9276:254;;;;;:::o;9538:132::-;9596:7;9623:39;9627:1;9630;9623:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9616:46;;9538:132;;;;:::o;8576:125::-;;;;:::o;8931:136::-;8989:7;9016:43;9020:1;9023;9016:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9009:50;;8931:136;;;;:::o;27779:597::-;27908:21;27946:1;27932:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27908:40;;27977:4;27959;27964:1;27959:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28003:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27993:4;27998:1;27993:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28039:62;28056:4;28071:15;;;;;;;;;;;28089:11;28039:8;:62::i;:::-;28141:15;;;;;;;;;;;:66;;;28222:11;28248:1;28292:4;28319;28339:15;28141:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27834:542;27779:597;:::o;28385:520::-;28533:62;28550:4;28565:15;;;;;;;;;;;28583:11;28533:8;:62::i;:::-;28639:15;;;;;;;;;;;:31;;;28678:9;28711:4;28731:11;28757:1;28800;28851:4;28871:15;28639:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28385:520;;:::o;9678:279::-;9764:7;9796:1;9792;:5;9799:12;9784:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9823:9;9839:1;9835;:5;;;;:::i;:::-;9823:17;;9948:1;9941:8;;;9678:279;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:60::-;4161:3;4182:5;4175:12;;4133:60;;;:::o;4199:142::-;4249:9;4282:53;4300:34;4309:24;4327:5;4309:24;:::i;:::-;4300:34;:::i;:::-;4282:53;:::i;:::-;4269:66;;4199:142;;;:::o;4347:126::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4347:126;;;:::o;4479:153::-;4556:9;4589:37;4620:5;4589:37;:::i;:::-;4576:50;;4479:153;;;:::o;4638:185::-;4752:64;4810:5;4752:64;:::i;:::-;4747:3;4740:77;4638:185;;:::o;4829:276::-;4949:4;4987:2;4976:9;4972:18;4964:26;;5000:98;5095:1;5084:9;5080:17;5071:6;5000:98;:::i;:::-;4829:276;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:118::-;6253:24;6271:5;6253:24;:::i;:::-;6248:3;6241:37;6166:118;;:::o;6290:222::-;6383:4;6421:2;6410:9;6406:18;6398:26;;6434:71;6502:1;6491:9;6487:17;6478:6;6434:71;:::i;:::-;6290:222;;;;:::o;6518:116::-;6588:21;6603:5;6588:21;:::i;:::-;6581:5;6578:32;6568:60;;6624:1;6621;6614:12;6568:60;6518:116;:::o;6640:133::-;6683:5;6721:6;6708:20;6699:29;;6737:30;6761:5;6737:30;:::i;:::-;6640:133;;;;:::o;6779:468::-;6844:6;6852;6901:2;6889:9;6880:7;6876:23;6872:32;6869:119;;;6907:79;;:::i;:::-;6869:119;7027:1;7052:53;7097:7;7088:6;7077:9;7073:22;7052:53;:::i;:::-;7042:63;;6998:117;7154:2;7180:50;7222:7;7213:6;7202:9;7198:22;7180:50;:::i;:::-;7170:60;;7125:115;6779:468;;;;;:::o;7253:323::-;7309:6;7358:2;7346:9;7337:7;7333:23;7329:32;7326:119;;;7364:79;;:::i;:::-;7326:119;7484:1;7509:50;7551:7;7542:6;7531:9;7527:22;7509:50;:::i;:::-;7499:60;;7455:114;7253:323;;;;:::o;7582:474::-;7650:6;7658;7707:2;7695:9;7686:7;7682:23;7678:32;7675:119;;;7713:79;;:::i;:::-;7675:119;7833:1;7858:53;7903:7;7894:6;7883:9;7879:22;7858:53;:::i;:::-;7848:63;;7804:117;7960:2;7986:53;8031:7;8022:6;8011:9;8007:22;7986:53;:::i;:::-;7976:63;;7931:118;7582:474;;;;;:::o;8062:765::-;8148:6;8156;8164;8172;8221:3;8209:9;8200:7;8196:23;8192:33;8189:120;;;8228:79;;:::i;:::-;8189:120;8348:1;8373:53;8418:7;8409:6;8398:9;8394:22;8373:53;:::i;:::-;8363:63;;8319:117;8475:2;8501:53;8546:7;8537:6;8526:9;8522:22;8501:53;:::i;:::-;8491:63;;8446:118;8603:2;8629:53;8674:7;8665:6;8654:9;8650:22;8629:53;:::i;:::-;8619:63;;8574:118;8731:2;8757:53;8802:7;8793:6;8782:9;8778:22;8757:53;:::i;:::-;8747:63;;8702:118;8062:765;;;;;;;:::o;8833:180::-;8881:77;8878:1;8871:88;8978:4;8975:1;8968:15;9002:4;8999:1;8992:15;9019:320;9063:6;9100:1;9094:4;9090:12;9080:22;;9147:1;9141:4;9137:12;9168:18;9158:81;;9224:4;9216:6;9212:17;9202:27;;9158:81;9286:2;9278:6;9275:14;9255:18;9252:38;9249:84;;9305:18;;:::i;:::-;9249:84;9070:269;9019:320;;;:::o;9345:182::-;9485:34;9481:1;9473:6;9469:14;9462:58;9345:182;:::o;9533:366::-;9675:3;9696:67;9760:2;9755:3;9696:67;:::i;:::-;9689:74;;9772:93;9861:3;9772:93;:::i;:::-;9890:2;9885:3;9881:12;9874:19;;9533:366;;;:::o;9905:419::-;10071:4;10109:2;10098:9;10094:18;10086:26;;10158:9;10152:4;10148:20;10144:1;10133:9;10129:17;10122:47;10186:131;10312:4;10186:131;:::i;:::-;10178:139;;9905:419;;;:::o;10330:221::-;10470:34;10466:1;10458:6;10454:14;10447:58;10539:4;10534:2;10526:6;10522:15;10515:29;10330:221;:::o;10557:366::-;10699:3;10720:67;10784:2;10779:3;10720:67;:::i;:::-;10713:74;;10796:93;10885:3;10796:93;:::i;:::-;10914:2;10909:3;10905:12;10898:19;;10557:366;;;:::o;10929:419::-;11095:4;11133:2;11122:9;11118:18;11110:26;;11182:9;11176:4;11172:20;11168:1;11157:9;11153:17;11146:47;11210:131;11336:4;11210:131;:::i;:::-;11202:139;;10929:419;;;:::o;11354:147::-;11455:11;11492:3;11477:18;;11354:147;;;;:::o;11507:114::-;;:::o;11627:398::-;11786:3;11807:83;11888:1;11883:3;11807:83;:::i;:::-;11800:90;;11899:93;11988:3;11899:93;:::i;:::-;12017:1;12012:3;12008:11;12001:18;;11627:398;;;:::o;12031:379::-;12215:3;12237:147;12380:3;12237:147;:::i;:::-;12230:154;;12401:3;12394:10;;12031:379;;;:::o;12416:177::-;12556:29;12552:1;12544:6;12540:14;12533:53;12416:177;:::o;12599:366::-;12741:3;12762:67;12826:2;12821:3;12762:67;:::i;:::-;12755:74;;12838:93;12927:3;12838:93;:::i;:::-;12956:2;12951:3;12947:12;12940:19;;12599:366;;;:::o;12971:419::-;13137:4;13175:2;13164:9;13160:18;13152:26;;13224:9;13218:4;13214:20;13210:1;13199:9;13195:17;13188:47;13252:131;13378:4;13252:131;:::i;:::-;13244:139;;12971:419;;;:::o;13396:143::-;13453:5;13484:6;13478:13;13469:22;;13500:33;13527:5;13500:33;:::i;:::-;13396:143;;;;:::o;13545:351::-;13615:6;13664:2;13652:9;13643:7;13639:23;13635:32;13632:119;;;13670:79;;:::i;:::-;13632:119;13790:1;13815:64;13871:7;13862:6;13851:9;13847:22;13815:64;:::i;:::-;13805:74;;13761:128;13545:351;;;;:::o;13902:332::-;14023:4;14061:2;14050:9;14046:18;14038:26;;14074:71;14142:1;14131:9;14127:17;14118:6;14074:71;:::i;:::-;14155:72;14223:2;14212:9;14208:18;14199:6;14155:72;:::i;:::-;13902:332;;;;;:::o;14240:180::-;14288:77;14285:1;14278:88;14385:4;14382:1;14375:15;14409:4;14406:1;14399:15;14426:410;14466:7;14489:20;14507:1;14489:20;:::i;:::-;14484:25;;14523:20;14541:1;14523:20;:::i;:::-;14518:25;;14578:1;14575;14571:9;14600:30;14618:11;14600:30;:::i;:::-;14589:41;;14779:1;14770:7;14766:15;14763:1;14760:22;14740:1;14733:9;14713:83;14690:139;;14809:18;;:::i;:::-;14690:139;14474:362;14426:410;;;;:::o;14842:180::-;14890:77;14887:1;14880:88;14987:4;14984:1;14977:15;15011:4;15008:1;15001:15;15028:185;15068:1;15085:20;15103:1;15085:20;:::i;:::-;15080:25;;15119:20;15137:1;15119:20;:::i;:::-;15114:25;;15158:1;15148:35;;15163:18;;:::i;:::-;15148:35;15205:1;15202;15198:9;15193:14;;15028:185;;;;:::o;15219:85::-;15264:7;15293:5;15282:16;;15219:85;;;:::o;15310:158::-;15368:9;15401:61;15419:42;15428:32;15454:5;15428:32;:::i;:::-;15419:42;:::i;:::-;15401:61;:::i;:::-;15388:74;;15310:158;;;:::o;15474:147::-;15569:45;15608:5;15569:45;:::i;:::-;15564:3;15557:58;15474:147;;:::o;15627:807::-;15876:4;15914:3;15903:9;15899:19;15891:27;;15928:71;15996:1;15985:9;15981:17;15972:6;15928:71;:::i;:::-;16009:72;16077:2;16066:9;16062:18;16053:6;16009:72;:::i;:::-;16091:80;16167:2;16156:9;16152:18;16143:6;16091:80;:::i;:::-;16181;16257:2;16246:9;16242:18;16233:6;16181:80;:::i;:::-;16271:73;16339:3;16328:9;16324:19;16315:6;16271:73;:::i;:::-;16354;16422:3;16411:9;16407:19;16398:6;16354:73;:::i;:::-;15627:807;;;;;;;;;:::o;16440:143::-;16497:5;16528:6;16522:13;16513:22;;16544:33;16571:5;16544:33;:::i;:::-;16440:143;;;;:::o;16589:663::-;16677:6;16685;16693;16742:2;16730:9;16721:7;16717:23;16713:32;16710:119;;;16748:79;;:::i;:::-;16710:119;16868:1;16893:64;16949:7;16940:6;16929:9;16925:22;16893:64;:::i;:::-;16883:74;;16839:128;17006:2;17032:64;17088:7;17079:6;17068:9;17064:22;17032:64;:::i;:::-;17022:74;;16977:129;17145:2;17171:64;17227:7;17218:6;17207:9;17203:22;17171:64;:::i;:::-;17161:74;;17116:129;16589:663;;;;;:::o;17258:244::-;17398:34;17394:1;17386:6;17382:14;17375:58;17467:27;17462:2;17454:6;17450:15;17443:52;17258:244;:::o;17508:366::-;17650:3;17671:67;17735:2;17730:3;17671:67;:::i;:::-;17664:74;;17747:93;17836:3;17747:93;:::i;:::-;17865:2;17860:3;17856:12;17849:19;;17508:366;;;:::o;17880:419::-;18046:4;18084:2;18073:9;18069:18;18061:26;;18133:9;18127:4;18123:20;18119:1;18108:9;18104:17;18097:47;18161:131;18287:4;18161:131;:::i;:::-;18153:139;;17880:419;;;:::o;18305:223::-;18445:34;18441:1;18433:6;18429:14;18422:58;18514:6;18509:2;18501:6;18497:15;18490:31;18305:223;:::o;18534:366::-;18676:3;18697:67;18761:2;18756:3;18697:67;:::i;:::-;18690:74;;18773:93;18862:3;18773:93;:::i;:::-;18891:2;18886:3;18882:12;18875:19;;18534:366;;;:::o;18906:419::-;19072:4;19110:2;19099:9;19095:18;19087:26;;19159:9;19153:4;19149:20;19145:1;19134:9;19130:17;19123:47;19187:131;19313:4;19187:131;:::i;:::-;19179:139;;18906:419;;;:::o;19331:191::-;19371:3;19390:20;19408:1;19390:20;:::i;:::-;19385:25;;19424:20;19442:1;19424:20;:::i;:::-;19419:25;;19467:1;19464;19460:9;19453:16;;19488:3;19485:1;19482:10;19479:36;;;19495:18;;:::i;:::-;19479:36;19331:191;;;;:::o;19528:169::-;19668:21;19664:1;19656:6;19652:14;19645:45;19528:169;:::o;19703:366::-;19845:3;19866:67;19930:2;19925:3;19866:67;:::i;:::-;19859:74;;19942:93;20031:3;19942:93;:::i;:::-;20060:2;20055:3;20051:12;20044:19;;19703:366;;;:::o;20075:419::-;20241:4;20279:2;20268:9;20264:18;20256:26;;20328:9;20322:4;20318:20;20314:1;20303:9;20299:17;20292:47;20356:131;20482:4;20356:131;:::i;:::-;20348:139;;20075:419;;;:::o;20500:223::-;20640:34;20636:1;20628:6;20624:14;20617:58;20709:6;20704:2;20696:6;20692:15;20685:31;20500:223;:::o;20729:366::-;20871:3;20892:67;20956:2;20951:3;20892:67;:::i;:::-;20885:74;;20968:93;21057:3;20968:93;:::i;:::-;21086:2;21081:3;21077:12;21070:19;;20729:366;;;:::o;21101:419::-;21267:4;21305:2;21294:9;21290:18;21282:26;;21354:9;21348:4;21344:20;21340:1;21329:9;21325:17;21318:47;21382:131;21508:4;21382:131;:::i;:::-;21374:139;;21101:419;;;:::o;21526:221::-;21666:34;21662:1;21654:6;21650:14;21643:58;21735:4;21730:2;21722:6;21718:15;21711:29;21526:221;:::o;21753:366::-;21895:3;21916:67;21980:2;21975:3;21916:67;:::i;:::-;21909:74;;21992:93;22081:3;21992:93;:::i;:::-;22110:2;22105:3;22101:12;22094:19;;21753:366;;;:::o;22125:419::-;22291:4;22329:2;22318:9;22314:18;22306:26;;22378:9;22372:4;22368:20;22364:1;22353:9;22349:17;22342:47;22406:131;22532:4;22406:131;:::i;:::-;22398:139;;22125:419;;;:::o;22550:224::-;22690:34;22686:1;22678:6;22674:14;22667:58;22759:7;22754:2;22746:6;22742:15;22735:32;22550:224;:::o;22780:366::-;22922:3;22943:67;23007:2;23002:3;22943:67;:::i;:::-;22936:74;;23019:93;23108:3;23019:93;:::i;:::-;23137:2;23132:3;23128:12;23121:19;;22780:366;;;:::o;23152:419::-;23318:4;23356:2;23345:9;23341:18;23333:26;;23405:9;23399:4;23395:20;23391:1;23380:9;23376:17;23369:47;23433:131;23559:4;23433:131;:::i;:::-;23425:139;;23152:419;;;:::o;23577:222::-;23717:34;23713:1;23705:6;23701:14;23694:58;23786:5;23781:2;23773:6;23769:15;23762:30;23577:222;:::o;23805:366::-;23947:3;23968:67;24032:2;24027:3;23968:67;:::i;:::-;23961:74;;24044:93;24133:3;24044:93;:::i;:::-;24162:2;24157:3;24153:12;24146:19;;23805:366;;;:::o;24177:419::-;24343:4;24381:2;24370:9;24366:18;24358:26;;24430:9;24424:4;24420:20;24416:1;24405:9;24401:17;24394:47;24458:131;24584:4;24458:131;:::i;:::-;24450:139;;24177:419;;;:::o;24602:240::-;24742:34;24738:1;24730:6;24726:14;24719:58;24811:23;24806:2;24798:6;24794:15;24787:48;24602:240;:::o;24848:366::-;24990:3;25011:67;25075:2;25070:3;25011:67;:::i;:::-;25004:74;;25087:93;25176:3;25087:93;:::i;:::-;25205:2;25200:3;25196:12;25189:19;;24848:366;;;:::o;25220:419::-;25386:4;25424:2;25413:9;25409:18;25401:26;;25473:9;25467:4;25463:20;25459:1;25448:9;25444:17;25437:47;25501:131;25627:4;25501:131;:::i;:::-;25493:139;;25220:419;;;:::o;25645:169::-;25785:21;25781:1;25773:6;25769:14;25762:45;25645:169;:::o;25820:366::-;25962:3;25983:67;26047:2;26042:3;25983:67;:::i;:::-;25976:74;;26059:93;26148:3;26059:93;:::i;:::-;26177:2;26172:3;26168:12;26161:19;;25820:366;;;:::o;26192:419::-;26358:4;26396:2;26385:9;26381:18;26373:26;;26445:9;26439:4;26435:20;26431:1;26420:9;26416:17;26409:47;26473:131;26599:4;26473:131;:::i;:::-;26465:139;;26192:419;;;:::o;26617:241::-;26757:34;26753:1;26745:6;26741:14;26734:58;26826:24;26821:2;26813:6;26809:15;26802:49;26617:241;:::o;26864:366::-;27006:3;27027:67;27091:2;27086:3;27027:67;:::i;:::-;27020:74;;27103:93;27192:3;27103:93;:::i;:::-;27221:2;27216:3;27212:12;27205:19;;26864:366;;;:::o;27236:419::-;27402:4;27440:2;27429:9;27425:18;27417:26;;27489:9;27483:4;27479:20;27475:1;27464:9;27460:17;27453:47;27517:131;27643:4;27517:131;:::i;:::-;27509:139;;27236:419;;;:::o;27661:194::-;27701:4;27721:20;27739:1;27721:20;:::i;:::-;27716:25;;27755:20;27773:1;27755:20;:::i;:::-;27750:25;;27799:1;27796;27792:9;27784:17;;27823:1;27817:4;27814:11;27811:37;;;27828:18;;:::i;:::-;27811:37;27661:194;;;;:::o;27861:177::-;28001:29;27997:1;27989:6;27985:14;27978:53;27861:177;:::o;28044:366::-;28186:3;28207:67;28271:2;28266:3;28207:67;:::i;:::-;28200:74;;28283:93;28372:3;28283:93;:::i;:::-;28401:2;28396:3;28392:12;28385:19;;28044:366;;;:::o;28416:419::-;28582:4;28620:2;28609:9;28605:18;28597:26;;28669:9;28663:4;28659:20;28655:1;28644:9;28640:17;28633:47;28697:131;28823:4;28697:131;:::i;:::-;28689:139;;28416:419;;;:::o;28841:442::-;28990:4;29028:2;29017:9;29013:18;29005:26;;29041:71;29109:1;29098:9;29094:17;29085:6;29041:71;:::i;:::-;29122:72;29190:2;29179:9;29175:18;29166:6;29122:72;:::i;:::-;29204;29272:2;29261:9;29257:18;29248:6;29204:72;:::i;:::-;28841:442;;;;;;:::o;29289:220::-;29429:34;29425:1;29417:6;29413:14;29406:58;29498:3;29493:2;29485:6;29481:15;29474:28;29289:220;:::o;29515:366::-;29657:3;29678:67;29742:2;29737:3;29678:67;:::i;:::-;29671:74;;29754:93;29843:3;29754:93;:::i;:::-;29872:2;29867:3;29863:12;29856:19;;29515:366;;;:::o;29887:419::-;30053:4;30091:2;30080:9;30076:18;30068:26;;30140:9;30134:4;30130:20;30126:1;30115:9;30111:17;30104:47;30168:131;30294:4;30168:131;:::i;:::-;30160:139;;29887:419;;;:::o;30312:180::-;30360:77;30357:1;30350:88;30457:4;30454:1;30447:15;30481:4;30478:1;30471:15;30498:180;30546:77;30543:1;30536:88;30643:4;30640:1;30633:15;30667:4;30664:1;30657:15;30684:114;30751:6;30785:5;30779:12;30769:22;;30684:114;;;:::o;30804:184::-;30903:11;30937:6;30932:3;30925:19;30977:4;30972:3;30968:14;30953:29;;30804:184;;;;:::o;30994:132::-;31061:4;31084:3;31076:11;;31114:4;31109:3;31105:14;31097:22;;30994:132;;;:::o;31132:108::-;31209:24;31227:5;31209:24;:::i;:::-;31204:3;31197:37;31132:108;;:::o;31246:179::-;31315:10;31336:46;31378:3;31370:6;31336:46;:::i;:::-;31414:4;31409:3;31405:14;31391:28;;31246:179;;;;:::o;31431:113::-;31501:4;31533;31528:3;31524:14;31516:22;;31431:113;;;:::o;31580:732::-;31699:3;31728:54;31776:5;31728:54;:::i;:::-;31798:86;31877:6;31872:3;31798:86;:::i;:::-;31791:93;;31908:56;31958:5;31908:56;:::i;:::-;31987:7;32018:1;32003:284;32028:6;32025:1;32022:13;32003:284;;;32104:6;32098:13;32131:63;32190:3;32175:13;32131:63;:::i;:::-;32124:70;;32217:60;32270:6;32217:60;:::i;:::-;32207:70;;32063:224;32050:1;32047;32043:9;32038:14;;32003:284;;;32007:14;32303:3;32296:10;;31704:608;;;31580:732;;;;:::o;32318:831::-;32581:4;32619:3;32608:9;32604:19;32596:27;;32633:71;32701:1;32690:9;32686:17;32677:6;32633:71;:::i;:::-;32714:80;32790:2;32779:9;32775:18;32766:6;32714:80;:::i;:::-;32841:9;32835:4;32831:20;32826:2;32815:9;32811:18;32804:48;32869:108;32972:4;32963:6;32869:108;:::i;:::-;32861:116;;32987:72;33055:2;33044:9;33040:18;33031:6;32987:72;:::i;:::-;33069:73;33137:3;33126:9;33122:19;33113:6;33069:73;:::i;:::-;32318:831;;;;;;;;:::o

Swarm Source

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