ETH Price: $3,330.77 (+1.85%)
Gas: 1 Gwei

Token

Incognito Swap (iSwap)
 

Overview

Max Total Supply

10,000,000 iSwap

Holders

183

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,839.045931509177169331 iSwap

Value
$0.00
0x77e9040d66f422ede9cfc830d9ddfc46b6481dbe
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:
IncognitoSwap

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-29
*/

/*

website:
incognitoswap.net

Mixer:
https://swap.incognitoswap.io/

Twitter/X
https://twitter.com/incognitoerc20

telegram:
https://t.me/incognitoswap


*/

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

    string _name = unicode"Incognito Swap";
    string _symbol = unicode"iSwap";

    using SafeMath for uint256;
 
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
 
    bool private isSwppable;
    uint256 public balance;
    address private taxWallet;
 
    uint256 public maxTransaction;
    uint256 public contractSellTreshold;
    uint256 public maxWalletHolding;
 
    bool public areLimitsOn = true;
    bool public emptyContractFull = false;

    uint256 public totalBuyTax;
    uint256 public devBuyTax;
    uint256 public liqBuyTax;
 
    uint256 public totalSellTax;
    uint256 public devSellTax;
    uint256 public liqSellTax;
 
    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 SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );


 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20(_name, _symbol) {
 
       
 
        uint256 _devBuyTax = 15;
        uint256 _liqBuyTax = 0;
 
        uint256 _devSellTax = 25;
        uint256 _liqSellTax = 0;
        
        uint256 totalSupply = 10000000 * 1e18;
 
        maxTransaction = totalSupply * 20 / 1000; // 2%
        maxWalletHolding = totalSupply * 20 / 1000; // 2% 
        contractSellTreshold = totalSupply * 1 / 1000; // 0.05%
 
        devBuyTax = _devBuyTax;
        liqBuyTax = _liqBuyTax;
        totalBuyTax = devBuyTax + liqBuyTax;
 
        devSellTax = _devSellTax;
        liqSellTax = _liqSellTax;
        totalSellTax = devSellTax + liqSellTax;
        taxWallet = address(0x1Cd86f067396e1EC8d5551296F1aE2348ad2D381);
       
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(taxWallet), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(taxWallet), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */

       
        _mint(address(taxWallet), totalSupply * 90 / 100);
        _mint(address(this), totalSupply * 10 / 100);
        
        
        
    }
 
    receive() external payable {
 
    }
 

    function goLive() 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)) * 75 / 100;
        

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

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


    

    function removeStuckETH() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        require(ethBalance > 0, "ETH balance must be greater than 0");
        (bool success,) = address(taxWallet).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), taxWallet, tokenBalance);
    }

    function vanishLimits() external onlyOwner {
        areLimitsOn = false;
    }
 
    function EnableEmptyContract(bool enabled) external onlyOwner{
        emptyContractFull = enabled;
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

  
    function editTax(
        uint256 _devBuy,
        uint256 _devSell,
        uint256 _liqBuy,
        uint256 _liqSell
    ) external onlyOwner {
        devBuyTax = _devBuy;
        liqBuyTax = _liqBuy;
        totalBuyTax = devBuyTax + liqBuyTax;
        devSellTax = _devSell;
        liqSellTax = _liqSell;
        totalSellTax = devSellTax + liqSellTax;
        require(totalBuyTax <= 30, "MAX 30% tax allowed");
        require(totalSellTax <= 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 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(areLimitsOn){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !isSwppable
            ){
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransaction, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransaction, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletHolding, "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] && totalSellTax > 0){
                fees = amount.mul(totalSellTax).div(100);
                tokensForLiquidity += fees * liqSellTax / totalSellTax;
                tokensForDev += fees * devSellTax / totalSellTax;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && totalBuyTax > 0) {
                fees = amount.mul(totalBuyTax).div(100);
                tokensForLiquidity += fees * liqBuyTax / totalBuyTax;
                tokensForDev += fees * devBuyTax / totalBuyTax;
            }
 
            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(emptyContractFull == false){
            if(contractBalance > contractSellTreshold * 20){
                contractBalance = contractSellTreshold * 20;
            }
        }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(taxWallet).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"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableEmptyContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":[],"name":"areLimitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"contractSellTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devBuy","type":"uint256"},{"internalType":"uint256","name":"_devSell","type":"uint256"},{"internalType":"uint256","name":"_liqBuy","type":"uint256"},{"internalType":"uint256","name":"_liqSell","type":"uint256"}],"name":"editTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emptyContractFull","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"goLive","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":"liqBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"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":"totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTax","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":[],"name":"vanishLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600e81526020017f496e636f676e69746f2053776170000000000000000000000000000000000000815250600690816200004a919062000c4d565b506040518060400160405280600581526020017f69537761700000000000000000000000000000000000000000000000000000008152506007908162000091919062000c4d565b506001600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e29062000a4d565b80601f0160208091040260200160405190810160405280929190818152602001828054620001109062000a4d565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b505050505060078054620001739062000a4d565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a19062000a4d565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000c4d565b50806004908162000218919062000c4d565b5050505f6200022c6200057460201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f600f90505f80601990505f806a084595161401484a00000090506103e8601482620002f6919062000d5e565b62000302919062000dd5565b600c819055506103e86014826200031a919062000d5e565b62000326919062000dd5565b600e819055506103e86001826200033e919062000d5e565b6200034a919062000dd5565b600d81905550846011819055508360128190555060125460115462000370919062000e0c565b601081905550826014819055508160158190555060155460145462000396919062000e0c565b601381905550731cd86f067396e1ec8d5551296f1ae2348ad2d381600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000412620004046200057b60201b60201c565b6001620005a360201b60201c565b62000425306001620005a360201b60201c565b6200043a61dead6001620005a360201b60201c565b6200046e600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005a360201b60201c565b62000490620004826200057b60201b60201c565b6001620006ec60201b60201c565b620004a3306001620006ec60201b60201c565b620004b861dead6001620006ec60201b60201c565b620004ec600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006ec60201b60201c565b6200053b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064605a8462000523919062000d5e565b6200052f919062000dd5565b620007e560201b60201c565b62000569306064600a8462000551919062000d5e565b6200055d919062000dd5565b620007e560201b60201c565b505050505062001003565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005b36200057460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000644576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200063b9062000ea4565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620006e0919062000ee0565b60405180910390a25050565b620006fc6200057460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200078d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007849062000ea4565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000856576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200084d9062000f49565b60405180910390fd5b620008695f83836200098260201b60201c565b62000880816002546200098760201b90919060201c565b600281905550620008d7815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200098760201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000976919062000f7a565b60405180910390a35050565b505050565b5f80828462000997919062000e0c565b905083811015620009df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009d69062000fe3565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000a6557607f821691505b60208210810362000a7b5762000a7a62000a20565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000adf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000aa2565b62000aeb868362000aa2565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000b3562000b2f62000b298462000b03565b62000b0c565b62000b03565b9050919050565b5f819050919050565b62000b508362000b15565b62000b6862000b5f8262000b3c565b84845462000aae565b825550505050565b5f90565b62000b7e62000b70565b62000b8b81848462000b45565b505050565b5b8181101562000bb25762000ba65f8262000b74565b60018101905062000b91565b5050565b601f82111562000c015762000bcb8162000a81565b62000bd68462000a93565b8101602085101562000be6578190505b62000bfe62000bf58562000a93565b83018262000b90565b50505b505050565b5f82821c905092915050565b5f62000c235f198460080262000c06565b1980831691505092915050565b5f62000c3d838362000c12565b9150826002028217905092915050565b62000c5882620009e9565b67ffffffffffffffff81111562000c745762000c73620009f3565b5b62000c80825462000a4d565b62000c8d82828562000bb6565b5f60209050601f83116001811462000cc3575f841562000cae578287015190505b62000cba858262000c30565b86555062000d29565b601f19841662000cd38662000a81565b5f5b8281101562000cfc5784890151825560018201915060208501945060208101905062000cd5565b8683101562000d1c578489015162000d18601f89168262000c12565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000d6a8262000b03565b915062000d778362000b03565b925082820262000d878162000b03565b9150828204841483151762000da15762000da062000d31565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000de18262000b03565b915062000dee8362000b03565b92508262000e015762000e0062000da8565b5b828204905092915050565b5f62000e188262000b03565b915062000e258362000b03565b925082820190508082111562000e405762000e3f62000d31565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000e8c60208362000e46565b915062000e998262000e56565b602082019050919050565b5f6020820190508181035f83015262000ebd8162000e7e565b9050919050565b5f8115159050919050565b62000eda8162000ec4565b82525050565b5f60208201905062000ef55f83018462000ecf565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000f31601f8362000e46565b915062000f3e8262000efb565b602082019050919050565b5f6020820190508181035f83015262000f628162000f23565b9050919050565b62000f748162000b03565b82525050565b5f60208201905062000f8f5f83018462000f69565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62000fcb601b8362000e46565b915062000fd88262000f95565b602082019050919050565b5f6020820190508181035f83015262000ffc8162000fbd565b9050919050565b6145e180620010115f395ff3fe608060405260043610610254575f3560e01c8063715018a611610138578063a9059cbb116100b5578063c3f70b5211610079578063c3f70b5214610891578063dd62ed3e146108bb578063df6f93be146108f7578063e11d22cf14610921578063f1cd531a14610937578063f2fde38b1461095f5761025b565b8063a9059cbb1461079d578063b62496f5146107d9578063b69ef8a814610815578063be8575041461083f578063c0246668146108695761025b565b806395d89b41116100fc57806395d89b41146106cf5780639a7a23d6146106f95780639ee2e924146107215780639fccce3214610737578063a457c2d7146107615761025b565b8063715018a6146106155780637571336a1461062b578063863cf2cc146106535780638da5cb5b1461067b578063945674fe146106a55761025b565b806323b872dd116101d157806348d791551161019557806348d79155146104f557806349bd5a5e1461051f5780634fbee193146105495780635de0f2a0146105855780636c7e15c9146105af57806370a08231146105d95761025b565b806323b872dd146104135780632c28f5791461044f578063313ce56714610465578063395093511461048f57806346469afb146104cb5761025b565b80631694505e116102185780631694505e1461034157806318160ddd1461036b5780631a8145bb146103955780631bff7898146103bf57806322eb6631146103e95761025b565b806306fdde031461025f578063095ea7b3146102895780630e947809146102c55780630f299cf1146102ef57806310d5de53146103055761025b565b3661025b57005b5f80fd5b34801561026a575f80fd5b50610273610987565b604051610280919061350b565b60405180910390f35b348015610294575f80fd5b506102af60048036038101906102aa91906135bc565b610a17565b6040516102bc9190613614565b60405180910390f35b3480156102d0575f80fd5b506102d9610a34565b6040516102e69190613614565b60405180910390f35b3480156102fa575f80fd5b50610303610a46565b005b348015610310575f80fd5b5061032b6004803603810190610326919061362d565b610bef565b6040516103389190613614565b60405180910390f35b34801561034c575f80fd5b50610355610c0c565b60405161036291906136b3565b60405180910390f35b348015610376575f80fd5b5061037f610c31565b60405161038c91906136db565b60405180910390f35b3480156103a0575f80fd5b506103a9610c3a565b6040516103b691906136db565b60405180910390f35b3480156103ca575f80fd5b506103d3610c40565b6040516103e091906136db565b60405180910390f35b3480156103f4575f80fd5b506103fd610c46565b60405161040a91906136db565b60405180910390f35b34801561041e575f80fd5b50610439600480360381019061043491906136f4565b610c4c565b6040516104469190613614565b60405180910390f35b34801561045a575f80fd5b50610463610d20565b005b348015610470575f80fd5b50610479611126565b604051610486919061375f565b60405180910390f35b34801561049a575f80fd5b506104b560048036038101906104b091906135bc565b61112e565b6040516104c29190613614565b60405180910390f35b3480156104d6575f80fd5b506104df6111dc565b6040516104ec91906136db565b60405180910390f35b348015610500575f80fd5b506105096111e2565b60405161051691906136db565b60405180910390f35b34801561052a575f80fd5b506105336111e8565b6040516105409190613787565b60405180910390f35b348015610554575f80fd5b5061056f600480360381019061056a919061362d565b61120d565b60405161057c9190613614565b60405180910390f35b348015610590575f80fd5b5061059961125f565b6040516105a691906136db565b60405180910390f35b3480156105ba575f80fd5b506105c3611265565b6040516105d091906136db565b60405180910390f35b3480156105e4575f80fd5b506105ff60048036038101906105fa919061362d565b61126b565b60405161060c91906136db565b60405180910390f35b348015610620575f80fd5b506106296112b0565b005b348015610636575f80fd5b50610651600480360381019061064c91906137ca565b611403565b005b34801561065e575f80fd5b5061067960048036038101906106749190613808565b6114f1565b005b348015610686575f80fd5b5061068f6115a4565b60405161069c9190613787565b60405180910390f35b3480156106b0575f80fd5b506106b96115cc565b6040516106c69190613614565b60405180910390f35b3480156106da575f80fd5b506106e36115df565b6040516106f0919061350b565b60405180910390f35b348015610704575f80fd5b5061071f600480360381019061071a91906137ca565b61166f565b005b34801561072c575f80fd5b506107356117a2565b005b348015610742575f80fd5b5061074b6118b5565b60405161075891906136db565b60405180910390f35b34801561076c575f80fd5b50610787600480360381019061078291906135bc565b6118bb565b6040516107949190613614565b60405180910390f35b3480156107a8575f80fd5b506107c360048036038101906107be91906135bc565b611983565b6040516107d09190613614565b60405180910390f35b3480156107e4575f80fd5b506107ff60048036038101906107fa919061362d565b6119a0565b60405161080c9190613614565b60405180910390f35b348015610820575f80fd5b506108296119bd565b60405161083691906136db565b60405180910390f35b34801561084a575f80fd5b506108536119c3565b60405161086091906136db565b60405180910390f35b348015610874575f80fd5b5061088f600480360381019061088a91906137ca565b6119c9565b005b34801561089c575f80fd5b506108a5611b05565b6040516108b291906136db565b60405180910390f35b3480156108c6575f80fd5b506108e160048036038101906108dc9190613833565b611b0b565b6040516108ee91906136db565b60405180910390f35b348015610902575f80fd5b5061090b611b8d565b60405161091891906136db565b60405180910390f35b34801561092c575f80fd5b50610935611b93565b005b348015610942575f80fd5b5061095d60048036038101906109589190613871565b611c44565b005b34801561096a575f80fd5b506109856004803603810190610980919061362d565b611db4565b005b60606003805461099690613902565b80601f01602080910402602001604051908101604052809291908181526020018280546109c290613902565b8015610a0d5780601f106109e457610100808354040283529160200191610a0d565b820191905f5260205f20905b8154815290600101906020018083116109f057829003601f168201915b5050505050905090565b5f610a2a610a23611f08565b8484611f0f565b6001905092915050565b600f5f9054906101000a900460ff1681565b610a4e611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad39061397c565b60405180910390fd5b5f4790505f8111610b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1990613a0a565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610b6890613a55565b5f6040518083038185875af1925050503d805f8114610ba2576040519150601f19603f3d011682016040523d82523d5f602084013e610ba7565b606091505b5050905080610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290613ab3565b60405180910390fd5b5050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b60165481565b60135481565b60145481565b5f610c588484846120d2565b610d1584610c64611f08565b610d108560405180606001604052806028815260200161455f6028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610cc7611f08565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129f79092919063ffffffff16565b611f0f565b600190509392505050565b610d28611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad9061397c565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050610dd9816001611403565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e869190613ae5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eeb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f0f9190613ae5565b6040518363ffffffff1660e01b8152600401610f2c929190613b10565b6020604051808303815f875af1158015610f48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6c9190613ae5565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fd760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611403565b61100360095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612a59565b5f4790505f6064604b6110153061126b565b61101f9190613b64565b6110299190613bd2565b90506110573060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611f0f565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016110dd96959493929190613c3b565b60606040518083038185885af11580156110f9573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061111e9190613cae565b505050505050565b5f6012905090565b5f6111d261113a611f08565b846111cd8560015f61114a611f08565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612af790919063ffffffff16565b611f0f565b6001905092915050565b60105481565b600e5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112b8611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d9061397c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61140b611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611499576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114909061397c565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6114f9611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e9061397c565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b6060600480546115ee90613902565b80601f016020809104026020016040519081016040528092919081815260200182805461161a90613902565b80156116655780601f1061163c57610100808354040283529160200191611665565b820191905f5260205f20905b81548152906001019060200180831161164857829003601f168201915b5050505050905090565b611677611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fc9061397c565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90613d6e565b60405180910390fd5b61179e8282612a59565b5050565b6117aa611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f9061397c565b60405180910390fd5b5f6118423061126b565b90505f8111611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d90613dfc565b60405180910390fd5b6118b230600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836120d2565b50565b60175481565b5f6119796118c7611f08565b84611974856040518060600160405280602581526020016145876025913960015f6118f0611f08565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129f79092919063ffffffff16565b611f0f565b6001905092915050565b5f61199661198f611f08565b84846120d2565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b60155481565b6119d1611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a569061397c565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611af99190613614565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611b9b611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c209061397c565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b611c4c611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd19061397c565b60405180910390fd5b8360118190555081601281905550601254601154611cf89190613e1a565b6010819055508260148190555080601581905550601554601454611d1c9190613e1a565b601381905550601e6010541115611d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5f90613e97565b60405180910390fd5b601e6013541115611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da590613e97565b60405180910390fd5b50505050565b611dbc611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e419061397c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490613f25565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe290613fb3565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120c591906136db565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213790614041565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a5906140cf565b60405180910390fd5b5f81036121c5576121c083835f612b54565b6129f2565b600f5f9054906101000a900460ff16156125ba576121e16115a4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561224f575061221f6115a4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561228757505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122c1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122da5750600960149054906101000a900460ff16155b156125b957601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561237c5750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561242357600c548111156123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd9061415d565b60405180910390fd5b600e546123d28361126b565b826123dd9190613e1a565b111561241e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612415906141c5565b60405180910390fd5b6125b8565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124c05750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561250f57600c5481111561250a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250190614253565b60405180910390fd5b6125b7565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166125b657600e546125698361126b565b826125749190613e1a565b11156125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ac906141c5565b60405180910390fd5b5b5b5b5b5b5f6125c43061126b565b90505f600d5482101590508080156125e95750600960149054906101000a900460ff16155b801561263c5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561268f575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156126e2575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612725576001600960146101000a81548160ff02191690831515021790555061270a612ddd565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127d4575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156127dd575f90505b5f81156129e257601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561283b57505f601354115b156128d357612868606461285a6013548861300390919063ffffffff16565b61307a90919063ffffffff16565b90506013546015548261287b9190613b64565b6128859190613bd2565b60165f8282546128959190613e1a565b92505081905550601354601454826128ad9190613b64565b6128b79190613bd2565b60175f8282546128c79190613e1a565b925050819055506129bf565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561292a57505f601054115b156129be5761295760646129496010548861300390919063ffffffff16565b61307a90919063ffffffff16565b90506010546012548261296a9190613b64565b6129749190613bd2565b60165f8282546129849190613e1a565b925050819055506010546011548261299c9190613b64565b6129a69190613bd2565b60175f8282546129b69190613e1a565b925050819055505b5b5f8111156129d3576129d2873083612b54565b5b80856129df9190614271565b94505b6129ed878787612b54565b505050505b505050565b5f838311158290612a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a35919061350b565b60405180910390fd5b505f8385612a4c9190614271565b9050809150509392505050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f808284612b059190613e1a565b905083811015612b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b41906142ee565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb990614041565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c27906140cf565b60405180910390fd5b612c3b8383836130c3565b612ca481604051806060016040528060268152602001614539602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129f79092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612d33815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612af790919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612dd091906136db565b60405180910390a3505050565b5f612de73061126b565b90505f601754601654612dfa9190613e1a565b90505f80831480612e0a57505f82145b15612e1757505050613001565b5f1515600f60019054906101000a900460ff16151503612e5e576014600d54612e409190613b64565b831115612e59576014600d54612e569190613b64565b92505b612e6a565b612e673061126b565b92505b5f60028360165486612e7c9190613b64565b612e869190613bd2565b612e909190613bd2565b90505f612ea682866130c890919063ffffffff16565b90505f479050612eb582613111565b5f612ec982476130c890919063ffffffff16565b90505f612ef387612ee56017548561300390919063ffffffff16565b61307a90919063ffffffff16565b90505f8183612f029190614271565b90505f6016819055505f6017819055505f86118015612f2057505f81115b15612f6d57612f2f8682613347565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601654604051612f649392919061430c565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612fb290613a55565b5f6040518083038185875af1925050503d805f8114612fec576040519150601f19603f3d011682016040523d82523d5f602084013e612ff1565b606091505b5050809750505050505050505050505b565b5f808303613013575f9050613074565b5f82846130209190613b64565b905082848261302f9190613bd2565b1461306f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613066906143b1565b60405180910390fd5b809150505b92915050565b5f6130bb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613420565b905092915050565b505050565b5f61310983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129f7565b905092915050565b5f600267ffffffffffffffff81111561312d5761312c6143cf565b5b60405190808252806020026020018201604052801561315b5781602001602082028036833780820191505090505b50905030815f81518110613172576131716143fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613216573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061323a9190613ae5565b8160018151811061324e5761324d6143fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132b43060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f0f565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016133169594939291906144e0565b5f604051808303815f87803b15801561332d575f80fd5b505af115801561333f573d5f803e3d5ffd5b505050505050565b6133733060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f0f565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016133d896959493929190613c3b565b60606040518083038185885af11580156133f4573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906134199190613cae565b5050505050565b5f8083118290613466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345d919061350b565b60405180910390fd5b505f83856134749190613bd2565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156134b857808201518184015260208101905061349d565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6134dd82613481565b6134e7818561348b565b93506134f781856020860161349b565b613500816134c3565b840191505092915050565b5f6020820190508181035f83015261352381846134d3565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6135588261352f565b9050919050565b6135688161354e565b8114613572575f80fd5b50565b5f813590506135838161355f565b92915050565b5f819050919050565b61359b81613589565b81146135a5575f80fd5b50565b5f813590506135b681613592565b92915050565b5f80604083850312156135d2576135d161352b565b5b5f6135df85828601613575565b92505060206135f0858286016135a8565b9150509250929050565b5f8115159050919050565b61360e816135fa565b82525050565b5f6020820190506136275f830184613605565b92915050565b5f602082840312156136425761364161352b565b5b5f61364f84828501613575565b91505092915050565b5f819050919050565b5f61367b6136766136718461352f565b613658565b61352f565b9050919050565b5f61368c82613661565b9050919050565b5f61369d82613682565b9050919050565b6136ad81613693565b82525050565b5f6020820190506136c65f8301846136a4565b92915050565b6136d581613589565b82525050565b5f6020820190506136ee5f8301846136cc565b92915050565b5f805f6060848603121561370b5761370a61352b565b5b5f61371886828701613575565b935050602061372986828701613575565b925050604061373a868287016135a8565b9150509250925092565b5f60ff82169050919050565b61375981613744565b82525050565b5f6020820190506137725f830184613750565b92915050565b6137818161354e565b82525050565b5f60208201905061379a5f830184613778565b92915050565b6137a9816135fa565b81146137b3575f80fd5b50565b5f813590506137c4816137a0565b92915050565b5f80604083850312156137e0576137df61352b565b5b5f6137ed85828601613575565b92505060206137fe858286016137b6565b9150509250929050565b5f6020828403121561381d5761381c61352b565b5b5f61382a848285016137b6565b91505092915050565b5f80604083850312156138495761384861352b565b5b5f61385685828601613575565b925050602061386785828601613575565b9150509250929050565b5f805f80608085870312156138895761388861352b565b5b5f613896878288016135a8565b94505060206138a7878288016135a8565b93505060406138b8878288016135a8565b92505060606138c9878288016135a8565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061391957607f821691505b60208210810361392c5761392b6138d5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61396660208361348b565b915061397182613932565b602082019050919050565b5f6020820190508181035f8301526139938161395a565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f6139f460228361348b565b91506139ff8261399a565b604082019050919050565b5f6020820190508181035f830152613a21816139e8565b9050919050565b5f81905092915050565b50565b5f613a405f83613a28565b9150613a4b82613a32565b5f82019050919050565b5f613a5f82613a35565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613a9d601b8361348b565b9150613aa882613a69565b602082019050919050565b5f6020820190508181035f830152613aca81613a91565b9050919050565b5f81519050613adf8161355f565b92915050565b5f60208284031215613afa57613af961352b565b5b5f613b0784828501613ad1565b91505092915050565b5f604082019050613b235f830185613778565b613b306020830184613778565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b6e82613589565b9150613b7983613589565b9250828202613b8781613589565b91508282048414831517613b9e57613b9d613b37565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613bdc82613589565b9150613be783613589565b925082613bf757613bf6613ba5565b5b828204905092915050565b5f819050919050565b5f613c25613c20613c1b84613c02565b613658565b613589565b9050919050565b613c3581613c0b565b82525050565b5f60c082019050613c4e5f830189613778565b613c5b60208301886136cc565b613c686040830187613c2c565b613c756060830186613c2c565b613c826080830185613778565b613c8f60a08301846136cc565b979650505050505050565b5f81519050613ca881613592565b92915050565b5f805f60608486031215613cc557613cc461352b565b5b5f613cd286828701613c9a565b9350506020613ce386828701613c9a565b9250506040613cf486828701613c9a565b9150509250925092565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613d5860398361348b565b9150613d6382613cfe565b604082019050919050565b5f6020820190508181035f830152613d8581613d4c565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613de660248361348b565b9150613df182613d8c565b604082019050919050565b5f6020820190508181035f830152613e1381613dda565b9050919050565b5f613e2482613589565b9150613e2f83613589565b9250828201905080821115613e4757613e46613b37565b5b92915050565b7f4d4158203330252074617820616c6c6f776564000000000000000000000000005f82015250565b5f613e8160138361348b565b9150613e8c82613e4d565b602082019050919050565b5f6020820190508181035f830152613eae81613e75565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613f0f60248361348b565b9150613f1a82613eb5565b604082019050919050565b5f6020820190508181035f830152613f3c81613f03565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613f9d60228361348b565b9150613fa882613f43565b604082019050919050565b5f6020820190508181035f830152613fca81613f91565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61402b60258361348b565b915061403682613fd1565b604082019050919050565b5f6020820190508181035f8301526140588161401f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6140b960238361348b565b91506140c48261405f565b604082019050919050565b5f6020820190508181035f8301526140e6816140ad565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61414760358361348b565b9150614152826140ed565b604082019050919050565b5f6020820190508181035f8301526141748161413b565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6141af60138361348b565b91506141ba8261417b565b602082019050919050565b5f6020820190508181035f8301526141dc816141a3565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61423d60368361348b565b9150614248826141e3565b604082019050919050565b5f6020820190508181035f83015261426a81614231565b9050919050565b5f61427b82613589565b915061428683613589565b925082820390508181111561429e5761429d613b37565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6142d8601b8361348b565b91506142e3826142a4565b602082019050919050565b5f6020820190508181035f830152614305816142cc565b9050919050565b5f60608201905061431f5f8301866136cc565b61432c60208301856136cc565b61433960408301846136cc565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61439b60218361348b565b91506143a682614341565b604082019050919050565b5f6020820190508181035f8301526143c88161438f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61445b8161354e565b82525050565b5f61446c8383614452565b60208301905092915050565b5f602082019050919050565b5f61448e82614429565b6144988185614433565b93506144a383614443565b805f5b838110156144d35781516144ba8882614461565b97506144c583614478565b9250506001810190506144a6565b5085935050505092915050565b5f60a0820190506144f35f8301886136cc565b6145006020830187613c2c565b81810360408301526145128186614484565b90506145216060830185613778565b61452e60808301846136cc565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220271847ebab10affab74d5695d25da06f33dbf6cc8c72e91479fc8d9f3a391f4c64736f6c63430008150033

Deployed Bytecode

0x608060405260043610610254575f3560e01c8063715018a611610138578063a9059cbb116100b5578063c3f70b5211610079578063c3f70b5214610891578063dd62ed3e146108bb578063df6f93be146108f7578063e11d22cf14610921578063f1cd531a14610937578063f2fde38b1461095f5761025b565b8063a9059cbb1461079d578063b62496f5146107d9578063b69ef8a814610815578063be8575041461083f578063c0246668146108695761025b565b806395d89b41116100fc57806395d89b41146106cf5780639a7a23d6146106f95780639ee2e924146107215780639fccce3214610737578063a457c2d7146107615761025b565b8063715018a6146106155780637571336a1461062b578063863cf2cc146106535780638da5cb5b1461067b578063945674fe146106a55761025b565b806323b872dd116101d157806348d791551161019557806348d79155146104f557806349bd5a5e1461051f5780634fbee193146105495780635de0f2a0146105855780636c7e15c9146105af57806370a08231146105d95761025b565b806323b872dd146104135780632c28f5791461044f578063313ce56714610465578063395093511461048f57806346469afb146104cb5761025b565b80631694505e116102185780631694505e1461034157806318160ddd1461036b5780631a8145bb146103955780631bff7898146103bf57806322eb6631146103e95761025b565b806306fdde031461025f578063095ea7b3146102895780630e947809146102c55780630f299cf1146102ef57806310d5de53146103055761025b565b3661025b57005b5f80fd5b34801561026a575f80fd5b50610273610987565b604051610280919061350b565b60405180910390f35b348015610294575f80fd5b506102af60048036038101906102aa91906135bc565b610a17565b6040516102bc9190613614565b60405180910390f35b3480156102d0575f80fd5b506102d9610a34565b6040516102e69190613614565b60405180910390f35b3480156102fa575f80fd5b50610303610a46565b005b348015610310575f80fd5b5061032b6004803603810190610326919061362d565b610bef565b6040516103389190613614565b60405180910390f35b34801561034c575f80fd5b50610355610c0c565b60405161036291906136b3565b60405180910390f35b348015610376575f80fd5b5061037f610c31565b60405161038c91906136db565b60405180910390f35b3480156103a0575f80fd5b506103a9610c3a565b6040516103b691906136db565b60405180910390f35b3480156103ca575f80fd5b506103d3610c40565b6040516103e091906136db565b60405180910390f35b3480156103f4575f80fd5b506103fd610c46565b60405161040a91906136db565b60405180910390f35b34801561041e575f80fd5b50610439600480360381019061043491906136f4565b610c4c565b6040516104469190613614565b60405180910390f35b34801561045a575f80fd5b50610463610d20565b005b348015610470575f80fd5b50610479611126565b604051610486919061375f565b60405180910390f35b34801561049a575f80fd5b506104b560048036038101906104b091906135bc565b61112e565b6040516104c29190613614565b60405180910390f35b3480156104d6575f80fd5b506104df6111dc565b6040516104ec91906136db565b60405180910390f35b348015610500575f80fd5b506105096111e2565b60405161051691906136db565b60405180910390f35b34801561052a575f80fd5b506105336111e8565b6040516105409190613787565b60405180910390f35b348015610554575f80fd5b5061056f600480360381019061056a919061362d565b61120d565b60405161057c9190613614565b60405180910390f35b348015610590575f80fd5b5061059961125f565b6040516105a691906136db565b60405180910390f35b3480156105ba575f80fd5b506105c3611265565b6040516105d091906136db565b60405180910390f35b3480156105e4575f80fd5b506105ff60048036038101906105fa919061362d565b61126b565b60405161060c91906136db565b60405180910390f35b348015610620575f80fd5b506106296112b0565b005b348015610636575f80fd5b50610651600480360381019061064c91906137ca565b611403565b005b34801561065e575f80fd5b5061067960048036038101906106749190613808565b6114f1565b005b348015610686575f80fd5b5061068f6115a4565b60405161069c9190613787565b60405180910390f35b3480156106b0575f80fd5b506106b96115cc565b6040516106c69190613614565b60405180910390f35b3480156106da575f80fd5b506106e36115df565b6040516106f0919061350b565b60405180910390f35b348015610704575f80fd5b5061071f600480360381019061071a91906137ca565b61166f565b005b34801561072c575f80fd5b506107356117a2565b005b348015610742575f80fd5b5061074b6118b5565b60405161075891906136db565b60405180910390f35b34801561076c575f80fd5b50610787600480360381019061078291906135bc565b6118bb565b6040516107949190613614565b60405180910390f35b3480156107a8575f80fd5b506107c360048036038101906107be91906135bc565b611983565b6040516107d09190613614565b60405180910390f35b3480156107e4575f80fd5b506107ff60048036038101906107fa919061362d565b6119a0565b60405161080c9190613614565b60405180910390f35b348015610820575f80fd5b506108296119bd565b60405161083691906136db565b60405180910390f35b34801561084a575f80fd5b506108536119c3565b60405161086091906136db565b60405180910390f35b348015610874575f80fd5b5061088f600480360381019061088a91906137ca565b6119c9565b005b34801561089c575f80fd5b506108a5611b05565b6040516108b291906136db565b60405180910390f35b3480156108c6575f80fd5b506108e160048036038101906108dc9190613833565b611b0b565b6040516108ee91906136db565b60405180910390f35b348015610902575f80fd5b5061090b611b8d565b60405161091891906136db565b60405180910390f35b34801561092c575f80fd5b50610935611b93565b005b348015610942575f80fd5b5061095d60048036038101906109589190613871565b611c44565b005b34801561096a575f80fd5b506109856004803603810190610980919061362d565b611db4565b005b60606003805461099690613902565b80601f01602080910402602001604051908101604052809291908181526020018280546109c290613902565b8015610a0d5780601f106109e457610100808354040283529160200191610a0d565b820191905f5260205f20905b8154815290600101906020018083116109f057829003601f168201915b5050505050905090565b5f610a2a610a23611f08565b8484611f0f565b6001905092915050565b600f5f9054906101000a900460ff1681565b610a4e611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad39061397c565b60405180910390fd5b5f4790505f8111610b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1990613a0a565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610b6890613a55565b5f6040518083038185875af1925050503d805f8114610ba2576040519150601f19603f3d011682016040523d82523d5f602084013e610ba7565b606091505b5050905080610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290613ab3565b60405180910390fd5b5050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b60165481565b60135481565b60145481565b5f610c588484846120d2565b610d1584610c64611f08565b610d108560405180606001604052806028815260200161455f6028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610cc7611f08565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129f79092919063ffffffff16565b611f0f565b600190509392505050565b610d28611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad9061397c565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050610dd9816001611403565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e869190613ae5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eeb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f0f9190613ae5565b6040518363ffffffff1660e01b8152600401610f2c929190613b10565b6020604051808303815f875af1158015610f48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6c9190613ae5565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fd760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611403565b61100360095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612a59565b5f4790505f6064604b6110153061126b565b61101f9190613b64565b6110299190613bd2565b90506110573060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611f0f565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016110dd96959493929190613c3b565b60606040518083038185885af11580156110f9573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061111e9190613cae565b505050505050565b5f6012905090565b5f6111d261113a611f08565b846111cd8560015f61114a611f08565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612af790919063ffffffff16565b611f0f565b6001905092915050565b60105481565b600e5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112b8611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d9061397c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61140b611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611499576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114909061397c565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6114f9611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e9061397c565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b6060600480546115ee90613902565b80601f016020809104026020016040519081016040528092919081815260200182805461161a90613902565b80156116655780601f1061163c57610100808354040283529160200191611665565b820191905f5260205f20905b81548152906001019060200180831161164857829003601f168201915b5050505050905090565b611677611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fc9061397c565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90613d6e565b60405180910390fd5b61179e8282612a59565b5050565b6117aa611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f9061397c565b60405180910390fd5b5f6118423061126b565b90505f8111611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d90613dfc565b60405180910390fd5b6118b230600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836120d2565b50565b60175481565b5f6119796118c7611f08565b84611974856040518060600160405280602581526020016145876025913960015f6118f0611f08565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129f79092919063ffffffff16565b611f0f565b6001905092915050565b5f61199661198f611f08565b84846120d2565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b60155481565b6119d1611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a569061397c565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611af99190613614565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611b9b611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c209061397c565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b611c4c611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd19061397c565b60405180910390fd5b8360118190555081601281905550601254601154611cf89190613e1a565b6010819055508260148190555080601581905550601554601454611d1c9190613e1a565b601381905550601e6010541115611d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5f90613e97565b60405180910390fd5b601e6013541115611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da590613e97565b60405180910390fd5b50505050565b611dbc611f08565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e419061397c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490613f25565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe290613fb3565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120c591906136db565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213790614041565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a5906140cf565b60405180910390fd5b5f81036121c5576121c083835f612b54565b6129f2565b600f5f9054906101000a900460ff16156125ba576121e16115a4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561224f575061221f6115a4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561228757505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122c1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122da5750600960149054906101000a900460ff16155b156125b957601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561237c5750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561242357600c548111156123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd9061415d565b60405180910390fd5b600e546123d28361126b565b826123dd9190613e1a565b111561241e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612415906141c5565b60405180910390fd5b6125b8565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124c05750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561250f57600c5481111561250a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250190614253565b60405180910390fd5b6125b7565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166125b657600e546125698361126b565b826125749190613e1a565b11156125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ac906141c5565b60405180910390fd5b5b5b5b5b5b5f6125c43061126b565b90505f600d5482101590508080156125e95750600960149054906101000a900460ff16155b801561263c5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561268f575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156126e2575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612725576001600960146101000a81548160ff02191690831515021790555061270a612ddd565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127d4575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156127dd575f90505b5f81156129e257601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561283b57505f601354115b156128d357612868606461285a6013548861300390919063ffffffff16565b61307a90919063ffffffff16565b90506013546015548261287b9190613b64565b6128859190613bd2565b60165f8282546128959190613e1a565b92505081905550601354601454826128ad9190613b64565b6128b79190613bd2565b60175f8282546128c79190613e1a565b925050819055506129bf565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561292a57505f601054115b156129be5761295760646129496010548861300390919063ffffffff16565b61307a90919063ffffffff16565b90506010546012548261296a9190613b64565b6129749190613bd2565b60165f8282546129849190613e1a565b925050819055506010546011548261299c9190613b64565b6129a69190613bd2565b60175f8282546129b69190613e1a565b925050819055505b5b5f8111156129d3576129d2873083612b54565b5b80856129df9190614271565b94505b6129ed878787612b54565b505050505b505050565b5f838311158290612a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a35919061350b565b60405180910390fd5b505f8385612a4c9190614271565b9050809150509392505050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f808284612b059190613e1a565b905083811015612b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b41906142ee565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb990614041565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c27906140cf565b60405180910390fd5b612c3b8383836130c3565b612ca481604051806060016040528060268152602001614539602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129f79092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612d33815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612af790919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612dd091906136db565b60405180910390a3505050565b5f612de73061126b565b90505f601754601654612dfa9190613e1a565b90505f80831480612e0a57505f82145b15612e1757505050613001565b5f1515600f60019054906101000a900460ff16151503612e5e576014600d54612e409190613b64565b831115612e59576014600d54612e569190613b64565b92505b612e6a565b612e673061126b565b92505b5f60028360165486612e7c9190613b64565b612e869190613bd2565b612e909190613bd2565b90505f612ea682866130c890919063ffffffff16565b90505f479050612eb582613111565b5f612ec982476130c890919063ffffffff16565b90505f612ef387612ee56017548561300390919063ffffffff16565b61307a90919063ffffffff16565b90505f8183612f029190614271565b90505f6016819055505f6017819055505f86118015612f2057505f81115b15612f6d57612f2f8682613347565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601654604051612f649392919061430c565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612fb290613a55565b5f6040518083038185875af1925050503d805f8114612fec576040519150601f19603f3d011682016040523d82523d5f602084013e612ff1565b606091505b5050809750505050505050505050505b565b5f808303613013575f9050613074565b5f82846130209190613b64565b905082848261302f9190613bd2565b1461306f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613066906143b1565b60405180910390fd5b809150505b92915050565b5f6130bb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613420565b905092915050565b505050565b5f61310983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129f7565b905092915050565b5f600267ffffffffffffffff81111561312d5761312c6143cf565b5b60405190808252806020026020018201604052801561315b5781602001602082028036833780820191505090505b50905030815f81518110613172576131716143fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613216573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061323a9190613ae5565b8160018151811061324e5761324d6143fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132b43060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f0f565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016133169594939291906144e0565b5f604051808303815f87803b15801561332d575f80fd5b505af115801561333f573d5f803e3d5ffd5b505050505050565b6133733060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f0f565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016133d896959493929190613c3b565b60606040518083038185885af11580156133f4573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906134199190613cae565b5050505050565b5f8083118290613466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345d919061350b565b60405180910390fd5b505f83856134749190613bd2565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156134b857808201518184015260208101905061349d565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6134dd82613481565b6134e7818561348b565b93506134f781856020860161349b565b613500816134c3565b840191505092915050565b5f6020820190508181035f83015261352381846134d3565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6135588261352f565b9050919050565b6135688161354e565b8114613572575f80fd5b50565b5f813590506135838161355f565b92915050565b5f819050919050565b61359b81613589565b81146135a5575f80fd5b50565b5f813590506135b681613592565b92915050565b5f80604083850312156135d2576135d161352b565b5b5f6135df85828601613575565b92505060206135f0858286016135a8565b9150509250929050565b5f8115159050919050565b61360e816135fa565b82525050565b5f6020820190506136275f830184613605565b92915050565b5f602082840312156136425761364161352b565b5b5f61364f84828501613575565b91505092915050565b5f819050919050565b5f61367b6136766136718461352f565b613658565b61352f565b9050919050565b5f61368c82613661565b9050919050565b5f61369d82613682565b9050919050565b6136ad81613693565b82525050565b5f6020820190506136c65f8301846136a4565b92915050565b6136d581613589565b82525050565b5f6020820190506136ee5f8301846136cc565b92915050565b5f805f6060848603121561370b5761370a61352b565b5b5f61371886828701613575565b935050602061372986828701613575565b925050604061373a868287016135a8565b9150509250925092565b5f60ff82169050919050565b61375981613744565b82525050565b5f6020820190506137725f830184613750565b92915050565b6137818161354e565b82525050565b5f60208201905061379a5f830184613778565b92915050565b6137a9816135fa565b81146137b3575f80fd5b50565b5f813590506137c4816137a0565b92915050565b5f80604083850312156137e0576137df61352b565b5b5f6137ed85828601613575565b92505060206137fe858286016137b6565b9150509250929050565b5f6020828403121561381d5761381c61352b565b5b5f61382a848285016137b6565b91505092915050565b5f80604083850312156138495761384861352b565b5b5f61385685828601613575565b925050602061386785828601613575565b9150509250929050565b5f805f80608085870312156138895761388861352b565b5b5f613896878288016135a8565b94505060206138a7878288016135a8565b93505060406138b8878288016135a8565b92505060606138c9878288016135a8565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061391957607f821691505b60208210810361392c5761392b6138d5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61396660208361348b565b915061397182613932565b602082019050919050565b5f6020820190508181035f8301526139938161395a565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f6139f460228361348b565b91506139ff8261399a565b604082019050919050565b5f6020820190508181035f830152613a21816139e8565b9050919050565b5f81905092915050565b50565b5f613a405f83613a28565b9150613a4b82613a32565b5f82019050919050565b5f613a5f82613a35565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613a9d601b8361348b565b9150613aa882613a69565b602082019050919050565b5f6020820190508181035f830152613aca81613a91565b9050919050565b5f81519050613adf8161355f565b92915050565b5f60208284031215613afa57613af961352b565b5b5f613b0784828501613ad1565b91505092915050565b5f604082019050613b235f830185613778565b613b306020830184613778565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b6e82613589565b9150613b7983613589565b9250828202613b8781613589565b91508282048414831517613b9e57613b9d613b37565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613bdc82613589565b9150613be783613589565b925082613bf757613bf6613ba5565b5b828204905092915050565b5f819050919050565b5f613c25613c20613c1b84613c02565b613658565b613589565b9050919050565b613c3581613c0b565b82525050565b5f60c082019050613c4e5f830189613778565b613c5b60208301886136cc565b613c686040830187613c2c565b613c756060830186613c2c565b613c826080830185613778565b613c8f60a08301846136cc565b979650505050505050565b5f81519050613ca881613592565b92915050565b5f805f60608486031215613cc557613cc461352b565b5b5f613cd286828701613c9a565b9350506020613ce386828701613c9a565b9250506040613cf486828701613c9a565b9150509250925092565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613d5860398361348b565b9150613d6382613cfe565b604082019050919050565b5f6020820190508181035f830152613d8581613d4c565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613de660248361348b565b9150613df182613d8c565b604082019050919050565b5f6020820190508181035f830152613e1381613dda565b9050919050565b5f613e2482613589565b9150613e2f83613589565b9250828201905080821115613e4757613e46613b37565b5b92915050565b7f4d4158203330252074617820616c6c6f776564000000000000000000000000005f82015250565b5f613e8160138361348b565b9150613e8c82613e4d565b602082019050919050565b5f6020820190508181035f830152613eae81613e75565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613f0f60248361348b565b9150613f1a82613eb5565b604082019050919050565b5f6020820190508181035f830152613f3c81613f03565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613f9d60228361348b565b9150613fa882613f43565b604082019050919050565b5f6020820190508181035f830152613fca81613f91565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61402b60258361348b565b915061403682613fd1565b604082019050919050565b5f6020820190508181035f8301526140588161401f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6140b960238361348b565b91506140c48261405f565b604082019050919050565b5f6020820190508181035f8301526140e6816140ad565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61414760358361348b565b9150614152826140ed565b604082019050919050565b5f6020820190508181035f8301526141748161413b565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6141af60138361348b565b91506141ba8261417b565b602082019050919050565b5f6020820190508181035f8301526141dc816141a3565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61423d60368361348b565b9150614248826141e3565b604082019050919050565b5f6020820190508181035f83015261426a81614231565b9050919050565b5f61427b82613589565b915061428683613589565b925082820390508181111561429e5761429d613b37565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6142d8601b8361348b565b91506142e3826142a4565b602082019050919050565b5f6020820190508181035f830152614305816142cc565b9050919050565b5f60608201905061431f5f8301866136cc565b61432c60208301856136cc565b61433960408301846136cc565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61439b60218361348b565b91506143a682614341565b604082019050919050565b5f6020820190508181035f8301526143c88161438f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61445b8161354e565b82525050565b5f61446c8383614452565b60208301905092915050565b5f602082019050919050565b5f61448e82614429565b6144988185614433565b93506144a383614443565b805f5b838110156144d35781516144ba8882614461565b97506144c583614478565b9250506001810190506144a6565b5085935050505092915050565b5f60a0820190506144f35f8301886136cc565b6145006020830187613c2c565b81810360408301526145128186614484565b90506145216060830185613778565b61452e60808301846136cc565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220271847ebab10affab74d5695d25da06f33dbf6cc8c72e91479fc8d9f3a391f4c64736f6c63430008150033

Deployed Bytecode Sourcemap

17664:12429:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4927:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5841:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18134:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22129:311;;;;;;;;;;;;;:::i;:::-;;18707:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17835:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5248:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18416:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18315:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18349:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6018:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21074:1037;;;;;;;;;;;;;:::i;:::-;;5147:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6381:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18217:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18093:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17883:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24223:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18051:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18250:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5364:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10908:148;;;;;;;;;;;;;:::i;:::-;;22918:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22802:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10694:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18171:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5035:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23770:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22448:256;;;;;;;;;;;;;:::i;:::-;;18456:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6607:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5499:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18930:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17951:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18381:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23579:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18015:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5682:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18281:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22712:81;;;;;;;;;;;;;:::i;:::-;;23074:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11064:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4927:100;4981:13;5014:5;5007:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4927:100;:::o;5841:169::-;5924:4;5941:39;5950:12;:10;:12::i;:::-;5964:7;5973:6;5941:8;:39::i;:::-;5998:4;5991:11;;5841:169;;;;:::o;18134:30::-;;;;;;;;;;;;;:::o;22129:311::-;10831:12;:10;:12::i;:::-;10821:22;;:6;;;;;;;;;;;:22;;;10813:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22185:18:::1;22206:21;22185:42;;22259:1;22246:10;:14;22238:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22311:12;22336:9;;;;;;;;;;;22328:23;;22359:10;22328:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22310:64;;;22393:7;22385:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22174:266;;22129:311::o:0;18707:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17835:41::-;;;;;;;;;;;;;:::o;5248:108::-;5309:7;5336:12;;5329:19;;5248:108;:::o;18416:33::-;;;;:::o;18315:27::-;;;;:::o;18349:25::-;;;;:::o;6018:355::-;6158:4;6175:36;6185:6;6193:9;6204:6;6175:9;:36::i;:::-;6222:121;6231:6;6239:12;:10;:12::i;:::-;6253:89;6291:6;6253:89;;;;;;;;;;;;;;;;;:11;:19;6265:6;6253:19;;;;;;;;;;;;;;;:33;6273:12;:10;:12::i;:::-;6253:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6222:8;:121::i;:::-;6361:4;6354:11;;6018:355;;;;;:::o;21074:1037::-;10831:12;:10;:12::i;:::-;10821:22;;:6;;;;;;;;;;;:22;;;10813:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21127:35:::1;21184:42;21127:100;;21241:58;21275:16;21294:4;21241:25;:58::i;:::-;21328:16;21310:15;;:34;;;;;;;;;;;;;;;;;;21392:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21374:56;;;21439:4;21446:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21374:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21358:13;;:112;;;;;;;;;;;;;;;;;;21481:55;21515:13;;;;;;;;;;;21531:4;21481:25;:55::i;:::-;21547:58;21584:13;;;;;;;;;;;21600:4;21547:28;:58::i;:::-;21626:17;21646:21;21626:41;;21678:19;21732:3;21727:2;21700:24;21718:4;21700:9;:24::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;21678:57;;21766:62;21783:4;21798:15;;;;;;;;;;;21816:11;21766:8;:62::i;:::-;21841:15;;;;;;;;;;;:31;;;21880:9;21913:4;21933:11;21963:1;22010::::0;22053:9:::1;;;;;;;;;;;22077:15;21841:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21110:1001;;;21074:1037::o:0;5147:93::-;5205:5;5230:2;5223:9;;5147:93;:::o;6381:218::-;6469:4;6486:83;6495:12;:10;:12::i;:::-;6509:7;6518:50;6557:10;6518:11;:25;6530:12;:10;:12::i;:::-;6518:25;;;;;;;;;;;;;;;:34;6544:7;6518:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6486:8;:83::i;:::-;6587:4;6580:11;;6381:218;;;;:::o;18217:26::-;;;;:::o;18093:31::-;;;;:::o;17883:28::-;;;;;;;;;;;;;:::o;24223:125::-;24288:4;24312:19;:28;24332:7;24312:28;;;;;;;;;;;;;;;;;;;;;;;;;24305:35;;24223:125;;;:::o;18051:35::-;;;;:::o;18250:24::-;;;;:::o;5364:127::-;5438:7;5465:9;:18;5475:7;5465:18;;;;;;;;;;;;;;;;5458:25;;5364:127;;;:::o;10908:148::-;10831:12;:10;:12::i;:::-;10821:22;;:6;;;;;;;;;;;:22;;;10813:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11015:1:::1;10978:40;;10999:6;;;;;;;;;;;10978:40;;;;;;;;;;;;11046:1;11029:6;;:19;;;;;;;;;;;;;;;;;;10908:148::o:0;22918:144::-;10831:12;:10;:12::i;:::-;10821:22;;:6;;;;;;;;;;;:22;;;10813:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23050:4:::1;23008:31;:39;23040:6;23008:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22918:144:::0;;:::o;22802:107::-;10831:12;:10;:12::i;:::-;10821:22;;:6;;;;;;;;;;;:22;;;10813:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22894:7:::1;22874:17;;:27;;;;;;;;;;;;;;;;;;22802:107:::0;:::o;10694:79::-;10732:7;10759:6;;;;;;;;;;;10752:13;;10694:79;:::o;18171:37::-;;;;;;;;;;;;;:::o;5035:104::-;5091:13;5124:7;5117:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5035:104;:::o;23770:245::-;10831:12;:10;:12::i;:::-;10821:22;;:6;;;;;;;;;;;:22;;;10813:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23877:13:::1;;;;;;;;;;;23869:21;;:4;:21;;::::0;23861:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23966:41;23995:4;24001:5;23966:28;:41::i;:::-;23770:245:::0;;:::o;22448:256::-;10831:12;:10;:12::i;:::-;10821:22;;:6;;;;;;;;;;;:22;;;10813:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22513:20:::1;22536:24;22554:4;22536:9;:24::i;:::-;22513:47;;22594:1;22579:12;:16;22571:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22647:49;22665:4;22672:9;;;;;;;;;;;22683:12;22647:9;:49::i;:::-;22502:202;22448:256::o:0;18456:27::-;;;;:::o;6607:269::-;6700:4;6717:129;6726:12;:10;:12::i;:::-;6740:7;6749:96;6788:15;6749:96;;;;;;;;;;;;;;;;;:11;:25;6761:12;:10;:12::i;:::-;6749:25;;;;;;;;;;;;;;;:34;6775:7;6749:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6717:8;:129::i;:::-;6864:4;6857:11;;6607:269;;;;:::o;5499:175::-;5585:4;5602:42;5612:12;:10;:12::i;:::-;5626:9;5637:6;5602:9;:42::i;:::-;5662:4;5655:11;;5499:175;;;;:::o;18930:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17951:22::-;;;;:::o;18381:25::-;;;;:::o;23579:182::-;10831:12;:10;:12::i;:::-;10821:22;;:6;;;;;;;;;;;:22;;;10813:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23695:8:::1;23664:19;:28;23684:7;23664:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23735:7;23719:34;;;23744:8;23719:34;;;;;;:::i;:::-;;;;;;;;23579:182:::0;;:::o;18015:29::-;;;;:::o;5682:151::-;5771:7;5798:11;:18;5810:5;5798:18;;;;;;;;;;;;;;;:27;5817:7;5798:27;;;;;;;;;;;;;;;;5791:34;;5682:151;;;;:::o;18281:24::-;;;;:::o;22712:81::-;10831:12;:10;:12::i;:::-;10821:22;;:6;;;;;;;;;;;:22;;;10813:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22780:5:::1;22766:11;;:19;;;;;;;;;;;;;;;;;;22712:81::o:0;23074:497::-;10831:12;:10;:12::i;:::-;10821:22;;:6;;;;;;;;;;;:22;;;10813:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23246:7:::1;23234:9;:19;;;;23276:7;23264:9;:19;;;;23320:9;;23308;;:21;;;;:::i;:::-;23294:11;:35;;;;23353:8;23340:10;:21;;;;23385:8;23372:10;:21;;;;23432:10;;23419;;:23;;;;:::i;:::-;23404:12;:38;;;;23476:2;23461:11;;:17;;23453:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;23537:2;23521:12;;:18;;23513:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;23074:497:::0;;;;:::o;11064:169::-;10831:12;:10;:12::i;:::-;10821:22;;:6;;;;;;;;;;;:22;;;10813:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11188:8:::1;11159:38;;11180:6;;;;;;;;;;;11159:38;;;;;;;;;;;;11217:8;11208:6;;:17;;;;;;;;;;;;;;;;;;11064:169:::0;:::o;280:98::-;333:7;360:10;353:17;;280:98;:::o;8283:381::-;8436:1;8419:19;;:5;:19;;;8411:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8517:1;8498:21;;:7;:21;;;8490:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8602:6;8572:11;:18;8584:5;8572:18;;;;;;;;;;;;;;;:27;8591:7;8572:27;;;;;;;;;;;;;;;:36;;;;8640:7;8624:32;;8633:5;8624:32;;;8649:6;8624:32;;;;;;:::i;:::-;;;;;;;;8283:381;;;:::o;24357:3112::-;24505:1;24489:18;;:4;:18;;;24481:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24582:1;24568:16;;:2;:16;;;24560:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24649:1;24639:6;:11;24636:92;;24667:28;24683:4;24689:2;24693:1;24667:15;:28::i;:::-;24710:7;;24636:92;24744:11;;;;;;;;;;;24741:1083;;;24801:7;:5;:7::i;:::-;24793:15;;:4;:15;;;;:49;;;;;24835:7;:5;:7::i;:::-;24829:13;;:2;:13;;;;24793:49;:86;;;;;24877:1;24863:16;;:2;:16;;;;24793:86;:128;;;;;24914:6;24900:21;;:2;:21;;;;24793:128;:160;;;;;24943:10;;;;;;;;;;;24942:11;24793:160;24771:1042;;;25037:25;:31;25063:4;25037:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25073:31;:35;25105:2;25073:35;;;;;;;;;;;;;;;;;;;;;;;;;25072:36;25037:71;25033:765;;;25155:14;;25145:6;:24;;25137:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25288:16;;25271:13;25281:2;25271:9;:13::i;:::-;25262:6;:22;;;;:::i;:::-;:42;;25254:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25033:765;;;25407:25;:29;25433:2;25407:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25441:31;:37;25473:4;25441:37;;;;;;;;;;;;;;;;;;;;;;;;;25440:38;25407:71;25403:395;;;25525:14;;25515:6;:24;;25507:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25403:395;;;25645:31;:35;25677:2;25645:35;;;;;;;;;;;;;;;;;;;;;;;;;25641:157;;25738:16;;25721:13;25731:2;25721:9;:13::i;:::-;25712:6;:22;;;;:::i;:::-;:42;;25704:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25641:157;25403:395;25033:765;24771:1042;24741:1083;25837:28;25868:24;25886:4;25868:9;:24::i;:::-;25837:55;;25906:12;25945:20;;25921;:44;;25906:59;;25997:7;:35;;;;;26022:10;;;;;;;;;;;26021:11;25997:35;:84;;;;;26050:25;:31;26076:4;26050:31;;;;;;;;;;;;;;;;;;;;;;;;;26049:32;25997:84;:127;;;;;26099:19;:25;26119:4;26099:25;;;;;;;;;;;;;;;;;;;;;;;;;26098:26;25997:127;:168;;;;;26142:19;:23;26162:2;26142:23;;;;;;;;;;;;;;;;;;;;;;;;;26141:24;25997:168;25979:306;;;26205:4;26192:10;;:17;;;;;;;;;;;;;;;;;;26227:10;:8;:10::i;:::-;26268:5;26255:10;;:18;;;;;;;;;;;;;;;;;;25979:306;26298:12;26314:10;;;;;;;;;;;26313:11;26298:26;;26426:19;:25;26446:4;26426:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26455:19;:23;26475:2;26455:23;;;;;;;;;;;;;;;;;;;;;;;;;26426:52;26423:99;;;26505:5;26495:15;;26423:99;26535:12;26639:7;26636:779;;;26690:25;:29;26716:2;26690:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;26738:1;26723:12;;:16;26690:49;26686:576;;;26766:33;26795:3;26766:24;26777:12;;26766:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26759:40;;26860:12;;26847:10;;26840:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26818:18;;:54;;;;;;;:::i;:::-;;;;;;;;26927:12;;26914:10;;26907:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26891:12;;:48;;;;;;;:::i;:::-;;;;;;;;26686:576;;;27000:25;:31;27026:4;27000:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27049:1;27035:11;;:15;27000:50;26997:265;;;27078:32;27106:3;27078:23;27089:11;;27078:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;27071:39;;27170:11;;27158:9;;27151:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27129:18;;:52;;;;;;;:::i;:::-;;;;;;;;27235:11;;27223:9;;27216:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27200:12;;:46;;;;;;;:::i;:::-;;;;;;;;26997:265;26686:576;27289:1;27282:4;:8;27279:93;;;27314:42;27330:4;27344;27351;27314:15;:42::i;:::-;27279:93;27399:4;27389:14;;;;;:::i;:::-;;;26636:779;27428:33;27444:4;27450:2;27454:6;27428:15;:33::i;:::-;24470:2999;;;;24357:3112;;;;:::o;9171:193::-;9257:7;9290:1;9285;:6;;9293:12;9277:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9317:9;9333:1;9329;:5;;;;:::i;:::-;9317:17;;9355:1;9348:8;;;9171:193;;;;;:::o;24024:189::-;24141:5;24107:25;:31;24133:4;24107:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24199:5;24165:40;;24193:4;24165:40;;;;;;;;;;;;24024:189;;:::o;8837:182::-;8895:7;8915:9;8931:1;8927;:5;;;;:::i;:::-;8915:17;;8956:1;8951;:6;;8943:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9010:1;9003:8;;;8837:182;;;;:::o;6884:575::-;7042:1;7024:20;;:6;:20;;;7016:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7126:1;7105:23;;:9;:23;;;7097:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7182:47;7203:6;7211:9;7222:6;7182:20;:47::i;:::-;7263:71;7285:6;7263:71;;;;;;;;;;;;;;;;;:9;:17;7273:6;7263:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7243:9;:17;7253:6;7243:17;;;;;;;;;;;;;;;:91;;;;7368:32;7393:6;7368:9;:20;7378:9;7368:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7345:9;:20;7355:9;7345:20;;;;;;;;;;;;;;;:55;;;;7433:9;7416:35;;7425:6;7416:35;;;7444:6;7416:35;;;;;;:::i;:::-;;;;;;;;6884:575;;;:::o;28613:1477::-;28652:23;28678:24;28696:4;28678:9;:24::i;:::-;28652:50;;28713:25;28762:12;;28741:18;;:33;;;;:::i;:::-;28713:61;;28785:12;28833:1;28814:15;:20;:46;;;;28859:1;28838:17;:22;28814:46;28811:60;;;28863:7;;;;;28811:60;28908:5;28887:26;;:17;;;;;;;;;;;:26;;;28884:254;;28973:2;28950:20;;:25;;;;:::i;:::-;28932:15;:43;28929:125;;;29036:2;29013:20;;:25;;;;:::i;:::-;28995:43;;28929:125;28884:254;;;29102:24;29120:4;29102:9;:24::i;:::-;29084:42;;28884:254;29210:23;29295:1;29275:17;29254:18;;29236:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29210:86;;29307:26;29336:36;29356:15;29336;:19;;:36;;;;:::i;:::-;29307:65;;29386:25;29414:21;29386:49;;29449:36;29466:18;29449:16;:36::i;:::-;29500:18;29521:44;29547:17;29521:21;:25;;:44;;;;:::i;:::-;29500:65;;29579:17;29599:51;29632:17;29599:28;29614:12;;29599:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29579:71;;29661:23;29700:9;29687:10;:22;;;;:::i;:::-;29661:48;;29747:1;29726:18;:22;;;;29774:1;29759:12;:16;;;;29810:1;29792:15;:19;:42;;;;;29833:1;29815:15;:19;29792:42;29789:210;;;29850:46;29863:15;29880;29850:12;:46::i;:::-;29916:71;29931:18;29951:15;29968:18;;29916:71;;;;;;;;:::i;:::-;;;;;;;;29789:210;30033:9;;;;;;;;;;;30025:23;;30056:21;30025:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30012:70;;;;;28641:1449;;;;;;;;;28613:1477;:::o;9372:254::-;9430:7;9461:1;9456;:6;9452:47;;9486:1;9479:8;;;;9452:47;9512:9;9528:1;9524;:5;;;;:::i;:::-;9512:17;;9557:1;9552;9548;:5;;;;:::i;:::-;:10;9540:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9617:1;9610:8;;;9372:254;;;;;:::o;9634:132::-;9692:7;9719:39;9723:1;9726;9719:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9712:46;;9634:132;;;;:::o;8672:125::-;;;;:::o;9027:136::-;9085:7;9112:43;9116:1;9119;9112:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9105:50;;9027:136;;;;:::o;27478:597::-;27607:21;27645:1;27631:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27607:40;;27676:4;27658;27663:1;27658:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27702:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27692:4;27697:1;27692:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27738:62;27755:4;27770:15;;;;;;;;;;;27788:11;27738:8;:62::i;:::-;27840:15;;;;;;;;;;;:66;;;27921:11;27947:1;27991:4;28018;28038:15;27840:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27533:542;27478:597;:::o;28084:520::-;28232:62;28249:4;28264:15;;;;;;;;;;;28282:11;28232:8;:62::i;:::-;28338:15;;;;;;;;;;;:31;;;28377:9;28410:4;28430:11;28456:1;28499;28550:4;28570:15;28338:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28084:520;;:::o;9774:279::-;9860:7;9892:1;9888;:5;9895:12;9880:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9919:9;9935:1;9931;:5;;;;:::i;:::-;9919:17;;10044:1;10037:8;;;9774:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::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://271847ebab10affab74d5695d25da06f33dbf6cc8c72e91479fc8d9f3a391f4c
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.