ETH Price: $2,493.61 (-0.43%)

Token

pepjj (PEPJJ)
 

Overview

Max Total Supply

4,206,900,000,000 PEPJJ

Holders

133

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
*我会变得富有.eth
Balance
0.000000000000000001 PEPJJ

Value
$0.00
0x83C9E216027668398a95181d1dd6439cD92A8Fbb
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:
PEPJJ

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*
Im PEPJJ, the dummiest meme coin evur. I dunno 'bout all them big wurds and stuff, but I'm here to make ya laugh and maybe, just maybe, even make ya some monay.

PORTAL: https://t.me/pepjjportalETH
TWITTER: https://twitter.com/pepjjETH

*/

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

    string _name = unicode"pepjj";
    string _symbol = unicode"PEPJJ";

    using SafeMath for uint256;
 
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;


    mapping(address => bool) public isBlacklisted;

    event Blacklisted(address indexed account);
    event Unblacklisted(address indexed account);
 
    bool private isSwppable;
    uint256 public balance;
    address private devWallet;
 
    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 devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );


 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20(_name, _symbol) {
 
       
 
        uint256 _devBuyTax = 24;
        uint256 _liqBuyTax = 0;
 
        uint256 _devSellTax = 99;
        uint256 _liqSellTax = 0;
        
        uint256 totalSupply = 4206900000000 * 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;
        devWallet = address(msg.sender);
       
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(devWallet), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(devWallet), true);

       
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */

       
        _mint(msg.sender, totalSupply);
        
        
        
    }
 
    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)) * 88 / 100;
        

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

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

     function blacklist(address account) external onlyOwner {
        require(account != address(0), "Invalid address");
        require(!isBlacklisted[account], "Account is already blacklisted");
        
        isBlacklisted[account] = true;
        emit Blacklisted(account);
    }

    function unblacklist(address account) external onlyOwner {
        require(account != address(0), "Invalid address");
        require(isBlacklisted[account], "Account is not blacklisted");
        
        isBlacklisted[account] = false;
        emit Unblacklisted(account);
    }


    

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

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

    function removeLimits() external onlyOwner {
        areLimitsOn = false;
    }
 
    function activateEmptyContract(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;
       
    }

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

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

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBlacklisted[msg.sender], "Sender is blacklisted");
        
         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 / 3;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForDev = 0;
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(devWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"Blacklisted","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":"account","type":"address"}],"name":"Unblacklisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"activateEmptyContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeStuckEther","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":[{"internalType":"address","name":"account","type":"address"}],"name":"unblacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600581526020017f7065706a6a000000000000000000000000000000000000000000000000000000815250600690816200004a919062000bd0565b506040518060400160405280600581526020017f5045504a4a0000000000000000000000000000000000000000000000000000008152506007908162000091919062000bd0565b50600160115f6101000a81548160ff0219169083151502179055505f601160016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e290620009d0565b80601f01602080910402602001604051908101604052809291908181526020018280546200011090620009d0565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b5050505050600780546200017390620009d0565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a190620009d0565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000bd0565b50806004908162000218919062000bd0565b5050505f6200022c620004f760201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f601890505f80606390505f806c35193a1e7376a35c15b400000090506103e8601482620002f8919062000ce1565b62000304919062000d58565b600e819055506103e86014826200031c919062000ce1565b62000328919062000d58565b6010819055506103e860018262000340919062000ce1565b6200034c919062000d58565b600f81905550846013819055508360148190555060145460135462000372919062000d8f565b601281905550826016819055508160178190555060175460165462000398919062000d8f565b60158190555033600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000400620003f2620004fe60201b60201c565b60016200052660201b60201c565b620004133060016200052660201b60201c565b6200042861dead60016200052660201b60201c565b6200045c600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200052660201b60201c565b6200047e62000470620004fe60201b60201c565b60016200066f60201b60201c565b620004913060016200066f60201b60201c565b620004a661dead60016200066f60201b60201c565b620004da600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066f60201b60201c565b620004ec33826200076860201b60201c565b505050505062000f86565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000536620004f760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620005c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005be9062000e27565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000663919062000e63565b60405180910390a25050565b6200067f620004f760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000710576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007079062000e27565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d09062000ecc565b60405180910390fd5b620007ec5f83836200090560201b60201c565b62000803816002546200090a60201b90919060201c565b6002819055506200085a815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200090a60201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008f9919062000efd565b60405180910390a35050565b505050565b5f8082846200091a919062000d8f565b90508381101562000962576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009599062000f66565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620009e857607f821691505b602082108103620009fe57620009fd620009a3565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000a627fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a25565b62000a6e868362000a25565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000ab862000ab262000aac8462000a86565b62000a8f565b62000a86565b9050919050565b5f819050919050565b62000ad38362000a98565b62000aeb62000ae28262000abf565b84845462000a31565b825550505050565b5f90565b62000b0162000af3565b62000b0e81848462000ac8565b505050565b5b8181101562000b355762000b295f8262000af7565b60018101905062000b14565b5050565b601f82111562000b845762000b4e8162000a04565b62000b598462000a16565b8101602085101562000b69578190505b62000b8162000b788562000a16565b83018262000b13565b50505b505050565b5f82821c905092915050565b5f62000ba65f198460080262000b89565b1980831691505092915050565b5f62000bc0838362000b95565b9150826002028217905092915050565b62000bdb826200096c565b67ffffffffffffffff81111562000bf75762000bf662000976565b5b62000c038254620009d0565b62000c1082828562000b39565b5f60209050601f83116001811462000c46575f841562000c31578287015190505b62000c3d858262000bb3565b86555062000cac565b601f19841662000c568662000a04565b5f5b8281101562000c7f5784890151825560018201915060208501945060208101905062000c58565b8683101562000c9f578489015162000c9b601f89168262000b95565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000ced8262000a86565b915062000cfa8362000a86565b925082820262000d0a8162000a86565b9150828204841483151762000d245762000d2362000cb4565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000d648262000a86565b915062000d718362000a86565b92508262000d845762000d8362000d2b565b5b828204905092915050565b5f62000d9b8262000a86565b915062000da88362000a86565b925082820190508082111562000dc35762000dc262000cb4565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000e0f60208362000dc9565b915062000e1c8262000dd9565b602082019050919050565b5f6020820190508181035f83015262000e408162000e01565b9050919050565b5f8115159050919050565b62000e5d8162000e47565b82525050565b5f60208201905062000e785f83018462000e52565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000eb4601f8362000dc9565b915062000ec18262000e7e565b602082019050919050565b5f6020820190508181035f83015262000ee58162000ea6565b9050919050565b62000ef78162000a86565b82525050565b5f60208201905062000f125f83018462000eec565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62000f4e601b8362000dc9565b915062000f5b8262000f18565b602082019050919050565b5f6020820190508181035f83015262000f7f8162000f40565b9050919050565b614db38062000f945f395ff3fe608060405260043610610280575f3560e01c8063751039fc1161014e578063a9059cbb116100c0578063dd62ed3e11610079578063dd62ed3e1461094d578063df6f93be14610989578063f1cd531a146109b3578063f2fde38b146109db578063f9f92be414610a03578063fe575a8714610a2b57610287565b8063a9059cbb1461082f578063b62496f51461086b578063b69ef8a8146108a7578063be857504146108d1578063c0246668146108fb578063c3f70b521461092357610287565b8063945674fe11610112578063945674fe1461073757806395d89b41146107615780639a7a23d61461078b5780639ee2e924146107b35780639fccce32146107c9578063a457c2d7146107f357610287565b8063751039fc146106915780637571336a146106a757806375e3661e146106cf57806387dd95c0146106f75780638da5cb5b1461070d57610287565b80632c28f579116101f25780634fbee193116101ab5780634fbee193146105875780635de0f2a0146105c35780635ec065e7146105ed5780636c7e15c91461061557806370a082311461063f578063715018a61461067b57610287565b80632c28f5791461048d578063313ce567146104a357806339509351146104cd57806346469afb1461050957806348d791551461053357806349bd5a5e1461055d57610287565b806318160ddd1161024457806318160ddd146103815780631816467f146103ab5780631a8145bb146103d35780631bff7898146103fd57806322eb66311461042757806323b872dd1461045157610287565b806306fdde031461028b578063095ea7b3146102b55780630e947809146102f157806310d5de531461031b5780631694505e1461035757610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610a67565b6040516102ac9190613ba5565b60405180910390f35b3480156102c0575f80fd5b506102db60048036038101906102d69190613c56565b610af7565b6040516102e89190613cae565b60405180910390f35b3480156102fc575f80fd5b50610305610b14565b6040516103129190613cae565b60405180910390f35b348015610326575f80fd5b50610341600480360381019061033c9190613cc7565b610b26565b60405161034e9190613cae565b60405180910390f35b348015610362575f80fd5b5061036b610b43565b6040516103789190613d4d565b60405180910390f35b34801561038c575f80fd5b50610395610b68565b6040516103a29190613d75565b60405180910390f35b3480156103b6575f80fd5b506103d160048036038101906103cc9190613cc7565b610b71565b005b3480156103de575f80fd5b506103e7610cc5565b6040516103f49190613d75565b60405180910390f35b348015610408575f80fd5b50610411610ccb565b60405161041e9190613d75565b60405180910390f35b348015610432575f80fd5b5061043b610cd1565b6040516104489190613d75565b60405180910390f35b34801561045c575f80fd5b5061047760048036038101906104729190613d8e565b610cd7565b6040516104849190613cae565b60405180910390f35b348015610498575f80fd5b506104a1610dab565b005b3480156104ae575f80fd5b506104b76111b1565b6040516104c49190613df9565b60405180910390f35b3480156104d8575f80fd5b506104f360048036038101906104ee9190613c56565b6111b9565b6040516105009190613cae565b60405180910390f35b348015610514575f80fd5b5061051d611267565b60405161052a9190613d75565b60405180910390f35b34801561053e575f80fd5b5061054761126d565b6040516105549190613d75565b60405180910390f35b348015610568575f80fd5b50610571611273565b60405161057e9190613e21565b60405180910390f35b348015610592575f80fd5b506105ad60048036038101906105a89190613cc7565b611298565b6040516105ba9190613cae565b60405180910390f35b3480156105ce575f80fd5b506105d76112ea565b6040516105e49190613d75565b60405180910390f35b3480156105f8575f80fd5b50610613600480360381019061060e9190613e64565b6112f0565b005b348015610620575f80fd5b506106296113a3565b6040516106369190613d75565b60405180910390f35b34801561064a575f80fd5b5061066560048036038101906106609190613cc7565b6113a9565b6040516106729190613d75565b60405180910390f35b348015610686575f80fd5b5061068f6113ee565b005b34801561069c575f80fd5b506106a5611541565b005b3480156106b2575f80fd5b506106cd60048036038101906106c89190613e8f565b6115f2565b005b3480156106da575f80fd5b506106f560048036038101906106f09190613cc7565b6116e0565b005b348015610702575f80fd5b5061070b611907565b005b348015610718575f80fd5b50610721611ab0565b60405161072e9190613e21565b60405180910390f35b348015610742575f80fd5b5061074b611ad8565b6040516107589190613cae565b60405180910390f35b34801561076c575f80fd5b50610775611aeb565b6040516107829190613ba5565b60405180910390f35b348015610796575f80fd5b506107b160048036038101906107ac9190613e8f565b611b7b565b005b3480156107be575f80fd5b506107c7611cae565b005b3480156107d4575f80fd5b506107dd611dc1565b6040516107ea9190613d75565b60405180910390f35b3480156107fe575f80fd5b5061081960048036038101906108149190613c56565b611dc7565b6040516108269190613cae565b60405180910390f35b34801561083a575f80fd5b5061085560048036038101906108509190613c56565b611e8f565b6040516108629190613cae565b60405180910390f35b348015610876575f80fd5b50610891600480360381019061088c9190613cc7565b611eac565b60405161089e9190613cae565b60405180910390f35b3480156108b2575f80fd5b506108bb611ec9565b6040516108c89190613d75565b60405180910390f35b3480156108dc575f80fd5b506108e5611ecf565b6040516108f29190613d75565b60405180910390f35b348015610906575f80fd5b50610921600480360381019061091c9190613e8f565b611ed5565b005b34801561092e575f80fd5b50610937612011565b6040516109449190613d75565b60405180910390f35b348015610958575f80fd5b50610973600480360381019061096e9190613ecd565b612017565b6040516109809190613d75565b60405180910390f35b348015610994575f80fd5b5061099d612099565b6040516109aa9190613d75565b60405180910390f35b3480156109be575f80fd5b506109d960048036038101906109d49190613f0b565b61209f565b005b3480156109e6575f80fd5b50610a0160048036038101906109fc9190613cc7565b612183565b005b348015610a0e575f80fd5b50610a296004803603810190610a249190613cc7565b6122d7565b005b348015610a36575f80fd5b50610a516004803603810190610a4c9190613cc7565b612500565b604051610a5e9190613cae565b60405180910390f35b606060038054610a7690613f9c565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa290613f9c565b8015610aed5780601f10610ac457610100808354040283529160200191610aed565b820191905f5260205f20905b815481529060010190602001808311610ad057829003601f168201915b5050505050905090565b5f610b0a610b0361251d565b8484612524565b6001905092915050565b60115f9054906101000a900460ff1681565b601c602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610b7961251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90614016565b60405180910390fd5b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60155481565b60165481565b5f610ce38484846126e7565b610da084610cef61251d565b610d9b85604051806060016040528060288152602001614d316028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d5261251d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130919092919063ffffffff16565b612524565b600190509392505050565b610db361251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890614016565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050610e648160016115f2565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f119190614048565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f76573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f9a9190614048565b6040518363ffffffff1660e01b8152600401610fb7929190614073565b6020604051808303815f875af1158015610fd3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ff79190614048565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061106260095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016115f2565b61108e60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016130f3565b5f4790505f606460586110a0306113a9565b6110aa91906140c7565b6110b49190614135565b90506110e23060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612524565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016111689695949392919061419e565b60606040518083038185885af1158015611184573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906111a99190614211565b505050505050565b5f6012905090565b5f61125d6111c561251d565b846112588560015f6111d561251d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461319190919063ffffffff16565b612524565b6001905092915050565b60125481565b60105481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600f5481565b6112f861251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137d90614016565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b60135481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6113f661251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b90614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61154961251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce90614016565b60405180910390fd5b5f60115f6101000a81548160ff021916908315150217905550565b6115fa61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167f90614016565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6116e861251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db906142ab565b60405180910390fd5b600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661186d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186490614313565b60405180910390fd5b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f7534c63860313c46c473e4e98328f37017e9674e2162faf1a3ad7a96236c3b7b60405160405180910390a250565b61190f61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199490614016565b60405180910390fd5b5f4790505f81116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da906143a1565b60405180910390fd5b5f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611a29906143ec565b5f6040518083038185875af1925050503d805f8114611a63576040519150601f19603f3d011682016040523d82523d5f602084013e611a68565b606091505b5050905080611aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa39061444a565b60405180910390fd5b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160019054906101000a900460ff1681565b606060048054611afa90613f9c565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2690613f9c565b8015611b715780601f10611b4857610100808354040283529160200191611b71565b820191905f5260205f20905b815481529060010190602001808311611b5457829003601f168201915b5050505050905090565b611b8361251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0890614016565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c97906144d8565b60405180910390fd5b611caa82826130f3565b5050565b611cb661251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b90614016565b60405180910390fd5b5f611d4e306113a9565b90505f8111611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8990614566565b60405180910390fd5b611dbe30600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836126e7565b50565b60195481565b5f611e85611dd361251d565b84611e8085604051806060016040528060258152602001614d596025913960015f611dfc61251d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130919092919063ffffffff16565b612524565b6001905092915050565b5f611ea2611e9b61251d565b84846126e7565b6001905092915050565b601d602052805f5260405f205f915054906101000a900460ff1681565b600c5481565b60175481565b611edd61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6290614016565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120059190613cae565b60405180910390a25050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60145481565b6120a761251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212c90614016565b60405180910390fd5b83601381905550816014819055506014546013546121539190614584565b60128190555082601681905550806017819055506017546016546121779190614584565b60158190555050505050565b61218b61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221090614016565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122df61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461236d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236490614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d2906142ab565b60405180910390fd5b600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c90614601565b60405180910390fd5b6001600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fffa4e6181777692565cf28528fc88fd1516ea86b56da075235fa575af6a4b85560405160405180910390a250565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125899061468f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f79061471d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126da9190613d75565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274c906147ab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba90614839565b60405180910390fd5b600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561284d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612844906148a1565b60405180910390fd5b5f81036128645761285f83835f6131ee565b61308c565b60115f9054906101000a900460ff1615612c5857612880611ab0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128ee57506128be611ab0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561292657505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612960575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129785750600b5f9054906101000a900460ff16155b15612c5757601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a1a5750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ac157600e54811115612a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5b9061492f565b60405180910390fd5b601054612a70836113a9565b82612a7b9190614584565b1115612abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab390614997565b60405180910390fd5b612c56565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b5e5750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612bad57600e54811115612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f90614a25565b60405180910390fd5b612c55565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612c5457601054612c07836113a9565b82612c129190614584565b1115612c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4a90614997565b60405180910390fd5b5b5b5b5b5b5f612c62306113a9565b90505f600f548210159050808015612c865750600b5f9054906101000a900460ff16155b8015612cd95750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d2c5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d7f5750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612dc0576001600b5f6101000a81548160ff021916908315150217905550612da6613477565b5f600b5f6101000a81548160ff0219169083151502179055505b5f600b5f9054906101000a900460ff16159050601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612e6e5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612e77575f90505b5f811561307c57601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ed557505f601554115b15612f6d57612f026064612ef46015548861369d90919063ffffffff16565b61371490919063ffffffff16565b905060155460175482612f1591906140c7565b612f1f9190614135565b60185f828254612f2f9190614584565b9250508190555060155460165482612f4791906140c7565b612f519190614135565b60195f828254612f619190614584565b92505081905550613059565b601d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612fc457505f601254115b1561305857612ff16064612fe36012548861369d90919063ffffffff16565b61371490919063ffffffff16565b90506012546014548261300491906140c7565b61300e9190614135565b60185f82825461301e9190614584565b925050819055506012546013548261303691906140c7565b6130409190614135565b60195f8282546130509190614584565b925050819055505b5b5f81111561306d5761306c8730836131ee565b5b80856130799190614a43565b94505b6130878787876131ee565b505050505b505050565b5f8383111582906130d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cf9190613ba5565b60405180910390fd5b505f83856130e69190614a43565b9050809150509392505050565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f80828461319f9190614584565b9050838110156131e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131db90614ac0565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361325c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613253906147ab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c190614839565b60405180910390fd5b6132d583838361375d565b61333e81604051806060016040528060268152602001614d0b602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130919092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506133cd815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461319190919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161346a9190613d75565b60405180910390a3505050565b5f613481306113a9565b90505f6019546018546134949190614584565b90505f808314806134a457505f82145b156134b15750505061369b565b5f1515601160019054906101000a900460ff161515036134f8576014600f546134da91906140c7565b8311156134f3576014600f546134f091906140c7565b92505b613504565b613501306113a9565b92505b5f6003836018548661351691906140c7565b6135209190614135565b61352a9190614135565b90505f613540828661376290919063ffffffff16565b90505f47905061354f826137ab565b5f613563824761376290919063ffffffff16565b90505f61358d8761357f6019548561369d90919063ffffffff16565b61371490919063ffffffff16565b90505f818361359c9190614a43565b90505f6018819055505f6019819055505f861180156135ba57505f81115b15613607576135c986826139e1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826018546040516135fe93929190614ade565b60405180910390a15b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161364c906143ec565b5f6040518083038185875af1925050503d805f8114613686576040519150601f19603f3d011682016040523d82523d5f602084013e61368b565b606091505b5050809750505050505050505050505b565b5f8083036136ad575f905061370e565b5f82846136ba91906140c7565b90508284826136c99190614135565b14613709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370090614b83565b60405180910390fd5b809150505b92915050565b5f61375583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613aba565b905092915050565b505050565b5f6137a383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613091565b905092915050565b5f600267ffffffffffffffff8111156137c7576137c6614ba1565b5b6040519080825280602002602001820160405280156137f55781602001602082028036833780820191505090505b50905030815f8151811061380c5761380b614bce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138d49190614048565b816001815181106138e8576138e7614bce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061394e3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612524565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016139b0959493929190614cb2565b5f604051808303815f87803b1580156139c7575f80fd5b505af11580156139d9573d5f803e3d5ffd5b505050505050565b613a0d3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612524565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b8152600401613a729695949392919061419e565b60606040518083038185885af1158015613a8e573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613ab39190614211565b5050505050565b5f8083118290613b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af79190613ba5565b60405180910390fd5b505f8385613b0e9190614135565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613b52578082015181840152602081019050613b37565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613b7782613b1b565b613b818185613b25565b9350613b91818560208601613b35565b613b9a81613b5d565b840191505092915050565b5f6020820190508181035f830152613bbd8184613b6d565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613bf282613bc9565b9050919050565b613c0281613be8565b8114613c0c575f80fd5b50565b5f81359050613c1d81613bf9565b92915050565b5f819050919050565b613c3581613c23565b8114613c3f575f80fd5b50565b5f81359050613c5081613c2c565b92915050565b5f8060408385031215613c6c57613c6b613bc5565b5b5f613c7985828601613c0f565b9250506020613c8a85828601613c42565b9150509250929050565b5f8115159050919050565b613ca881613c94565b82525050565b5f602082019050613cc15f830184613c9f565b92915050565b5f60208284031215613cdc57613cdb613bc5565b5b5f613ce984828501613c0f565b91505092915050565b5f819050919050565b5f613d15613d10613d0b84613bc9565b613cf2565b613bc9565b9050919050565b5f613d2682613cfb565b9050919050565b5f613d3782613d1c565b9050919050565b613d4781613d2d565b82525050565b5f602082019050613d605f830184613d3e565b92915050565b613d6f81613c23565b82525050565b5f602082019050613d885f830184613d66565b92915050565b5f805f60608486031215613da557613da4613bc5565b5b5f613db286828701613c0f565b9350506020613dc386828701613c0f565b9250506040613dd486828701613c42565b9150509250925092565b5f60ff82169050919050565b613df381613dde565b82525050565b5f602082019050613e0c5f830184613dea565b92915050565b613e1b81613be8565b82525050565b5f602082019050613e345f830184613e12565b92915050565b613e4381613c94565b8114613e4d575f80fd5b50565b5f81359050613e5e81613e3a565b92915050565b5f60208284031215613e7957613e78613bc5565b5b5f613e8684828501613e50565b91505092915050565b5f8060408385031215613ea557613ea4613bc5565b5b5f613eb285828601613c0f565b9250506020613ec385828601613e50565b9150509250929050565b5f8060408385031215613ee357613ee2613bc5565b5b5f613ef085828601613c0f565b9250506020613f0185828601613c0f565b9150509250929050565b5f805f8060808587031215613f2357613f22613bc5565b5b5f613f3087828801613c42565b9450506020613f4187828801613c42565b9350506040613f5287828801613c42565b9250506060613f6387828801613c42565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613fb357607f821691505b602082108103613fc657613fc5613f6f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614000602083613b25565b915061400b82613fcc565b602082019050919050565b5f6020820190508181035f83015261402d81613ff4565b9050919050565b5f8151905061404281613bf9565b92915050565b5f6020828403121561405d5761405c613bc5565b5b5f61406a84828501614034565b91505092915050565b5f6040820190506140865f830185613e12565b6140936020830184613e12565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6140d182613c23565b91506140dc83613c23565b92508282026140ea81613c23565b915082820484148315176141015761410061409a565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61413f82613c23565b915061414a83613c23565b92508261415a57614159614108565b5b828204905092915050565b5f819050919050565b5f61418861418361417e84614165565b613cf2565b613c23565b9050919050565b6141988161416e565b82525050565b5f60c0820190506141b15f830189613e12565b6141be6020830188613d66565b6141cb604083018761418f565b6141d8606083018661418f565b6141e56080830185613e12565b6141f260a0830184613d66565b979650505050505050565b5f8151905061420b81613c2c565b92915050565b5f805f6060848603121561422857614227613bc5565b5b5f614235868287016141fd565b9350506020614246868287016141fd565b9250506040614257868287016141fd565b9150509250925092565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f614295600f83613b25565b91506142a082614261565b602082019050919050565b5f6020820190508181035f8301526142c281614289565b9050919050565b7f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000005f82015250565b5f6142fd601a83613b25565b9150614308826142c9565b602082019050919050565b5f6020820190508181035f83015261432a816142f1565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f61438b602283613b25565b915061439682614331565b604082019050919050565b5f6020820190508181035f8301526143b88161437f565b9050919050565b5f81905092915050565b50565b5f6143d75f836143bf565b91506143e2826143c9565b5f82019050919050565b5f6143f6826143cc565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f614434601b83613b25565b915061443f82614400565b602082019050919050565b5f6020820190508181035f83015261446181614428565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6144c2603983613b25565b91506144cd82614468565b604082019050919050565b5f6020820190508181035f8301526144ef816144b6565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f614550602483613b25565b915061455b826144f6565b604082019050919050565b5f6020820190508181035f83015261457d81614544565b9050919050565b5f61458e82613c23565b915061459983613c23565b92508282019050808211156145b1576145b061409a565b5b92915050565b7f4163636f756e7420697320616c726561647920626c61636b6c697374656400005f82015250565b5f6145eb601e83613b25565b91506145f6826145b7565b602082019050919050565b5f6020820190508181035f830152614618816145df565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614679602483613b25565b91506146848261461f565b604082019050919050565b5f6020820190508181035f8301526146a68161466d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614707602283613b25565b9150614712826146ad565b604082019050919050565b5f6020820190508181035f830152614734816146fb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614795602583613b25565b91506147a08261473b565b604082019050919050565b5f6020820190508181035f8301526147c281614789565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614823602383613b25565b915061482e826147c9565b604082019050919050565b5f6020820190508181035f83015261485081614817565b9050919050565b7f53656e64657220697320626c61636b6c697374656400000000000000000000005f82015250565b5f61488b601583613b25565b915061489682614857565b602082019050919050565b5f6020820190508181035f8301526148b88161487f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614919603583613b25565b9150614924826148bf565b604082019050919050565b5f6020820190508181035f8301526149468161490d565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614981601383613b25565b915061498c8261494d565b602082019050919050565b5f6020820190508181035f8301526149ae81614975565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614a0f603683613b25565b9150614a1a826149b5565b604082019050919050565b5f6020820190508181035f830152614a3c81614a03565b9050919050565b5f614a4d82613c23565b9150614a5883613c23565b9250828203905081811115614a7057614a6f61409a565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614aaa601b83613b25565b9150614ab582614a76565b602082019050919050565b5f6020820190508181035f830152614ad781614a9e565b9050919050565b5f606082019050614af15f830186613d66565b614afe6020830185613d66565b614b0b6040830184613d66565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614b6d602183613b25565b9150614b7882614b13565b604082019050919050565b5f6020820190508181035f830152614b9a81614b61565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614c2d81613be8565b82525050565b5f614c3e8383614c24565b60208301905092915050565b5f602082019050919050565b5f614c6082614bfb565b614c6a8185614c05565b9350614c7583614c15565b805f5b83811015614ca5578151614c8c8882614c33565b9750614c9783614c4a565b925050600181019050614c78565b5085935050505092915050565b5f60a082019050614cc55f830188613d66565b614cd2602083018761418f565b8181036040830152614ce48186614c56565b9050614cf36060830185613e12565b614d006080830184613d66565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f3bf28eca7a25a144fe667adda76f96366f87bf24880d0e1348099602055925964736f6c63430008150033

Deployed Bytecode

0x608060405260043610610280575f3560e01c8063751039fc1161014e578063a9059cbb116100c0578063dd62ed3e11610079578063dd62ed3e1461094d578063df6f93be14610989578063f1cd531a146109b3578063f2fde38b146109db578063f9f92be414610a03578063fe575a8714610a2b57610287565b8063a9059cbb1461082f578063b62496f51461086b578063b69ef8a8146108a7578063be857504146108d1578063c0246668146108fb578063c3f70b521461092357610287565b8063945674fe11610112578063945674fe1461073757806395d89b41146107615780639a7a23d61461078b5780639ee2e924146107b35780639fccce32146107c9578063a457c2d7146107f357610287565b8063751039fc146106915780637571336a146106a757806375e3661e146106cf57806387dd95c0146106f75780638da5cb5b1461070d57610287565b80632c28f579116101f25780634fbee193116101ab5780634fbee193146105875780635de0f2a0146105c35780635ec065e7146105ed5780636c7e15c91461061557806370a082311461063f578063715018a61461067b57610287565b80632c28f5791461048d578063313ce567146104a357806339509351146104cd57806346469afb1461050957806348d791551461053357806349bd5a5e1461055d57610287565b806318160ddd1161024457806318160ddd146103815780631816467f146103ab5780631a8145bb146103d35780631bff7898146103fd57806322eb66311461042757806323b872dd1461045157610287565b806306fdde031461028b578063095ea7b3146102b55780630e947809146102f157806310d5de531461031b5780631694505e1461035757610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610a67565b6040516102ac9190613ba5565b60405180910390f35b3480156102c0575f80fd5b506102db60048036038101906102d69190613c56565b610af7565b6040516102e89190613cae565b60405180910390f35b3480156102fc575f80fd5b50610305610b14565b6040516103129190613cae565b60405180910390f35b348015610326575f80fd5b50610341600480360381019061033c9190613cc7565b610b26565b60405161034e9190613cae565b60405180910390f35b348015610362575f80fd5b5061036b610b43565b6040516103789190613d4d565b60405180910390f35b34801561038c575f80fd5b50610395610b68565b6040516103a29190613d75565b60405180910390f35b3480156103b6575f80fd5b506103d160048036038101906103cc9190613cc7565b610b71565b005b3480156103de575f80fd5b506103e7610cc5565b6040516103f49190613d75565b60405180910390f35b348015610408575f80fd5b50610411610ccb565b60405161041e9190613d75565b60405180910390f35b348015610432575f80fd5b5061043b610cd1565b6040516104489190613d75565b60405180910390f35b34801561045c575f80fd5b5061047760048036038101906104729190613d8e565b610cd7565b6040516104849190613cae565b60405180910390f35b348015610498575f80fd5b506104a1610dab565b005b3480156104ae575f80fd5b506104b76111b1565b6040516104c49190613df9565b60405180910390f35b3480156104d8575f80fd5b506104f360048036038101906104ee9190613c56565b6111b9565b6040516105009190613cae565b60405180910390f35b348015610514575f80fd5b5061051d611267565b60405161052a9190613d75565b60405180910390f35b34801561053e575f80fd5b5061054761126d565b6040516105549190613d75565b60405180910390f35b348015610568575f80fd5b50610571611273565b60405161057e9190613e21565b60405180910390f35b348015610592575f80fd5b506105ad60048036038101906105a89190613cc7565b611298565b6040516105ba9190613cae565b60405180910390f35b3480156105ce575f80fd5b506105d76112ea565b6040516105e49190613d75565b60405180910390f35b3480156105f8575f80fd5b50610613600480360381019061060e9190613e64565b6112f0565b005b348015610620575f80fd5b506106296113a3565b6040516106369190613d75565b60405180910390f35b34801561064a575f80fd5b5061066560048036038101906106609190613cc7565b6113a9565b6040516106729190613d75565b60405180910390f35b348015610686575f80fd5b5061068f6113ee565b005b34801561069c575f80fd5b506106a5611541565b005b3480156106b2575f80fd5b506106cd60048036038101906106c89190613e8f565b6115f2565b005b3480156106da575f80fd5b506106f560048036038101906106f09190613cc7565b6116e0565b005b348015610702575f80fd5b5061070b611907565b005b348015610718575f80fd5b50610721611ab0565b60405161072e9190613e21565b60405180910390f35b348015610742575f80fd5b5061074b611ad8565b6040516107589190613cae565b60405180910390f35b34801561076c575f80fd5b50610775611aeb565b6040516107829190613ba5565b60405180910390f35b348015610796575f80fd5b506107b160048036038101906107ac9190613e8f565b611b7b565b005b3480156107be575f80fd5b506107c7611cae565b005b3480156107d4575f80fd5b506107dd611dc1565b6040516107ea9190613d75565b60405180910390f35b3480156107fe575f80fd5b5061081960048036038101906108149190613c56565b611dc7565b6040516108269190613cae565b60405180910390f35b34801561083a575f80fd5b5061085560048036038101906108509190613c56565b611e8f565b6040516108629190613cae565b60405180910390f35b348015610876575f80fd5b50610891600480360381019061088c9190613cc7565b611eac565b60405161089e9190613cae565b60405180910390f35b3480156108b2575f80fd5b506108bb611ec9565b6040516108c89190613d75565b60405180910390f35b3480156108dc575f80fd5b506108e5611ecf565b6040516108f29190613d75565b60405180910390f35b348015610906575f80fd5b50610921600480360381019061091c9190613e8f565b611ed5565b005b34801561092e575f80fd5b50610937612011565b6040516109449190613d75565b60405180910390f35b348015610958575f80fd5b50610973600480360381019061096e9190613ecd565b612017565b6040516109809190613d75565b60405180910390f35b348015610994575f80fd5b5061099d612099565b6040516109aa9190613d75565b60405180910390f35b3480156109be575f80fd5b506109d960048036038101906109d49190613f0b565b61209f565b005b3480156109e6575f80fd5b50610a0160048036038101906109fc9190613cc7565b612183565b005b348015610a0e575f80fd5b50610a296004803603810190610a249190613cc7565b6122d7565b005b348015610a36575f80fd5b50610a516004803603810190610a4c9190613cc7565b612500565b604051610a5e9190613cae565b60405180910390f35b606060038054610a7690613f9c565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa290613f9c565b8015610aed5780601f10610ac457610100808354040283529160200191610aed565b820191905f5260205f20905b815481529060010190602001808311610ad057829003601f168201915b5050505050905090565b5f610b0a610b0361251d565b8484612524565b6001905092915050565b60115f9054906101000a900460ff1681565b601c602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610b7961251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90614016565b60405180910390fd5b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60155481565b60165481565b5f610ce38484846126e7565b610da084610cef61251d565b610d9b85604051806060016040528060288152602001614d316028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d5261251d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130919092919063ffffffff16565b612524565b600190509392505050565b610db361251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890614016565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050610e648160016115f2565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f119190614048565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f76573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f9a9190614048565b6040518363ffffffff1660e01b8152600401610fb7929190614073565b6020604051808303815f875af1158015610fd3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ff79190614048565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061106260095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016115f2565b61108e60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016130f3565b5f4790505f606460586110a0306113a9565b6110aa91906140c7565b6110b49190614135565b90506110e23060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612524565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016111689695949392919061419e565b60606040518083038185885af1158015611184573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906111a99190614211565b505050505050565b5f6012905090565b5f61125d6111c561251d565b846112588560015f6111d561251d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461319190919063ffffffff16565b612524565b6001905092915050565b60125481565b60105481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600f5481565b6112f861251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137d90614016565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b60135481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6113f661251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b90614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61154961251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce90614016565b60405180910390fd5b5f60115f6101000a81548160ff021916908315150217905550565b6115fa61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167f90614016565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6116e861251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db906142ab565b60405180910390fd5b600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661186d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186490614313565b60405180910390fd5b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f7534c63860313c46c473e4e98328f37017e9674e2162faf1a3ad7a96236c3b7b60405160405180910390a250565b61190f61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199490614016565b60405180910390fd5b5f4790505f81116119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da906143a1565b60405180910390fd5b5f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611a29906143ec565b5f6040518083038185875af1925050503d805f8114611a63576040519150601f19603f3d011682016040523d82523d5f602084013e611a68565b606091505b5050905080611aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa39061444a565b60405180910390fd5b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160019054906101000a900460ff1681565b606060048054611afa90613f9c565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2690613f9c565b8015611b715780601f10611b4857610100808354040283529160200191611b71565b820191905f5260205f20905b815481529060010190602001808311611b5457829003601f168201915b5050505050905090565b611b8361251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0890614016565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c97906144d8565b60405180910390fd5b611caa82826130f3565b5050565b611cb661251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b90614016565b60405180910390fd5b5f611d4e306113a9565b90505f8111611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8990614566565b60405180910390fd5b611dbe30600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836126e7565b50565b60195481565b5f611e85611dd361251d565b84611e8085604051806060016040528060258152602001614d596025913960015f611dfc61251d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130919092919063ffffffff16565b612524565b6001905092915050565b5f611ea2611e9b61251d565b84846126e7565b6001905092915050565b601d602052805f5260405f205f915054906101000a900460ff1681565b600c5481565b60175481565b611edd61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6290614016565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120059190613cae565b60405180910390a25050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60145481565b6120a761251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212c90614016565b60405180910390fd5b83601381905550816014819055506014546013546121539190614584565b60128190555082601681905550806017819055506017546016546121779190614584565b60158190555050505050565b61218b61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221090614016565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122df61251d565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461236d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236490614016565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d2906142ab565b60405180910390fd5b600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c90614601565b60405180910390fd5b6001600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fffa4e6181777692565cf28528fc88fd1516ea86b56da075235fa575af6a4b85560405160405180910390a250565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125899061468f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f79061471d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126da9190613d75565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274c906147ab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba90614839565b60405180910390fd5b600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561284d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612844906148a1565b60405180910390fd5b5f81036128645761285f83835f6131ee565b61308c565b60115f9054906101000a900460ff1615612c5857612880611ab0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128ee57506128be611ab0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561292657505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612960575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129785750600b5f9054906101000a900460ff16155b15612c5757601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a1a5750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ac157600e54811115612a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5b9061492f565b60405180910390fd5b601054612a70836113a9565b82612a7b9190614584565b1115612abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab390614997565b60405180910390fd5b612c56565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b5e5750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612bad57600e54811115612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f90614a25565b60405180910390fd5b612c55565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612c5457601054612c07836113a9565b82612c129190614584565b1115612c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4a90614997565b60405180910390fd5b5b5b5b5b5b5f612c62306113a9565b90505f600f548210159050808015612c865750600b5f9054906101000a900460ff16155b8015612cd95750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d2c5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d7f5750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612dc0576001600b5f6101000a81548160ff021916908315150217905550612da6613477565b5f600b5f6101000a81548160ff0219169083151502179055505b5f600b5f9054906101000a900460ff16159050601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612e6e5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612e77575f90505b5f811561307c57601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ed557505f601554115b15612f6d57612f026064612ef46015548861369d90919063ffffffff16565b61371490919063ffffffff16565b905060155460175482612f1591906140c7565b612f1f9190614135565b60185f828254612f2f9190614584565b9250508190555060155460165482612f4791906140c7565b612f519190614135565b60195f828254612f619190614584565b92505081905550613059565b601d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612fc457505f601254115b1561305857612ff16064612fe36012548861369d90919063ffffffff16565b61371490919063ffffffff16565b90506012546014548261300491906140c7565b61300e9190614135565b60185f82825461301e9190614584565b925050819055506012546013548261303691906140c7565b6130409190614135565b60195f8282546130509190614584565b925050819055505b5b5f81111561306d5761306c8730836131ee565b5b80856130799190614a43565b94505b6130878787876131ee565b505050505b505050565b5f8383111582906130d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cf9190613ba5565b60405180910390fd5b505f83856130e69190614a43565b9050809150509392505050565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f80828461319f9190614584565b9050838110156131e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131db90614ac0565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361325c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613253906147ab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c190614839565b60405180910390fd5b6132d583838361375d565b61333e81604051806060016040528060268152602001614d0b602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130919092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506133cd815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461319190919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161346a9190613d75565b60405180910390a3505050565b5f613481306113a9565b90505f6019546018546134949190614584565b90505f808314806134a457505f82145b156134b15750505061369b565b5f1515601160019054906101000a900460ff161515036134f8576014600f546134da91906140c7565b8311156134f3576014600f546134f091906140c7565b92505b613504565b613501306113a9565b92505b5f6003836018548661351691906140c7565b6135209190614135565b61352a9190614135565b90505f613540828661376290919063ffffffff16565b90505f47905061354f826137ab565b5f613563824761376290919063ffffffff16565b90505f61358d8761357f6019548561369d90919063ffffffff16565b61371490919063ffffffff16565b90505f818361359c9190614a43565b90505f6018819055505f6019819055505f861180156135ba57505f81115b15613607576135c986826139e1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826018546040516135fe93929190614ade565b60405180910390a15b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161364c906143ec565b5f6040518083038185875af1925050503d805f8114613686576040519150601f19603f3d011682016040523d82523d5f602084013e61368b565b606091505b5050809750505050505050505050505b565b5f8083036136ad575f905061370e565b5f82846136ba91906140c7565b90508284826136c99190614135565b14613709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370090614b83565b60405180910390fd5b809150505b92915050565b5f61375583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613aba565b905092915050565b505050565b5f6137a383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613091565b905092915050565b5f600267ffffffffffffffff8111156137c7576137c6614ba1565b5b6040519080825280602002602001820160405280156137f55781602001602082028036833780820191505090505b50905030815f8151811061380c5761380b614bce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138d49190614048565b816001815181106138e8576138e7614bce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061394e3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612524565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016139b0959493929190614cb2565b5f604051808303815f87803b1580156139c7575f80fd5b505af11580156139d9573d5f803e3d5ffd5b505050505050565b613a0d3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612524565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b8152600401613a729695949392919061419e565b60606040518083038185885af1158015613a8e573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613ab39190614211565b5050505050565b5f8083118290613b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af79190613ba5565b60405180910390fd5b505f8385613b0e9190614135565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613b52578082015181840152602081019050613b37565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613b7782613b1b565b613b818185613b25565b9350613b91818560208601613b35565b613b9a81613b5d565b840191505092915050565b5f6020820190508181035f830152613bbd8184613b6d565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613bf282613bc9565b9050919050565b613c0281613be8565b8114613c0c575f80fd5b50565b5f81359050613c1d81613bf9565b92915050565b5f819050919050565b613c3581613c23565b8114613c3f575f80fd5b50565b5f81359050613c5081613c2c565b92915050565b5f8060408385031215613c6c57613c6b613bc5565b5b5f613c7985828601613c0f565b9250506020613c8a85828601613c42565b9150509250929050565b5f8115159050919050565b613ca881613c94565b82525050565b5f602082019050613cc15f830184613c9f565b92915050565b5f60208284031215613cdc57613cdb613bc5565b5b5f613ce984828501613c0f565b91505092915050565b5f819050919050565b5f613d15613d10613d0b84613bc9565b613cf2565b613bc9565b9050919050565b5f613d2682613cfb565b9050919050565b5f613d3782613d1c565b9050919050565b613d4781613d2d565b82525050565b5f602082019050613d605f830184613d3e565b92915050565b613d6f81613c23565b82525050565b5f602082019050613d885f830184613d66565b92915050565b5f805f60608486031215613da557613da4613bc5565b5b5f613db286828701613c0f565b9350506020613dc386828701613c0f565b9250506040613dd486828701613c42565b9150509250925092565b5f60ff82169050919050565b613df381613dde565b82525050565b5f602082019050613e0c5f830184613dea565b92915050565b613e1b81613be8565b82525050565b5f602082019050613e345f830184613e12565b92915050565b613e4381613c94565b8114613e4d575f80fd5b50565b5f81359050613e5e81613e3a565b92915050565b5f60208284031215613e7957613e78613bc5565b5b5f613e8684828501613e50565b91505092915050565b5f8060408385031215613ea557613ea4613bc5565b5b5f613eb285828601613c0f565b9250506020613ec385828601613e50565b9150509250929050565b5f8060408385031215613ee357613ee2613bc5565b5b5f613ef085828601613c0f565b9250506020613f0185828601613c0f565b9150509250929050565b5f805f8060808587031215613f2357613f22613bc5565b5b5f613f3087828801613c42565b9450506020613f4187828801613c42565b9350506040613f5287828801613c42565b9250506060613f6387828801613c42565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613fb357607f821691505b602082108103613fc657613fc5613f6f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614000602083613b25565b915061400b82613fcc565b602082019050919050565b5f6020820190508181035f83015261402d81613ff4565b9050919050565b5f8151905061404281613bf9565b92915050565b5f6020828403121561405d5761405c613bc5565b5b5f61406a84828501614034565b91505092915050565b5f6040820190506140865f830185613e12565b6140936020830184613e12565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6140d182613c23565b91506140dc83613c23565b92508282026140ea81613c23565b915082820484148315176141015761410061409a565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61413f82613c23565b915061414a83613c23565b92508261415a57614159614108565b5b828204905092915050565b5f819050919050565b5f61418861418361417e84614165565b613cf2565b613c23565b9050919050565b6141988161416e565b82525050565b5f60c0820190506141b15f830189613e12565b6141be6020830188613d66565b6141cb604083018761418f565b6141d8606083018661418f565b6141e56080830185613e12565b6141f260a0830184613d66565b979650505050505050565b5f8151905061420b81613c2c565b92915050565b5f805f6060848603121561422857614227613bc5565b5b5f614235868287016141fd565b9350506020614246868287016141fd565b9250506040614257868287016141fd565b9150509250925092565b7f496e76616c6964206164647265737300000000000000000000000000000000005f82015250565b5f614295600f83613b25565b91506142a082614261565b602082019050919050565b5f6020820190508181035f8301526142c281614289565b9050919050565b7f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000005f82015250565b5f6142fd601a83613b25565b9150614308826142c9565b602082019050919050565b5f6020820190508181035f83015261432a816142f1565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f61438b602283613b25565b915061439682614331565b604082019050919050565b5f6020820190508181035f8301526143b88161437f565b9050919050565b5f81905092915050565b50565b5f6143d75f836143bf565b91506143e2826143c9565b5f82019050919050565b5f6143f6826143cc565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f614434601b83613b25565b915061443f82614400565b602082019050919050565b5f6020820190508181035f83015261446181614428565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6144c2603983613b25565b91506144cd82614468565b604082019050919050565b5f6020820190508181035f8301526144ef816144b6565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f614550602483613b25565b915061455b826144f6565b604082019050919050565b5f6020820190508181035f83015261457d81614544565b9050919050565b5f61458e82613c23565b915061459983613c23565b92508282019050808211156145b1576145b061409a565b5b92915050565b7f4163636f756e7420697320616c726561647920626c61636b6c697374656400005f82015250565b5f6145eb601e83613b25565b91506145f6826145b7565b602082019050919050565b5f6020820190508181035f830152614618816145df565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614679602483613b25565b91506146848261461f565b604082019050919050565b5f6020820190508181035f8301526146a68161466d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614707602283613b25565b9150614712826146ad565b604082019050919050565b5f6020820190508181035f830152614734816146fb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614795602583613b25565b91506147a08261473b565b604082019050919050565b5f6020820190508181035f8301526147c281614789565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614823602383613b25565b915061482e826147c9565b604082019050919050565b5f6020820190508181035f83015261485081614817565b9050919050565b7f53656e64657220697320626c61636b6c697374656400000000000000000000005f82015250565b5f61488b601583613b25565b915061489682614857565b602082019050919050565b5f6020820190508181035f8301526148b88161487f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614919603583613b25565b9150614924826148bf565b604082019050919050565b5f6020820190508181035f8301526149468161490d565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614981601383613b25565b915061498c8261494d565b602082019050919050565b5f6020820190508181035f8301526149ae81614975565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614a0f603683613b25565b9150614a1a826149b5565b604082019050919050565b5f6020820190508181035f830152614a3c81614a03565b9050919050565b5f614a4d82613c23565b9150614a5883613c23565b9250828203905081811115614a7057614a6f61409a565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614aaa601b83613b25565b9150614ab582614a76565b602082019050919050565b5f6020820190508181035f830152614ad781614a9e565b9050919050565b5f606082019050614af15f830186613d66565b614afe6020830185613d66565b614b0b6040830184613d66565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614b6d602183613b25565b9150614b7882614b13565b604082019050919050565b5f6020820190508181035f830152614b9a81614b61565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614c2d81613be8565b82525050565b5f614c3e8383614c24565b60208301905092915050565b5f602082019050919050565b5f614c6082614bfb565b614c6a8185614c05565b9350614c7583614c15565b805f5b83811015614ca5578151614c8c8882614c33565b9750614c9783614c4a565b925050600181019050614c78565b5085935050505092915050565b5f60a082019050614cc55f830188613d66565b614cd2602083018761418f565b8181036040830152614ce48186614c56565b9050614cf36060830185613e12565b614d006080830184613d66565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f3bf28eca7a25a144fe667adda76f96366f87bf24880d0e1348099602055925964736f6c63430008150033

Deployed Bytecode Sourcemap

17739:13299:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5002:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5916:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18350:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18923:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17893:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5323:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24914:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18632:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18531:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18565:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6093:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21286:1037;;;;;;;;;;;;;:::i;:::-;;5222:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6456:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18433:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18309:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17941:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25087:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18267:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23605:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18466:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5439:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10983:148;;;;;;;;;;;;;:::i;:::-;;23515:81;;;;;;;;;;;;;:::i;:::-;;23723:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22626:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22930:313;;;;;;;;;;;;;:::i;:::-;;10769:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18387:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5110:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24463:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23251:256;;;;;;;;;;;;;:::i;:::-;;18672:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6682:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5574:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19146:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18167:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18597:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24272:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18231:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5757:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18497:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23879:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11139:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22332:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17980:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5002:100;5056:13;5089:5;5082:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5002:100;:::o;5916:169::-;5999:4;6016:39;6025:12;:10;:12::i;:::-;6039:7;6048:6;6016:8;:39::i;:::-;6073:4;6066:11;;5916:169;;;;:::o;18350:30::-;;;;;;;;;;;;;:::o;18923:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17893:41::-;;;;;;;;;;;;;:::o;5323:108::-;5384:7;5411:12;;5404:19;;5323:108;:::o;24914:165::-;10906:12;:10;:12::i;:::-;10896:22;;:6;;;;;;;;;;;:22;;;10888:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25026:9:::1;;;;;;;;;;;24995:41;;25012:12;24995:41;;;;;;;;;;;;25059:12;25047:9;;:24;;;;;;;;;;;;;;;;;;24914:165:::0;:::o;18632:33::-;;;;:::o;18531:27::-;;;;:::o;18565:25::-;;;;:::o;6093:355::-;6233:4;6250:36;6260:6;6268:9;6279:6;6250:9;:36::i;:::-;6297:121;6306:6;6314:12;:10;:12::i;:::-;6328:89;6366:6;6328:89;;;;;;;;;;;;;;;;;:11;:19;6340:6;6328:19;;;;;;;;;;;;;;;:33;6348:12;:10;:12::i;:::-;6328:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6297:8;:121::i;:::-;6436:4;6429:11;;6093:355;;;;;:::o;21286:1037::-;10906:12;:10;:12::i;:::-;10896:22;;:6;;;;;;;;;;;:22;;;10888:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21339:35:::1;21396:42;21339:100;;21453:58;21487:16;21506:4;21453:25;:58::i;:::-;21540:16;21522:15;;:34;;;;;;;;;;;;;;;;;;21604:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21586:56;;;21651:4;21658:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21586:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21570:13;;:112;;;;;;;;;;;;;;;;;;21693:55;21727:13;;;;;;;;;;;21743:4;21693:25;:55::i;:::-;21759:58;21796:13;;;;;;;;;;;21812:4;21759:28;:58::i;:::-;21838:17;21858:21;21838:41;;21890:19;21944:3;21939:2;21912:24;21930:4;21912:9;:24::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;21890:57;;21978:62;21995:4;22010:15;;;;;;;;;;;22028:11;21978:8;:62::i;:::-;22053:15;;;;;;;;;;;:31;;;22092:9;22125:4;22145:11;22175:1;22222::::0;22265:9:::1;;;;;;;;;;;22289:15;22053:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21322:1001;;;21286:1037::o:0;5222:93::-;5280:5;5305:2;5298:9;;5222:93;:::o;6456:218::-;6544:4;6561:83;6570:12;:10;:12::i;:::-;6584:7;6593:50;6632:10;6593:11;:25;6605:12;:10;:12::i;:::-;6593:25;;;;;;;;;;;;;;;:34;6619:7;6593:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6561:8;:83::i;:::-;6662:4;6655:11;;6456:218;;;;:::o;18433:26::-;;;;:::o;18309:31::-;;;;:::o;17941:28::-;;;;;;;;;;;;;:::o;25087:125::-;25152:4;25176:19;:28;25196:7;25176:28;;;;;;;;;;;;;;;;;;;;;;;;;25169:35;;25087:125;;;:::o;18267:35::-;;;;:::o;23605:109::-;10906:12;:10;:12::i;:::-;10896:22;;:6;;;;;;;;;;;:22;;;10888:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23699:7:::1;23679:17;;:27;;;;;;;;;;;;;;;;;;23605:109:::0;:::o;18466:24::-;;;;:::o;5439:127::-;5513:7;5540:9;:18;5550:7;5540:18;;;;;;;;;;;;;;;;5533:25;;5439:127;;;:::o;10983:148::-;10906:12;:10;:12::i;:::-;10896:22;;:6;;;;;;;;;;;:22;;;10888:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11090:1:::1;11053:40;;11074:6;;;;;;;;;;;11053:40;;;;;;;;;;;;11121:1;11104:6;;:19;;;;;;;;;;;;;;;;;;10983:148::o:0;23515:81::-;10906:12;:10;:12::i;:::-;10896:22;;:6;;;;;;;;;;;:22;;;10888:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23583:5:::1;23569:11;;:19;;;;;;;;;;;;;;;;;;23515:81::o:0;23723:144::-;10906:12;:10;:12::i;:::-;10896:22;;:6;;;;;;;;;;;:22;;;10888:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23855:4:::1;23813:31;:39;23845:6;23813:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23723:144:::0;;:::o;22626:286::-;10906:12;:10;:12::i;:::-;10896:22;;:6;;;;;;;;;;;:22;;;10888:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22721:1:::1;22702:21;;:7;:21;;::::0;22694:49:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22762:13;:22;22776:7;22762:22;;;;;;;;;;;;;;;;;;;;;;;;;22754:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22861:5;22836:13;:22;22850:7;22836:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;22896:7;22882:22;;;;;;;;;;;;22626:286:::0;:::o;22930:313::-;10906:12;:10;:12::i;:::-;10896:22;;:6;;;;;;;;;;;:22;;;10888:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22988:18:::1;23009:21;22988:42;;23062:1;23049:10;:14;23041:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23114:12;23139:9;;;;;;;;;;;23131:23;;23162:10;23131:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23113:64;;;23196:7;23188:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22977:266;;22930:313::o:0;10769:79::-;10807:7;10834:6;;;;;;;;;;;10827:13;;10769:79;:::o;18387:37::-;;;;;;;;;;;;;:::o;5110:104::-;5166:13;5199:7;5192:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5110:104;:::o;24463:245::-;10906:12;:10;:12::i;:::-;10896:22;;:6;;;;;;;;;;;:22;;;10888:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24570:13:::1;;;;;;;;;;;24562:21;;:4;:21;;::::0;24554:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24659:41;24688:4;24694:5;24659:28;:41::i;:::-;24463:245:::0;;:::o;23251:256::-;10906:12;:10;:12::i;:::-;10896:22;;:6;;;;;;;;;;;:22;;;10888:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23316:20:::1;23339:24;23357:4;23339:9;:24::i;:::-;23316:47;;23397:1;23382:12;:16;23374:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23450:49;23468:4;23475:9;;;;;;;;;;;23486:12;23450:9;:49::i;:::-;23305:202;23251:256::o:0;18672:27::-;;;;:::o;6682:269::-;6775:4;6792:129;6801:12;:10;:12::i;:::-;6815:7;6824:96;6863:15;6824:96;;;;;;;;;;;;;;;;;:11;:25;6836:12;:10;:12::i;:::-;6824:25;;;;;;;;;;;;;;;:34;6850:7;6824:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6792:8;:129::i;:::-;6939:4;6932:11;;6682:269;;;;:::o;5574:175::-;5660:4;5677:42;5687:12;:10;:12::i;:::-;5701:9;5712:6;5677:9;:42::i;:::-;5737:4;5730:11;;5574:175;;;;:::o;19146:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;18167:22::-;;;;:::o;18597:25::-;;;;:::o;24272:182::-;10906:12;:10;:12::i;:::-;10896:22;;:6;;;;;;;;;;;:22;;;10888:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24388:8:::1;24357:19;:28;24377:7;24357:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24428:7;24412:34;;;24437:8;24412:34;;;;;;:::i;:::-;;;;;;;;24272:182:::0;;:::o;18231:29::-;;;;:::o;5757:151::-;5846:7;5873:11;:18;5885:5;5873:18;;;;;;;;;;;;;;;:27;5892:7;5873:27;;;;;;;;;;;;;;;;5866:34;;5757:151;;;;:::o;18497:24::-;;;;:::o;23879:385::-;10906:12;:10;:12::i;:::-;10896:22;;:6;;;;;;;;;;;:22;;;10888:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24051:7:::1;24039:9;:19;;;;24081:7;24069:9;:19;;;;24125:9;;24113;;:21;;;;:::i;:::-;24099:11;:35;;;;24158:8;24145:10;:21;;;;24190:8;24177:10;:21;;;;24237:10;;24224;;:23;;;;:::i;:::-;24209:12;:38;;;;23879:385:::0;;;;:::o;11139:169::-;10906:12;:10;:12::i;:::-;10896:22;;:6;;;;;;;;;;;:22;;;10888:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11263:8:::1;11234:38;;11255:6;;;;;;;;;;;11234:38;;;;;;;;;;;;11292:8;11283:6;;:17;;;;;;;;;;;;;;;;;;11139:169:::0;:::o;22332:286::-;10906:12;:10;:12::i;:::-;10896:22;;:6;;;;;;;;;;;:22;;;10888:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22425:1:::1;22406:21;;:7;:21;;::::0;22398:49:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22467:13;:22;22481:7;22467:22;;;;;;;;;;;;;;;;;;;;;;;;;22466:23;22458:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;22570:4;22545:13;:22;22559:7;22545:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;22602:7;22590:20;;;;;;;;;;;;22332:286:::0;:::o;17980:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;355:98::-;408:7;435:10;428:17;;355:98;:::o;8358:381::-;8511:1;8494:19;;:5;:19;;;8486:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8592:1;8573:21;;:7;:21;;;8565:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8677:6;8647:11;:18;8659:5;8647:18;;;;;;;;;;;;;;;:27;8666:7;8647:27;;;;;;;;;;;;;;;:36;;;;8715:7;8699:32;;8708:5;8699:32;;;8724:6;8699:32;;;;;;:::i;:::-;;;;;;;;8358:381;;;:::o;25221:3193::-;25369:1;25353:18;;:4;:18;;;25345:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25446:1;25432:16;;:2;:16;;;25424:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25508:13;:25;25522:10;25508:25;;;;;;;;;;;;;;;;;;;;;;;;;25507:26;25499:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25594:1;25584:6;:11;25581:92;;25612:28;25628:4;25634:2;25638:1;25612:15;:28::i;:::-;25655:7;;25581:92;25689:11;;;;;;;;;;;25686:1083;;;25746:7;:5;:7::i;:::-;25738:15;;:4;:15;;;;:49;;;;;25780:7;:5;:7::i;:::-;25774:13;;:2;:13;;;;25738:49;:86;;;;;25822:1;25808:16;;:2;:16;;;;25738:86;:128;;;;;25859:6;25845:21;;:2;:21;;;;25738:128;:160;;;;;25888:10;;;;;;;;;;;25887:11;25738:160;25716:1042;;;25982:25;:31;26008:4;25982:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26018:31;:35;26050:2;26018:35;;;;;;;;;;;;;;;;;;;;;;;;;26017:36;25982:71;25978:765;;;26100:14;;26090:6;:24;;26082:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;26233:16;;26216:13;26226:2;26216:9;:13::i;:::-;26207:6;:22;;;;:::i;:::-;:42;;26199:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25978:765;;;26352:25;:29;26378:2;26352:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26386:31;:37;26418:4;26386:37;;;;;;;;;;;;;;;;;;;;;;;;;26385:38;26352:71;26348:395;;;26470:14;;26460:6;:24;;26452:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;26348:395;;;26590:31;:35;26622:2;26590:35;;;;;;;;;;;;;;;;;;;;;;;;;26586:157;;26683:16;;26666:13;26676:2;26666:9;:13::i;:::-;26657:6;:22;;;;:::i;:::-;:42;;26649:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26586:157;26348:395;25978:765;25716:1042;25686:1083;26782:28;26813:24;26831:4;26813:9;:24::i;:::-;26782:55;;26851:12;26890:20;;26866;:44;;26851:59;;26942:7;:35;;;;;26967:10;;;;;;;;;;;26966:11;26942:35;:84;;;;;26995:25;:31;27021:4;26995:31;;;;;;;;;;;;;;;;;;;;;;;;;26994:32;26942:84;:127;;;;;27044:19;:25;27064:4;27044:25;;;;;;;;;;;;;;;;;;;;;;;;;27043:26;26942:127;:168;;;;;27087:19;:23;27107:2;27087:23;;;;;;;;;;;;;;;;;;;;;;;;;27086:24;26942:168;26924:306;;;27150:4;27137:10;;:17;;;;;;;;;;;;;;;;;;27172:10;:8;:10::i;:::-;27213:5;27200:10;;:18;;;;;;;;;;;;;;;;;;26924:306;27243:12;27259:10;;;;;;;;;;;27258:11;27243:26;;27371:19;:25;27391:4;27371:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27400:19;:23;27420:2;27400:23;;;;;;;;;;;;;;;;;;;;;;;;;27371:52;27368:99;;;27450:5;27440:15;;27368:99;27480:12;27584:7;27581:779;;;27635:25;:29;27661:2;27635:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;27683:1;27668:12;;:16;27635:49;27631:576;;;27711:33;27740:3;27711:24;27722:12;;27711:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27704:40;;27805:12;;27792:10;;27785:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;27763:18;;:54;;;;;;;:::i;:::-;;;;;;;;27872:12;;27859:10;;27852:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;27836:12;;:48;;;;;;;:::i;:::-;;;;;;;;27631:576;;;27945:25;:31;27971:4;27945:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27994:1;27980:11;;:15;27945:50;27942:265;;;28023:32;28051:3;28023:23;28034:11;;28023:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;28016:39;;28115:11;;28103:9;;28096:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;28074:18;;:52;;;;;;;:::i;:::-;;;;;;;;28180:11;;28168:9;;28161:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;28145:12;;:46;;;;;;;:::i;:::-;;;;;;;;27942:265;27631:576;28234:1;28227:4;:8;28224:93;;;28259:42;28275:4;28289;28296;28259:15;:42::i;:::-;28224:93;28344:4;28334:14;;;;;:::i;:::-;;;27581:779;28373:33;28389:4;28395:2;28399:6;28373:15;:33::i;:::-;25334:3080;;;;25221:3193;;;;:::o;9246:193::-;9332:7;9365:1;9360;:6;;9368:12;9352:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9392:9;9408:1;9404;:5;;;;:::i;:::-;9392:17;;9430:1;9423:8;;;9246:193;;;;;:::o;24717:189::-;24834:5;24800:25;:31;24826:4;24800:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24892:5;24858:40;;24886:4;24858:40;;;;;;;;;;;;24717:189;;:::o;8912:182::-;8970:7;8990:9;9006:1;9002;:5;;;;:::i;:::-;8990:17;;9031:1;9026;:6;;9018:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9085:1;9078:8;;;8912:182;;;;:::o;6959:575::-;7117:1;7099:20;;:6;:20;;;7091:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7201:1;7180:23;;:9;:23;;;7172:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7257:47;7278:6;7286:9;7297:6;7257:20;:47::i;:::-;7338:71;7360:6;7338:71;;;;;;;;;;;;;;;;;:9;:17;7348:6;7338:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7318:9;:17;7328:6;7318:17;;;;;;;;;;;;;;;:91;;;;7443:32;7468:6;7443:9;:20;7453:9;7443:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7420:9;:20;7430:9;7420:20;;;;;;;;;;;;;;;:55;;;;7508:9;7491:35;;7500:6;7491:35;;;7519:6;7491:35;;;;;;:::i;:::-;;;;;;;;6959:575;;;:::o;29558:1477::-;29597:23;29623:24;29641:4;29623:9;:24::i;:::-;29597:50;;29658:25;29707:12;;29686:18;;:33;;;;:::i;:::-;29658:61;;29730:12;29778:1;29759:15;:20;:46;;;;29804:1;29783:17;:22;29759:46;29756:60;;;29808:7;;;;;29756:60;29853:5;29832:26;;:17;;;;;;;;;;;:26;;;29829:254;;29918:2;29895:20;;:25;;;;:::i;:::-;29877:15;:43;29874:125;;;29981:2;29958:20;;:25;;;;:::i;:::-;29940:43;;29874:125;29829:254;;;30047:24;30065:4;30047:9;:24::i;:::-;30029:42;;29829:254;30155:23;30240:1;30220:17;30199:18;;30181:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;30155:86;;30252:26;30281:36;30301:15;30281;:19;;:36;;;;:::i;:::-;30252:65;;30331:25;30359:21;30331:49;;30394:36;30411:18;30394:16;:36::i;:::-;30445:18;30466:44;30492:17;30466:21;:25;;:44;;;;:::i;:::-;30445:65;;30524:17;30544:51;30577:17;30544:28;30559:12;;30544:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;30524:71;;30606:23;30645:9;30632:10;:22;;;;:::i;:::-;30606:48;;30692:1;30671:18;:22;;;;30719:1;30704:12;:16;;;;30755:1;30737:15;:19;:42;;;;;30778:1;30760:15;:19;30737:42;30734:210;;;30795:46;30808:15;30825;30795:12;:46::i;:::-;30861:71;30876:18;30896:15;30913:18;;30861:71;;;;;;;;:::i;:::-;;;;;;;;30734:210;30978:9;;;;;;;;;;;30970:23;;31001:21;30970:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30957:70;;;;;29586:1449;;;;;;;;;29558:1477;:::o;9447:254::-;9505:7;9536:1;9531;:6;9527:47;;9561:1;9554:8;;;;9527:47;9587:9;9603:1;9599;:5;;;;:::i;:::-;9587:17;;9632:1;9627;9623;:5;;;;:::i;:::-;:10;9615:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9692:1;9685:8;;;9447:254;;;;;:::o;9709:132::-;9767:7;9794:39;9798:1;9801;9794:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9787:46;;9709:132;;;;:::o;8747:125::-;;;;:::o;9102:136::-;9160:7;9187:43;9191:1;9194;9187:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9180:50;;9102:136;;;;:::o;28423:597::-;28552:21;28590:1;28576:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28552:40;;28621:4;28603;28608:1;28603:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28647:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28637:4;28642:1;28637:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28683:62;28700:4;28715:15;;;;;;;;;;;28733:11;28683:8;:62::i;:::-;28785:15;;;;;;;;;;;:66;;;28866:11;28892:1;28936:4;28963;28983:15;28785:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28478:542;28423:597;:::o;29029:520::-;29177:62;29194:4;29209:15;;;;;;;;;;;29227:11;29177:8;:62::i;:::-;29283:15;;;;;;;;;;;:31;;;29322:9;29355:4;29375:11;29401:1;29444;29495:4;29515:15;29283:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29029:520;;:::o;9849:279::-;9935:7;9967:1;9963;:5;9970:12;9955:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9994:9;10010:1;10006;:5;;;;:::i;:::-;9994:17;;10119:1;10112:8;;;9849: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:323::-;6835:6;6884:2;6872:9;6863:7;6859:23;6855:32;6852:119;;;6890:79;;:::i;:::-;6852:119;7010:1;7035:50;7077:7;7068:6;7057:9;7053:22;7035:50;:::i;:::-;7025:60;;6981:114;6779:323;;;;:::o;7108:468::-;7173:6;7181;7230:2;7218:9;7209:7;7205:23;7201:32;7198:119;;;7236:79;;:::i;:::-;7198:119;7356:1;7381:53;7426:7;7417:6;7406:9;7402:22;7381:53;:::i;:::-;7371:63;;7327:117;7483:2;7509:50;7551:7;7542:6;7531:9;7527:22;7509:50;:::i;:::-;7499:60;;7454:115;7108:468;;;;;:::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:143::-;10387:5;10418:6;10412:13;10403:22;;10434:33;10461:5;10434:33;:::i;:::-;10330:143;;;;:::o;10479:351::-;10549:6;10598:2;10586:9;10577:7;10573:23;10569:32;10566:119;;;10604:79;;:::i;:::-;10566:119;10724:1;10749:64;10805:7;10796:6;10785:9;10781:22;10749:64;:::i;:::-;10739:74;;10695:128;10479:351;;;;:::o;10836:332::-;10957:4;10995:2;10984:9;10980:18;10972:26;;11008:71;11076:1;11065:9;11061:17;11052:6;11008:71;:::i;:::-;11089:72;11157:2;11146:9;11142:18;11133:6;11089:72;:::i;:::-;10836:332;;;;;:::o;11174:180::-;11222:77;11219:1;11212:88;11319:4;11316:1;11309:15;11343:4;11340:1;11333:15;11360:410;11400:7;11423:20;11441:1;11423:20;:::i;:::-;11418:25;;11457:20;11475:1;11457:20;:::i;:::-;11452:25;;11512:1;11509;11505:9;11534:30;11552:11;11534:30;:::i;:::-;11523:41;;11713:1;11704:7;11700:15;11697:1;11694:22;11674:1;11667:9;11647:83;11624:139;;11743:18;;:::i;:::-;11624:139;11408:362;11360:410;;;;:::o;11776:180::-;11824:77;11821:1;11814:88;11921:4;11918:1;11911:15;11945:4;11942:1;11935:15;11962:185;12002:1;12019:20;12037:1;12019:20;:::i;:::-;12014:25;;12053:20;12071:1;12053:20;:::i;:::-;12048:25;;12092:1;12082:35;;12097:18;;:::i;:::-;12082:35;12139:1;12136;12132:9;12127:14;;11962:185;;;;:::o;12153:85::-;12198:7;12227:5;12216:16;;12153:85;;;:::o;12244:158::-;12302:9;12335:61;12353:42;12362:32;12388:5;12362:32;:::i;:::-;12353:42;:::i;:::-;12335:61;:::i;:::-;12322:74;;12244:158;;;:::o;12408:147::-;12503:45;12542:5;12503:45;:::i;:::-;12498:3;12491:58;12408:147;;:::o;12561:807::-;12810:4;12848:3;12837:9;12833:19;12825:27;;12862:71;12930:1;12919:9;12915:17;12906:6;12862:71;:::i;:::-;12943:72;13011:2;13000:9;12996:18;12987:6;12943:72;:::i;:::-;13025:80;13101:2;13090:9;13086:18;13077:6;13025:80;:::i;:::-;13115;13191:2;13180:9;13176:18;13167:6;13115:80;:::i;:::-;13205:73;13273:3;13262:9;13258:19;13249:6;13205:73;:::i;:::-;13288;13356:3;13345:9;13341:19;13332:6;13288:73;:::i;:::-;12561:807;;;;;;;;;:::o;13374:143::-;13431:5;13462:6;13456:13;13447:22;;13478:33;13505:5;13478:33;:::i;:::-;13374:143;;;;:::o;13523:663::-;13611:6;13619;13627;13676:2;13664:9;13655:7;13651:23;13647:32;13644:119;;;13682:79;;:::i;:::-;13644:119;13802:1;13827:64;13883:7;13874:6;13863:9;13859:22;13827:64;:::i;:::-;13817:74;;13773:128;13940:2;13966:64;14022:7;14013:6;14002:9;13998:22;13966:64;:::i;:::-;13956:74;;13911:129;14079:2;14105:64;14161:7;14152:6;14141:9;14137:22;14105:64;:::i;:::-;14095:74;;14050:129;13523:663;;;;;:::o;14192:165::-;14332:17;14328:1;14320:6;14316:14;14309:41;14192:165;:::o;14363:366::-;14505:3;14526:67;14590:2;14585:3;14526:67;:::i;:::-;14519:74;;14602:93;14691:3;14602:93;:::i;:::-;14720:2;14715:3;14711:12;14704:19;;14363:366;;;:::o;14735:419::-;14901:4;14939:2;14928:9;14924:18;14916:26;;14988:9;14982:4;14978:20;14974:1;14963:9;14959:17;14952:47;15016:131;15142:4;15016:131;:::i;:::-;15008:139;;14735:419;;;:::o;15160:176::-;15300:28;15296:1;15288:6;15284:14;15277:52;15160:176;:::o;15342:366::-;15484:3;15505:67;15569:2;15564:3;15505:67;:::i;:::-;15498:74;;15581:93;15670:3;15581:93;:::i;:::-;15699:2;15694:3;15690:12;15683:19;;15342:366;;;:::o;15714:419::-;15880:4;15918:2;15907:9;15903:18;15895:26;;15967:9;15961:4;15957:20;15953:1;15942:9;15938:17;15931:47;15995:131;16121:4;15995:131;:::i;:::-;15987:139;;15714:419;;;:::o;16139:221::-;16279:34;16275:1;16267:6;16263:14;16256:58;16348:4;16343:2;16335:6;16331:15;16324:29;16139:221;:::o;16366:366::-;16508:3;16529:67;16593:2;16588:3;16529:67;:::i;:::-;16522:74;;16605:93;16694:3;16605:93;:::i;:::-;16723:2;16718:3;16714:12;16707:19;;16366:366;;;:::o;16738:419::-;16904:4;16942:2;16931:9;16927:18;16919:26;;16991:9;16985:4;16981:20;16977:1;16966:9;16962:17;16955:47;17019:131;17145:4;17019:131;:::i;:::-;17011:139;;16738:419;;;:::o;17163:147::-;17264:11;17301:3;17286:18;;17163:147;;;;:::o;17316:114::-;;:::o;17436:398::-;17595:3;17616:83;17697:1;17692:3;17616:83;:::i;:::-;17609:90;;17708:93;17797:3;17708:93;:::i;:::-;17826:1;17821:3;17817:11;17810:18;;17436:398;;;:::o;17840:379::-;18024:3;18046:147;18189:3;18046:147;:::i;:::-;18039:154;;18210:3;18203:10;;17840:379;;;:::o;18225:177::-;18365:29;18361:1;18353:6;18349:14;18342:53;18225:177;:::o;18408:366::-;18550:3;18571:67;18635:2;18630:3;18571:67;:::i;:::-;18564:74;;18647:93;18736:3;18647:93;:::i;:::-;18765:2;18760:3;18756:12;18749:19;;18408:366;;;:::o;18780:419::-;18946:4;18984:2;18973:9;18969:18;18961:26;;19033:9;19027:4;19023:20;19019:1;19008:9;19004:17;18997:47;19061:131;19187:4;19061:131;:::i;:::-;19053:139;;18780:419;;;:::o;19205:244::-;19345:34;19341:1;19333:6;19329:14;19322:58;19414:27;19409:2;19401:6;19397:15;19390:52;19205:244;:::o;19455:366::-;19597:3;19618:67;19682:2;19677:3;19618:67;:::i;:::-;19611:74;;19694:93;19783:3;19694:93;:::i;:::-;19812:2;19807:3;19803:12;19796:19;;19455:366;;;:::o;19827:419::-;19993:4;20031:2;20020:9;20016:18;20008:26;;20080:9;20074:4;20070:20;20066:1;20055:9;20051:17;20044:47;20108:131;20234:4;20108:131;:::i;:::-;20100:139;;19827:419;;;:::o;20252:223::-;20392:34;20388:1;20380:6;20376:14;20369:58;20461:6;20456:2;20448:6;20444:15;20437:31;20252:223;:::o;20481:366::-;20623:3;20644:67;20708:2;20703:3;20644:67;:::i;:::-;20637:74;;20720:93;20809:3;20720:93;:::i;:::-;20838:2;20833:3;20829:12;20822:19;;20481:366;;;:::o;20853:419::-;21019:4;21057:2;21046:9;21042:18;21034:26;;21106:9;21100:4;21096:20;21092:1;21081:9;21077:17;21070:47;21134:131;21260:4;21134:131;:::i;:::-;21126:139;;20853:419;;;:::o;21278:191::-;21318:3;21337:20;21355:1;21337:20;:::i;:::-;21332:25;;21371:20;21389:1;21371:20;:::i;:::-;21366:25;;21414:1;21411;21407:9;21400:16;;21435:3;21432:1;21429:10;21426:36;;;21442:18;;:::i;:::-;21426:36;21278:191;;;;:::o;21475:180::-;21615:32;21611:1;21603:6;21599:14;21592:56;21475:180;:::o;21661:366::-;21803:3;21824:67;21888:2;21883:3;21824:67;:::i;:::-;21817:74;;21900:93;21989:3;21900:93;:::i;:::-;22018:2;22013:3;22009:12;22002:19;;21661:366;;;:::o;22033:419::-;22199:4;22237:2;22226:9;22222:18;22214:26;;22286:9;22280:4;22276:20;22272:1;22261:9;22257:17;22250:47;22314:131;22440:4;22314:131;:::i;:::-;22306:139;;22033:419;;;:::o;22458:223::-;22598:34;22594:1;22586:6;22582:14;22575:58;22667:6;22662:2;22654:6;22650:15;22643:31;22458:223;:::o;22687:366::-;22829:3;22850:67;22914:2;22909:3;22850:67;:::i;:::-;22843:74;;22926:93;23015:3;22926:93;:::i;:::-;23044:2;23039:3;23035:12;23028:19;;22687:366;;;:::o;23059:419::-;23225:4;23263:2;23252:9;23248:18;23240:26;;23312:9;23306:4;23302:20;23298:1;23287:9;23283:17;23276:47;23340:131;23466:4;23340:131;:::i;:::-;23332:139;;23059:419;;;:::o;23484:221::-;23624:34;23620:1;23612:6;23608:14;23601:58;23693:4;23688:2;23680:6;23676:15;23669:29;23484:221;:::o;23711:366::-;23853:3;23874:67;23938:2;23933:3;23874:67;:::i;:::-;23867:74;;23950:93;24039:3;23950:93;:::i;:::-;24068:2;24063:3;24059:12;24052:19;;23711:366;;;:::o;24083:419::-;24249:4;24287:2;24276:9;24272:18;24264:26;;24336:9;24330:4;24326:20;24322:1;24311:9;24307:17;24300:47;24364:131;24490:4;24364:131;:::i;:::-;24356:139;;24083:419;;;:::o;24508:224::-;24648:34;24644:1;24636:6;24632:14;24625:58;24717:7;24712:2;24704:6;24700:15;24693:32;24508:224;:::o;24738:366::-;24880:3;24901:67;24965:2;24960:3;24901:67;:::i;:::-;24894:74;;24977:93;25066:3;24977:93;:::i;:::-;25095:2;25090:3;25086:12;25079:19;;24738:366;;;:::o;25110:419::-;25276:4;25314:2;25303:9;25299:18;25291:26;;25363:9;25357:4;25353:20;25349:1;25338:9;25334:17;25327:47;25391:131;25517:4;25391:131;:::i;:::-;25383:139;;25110:419;;;:::o;25535:222::-;25675:34;25671:1;25663:6;25659:14;25652:58;25744:5;25739:2;25731:6;25727:15;25720:30;25535:222;:::o;25763:366::-;25905:3;25926:67;25990:2;25985:3;25926:67;:::i;:::-;25919:74;;26002:93;26091:3;26002:93;:::i;:::-;26120:2;26115:3;26111:12;26104:19;;25763:366;;;:::o;26135:419::-;26301:4;26339:2;26328:9;26324:18;26316:26;;26388:9;26382:4;26378:20;26374:1;26363:9;26359:17;26352:47;26416:131;26542:4;26416:131;:::i;:::-;26408:139;;26135:419;;;:::o;26560:171::-;26700:23;26696:1;26688:6;26684:14;26677:47;26560:171;:::o;26737:366::-;26879:3;26900:67;26964:2;26959:3;26900:67;:::i;:::-;26893:74;;26976:93;27065:3;26976:93;:::i;:::-;27094:2;27089:3;27085:12;27078:19;;26737:366;;;:::o;27109:419::-;27275:4;27313:2;27302:9;27298:18;27290:26;;27362:9;27356:4;27352:20;27348:1;27337:9;27333:17;27326:47;27390:131;27516:4;27390:131;:::i;:::-;27382:139;;27109:419;;;:::o;27534:240::-;27674:34;27670:1;27662:6;27658:14;27651:58;27743:23;27738:2;27730:6;27726:15;27719:48;27534:240;:::o;27780:366::-;27922:3;27943:67;28007:2;28002:3;27943:67;:::i;:::-;27936:74;;28019:93;28108:3;28019:93;:::i;:::-;28137:2;28132:3;28128:12;28121:19;;27780:366;;;:::o;28152:419::-;28318:4;28356:2;28345:9;28341:18;28333:26;;28405:9;28399:4;28395:20;28391:1;28380:9;28376:17;28369:47;28433:131;28559:4;28433:131;:::i;:::-;28425:139;;28152:419;;;:::o;28577:169::-;28717:21;28713:1;28705:6;28701:14;28694:45;28577:169;:::o;28752:366::-;28894:3;28915:67;28979:2;28974:3;28915:67;:::i;:::-;28908:74;;28991:93;29080:3;28991:93;:::i;:::-;29109:2;29104:3;29100:12;29093:19;;28752:366;;;:::o;29124:419::-;29290:4;29328:2;29317:9;29313:18;29305:26;;29377:9;29371:4;29367:20;29363:1;29352:9;29348:17;29341:47;29405:131;29531:4;29405:131;:::i;:::-;29397:139;;29124:419;;;:::o;29549:241::-;29689:34;29685:1;29677:6;29673:14;29666:58;29758:24;29753:2;29745:6;29741:15;29734:49;29549:241;:::o;29796:366::-;29938:3;29959:67;30023:2;30018:3;29959:67;:::i;:::-;29952:74;;30035:93;30124:3;30035:93;:::i;:::-;30153:2;30148:3;30144:12;30137:19;;29796:366;;;:::o;30168:419::-;30334:4;30372:2;30361:9;30357:18;30349:26;;30421:9;30415:4;30411:20;30407:1;30396:9;30392:17;30385:47;30449:131;30575:4;30449:131;:::i;:::-;30441:139;;30168:419;;;:::o;30593:194::-;30633:4;30653:20;30671:1;30653:20;:::i;:::-;30648:25;;30687:20;30705:1;30687:20;:::i;:::-;30682:25;;30731:1;30728;30724:9;30716:17;;30755:1;30749:4;30746:11;30743:37;;;30760:18;;:::i;:::-;30743:37;30593:194;;;;:::o;30793:177::-;30933:29;30929:1;30921:6;30917:14;30910:53;30793:177;:::o;30976:366::-;31118:3;31139:67;31203:2;31198:3;31139:67;:::i;:::-;31132:74;;31215:93;31304:3;31215:93;:::i;:::-;31333:2;31328:3;31324:12;31317:19;;30976:366;;;:::o;31348:419::-;31514:4;31552:2;31541:9;31537:18;31529:26;;31601:9;31595:4;31591:20;31587:1;31576:9;31572:17;31565:47;31629:131;31755:4;31629:131;:::i;:::-;31621:139;;31348:419;;;:::o;31773:442::-;31922:4;31960:2;31949:9;31945:18;31937:26;;31973:71;32041:1;32030:9;32026:17;32017:6;31973:71;:::i;:::-;32054:72;32122:2;32111:9;32107:18;32098:6;32054:72;:::i;:::-;32136;32204:2;32193:9;32189:18;32180:6;32136:72;:::i;:::-;31773:442;;;;;;:::o;32221:220::-;32361:34;32357:1;32349:6;32345:14;32338:58;32430:3;32425:2;32417:6;32413:15;32406:28;32221:220;:::o;32447:366::-;32589:3;32610:67;32674:2;32669:3;32610:67;:::i;:::-;32603:74;;32686:93;32775:3;32686:93;:::i;:::-;32804:2;32799:3;32795:12;32788:19;;32447:366;;;:::o;32819:419::-;32985:4;33023:2;33012:9;33008:18;33000:26;;33072:9;33066:4;33062:20;33058:1;33047:9;33043:17;33036:47;33100:131;33226:4;33100:131;:::i;:::-;33092:139;;32819:419;;;:::o;33244:180::-;33292:77;33289:1;33282:88;33389:4;33386:1;33379:15;33413:4;33410:1;33403:15;33430:180;33478:77;33475:1;33468:88;33575:4;33572:1;33565:15;33599:4;33596:1;33589:15;33616:114;33683:6;33717:5;33711:12;33701:22;;33616:114;;;:::o;33736:184::-;33835:11;33869:6;33864:3;33857:19;33909:4;33904:3;33900:14;33885:29;;33736:184;;;;:::o;33926:132::-;33993:4;34016:3;34008:11;;34046:4;34041:3;34037:14;34029:22;;33926:132;;;:::o;34064:108::-;34141:24;34159:5;34141:24;:::i;:::-;34136:3;34129:37;34064:108;;:::o;34178:179::-;34247:10;34268:46;34310:3;34302:6;34268:46;:::i;:::-;34346:4;34341:3;34337:14;34323:28;;34178:179;;;;:::o;34363:113::-;34433:4;34465;34460:3;34456:14;34448:22;;34363:113;;;:::o;34512:732::-;34631:3;34660:54;34708:5;34660:54;:::i;:::-;34730:86;34809:6;34804:3;34730:86;:::i;:::-;34723:93;;34840:56;34890:5;34840:56;:::i;:::-;34919:7;34950:1;34935:284;34960:6;34957:1;34954:13;34935:284;;;35036:6;35030:13;35063:63;35122:3;35107:13;35063:63;:::i;:::-;35056:70;;35149:60;35202:6;35149:60;:::i;:::-;35139:70;;34995:224;34982:1;34979;34975:9;34970:14;;34935:284;;;34939:14;35235:3;35228:10;;34636:608;;;34512:732;;;;:::o;35250:831::-;35513:4;35551:3;35540:9;35536:19;35528:27;;35565:71;35633:1;35622:9;35618:17;35609:6;35565:71;:::i;:::-;35646:80;35722:2;35711:9;35707:18;35698:6;35646:80;:::i;:::-;35773:9;35767:4;35763:20;35758:2;35747:9;35743:18;35736:48;35801:108;35904:4;35895:6;35801:108;:::i;:::-;35793:116;;35919:72;35987:2;35976:9;35972:18;35963:6;35919:72;:::i;:::-;36001:73;36069:3;36058:9;36054:19;36045:6;36001:73;:::i;:::-;35250:831;;;;;;;;:::o

Swarm Source

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