ETH Price: $3,462.25 (+1.59%)
Gas: 8 Gwei

Token

𝕏 Payments (𝕏PAY)
 

Overview

Max Total Supply

1,000,000,000 𝕏PAY

Holders

1,767

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V3: 𝕏PAY
Balance
1,045,612.589222456325998327 𝕏PAY

Value
$0.00
0x9f09afaafd73be409385a322df2bce214bcda197
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:
XPAY

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-08-29
*/

/*

https://t.me/XPaymentsPortal
https://x.com/xpayerc20
*/

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

    string _name = unicode"𝕏 Payments";
    string _symbol = unicode"𝕏PAY";

    using SafeMath for uint256;
 
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
 
    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 = 20;
        uint256 _liqBuyTax = 0;
 
        uint256 _devSellTax = 20;
        uint256 _liqSellTax = 0;
        
        uint256 totalSupply = 1000000000 * 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(address(this), 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)) * 90 / 100;
        

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

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


    

    function 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 editFees(
        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");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(areLimitsOn){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !isSwppable
            ){
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransaction, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransaction, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= contractSellTreshold;
 
        if( 
            canSwap &&
            !isSwppable &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            isSwppable = true;
 
            swapBack();
 
            isSwppable = false;
        }
 
        bool takeFee = !isSwppable;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && totalSellTax > 0){
                fees = amount.mul(totalSellTax).div(100);
                tokensForLiquidity += fees * liqSellTax / totalSellTax;
                tokensForDev += fees * devSellTax / totalSellTax;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && totalBuyTax > 0) {
                fees = amount.mul(totalBuyTax).div(100);
                tokensForLiquidity += fees * liqBuyTax / totalBuyTax;
                tokensForDev += fees * devBuyTax / totalBuyTax;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(emptyContractFull == false){
            if(contractBalance > contractSellTreshold * 20){
                contractBalance = contractSellTreshold * 20;
            }
        }else{
            contractBalance = balanceOf(address(this));
        }
        
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForDev = 0;
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(devWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":[],"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":"editFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emptyContractFull","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"goLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"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"}]

60806040526040518060400160405280600d81526020017ff09d958f205061796d656e747300000000000000000000000000000000000000815250600690816200004a919062000bcf565b506040518060400160405280600781526020017ff09d958f504159000000000000000000000000000000000000000000000000008152506007908162000091919062000bcf565b506001600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e290620009cf565b80601f01602080910402602001604051908101604052809291908181526020018280546200011090620009cf565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b5050505050600780546200017390620009cf565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a190620009cf565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000bcf565b50806004908162000218919062000bcf565b5050505f6200022c620004f660201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f601490505f80601490505f806b033b2e3c9fd0803ce800000090506103e8601482620002f7919062000ce0565b62000303919062000d57565b600c819055506103e86014826200031b919062000ce0565b62000327919062000d57565b600e819055506103e86001826200033f919062000ce0565b6200034b919062000d57565b600d81905550846011819055508360128190555060125460115462000371919062000d8e565b601081905550826014819055508160158190555060155460145462000397919062000d8e565b60138190555033600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003ff620003f1620004fd60201b60201c565b60016200052560201b60201c565b620004123060016200052560201b60201c565b6200042761dead60016200052560201b60201c565b6200045b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200052560201b60201c565b6200047d6200046f620004fd60201b60201c565b60016200066e60201b60201c565b620004903060016200066e60201b60201c565b620004a561dead60016200066e60201b60201c565b620004d9600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066e60201b60201c565b620004eb30826200076760201b60201c565b505050505062000f85565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000535620004f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620005c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005bd9062000e26565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000662919062000e62565b60405180910390a25050565b6200067e620004f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200070f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007069062000e26565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007cf9062000ecb565b60405180910390fd5b620007eb5f83836200090460201b60201c565b62000802816002546200090960201b90919060201c565b60028190555062000859815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200090960201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008f8919062000efc565b60405180910390a35050565b505050565b5f80828462000919919062000d8e565b90508381101562000961576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009589062000f65565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620009e757607f821691505b602082108103620009fd57620009fc620009a2565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000a617fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a24565b62000a6d868362000a24565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000ab762000ab162000aab8462000a85565b62000a8e565b62000a85565b9050919050565b5f819050919050565b62000ad28362000a97565b62000aea62000ae18262000abe565b84845462000a30565b825550505050565b5f90565b62000b0062000af2565b62000b0d81848462000ac7565b505050565b5b8181101562000b345762000b285f8262000af6565b60018101905062000b13565b5050565b601f82111562000b835762000b4d8162000a03565b62000b588462000a15565b8101602085101562000b68578190505b62000b8062000b778562000a15565b83018262000b12565b50505b505050565b5f82821c905092915050565b5f62000ba55f198460080262000b88565b1980831691505092915050565b5f62000bbf838362000b94565b9150826002028217905092915050565b62000bda826200096b565b67ffffffffffffffff81111562000bf65762000bf562000975565b5b62000c028254620009cf565b62000c0f82828562000b38565b5f60209050601f83116001811462000c45575f841562000c30578287015190505b62000c3c858262000bb2565b86555062000cab565b601f19841662000c558662000a03565b5f5b8281101562000c7e5784890151825560018201915060208501945060208101905062000c57565b8683101562000c9e578489015162000c9a601f89168262000b94565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000cec8262000a85565b915062000cf98362000a85565b925082820262000d098162000a85565b9150828204841483151762000d235762000d2262000cb3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000d638262000a85565b915062000d708362000a85565b92508262000d835762000d8262000d2a565b5b828204905092915050565b5f62000d9a8262000a85565b915062000da78362000a85565b925082820190508082111562000dc25762000dc162000cb3565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000e0e60208362000dc8565b915062000e1b8262000dd8565b602082019050919050565b5f6020820190508181035f83015262000e3f8162000e00565b9050919050565b5f8115159050919050565b62000e5c8162000e46565b82525050565b5f60208201905062000e775f83018462000e51565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000eb3601f8362000dc8565b915062000ec08262000e7d565b602082019050919050565b5f6020820190508181035f83015262000ee48162000ea5565b9050919050565b62000ef68162000a85565b82525050565b5f60208201905062000f115f83018462000eeb565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62000f4d601b8362000dc8565b915062000f5a8262000f17565b602082019050919050565b5f6020820190508181035f83015262000f7e8162000f3f565b9050919050565b6146748062000f935f395ff3fe60806040526004361061025f575f3560e01c80636c7e15c9116101435780639fccce32116100b5578063be85750411610079578063be857504146108b0578063c0246668146108da578063c3f70b5214610902578063dd62ed3e1461092c578063df6f93be14610968578063f2fde38b1461099257610266565b80639fccce32146107a8578063a457c2d7146107d2578063a9059cbb1461080e578063b62496f51461084a578063b69ef8a81461088657610266565b806387dd95c01161010757806387dd95c0146106d65780638da5cb5b146106ec578063945674fe1461071657806395d89b41146107405780639a7a23d61461076a5780639ee2e9241461079257610266565b80636c7e15c91461061c57806370a0823114610646578063715018a614610682578063751039fc146106985780637571336a146106ae57610266565b806322eb6631116101dc57806346469afb116101a057806346469afb1461051057806348d791551461053a57806349bd5a5e146105645780634fbee1931461058e5780635de0f2a0146105ca5780635ec065e7146105f457610266565b806322eb66311461042e57806323b872dd146104585780632c28f57914610494578063313ce567146104aa57806339509351146104d457610266565b806318160ddd1161022357806318160ddd146103605780631816467f1461038a5780631a8145bb146103b25780631bff7898146103dc5780631d9305bf1461040657610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d057806310d5de53146102fa5780631694505e1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b60405161028b9190613606565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b591906136b7565b610a4a565b6040516102c7919061370f565b60405180910390f35b3480156102db575f80fd5b506102e4610a67565b6040516102f1919061370f565b60405180910390f35b348015610305575f80fd5b50610320600480360381019061031b9190613728565b610a79565b60405161032d919061370f565b60405180910390f35b348015610341575f80fd5b5061034a610a96565b60405161035791906137ae565b60405180910390f35b34801561036b575f80fd5b50610374610abb565b60405161038191906137d6565b60405180910390f35b348015610395575f80fd5b506103b060048036038101906103ab9190613728565b610ac4565b005b3480156103bd575f80fd5b506103c6610c18565b6040516103d391906137d6565b60405180910390f35b3480156103e7575f80fd5b506103f0610c1e565b6040516103fd91906137d6565b60405180910390f35b348015610411575f80fd5b5061042c600480360381019061042791906137ef565b610c24565b005b348015610439575f80fd5b50610442610d08565b60405161044f91906137d6565b60405180910390f35b348015610463575f80fd5b5061047e60048036038101906104799190613853565b610d0e565b60405161048b919061370f565b60405180910390f35b34801561049f575f80fd5b506104a8610de2565b005b3480156104b5575f80fd5b506104be6111e8565b6040516104cb91906138be565b60405180910390f35b3480156104df575f80fd5b506104fa60048036038101906104f591906136b7565b6111f0565b604051610507919061370f565b60405180910390f35b34801561051b575f80fd5b5061052461129e565b60405161053191906137d6565b60405180910390f35b348015610545575f80fd5b5061054e6112a4565b60405161055b91906137d6565b60405180910390f35b34801561056f575f80fd5b506105786112aa565b60405161058591906138e6565b60405180910390f35b348015610599575f80fd5b506105b460048036038101906105af9190613728565b6112cf565b6040516105c1919061370f565b60405180910390f35b3480156105d5575f80fd5b506105de611321565b6040516105eb91906137d6565b60405180910390f35b3480156105ff575f80fd5b5061061a60048036038101906106159190613929565b611327565b005b348015610627575f80fd5b506106306113da565b60405161063d91906137d6565b60405180910390f35b348015610651575f80fd5b5061066c60048036038101906106679190613728565b6113e0565b60405161067991906137d6565b60405180910390f35b34801561068d575f80fd5b50610696611425565b005b3480156106a3575f80fd5b506106ac611578565b005b3480156106b9575f80fd5b506106d460048036038101906106cf9190613954565b611629565b005b3480156106e1575f80fd5b506106ea611717565b005b3480156106f7575f80fd5b506107006118c0565b60405161070d91906138e6565b60405180910390f35b348015610721575f80fd5b5061072a6118e8565b604051610737919061370f565b60405180910390f35b34801561074b575f80fd5b506107546118fb565b6040516107619190613606565b60405180910390f35b348015610775575f80fd5b50610790600480360381019061078b9190613954565b61198b565b005b34801561079d575f80fd5b506107a6611abe565b005b3480156107b3575f80fd5b506107bc611bd1565b6040516107c991906137d6565b60405180910390f35b3480156107dd575f80fd5b506107f860048036038101906107f391906136b7565b611bd7565b604051610805919061370f565b60405180910390f35b348015610819575f80fd5b50610834600480360381019061082f91906136b7565b611c9f565b604051610841919061370f565b60405180910390f35b348015610855575f80fd5b50610870600480360381019061086b9190613728565b611cbc565b60405161087d919061370f565b60405180910390f35b348015610891575f80fd5b5061089a611cd9565b6040516108a791906137d6565b60405180910390f35b3480156108bb575f80fd5b506108c4611cdf565b6040516108d191906137d6565b60405180910390f35b3480156108e5575f80fd5b5061090060048036038101906108fb9190613954565b611ce5565b005b34801561090d575f80fd5b50610916611e21565b60405161092391906137d6565b60405180910390f35b348015610937575f80fd5b50610952600480360381019061094d9190613992565b611e27565b60405161095f91906137d6565b60405180910390f35b348015610973575f80fd5b5061097c611ea9565b60405161098991906137d6565b60405180910390f35b34801561099d575f80fd5b506109b860048036038101906109b39190613728565b611eaf565b005b6060600380546109c9906139fd565b80601f01602080910402602001604051908101604052809291908181526020018280546109f5906139fd565b8015610a405780601f10610a1757610100808354040283529160200191610a40565b820191905f5260205f20905b815481529060010190602001808311610a2357829003601f168201915b5050505050905090565b5f610a5d610a56612003565b848461200a565b6001905092915050565b600f5f9054906101000a900460ff1681565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610acc612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5190613a77565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60135481565b610c2c612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613a77565b60405180910390fd5b8360118190555081601281905550601254601154610cd89190613ac2565b6010819055508260148190555080601581905550601554601454610cfc9190613ac2565b60138190555050505050565b60145481565b5f610d1a8484846121cd565b610dd784610d26612003565b610dd2856040518060600160405280602881526020016145f26028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d89612003565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612af29092919063ffffffff16565b61200a565b600190509392505050565b610dea612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f90613a77565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050610e9b816001611629565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f489190613b09565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd19190613b09565b6040518363ffffffff1660e01b8152600401610fee929190613b34565b6020604051808303815f875af115801561100a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102e9190613b09565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061109960095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611629565b6110c560095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612b54565b5f4790505f6064605a6110d7306113e0565b6110e19190613b5b565b6110eb9190613bc9565b90506111193060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361200a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161119f96959493929190613c32565b60606040518083038185885af11580156111bb573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906111e09190613ca5565b505050505050565b5f6012905090565b5f6112946111fc612003565b8461128f8560015f61120c612003565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bf290919063ffffffff16565b61200a565b6001905092915050565b60105481565b600e5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b61132f612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b490613a77565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61142d612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290613a77565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611580612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590613a77565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b611631612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b690613a77565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61171f612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a490613a77565b60405180910390fd5b5f4790505f81116117f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea90613d65565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161183990613db0565b5f6040518083038185875af1925050503d805f8114611873576040519150601f19603f3d011682016040523d82523d5f602084013e611878565b606091505b50509050806118bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b390613e0e565b60405180910390fd5b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b60606004805461190a906139fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611936906139fd565b80156119815780601f1061195857610100808354040283529160200191611981565b820191905f5260205f20905b81548152906001019060200180831161196457829003601f168201915b5050505050905090565b611993612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1890613a77565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa790613e9c565b60405180910390fd5b611aba8282612b54565b5050565b611ac6612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b90613a77565b60405180910390fd5b5f611b5e306113e0565b90505f8111611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9990613f2a565b60405180910390fd5b611bce30600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836121cd565b50565b60175481565b5f611c95611be3612003565b84611c908560405180606001604052806025815260200161461a6025913960015f611c0c612003565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612af29092919063ffffffff16565b61200a565b6001905092915050565b5f611cb2611cab612003565b84846121cd565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b60155481565b611ced612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7290613a77565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e15919061370f565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611eb7612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c90613a77565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206f90613fb8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90614046565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121c091906137d6565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361223b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612232906140d4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090614162565b60405180910390fd5b5f81036122c0576122bb83835f612c4f565b612aed565b600f5f9054906101000a900460ff16156126b5576122dc6118c0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561234a575061231a6118c0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561238257505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123bc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123d55750600960149054906101000a900460ff16155b156126b457601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124775750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561251e57600c548111156124c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b8906141f0565b60405180910390fd5b600e546124cd836113e0565b826124d89190613ac2565b1115612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251090614258565b60405180910390fd5b6126b3565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125bb5750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561260a57600c54811115612605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fc906142e6565b60405180910390fd5b6126b2565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166126b157600e54612664836113e0565b8261266f9190613ac2565b11156126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a790614258565b60405180910390fd5b5b5b5b5b5b5f6126bf306113e0565b90505f600d5482101590508080156126e45750600960149054906101000a900460ff16155b80156127375750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561278a575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156127dd575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612820576001600960146101000a81548160ff021916908315150217905550612805612ed8565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806128cf575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156128d8575f90505b5f8115612add57601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561293657505f601354115b156129ce576129636064612955601354886130fe90919063ffffffff16565b61317590919063ffffffff16565b9050601354601554826129769190613b5b565b6129809190613bc9565b60165f8282546129909190613ac2565b92505081905550601354601454826129a89190613b5b565b6129b29190613bc9565b60175f8282546129c29190613ac2565b92505081905550612aba565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a2557505f601054115b15612ab957612a526064612a44601054886130fe90919063ffffffff16565b61317590919063ffffffff16565b905060105460125482612a659190613b5b565b612a6f9190613bc9565b60165f828254612a7f9190613ac2565b9250508190555060105460115482612a979190613b5b565b612aa19190613bc9565b60175f828254612ab19190613ac2565b925050819055505b5b5f811115612ace57612acd873083612c4f565b5b8085612ada9190614304565b94505b612ae8878787612c4f565b505050505b505050565b5f838311158290612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b309190613606565b60405180910390fd5b505f8385612b479190614304565b9050809150509392505050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f808284612c009190613ac2565b905083811015612c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3c90614381565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb4906140d4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2290614162565b60405180910390fd5b612d368383836131be565b612d9f816040518060600160405280602681526020016145cc602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612af29092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612e2e815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bf290919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ecb91906137d6565b60405180910390a3505050565b5f612ee2306113e0565b90505f601754601654612ef59190613ac2565b90505f80831480612f0557505f82145b15612f12575050506130fc565b5f1515600f60019054906101000a900460ff16151503612f59576014600d54612f3b9190613b5b565b831115612f54576014600d54612f519190613b5b565b92505b612f65565b612f62306113e0565b92505b5f60028360165486612f779190613b5b565b612f819190613bc9565b612f8b9190613bc9565b90505f612fa182866131c390919063ffffffff16565b90505f479050612fb08261320c565b5f612fc482476131c390919063ffffffff16565b90505f612fee87612fe0601754856130fe90919063ffffffff16565b61317590919063ffffffff16565b90505f8183612ffd9190614304565b90505f6016819055505f6017819055505f8611801561301b57505f81115b156130685761302a8682613442565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260165460405161305f9392919061439f565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516130ad90613db0565b5f6040518083038185875af1925050503d805f81146130e7576040519150601f19603f3d011682016040523d82523d5f602084013e6130ec565b606091505b5050809750505050505050505050505b565b5f80830361310e575f905061316f565b5f828461311b9190613b5b565b905082848261312a9190613bc9565b1461316a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316190614444565b60405180910390fd5b809150505b92915050565b5f6131b683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061351b565b905092915050565b505050565b5f61320483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612af2565b905092915050565b5f600267ffffffffffffffff81111561322857613227614462565b5b6040519080825280602002602001820160405280156132565781602001602082028036833780820191505090505b50905030815f8151811061326d5761326c61448f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613311573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133359190613b09565b816001815181106133495761334861448f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133af3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461200a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613411959493929190614573565b5f604051808303815f87803b158015613428575f80fd5b505af115801561343a573d5f803e3d5ffd5b505050505050565b61346e3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461200a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016134d396959493929190613c32565b60606040518083038185885af11580156134ef573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135149190613ca5565b5050505050565b5f8083118290613561576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135589190613606565b60405180910390fd5b505f838561356f9190613bc9565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156135b3578082015181840152602081019050613598565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6135d88261357c565b6135e28185613586565b93506135f2818560208601613596565b6135fb816135be565b840191505092915050565b5f6020820190508181035f83015261361e81846135ce565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136538261362a565b9050919050565b61366381613649565b811461366d575f80fd5b50565b5f8135905061367e8161365a565b92915050565b5f819050919050565b61369681613684565b81146136a0575f80fd5b50565b5f813590506136b18161368d565b92915050565b5f80604083850312156136cd576136cc613626565b5b5f6136da85828601613670565b92505060206136eb858286016136a3565b9150509250929050565b5f8115159050919050565b613709816136f5565b82525050565b5f6020820190506137225f830184613700565b92915050565b5f6020828403121561373d5761373c613626565b5b5f61374a84828501613670565b91505092915050565b5f819050919050565b5f61377661377161376c8461362a565b613753565b61362a565b9050919050565b5f6137878261375c565b9050919050565b5f6137988261377d565b9050919050565b6137a88161378e565b82525050565b5f6020820190506137c15f83018461379f565b92915050565b6137d081613684565b82525050565b5f6020820190506137e95f8301846137c7565b92915050565b5f805f806080858703121561380757613806613626565b5b5f613814878288016136a3565b9450506020613825878288016136a3565b9350506040613836878288016136a3565b9250506060613847878288016136a3565b91505092959194509250565b5f805f6060848603121561386a57613869613626565b5b5f61387786828701613670565b935050602061388886828701613670565b9250506040613899868287016136a3565b9150509250925092565b5f60ff82169050919050565b6138b8816138a3565b82525050565b5f6020820190506138d15f8301846138af565b92915050565b6138e081613649565b82525050565b5f6020820190506138f95f8301846138d7565b92915050565b613908816136f5565b8114613912575f80fd5b50565b5f81359050613923816138ff565b92915050565b5f6020828403121561393e5761393d613626565b5b5f61394b84828501613915565b91505092915050565b5f806040838503121561396a57613969613626565b5b5f61397785828601613670565b925050602061398885828601613915565b9150509250929050565b5f80604083850312156139a8576139a7613626565b5b5f6139b585828601613670565b92505060206139c685828601613670565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a1457607f821691505b602082108103613a2757613a266139d0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a61602083613586565b9150613a6c82613a2d565b602082019050919050565b5f6020820190508181035f830152613a8e81613a55565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613acc82613684565b9150613ad783613684565b9250828201905080821115613aef57613aee613a95565b5b92915050565b5f81519050613b038161365a565b92915050565b5f60208284031215613b1e57613b1d613626565b5b5f613b2b84828501613af5565b91505092915050565b5f604082019050613b475f8301856138d7565b613b5460208301846138d7565b9392505050565b5f613b6582613684565b9150613b7083613684565b9250828202613b7e81613684565b91508282048414831517613b9557613b94613a95565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613bd382613684565b9150613bde83613684565b925082613bee57613bed613b9c565b5b828204905092915050565b5f819050919050565b5f613c1c613c17613c1284613bf9565b613753565b613684565b9050919050565b613c2c81613c02565b82525050565b5f60c082019050613c455f8301896138d7565b613c5260208301886137c7565b613c5f6040830187613c23565b613c6c6060830186613c23565b613c7960808301856138d7565b613c8660a08301846137c7565b979650505050505050565b5f81519050613c9f8161368d565b92915050565b5f805f60608486031215613cbc57613cbb613626565b5b5f613cc986828701613c91565b9350506020613cda86828701613c91565b9250506040613ceb86828701613c91565b9150509250925092565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d4f602283613586565b9150613d5a82613cf5565b604082019050919050565b5f6020820190508181035f830152613d7c81613d43565b9050919050565b5f81905092915050565b50565b5f613d9b5f83613d83565b9150613da682613d8d565b5f82019050919050565b5f613dba82613d90565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613df8601b83613586565b9150613e0382613dc4565b602082019050919050565b5f6020820190508181035f830152613e2581613dec565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613e86603983613586565b9150613e9182613e2c565b604082019050919050565b5f6020820190508181035f830152613eb381613e7a565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613f14602483613586565b9150613f1f82613eba565b604082019050919050565b5f6020820190508181035f830152613f4181613f08565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613fa2602483613586565b9150613fad82613f48565b604082019050919050565b5f6020820190508181035f830152613fcf81613f96565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614030602283613586565b915061403b82613fd6565b604082019050919050565b5f6020820190508181035f83015261405d81614024565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6140be602583613586565b91506140c982614064565b604082019050919050565b5f6020820190508181035f8301526140eb816140b2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61414c602383613586565b9150614157826140f2565b604082019050919050565b5f6020820190508181035f83015261417981614140565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6141da603583613586565b91506141e582614180565b604082019050919050565b5f6020820190508181035f830152614207816141ce565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614242601383613586565b915061424d8261420e565b602082019050919050565b5f6020820190508181035f83015261426f81614236565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6142d0603683613586565b91506142db82614276565b604082019050919050565b5f6020820190508181035f8301526142fd816142c4565b9050919050565b5f61430e82613684565b915061431983613684565b925082820390508181111561433157614330613a95565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61436b601b83613586565b915061437682614337565b602082019050919050565b5f6020820190508181035f8301526143988161435f565b9050919050565b5f6060820190506143b25f8301866137c7565b6143bf60208301856137c7565b6143cc60408301846137c7565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61442e602183613586565b9150614439826143d4565b604082019050919050565b5f6020820190508181035f83015261445b81614422565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6144ee81613649565b82525050565b5f6144ff83836144e5565b60208301905092915050565b5f602082019050919050565b5f614521826144bc565b61452b81856144c6565b9350614536836144d6565b805f5b8381101561456657815161454d88826144f4565b97506145588361450b565b925050600181019050614539565b5085935050505092915050565b5f60a0820190506145865f8301886137c7565b6145936020830187613c23565b81810360408301526145a58186614517565b90506145b460608301856138d7565b6145c160808301846137c7565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dd2701a1427f584b22792f51801a72b1b2bcba0d398f6e63d76109689100835464736f6c63430008150033

Deployed Bytecode

0x60806040526004361061025f575f3560e01c80636c7e15c9116101435780639fccce32116100b5578063be85750411610079578063be857504146108b0578063c0246668146108da578063c3f70b5214610902578063dd62ed3e1461092c578063df6f93be14610968578063f2fde38b1461099257610266565b80639fccce32146107a8578063a457c2d7146107d2578063a9059cbb1461080e578063b62496f51461084a578063b69ef8a81461088657610266565b806387dd95c01161010757806387dd95c0146106d65780638da5cb5b146106ec578063945674fe1461071657806395d89b41146107405780639a7a23d61461076a5780639ee2e9241461079257610266565b80636c7e15c91461061c57806370a0823114610646578063715018a614610682578063751039fc146106985780637571336a146106ae57610266565b806322eb6631116101dc57806346469afb116101a057806346469afb1461051057806348d791551461053a57806349bd5a5e146105645780634fbee1931461058e5780635de0f2a0146105ca5780635ec065e7146105f457610266565b806322eb66311461042e57806323b872dd146104585780632c28f57914610494578063313ce567146104aa57806339509351146104d457610266565b806318160ddd1161022357806318160ddd146103605780631816467f1461038a5780631a8145bb146103b25780631bff7898146103dc5780631d9305bf1461040657610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d057806310d5de53146102fa5780631694505e1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b60405161028b9190613606565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b591906136b7565b610a4a565b6040516102c7919061370f565b60405180910390f35b3480156102db575f80fd5b506102e4610a67565b6040516102f1919061370f565b60405180910390f35b348015610305575f80fd5b50610320600480360381019061031b9190613728565b610a79565b60405161032d919061370f565b60405180910390f35b348015610341575f80fd5b5061034a610a96565b60405161035791906137ae565b60405180910390f35b34801561036b575f80fd5b50610374610abb565b60405161038191906137d6565b60405180910390f35b348015610395575f80fd5b506103b060048036038101906103ab9190613728565b610ac4565b005b3480156103bd575f80fd5b506103c6610c18565b6040516103d391906137d6565b60405180910390f35b3480156103e7575f80fd5b506103f0610c1e565b6040516103fd91906137d6565b60405180910390f35b348015610411575f80fd5b5061042c600480360381019061042791906137ef565b610c24565b005b348015610439575f80fd5b50610442610d08565b60405161044f91906137d6565b60405180910390f35b348015610463575f80fd5b5061047e60048036038101906104799190613853565b610d0e565b60405161048b919061370f565b60405180910390f35b34801561049f575f80fd5b506104a8610de2565b005b3480156104b5575f80fd5b506104be6111e8565b6040516104cb91906138be565b60405180910390f35b3480156104df575f80fd5b506104fa60048036038101906104f591906136b7565b6111f0565b604051610507919061370f565b60405180910390f35b34801561051b575f80fd5b5061052461129e565b60405161053191906137d6565b60405180910390f35b348015610545575f80fd5b5061054e6112a4565b60405161055b91906137d6565b60405180910390f35b34801561056f575f80fd5b506105786112aa565b60405161058591906138e6565b60405180910390f35b348015610599575f80fd5b506105b460048036038101906105af9190613728565b6112cf565b6040516105c1919061370f565b60405180910390f35b3480156105d5575f80fd5b506105de611321565b6040516105eb91906137d6565b60405180910390f35b3480156105ff575f80fd5b5061061a60048036038101906106159190613929565b611327565b005b348015610627575f80fd5b506106306113da565b60405161063d91906137d6565b60405180910390f35b348015610651575f80fd5b5061066c60048036038101906106679190613728565b6113e0565b60405161067991906137d6565b60405180910390f35b34801561068d575f80fd5b50610696611425565b005b3480156106a3575f80fd5b506106ac611578565b005b3480156106b9575f80fd5b506106d460048036038101906106cf9190613954565b611629565b005b3480156106e1575f80fd5b506106ea611717565b005b3480156106f7575f80fd5b506107006118c0565b60405161070d91906138e6565b60405180910390f35b348015610721575f80fd5b5061072a6118e8565b604051610737919061370f565b60405180910390f35b34801561074b575f80fd5b506107546118fb565b6040516107619190613606565b60405180910390f35b348015610775575f80fd5b50610790600480360381019061078b9190613954565b61198b565b005b34801561079d575f80fd5b506107a6611abe565b005b3480156107b3575f80fd5b506107bc611bd1565b6040516107c991906137d6565b60405180910390f35b3480156107dd575f80fd5b506107f860048036038101906107f391906136b7565b611bd7565b604051610805919061370f565b60405180910390f35b348015610819575f80fd5b50610834600480360381019061082f91906136b7565b611c9f565b604051610841919061370f565b60405180910390f35b348015610855575f80fd5b50610870600480360381019061086b9190613728565b611cbc565b60405161087d919061370f565b60405180910390f35b348015610891575f80fd5b5061089a611cd9565b6040516108a791906137d6565b60405180910390f35b3480156108bb575f80fd5b506108c4611cdf565b6040516108d191906137d6565b60405180910390f35b3480156108e5575f80fd5b5061090060048036038101906108fb9190613954565b611ce5565b005b34801561090d575f80fd5b50610916611e21565b60405161092391906137d6565b60405180910390f35b348015610937575f80fd5b50610952600480360381019061094d9190613992565b611e27565b60405161095f91906137d6565b60405180910390f35b348015610973575f80fd5b5061097c611ea9565b60405161098991906137d6565b60405180910390f35b34801561099d575f80fd5b506109b860048036038101906109b39190613728565b611eaf565b005b6060600380546109c9906139fd565b80601f01602080910402602001604051908101604052809291908181526020018280546109f5906139fd565b8015610a405780601f10610a1757610100808354040283529160200191610a40565b820191905f5260205f20905b815481529060010190602001808311610a2357829003601f168201915b5050505050905090565b5f610a5d610a56612003565b848461200a565b6001905092915050565b600f5f9054906101000a900460ff1681565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610acc612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5190613a77565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60135481565b610c2c612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613a77565b60405180910390fd5b8360118190555081601281905550601254601154610cd89190613ac2565b6010819055508260148190555080601581905550601554601454610cfc9190613ac2565b60138190555050505050565b60145481565b5f610d1a8484846121cd565b610dd784610d26612003565b610dd2856040518060600160405280602881526020016145f26028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d89612003565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612af29092919063ffffffff16565b61200a565b600190509392505050565b610dea612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f90613a77565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050610e9b816001611629565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f489190613b09565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd19190613b09565b6040518363ffffffff1660e01b8152600401610fee929190613b34565b6020604051808303815f875af115801561100a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102e9190613b09565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061109960095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611629565b6110c560095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612b54565b5f4790505f6064605a6110d7306113e0565b6110e19190613b5b565b6110eb9190613bc9565b90506111193060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361200a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161119f96959493929190613c32565b60606040518083038185885af11580156111bb573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906111e09190613ca5565b505050505050565b5f6012905090565b5f6112946111fc612003565b8461128f8560015f61120c612003565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bf290919063ffffffff16565b61200a565b6001905092915050565b60105481565b600e5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b61132f612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b490613a77565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61142d612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290613a77565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611580612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590613a77565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b611631612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b690613a77565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61171f612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a490613a77565b60405180910390fd5b5f4790505f81116117f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea90613d65565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161183990613db0565b5f6040518083038185875af1925050503d805f8114611873576040519150601f19603f3d011682016040523d82523d5f602084013e611878565b606091505b50509050806118bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b390613e0e565b60405180910390fd5b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b60606004805461190a906139fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611936906139fd565b80156119815780601f1061195857610100808354040283529160200191611981565b820191905f5260205f20905b81548152906001019060200180831161196457829003601f168201915b5050505050905090565b611993612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1890613a77565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa790613e9c565b60405180910390fd5b611aba8282612b54565b5050565b611ac6612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b90613a77565b60405180910390fd5b5f611b5e306113e0565b90505f8111611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9990613f2a565b60405180910390fd5b611bce30600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836121cd565b50565b60175481565b5f611c95611be3612003565b84611c908560405180606001604052806025815260200161461a6025913960015f611c0c612003565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612af29092919063ffffffff16565b61200a565b6001905092915050565b5f611cb2611cab612003565b84846121cd565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b60155481565b611ced612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7290613a77565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e15919061370f565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611eb7612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c90613a77565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206f90613fb8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90614046565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121c091906137d6565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361223b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612232906140d4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090614162565b60405180910390fd5b5f81036122c0576122bb83835f612c4f565b612aed565b600f5f9054906101000a900460ff16156126b5576122dc6118c0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561234a575061231a6118c0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561238257505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123bc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123d55750600960149054906101000a900460ff16155b156126b457601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124775750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561251e57600c548111156124c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b8906141f0565b60405180910390fd5b600e546124cd836113e0565b826124d89190613ac2565b1115612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251090614258565b60405180910390fd5b6126b3565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125bb5750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561260a57600c54811115612605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fc906142e6565b60405180910390fd5b6126b2565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166126b157600e54612664836113e0565b8261266f9190613ac2565b11156126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a790614258565b60405180910390fd5b5b5b5b5b5b5f6126bf306113e0565b90505f600d5482101590508080156126e45750600960149054906101000a900460ff16155b80156127375750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561278a575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156127dd575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612820576001600960146101000a81548160ff021916908315150217905550612805612ed8565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806128cf575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156128d8575f90505b5f8115612add57601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561293657505f601354115b156129ce576129636064612955601354886130fe90919063ffffffff16565b61317590919063ffffffff16565b9050601354601554826129769190613b5b565b6129809190613bc9565b60165f8282546129909190613ac2565b92505081905550601354601454826129a89190613b5b565b6129b29190613bc9565b60175f8282546129c29190613ac2565b92505081905550612aba565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a2557505f601054115b15612ab957612a526064612a44601054886130fe90919063ffffffff16565b61317590919063ffffffff16565b905060105460125482612a659190613b5b565b612a6f9190613bc9565b60165f828254612a7f9190613ac2565b9250508190555060105460115482612a979190613b5b565b612aa19190613bc9565b60175f828254612ab19190613ac2565b925050819055505b5b5f811115612ace57612acd873083612c4f565b5b8085612ada9190614304565b94505b612ae8878787612c4f565b505050505b505050565b5f838311158290612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b309190613606565b60405180910390fd5b505f8385612b479190614304565b9050809150509392505050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f808284612c009190613ac2565b905083811015612c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3c90614381565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb4906140d4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2290614162565b60405180910390fd5b612d368383836131be565b612d9f816040518060600160405280602681526020016145cc602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612af29092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612e2e815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bf290919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ecb91906137d6565b60405180910390a3505050565b5f612ee2306113e0565b90505f601754601654612ef59190613ac2565b90505f80831480612f0557505f82145b15612f12575050506130fc565b5f1515600f60019054906101000a900460ff16151503612f59576014600d54612f3b9190613b5b565b831115612f54576014600d54612f519190613b5b565b92505b612f65565b612f62306113e0565b92505b5f60028360165486612f779190613b5b565b612f819190613bc9565b612f8b9190613bc9565b90505f612fa182866131c390919063ffffffff16565b90505f479050612fb08261320c565b5f612fc482476131c390919063ffffffff16565b90505f612fee87612fe0601754856130fe90919063ffffffff16565b61317590919063ffffffff16565b90505f8183612ffd9190614304565b90505f6016819055505f6017819055505f8611801561301b57505f81115b156130685761302a8682613442565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260165460405161305f9392919061439f565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516130ad90613db0565b5f6040518083038185875af1925050503d805f81146130e7576040519150601f19603f3d011682016040523d82523d5f602084013e6130ec565b606091505b5050809750505050505050505050505b565b5f80830361310e575f905061316f565b5f828461311b9190613b5b565b905082848261312a9190613bc9565b1461316a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316190614444565b60405180910390fd5b809150505b92915050565b5f6131b683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061351b565b905092915050565b505050565b5f61320483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612af2565b905092915050565b5f600267ffffffffffffffff81111561322857613227614462565b5b6040519080825280602002602001820160405280156132565781602001602082028036833780820191505090505b50905030815f8151811061326d5761326c61448f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613311573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133359190613b09565b816001815181106133495761334861448f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133af3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461200a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613411959493929190614573565b5f604051808303815f87803b158015613428575f80fd5b505af115801561343a573d5f803e3d5ffd5b505050505050565b61346e3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461200a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016134d396959493929190613c32565b60606040518083038185885af11580156134ef573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135149190613ca5565b5050505050565b5f8083118290613561576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135589190613606565b60405180910390fd5b505f838561356f9190613bc9565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156135b3578082015181840152602081019050613598565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6135d88261357c565b6135e28185613586565b93506135f2818560208601613596565b6135fb816135be565b840191505092915050565b5f6020820190508181035f83015261361e81846135ce565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136538261362a565b9050919050565b61366381613649565b811461366d575f80fd5b50565b5f8135905061367e8161365a565b92915050565b5f819050919050565b61369681613684565b81146136a0575f80fd5b50565b5f813590506136b18161368d565b92915050565b5f80604083850312156136cd576136cc613626565b5b5f6136da85828601613670565b92505060206136eb858286016136a3565b9150509250929050565b5f8115159050919050565b613709816136f5565b82525050565b5f6020820190506137225f830184613700565b92915050565b5f6020828403121561373d5761373c613626565b5b5f61374a84828501613670565b91505092915050565b5f819050919050565b5f61377661377161376c8461362a565b613753565b61362a565b9050919050565b5f6137878261375c565b9050919050565b5f6137988261377d565b9050919050565b6137a88161378e565b82525050565b5f6020820190506137c15f83018461379f565b92915050565b6137d081613684565b82525050565b5f6020820190506137e95f8301846137c7565b92915050565b5f805f806080858703121561380757613806613626565b5b5f613814878288016136a3565b9450506020613825878288016136a3565b9350506040613836878288016136a3565b9250506060613847878288016136a3565b91505092959194509250565b5f805f6060848603121561386a57613869613626565b5b5f61387786828701613670565b935050602061388886828701613670565b9250506040613899868287016136a3565b9150509250925092565b5f60ff82169050919050565b6138b8816138a3565b82525050565b5f6020820190506138d15f8301846138af565b92915050565b6138e081613649565b82525050565b5f6020820190506138f95f8301846138d7565b92915050565b613908816136f5565b8114613912575f80fd5b50565b5f81359050613923816138ff565b92915050565b5f6020828403121561393e5761393d613626565b5b5f61394b84828501613915565b91505092915050565b5f806040838503121561396a57613969613626565b5b5f61397785828601613670565b925050602061398885828601613915565b9150509250929050565b5f80604083850312156139a8576139a7613626565b5b5f6139b585828601613670565b92505060206139c685828601613670565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a1457607f821691505b602082108103613a2757613a266139d0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a61602083613586565b9150613a6c82613a2d565b602082019050919050565b5f6020820190508181035f830152613a8e81613a55565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613acc82613684565b9150613ad783613684565b9250828201905080821115613aef57613aee613a95565b5b92915050565b5f81519050613b038161365a565b92915050565b5f60208284031215613b1e57613b1d613626565b5b5f613b2b84828501613af5565b91505092915050565b5f604082019050613b475f8301856138d7565b613b5460208301846138d7565b9392505050565b5f613b6582613684565b9150613b7083613684565b9250828202613b7e81613684565b91508282048414831517613b9557613b94613a95565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613bd382613684565b9150613bde83613684565b925082613bee57613bed613b9c565b5b828204905092915050565b5f819050919050565b5f613c1c613c17613c1284613bf9565b613753565b613684565b9050919050565b613c2c81613c02565b82525050565b5f60c082019050613c455f8301896138d7565b613c5260208301886137c7565b613c5f6040830187613c23565b613c6c6060830186613c23565b613c7960808301856138d7565b613c8660a08301846137c7565b979650505050505050565b5f81519050613c9f8161368d565b92915050565b5f805f60608486031215613cbc57613cbb613626565b5b5f613cc986828701613c91565b9350506020613cda86828701613c91565b9250506040613ceb86828701613c91565b9150509250925092565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d4f602283613586565b9150613d5a82613cf5565b604082019050919050565b5f6020820190508181035f830152613d7c81613d43565b9050919050565b5f81905092915050565b50565b5f613d9b5f83613d83565b9150613da682613d8d565b5f82019050919050565b5f613dba82613d90565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613df8601b83613586565b9150613e0382613dc4565b602082019050919050565b5f6020820190508181035f830152613e2581613dec565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613e86603983613586565b9150613e9182613e2c565b604082019050919050565b5f6020820190508181035f830152613eb381613e7a565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613f14602483613586565b9150613f1f82613eba565b604082019050919050565b5f6020820190508181035f830152613f4181613f08565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613fa2602483613586565b9150613fad82613f48565b604082019050919050565b5f6020820190508181035f830152613fcf81613f96565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614030602283613586565b915061403b82613fd6565b604082019050919050565b5f6020820190508181035f83015261405d81614024565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6140be602583613586565b91506140c982614064565b604082019050919050565b5f6020820190508181035f8301526140eb816140b2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61414c602383613586565b9150614157826140f2565b604082019050919050565b5f6020820190508181035f83015261417981614140565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6141da603583613586565b91506141e582614180565b604082019050919050565b5f6020820190508181035f830152614207816141ce565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614242601383613586565b915061424d8261420e565b602082019050919050565b5f6020820190508181035f83015261426f81614236565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6142d0603683613586565b91506142db82614276565b604082019050919050565b5f6020820190508181035f8301526142fd816142c4565b9050919050565b5f61430e82613684565b915061431983613684565b925082820390508181111561433157614330613a95565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61436b601b83613586565b915061437682614337565b602082019050919050565b5f6020820190508181035f8301526143988161435f565b9050919050565b5f6060820190506143b25f8301866137c7565b6143bf60208301856137c7565b6143cc60408301846137c7565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61442e602183613586565b9150614439826143d4565b604082019050919050565b5f6020820190508181035f83015261445b81614422565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6144ee81613649565b82525050565b5f6144ff83836144e5565b60208301905092915050565b5f602082019050919050565b5f614521826144bc565b61452b81856144c6565b9350614536836144d6565b805f5b8381101561456657815161454d88826144f4565b97506145588361450b565b925050600181019050614539565b5085935050505092915050565b5f60a0820190506145865f8301886137c7565b6145936020830187613c23565b81810360408301526145a58186614517565b90506145b460608301856138d7565b6145c160808301846137c7565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dd2701a1427f584b22792f51801a72b1b2bcba0d398f6e63d76109689100835464736f6c63430008150033

Deployed Bytecode Sourcemap

17554:12470:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4817:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5731:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18016:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18589:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17717:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5138:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23981:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18298:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18197:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22945:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18231:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5908:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20941:1037;;;;;;;;;;;;;:::i;:::-;;5037:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6271:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18099:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17975:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17765:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24154:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17933:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22671:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18132:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5254:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10798:148;;;;;;;;;;;;;:::i;:::-;;22581:81;;;;;;;;;;;;;:::i;:::-;;22789:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21996:313;;;;;;;;;;;;;:::i;:::-;;10584:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18053:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4925:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23530:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22317:256;;;;;;;;;;;;;:::i;:::-;;18338:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6497:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5389:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18812:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17833:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18263:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23339:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17897:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5572:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18163:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10954:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4817:100;4871:13;4904:5;4897:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4817:100;:::o;5731:169::-;5814:4;5831:39;5840:12;:10;:12::i;:::-;5854:7;5863:6;5831:8;:39::i;:::-;5888:4;5881:11;;5731:169;;;;:::o;18016:30::-;;;;;;;;;;;;;:::o;18589:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17717:41::-;;;;;;;;;;;;;:::o;5138:108::-;5199:7;5226:12;;5219:19;;5138:108;:::o;23981:165::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24093:9:::1;;;;;;;;;;;24062:41;;24079:12;24062:41;;;;;;;;;;;;24126:12;24114:9;;:24;;;;;;;;;;;;;;;;;;23981:165:::0;:::o;18298:33::-;;;;:::o;18197:27::-;;;;:::o;22945:386::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23118:7:::1;23106:9;:19;;;;23148:7;23136:9;:19;;;;23192:9;;23180;;:21;;;;:::i;:::-;23166:11;:35;;;;23225:8;23212:10;:21;;;;23257:8;23244:10;:21;;;;23304:10;;23291;;:23;;;;:::i;:::-;23276:12;:38;;;;22945:386:::0;;;;:::o;18231:25::-;;;;:::o;5908:355::-;6048:4;6065:36;6075:6;6083:9;6094:6;6065:9;:36::i;:::-;6112:121;6121:6;6129:12;:10;:12::i;:::-;6143:89;6181:6;6143:89;;;;;;;;;;;;;;;;;:11;:19;6155:6;6143:19;;;;;;;;;;;;;;;:33;6163:12;:10;:12::i;:::-;6143:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6112:8;:121::i;:::-;6251:4;6244:11;;5908:355;;;;;:::o;20941:1037::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20994:35:::1;21051:42;20994:100;;21108:58;21142:16;21161:4;21108:25;:58::i;:::-;21195:16;21177:15;;:34;;;;;;;;;;;;;;;;;;21259:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21241:56;;;21306:4;21313:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21241:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21225:13;;:112;;;;;;;;;;;;;;;;;;21348:55;21382:13;;;;;;;;;;;21398:4;21348:25;:55::i;:::-;21414:58;21451:13;;;;;;;;;;;21467:4;21414:28;:58::i;:::-;21493:17;21513:21;21493:41;;21545:19;21599:3;21594:2;21567:24;21585:4;21567:9;:24::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;21545:57;;21633:62;21650:4;21665:15;;;;;;;;;;;21683:11;21633:8;:62::i;:::-;21708:15;;;;;;;;;;;:31;;;21747:9;21780:4;21800:11;21830:1;21877::::0;21920:9:::1;;;;;;;;;;;21944:15;21708:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;20977:1001;;;20941:1037::o:0;5037:93::-;5095:5;5120:2;5113:9;;5037:93;:::o;6271:218::-;6359:4;6376:83;6385:12;:10;:12::i;:::-;6399:7;6408:50;6447:10;6408:11;:25;6420:12;:10;:12::i;:::-;6408:25;;;;;;;;;;;;;;;:34;6434:7;6408:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6376:8;:83::i;:::-;6477:4;6470:11;;6271:218;;;;:::o;18099:26::-;;;;:::o;17975:31::-;;;;:::o;17765:28::-;;;;;;;;;;;;;:::o;24154:125::-;24219:4;24243:19;:28;24263:7;24243:28;;;;;;;;;;;;;;;;;;;;;;;;;24236:35;;24154:125;;;:::o;17933:35::-;;;;:::o;22671:109::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22765:7:::1;22745:17;;:27;;;;;;;;;;;;;;;;;;22671:109:::0;:::o;18132:24::-;;;;:::o;5254:127::-;5328:7;5355:9;:18;5365:7;5355:18;;;;;;;;;;;;;;;;5348:25;;5254:127;;;:::o;10798:148::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10905:1:::1;10868:40;;10889:6;;;;;;;;;;;10868:40;;;;;;;;;;;;10936:1;10919:6;;:19;;;;;;;;;;;;;;;;;;10798:148::o:0;22581:81::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22649:5:::1;22635:11;;:19;;;;;;;;;;;;;;;;;;22581:81::o:0;22789:144::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22921:4:::1;22879:31;:39;22911:6;22879:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22789:144:::0;;:::o;21996:313::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22054:18:::1;22075:21;22054:42;;22128:1;22115:10;:14;22107:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22180:12;22205:9;;;;;;;;;;;22197:23;;22228:10;22197:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22179:64;;;22262:7;22254:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22043:266;;21996:313::o:0;10584:79::-;10622:7;10649:6;;;;;;;;;;;10642:13;;10584:79;:::o;18053:37::-;;;;;;;;;;;;;:::o;4925:104::-;4981:13;5014:7;5007:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4925:104;:::o;23530:245::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23637:13:::1;;;;;;;;;;;23629:21;;:4;:21;;::::0;23621:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23726:41;23755:4;23761:5;23726:28;:41::i;:::-;23530:245:::0;;:::o;22317:256::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22382:20:::1;22405:24;22423:4;22405:9;:24::i;:::-;22382:47;;22463:1;22448:12;:16;22440:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22516:49;22534:4;22541:9;;;;;;;;;;;22552:12;22516:9;:49::i;:::-;22371:202;22317:256::o:0;18338:27::-;;;;:::o;6497:269::-;6590:4;6607:129;6616:12;:10;:12::i;:::-;6630:7;6639:96;6678:15;6639:96;;;;;;;;;;;;;;;;;:11;:25;6651:12;:10;:12::i;:::-;6639:25;;;;;;;;;;;;;;;:34;6665:7;6639:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6607:8;:129::i;:::-;6754:4;6747:11;;6497:269;;;;:::o;5389:175::-;5475:4;5492:42;5502:12;:10;:12::i;:::-;5516:9;5527:6;5492:9;:42::i;:::-;5552:4;5545:11;;5389:175;;;;:::o;18812:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17833:22::-;;;;:::o;18263:25::-;;;;:::o;23339:182::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23455:8:::1;23424:19;:28;23444:7;23424:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23495:7;23479:34;;;23504:8;23479:34;;;;;;:::i;:::-;;;;;;;;23339:182:::0;;:::o;17897:29::-;;;;:::o;5572:151::-;5661:7;5688:11;:18;5700:5;5688:18;;;;;;;;;;;;;;;:27;5707:7;5688:27;;;;;;;;;;;;;;;;5681:34;;5572:151;;;;:::o;18163:24::-;;;;:::o;10954:169::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11078:8:::1;11049:38;;11070:6;;;;;;;;;;;11049:38;;;;;;;;;;;;11107:8;11098:6;;:17;;;;;;;;;;;;;;;;;;10954:169:::0;:::o;170:98::-;223:7;250:10;243:17;;170:98;:::o;8173:381::-;8326:1;8309:19;;:5;:19;;;8301:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8407:1;8388:21;;:7;:21;;;8380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8492:6;8462:11;:18;8474:5;8462:18;;;;;;;;;;;;;;;:27;8481:7;8462:27;;;;;;;;;;;;;;;:36;;;;8530:7;8514:32;;8523:5;8514:32;;;8539:6;8514:32;;;;;;:::i;:::-;;;;;;;;8173:381;;;:::o;24288:3112::-;24436:1;24420:18;;:4;:18;;;24412:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24513:1;24499:16;;:2;:16;;;24491:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24580:1;24570:6;:11;24567:92;;24598:28;24614:4;24620:2;24624:1;24598:15;:28::i;:::-;24641:7;;24567:92;24675:11;;;;;;;;;;;24672:1083;;;24732:7;:5;:7::i;:::-;24724:15;;:4;:15;;;;:49;;;;;24766:7;:5;:7::i;:::-;24760:13;;:2;:13;;;;24724:49;:86;;;;;24808:1;24794:16;;:2;:16;;;;24724:86;:128;;;;;24845:6;24831:21;;:2;:21;;;;24724:128;:160;;;;;24874:10;;;;;;;;;;;24873:11;24724:160;24702:1042;;;24968:25;:31;24994:4;24968:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25004:31;:35;25036:2;25004:35;;;;;;;;;;;;;;;;;;;;;;;;;25003:36;24968:71;24964:765;;;25086:14;;25076:6;:24;;25068:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25219:16;;25202:13;25212:2;25202:9;:13::i;:::-;25193:6;:22;;;;:::i;:::-;:42;;25185:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24964:765;;;25338:25;:29;25364:2;25338:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25372:31;:37;25404:4;25372:37;;;;;;;;;;;;;;;;;;;;;;;;;25371:38;25338:71;25334:395;;;25456:14;;25446:6;:24;;25438:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25334:395;;;25576:31;:35;25608:2;25576:35;;;;;;;;;;;;;;;;;;;;;;;;;25572:157;;25669:16;;25652:13;25662:2;25652:9;:13::i;:::-;25643:6;:22;;;;:::i;:::-;:42;;25635:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25572:157;25334:395;24964:765;24702:1042;24672:1083;25768:28;25799:24;25817:4;25799:9;:24::i;:::-;25768:55;;25837:12;25876:20;;25852;:44;;25837:59;;25928:7;:35;;;;;25953:10;;;;;;;;;;;25952:11;25928:35;:84;;;;;25981:25;:31;26007:4;25981:31;;;;;;;;;;;;;;;;;;;;;;;;;25980:32;25928:84;:127;;;;;26030:19;:25;26050:4;26030:25;;;;;;;;;;;;;;;;;;;;;;;;;26029:26;25928:127;:168;;;;;26073:19;:23;26093:2;26073:23;;;;;;;;;;;;;;;;;;;;;;;;;26072:24;25928:168;25910:306;;;26136:4;26123:10;;:17;;;;;;;;;;;;;;;;;;26158:10;:8;:10::i;:::-;26199:5;26186:10;;:18;;;;;;;;;;;;;;;;;;25910:306;26229:12;26245:10;;;;;;;;;;;26244:11;26229:26;;26357:19;:25;26377:4;26357:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26386:19;:23;26406:2;26386:23;;;;;;;;;;;;;;;;;;;;;;;;;26357:52;26354:99;;;26436:5;26426:15;;26354:99;26466:12;26570:7;26567:779;;;26621:25;:29;26647:2;26621:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;26669:1;26654:12;;:16;26621:49;26617:576;;;26697:33;26726:3;26697:24;26708:12;;26697:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26690:40;;26791:12;;26778:10;;26771:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26749:18;;:54;;;;;;;:::i;:::-;;;;;;;;26858:12;;26845:10;;26838:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26822:12;;:48;;;;;;;:::i;:::-;;;;;;;;26617:576;;;26931:25;:31;26957:4;26931:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26980:1;26966:11;;:15;26931:50;26928:265;;;27009:32;27037:3;27009:23;27020:11;;27009:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;27002:39;;27101:11;;27089:9;;27082:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27060:18;;:52;;;;;;;:::i;:::-;;;;;;;;27166:11;;27154:9;;27147:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27131:12;;:46;;;;;;;:::i;:::-;;;;;;;;26928:265;26617:576;27220:1;27213:4;:8;27210:93;;;27245:42;27261:4;27275;27282;27245:15;:42::i;:::-;27210:93;27330:4;27320:14;;;;;:::i;:::-;;;26567:779;27359:33;27375:4;27381:2;27385:6;27359:15;:33::i;:::-;24401:2999;;;;24288:3112;;;;:::o;9061:193::-;9147:7;9180:1;9175;:6;;9183:12;9167:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9207:9;9223:1;9219;:5;;;;:::i;:::-;9207:17;;9245:1;9238:8;;;9061:193;;;;;:::o;23784:189::-;23901:5;23867:25;:31;23893:4;23867:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23959:5;23925:40;;23953:4;23925:40;;;;;;;;;;;;23784:189;;:::o;8727:182::-;8785:7;8805:9;8821:1;8817;:5;;;;:::i;:::-;8805:17;;8846:1;8841;:6;;8833:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8900:1;8893:8;;;8727:182;;;;:::o;6774:575::-;6932:1;6914:20;;:6;:20;;;6906:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7016:1;6995:23;;:9;:23;;;6987:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7072:47;7093:6;7101:9;7112:6;7072:20;:47::i;:::-;7153:71;7175:6;7153:71;;;;;;;;;;;;;;;;;:9;:17;7163:6;7153:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7133:9;:17;7143:6;7133:17;;;;;;;;;;;;;;;:91;;;;7258:32;7283:6;7258:9;:20;7268:9;7258:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7235:9;:20;7245:9;7235:20;;;;;;;;;;;;;;;:55;;;;7323:9;7306:35;;7315:6;7306:35;;;7334:6;7306:35;;;;;;:::i;:::-;;;;;;;;6774:575;;;:::o;28544:1477::-;28583:23;28609:24;28627:4;28609:9;:24::i;:::-;28583:50;;28644:25;28693:12;;28672:18;;:33;;;;:::i;:::-;28644:61;;28716:12;28764:1;28745:15;:20;:46;;;;28790:1;28769:17;:22;28745:46;28742:60;;;28794:7;;;;;28742:60;28839:5;28818:26;;:17;;;;;;;;;;;:26;;;28815:254;;28904:2;28881:20;;:25;;;;:::i;:::-;28863:15;:43;28860:125;;;28967:2;28944:20;;:25;;;;:::i;:::-;28926:43;;28860:125;28815:254;;;29033:24;29051:4;29033:9;:24::i;:::-;29015:42;;28815:254;29141:23;29226:1;29206:17;29185:18;;29167:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29141:86;;29238:26;29267:36;29287:15;29267;:19;;:36;;;;:::i;:::-;29238:65;;29317:25;29345:21;29317:49;;29380:36;29397:18;29380:16;:36::i;:::-;29431:18;29452:44;29478:17;29452:21;:25;;:44;;;;:::i;:::-;29431:65;;29510:17;29530:51;29563:17;29530:28;29545:12;;29530:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29510:71;;29592:23;29631:9;29618:10;:22;;;;:::i;:::-;29592:48;;29678:1;29657:18;:22;;;;29705:1;29690:12;:16;;;;29741:1;29723:15;:19;:42;;;;;29764:1;29746:15;:19;29723:42;29720:210;;;29781:46;29794:15;29811;29781:12;:46::i;:::-;29847:71;29862:18;29882:15;29899:18;;29847:71;;;;;;;;:::i;:::-;;;;;;;;29720:210;29964:9;;;;;;;;;;;29956:23;;29987:21;29956:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29943:70;;;;;28572:1449;;;;;;;;;28544:1477;:::o;9262:254::-;9320:7;9351:1;9346;:6;9342:47;;9376:1;9369:8;;;;9342:47;9402:9;9418:1;9414;:5;;;;:::i;:::-;9402:17;;9447:1;9442;9438;:5;;;;:::i;:::-;:10;9430:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9507:1;9500:8;;;9262:254;;;;;:::o;9524:132::-;9582:7;9609:39;9613:1;9616;9609:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9602:46;;9524:132;;;;:::o;8562:125::-;;;;:::o;8917:136::-;8975:7;9002:43;9006:1;9009;9002:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;8995:50;;8917:136;;;;:::o;27409:597::-;27538:21;27576:1;27562:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27538:40;;27607:4;27589;27594:1;27589:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27633:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27623:4;27628:1;27623:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27669:62;27686:4;27701:15;;;;;;;;;;;27719:11;27669:8;:62::i;:::-;27771:15;;;;;;;;;;;:66;;;27852:11;27878:1;27922:4;27949;27969:15;27771:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27464:542;27409:597;:::o;28015:520::-;28163:62;28180:4;28195:15;;;;;;;;;;;28213:11;28163:8;:62::i;:::-;28269:15;;;;;;;;;;;:31;;;28308:9;28341:4;28361:11;28387:1;28430;28481:4;28501:15;28269:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28015:520;;:::o;9664:279::-;9750:7;9782:1;9778;:5;9785:12;9770:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9809:9;9825:1;9821;:5;;;;:::i;:::-;9809:17;;9934:1;9927:8;;;9664: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:765::-;5197:6;5205;5213;5221;5270:3;5258:9;5249:7;5245:23;5241:33;5238:120;;;5277:79;;:::i;:::-;5238:120;5397:1;5422:53;5467:7;5458:6;5447:9;5443:22;5422:53;:::i;:::-;5412:63;;5368:117;5524:2;5550:53;5595:7;5586:6;5575:9;5571:22;5550:53;:::i;:::-;5540:63;;5495:118;5652:2;5678:53;5723:7;5714:6;5703:9;5699:22;5678:53;:::i;:::-;5668:63;;5623:118;5780:2;5806:53;5851:7;5842:6;5831:9;5827:22;5806:53;:::i;:::-;5796:63;;5751:118;5111:765;;;;;;;:::o;5882:619::-;5959:6;5967;5975;6024:2;6012:9;6003:7;5999:23;5995:32;5992:119;;;6030:79;;:::i;:::-;5992:119;6150:1;6175:53;6220:7;6211:6;6200:9;6196:22;6175:53;:::i;:::-;6165:63;;6121:117;6277:2;6303:53;6348:7;6339:6;6328:9;6324:22;6303:53;:::i;:::-;6293:63;;6248:118;6405:2;6431:53;6476:7;6467:6;6456:9;6452:22;6431:53;:::i;:::-;6421:63;;6376:118;5882:619;;;;;:::o;6507:86::-;6542:7;6582:4;6575:5;6571:16;6560:27;;6507:86;;;:::o;6599:112::-;6682:22;6698:5;6682:22;:::i;:::-;6677:3;6670:35;6599:112;;:::o;6717:214::-;6806:4;6844:2;6833:9;6829:18;6821:26;;6857:67;6921:1;6910:9;6906:17;6897:6;6857:67;:::i;:::-;6717:214;;;;:::o;6937:118::-;7024:24;7042:5;7024:24;:::i;:::-;7019:3;7012:37;6937:118;;:::o;7061:222::-;7154:4;7192:2;7181:9;7177:18;7169:26;;7205:71;7273:1;7262:9;7258:17;7249:6;7205:71;:::i;:::-;7061:222;;;;:::o;7289:116::-;7359:21;7374:5;7359:21;:::i;:::-;7352:5;7349:32;7339:60;;7395:1;7392;7385:12;7339:60;7289:116;:::o;7411:133::-;7454:5;7492:6;7479:20;7470:29;;7508:30;7532:5;7508:30;:::i;:::-;7411:133;;;;:::o;7550:323::-;7606:6;7655:2;7643:9;7634:7;7630:23;7626:32;7623:119;;;7661:79;;:::i;:::-;7623:119;7781:1;7806:50;7848:7;7839:6;7828:9;7824:22;7806:50;:::i;:::-;7796:60;;7752:114;7550:323;;;;:::o;7879:468::-;7944:6;7952;8001:2;7989:9;7980:7;7976:23;7972:32;7969:119;;;8007:79;;:::i;:::-;7969:119;8127:1;8152:53;8197:7;8188:6;8177:9;8173:22;8152:53;:::i;:::-;8142:63;;8098:117;8254:2;8280:50;8322:7;8313:6;8302:9;8298:22;8280:50;:::i;:::-;8270:60;;8225:115;7879:468;;;;;:::o;8353:474::-;8421:6;8429;8478:2;8466:9;8457:7;8453:23;8449:32;8446:119;;;8484:79;;:::i;:::-;8446:119;8604:1;8629:53;8674:7;8665:6;8654:9;8650:22;8629:53;:::i;:::-;8619:63;;8575:117;8731:2;8757:53;8802:7;8793:6;8782:9;8778:22;8757:53;:::i;:::-;8747:63;;8702:118;8353:474;;;;;:::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:180::-;10378:77;10375:1;10368:88;10475:4;10472:1;10465:15;10499:4;10496:1;10489:15;10516:191;10556:3;10575:20;10593:1;10575:20;:::i;:::-;10570:25;;10609:20;10627:1;10609:20;:::i;:::-;10604:25;;10652:1;10649;10645:9;10638:16;;10673:3;10670:1;10667:10;10664:36;;;10680:18;;:::i;:::-;10664:36;10516:191;;;;:::o;10713:143::-;10770:5;10801:6;10795:13;10786:22;;10817:33;10844:5;10817:33;:::i;:::-;10713:143;;;;:::o;10862:351::-;10932:6;10981:2;10969:9;10960:7;10956:23;10952:32;10949:119;;;10987:79;;:::i;:::-;10949:119;11107:1;11132:64;11188:7;11179:6;11168:9;11164:22;11132:64;:::i;:::-;11122:74;;11078:128;10862:351;;;;:::o;11219:332::-;11340:4;11378:2;11367:9;11363:18;11355:26;;11391:71;11459:1;11448:9;11444:17;11435:6;11391:71;:::i;:::-;11472:72;11540:2;11529:9;11525:18;11516:6;11472:72;:::i;:::-;11219:332;;;;;:::o;11557:410::-;11597:7;11620:20;11638:1;11620:20;:::i;:::-;11615:25;;11654:20;11672:1;11654:20;:::i;:::-;11649:25;;11709:1;11706;11702:9;11731:30;11749:11;11731:30;:::i;:::-;11720:41;;11910:1;11901:7;11897:15;11894:1;11891:22;11871:1;11864:9;11844:83;11821:139;;11940:18;;:::i;:::-;11821:139;11605:362;11557:410;;;;:::o;11973:180::-;12021:77;12018:1;12011:88;12118:4;12115:1;12108:15;12142:4;12139:1;12132:15;12159:185;12199:1;12216:20;12234:1;12216:20;:::i;:::-;12211:25;;12250:20;12268:1;12250:20;:::i;:::-;12245:25;;12289:1;12279:35;;12294:18;;:::i;:::-;12279:35;12336:1;12333;12329:9;12324:14;;12159:185;;;;:::o;12350:85::-;12395:7;12424:5;12413:16;;12350:85;;;:::o;12441:158::-;12499:9;12532:61;12550:42;12559:32;12585:5;12559:32;:::i;:::-;12550:42;:::i;:::-;12532:61;:::i;:::-;12519:74;;12441:158;;;:::o;12605:147::-;12700:45;12739:5;12700:45;:::i;:::-;12695:3;12688:58;12605:147;;:::o;12758:807::-;13007:4;13045:3;13034:9;13030:19;13022:27;;13059:71;13127:1;13116:9;13112:17;13103:6;13059:71;:::i;:::-;13140:72;13208:2;13197:9;13193:18;13184:6;13140:72;:::i;:::-;13222:80;13298:2;13287:9;13283:18;13274:6;13222:80;:::i;:::-;13312;13388:2;13377:9;13373:18;13364:6;13312:80;:::i;:::-;13402:73;13470:3;13459:9;13455:19;13446:6;13402:73;:::i;:::-;13485;13553:3;13542:9;13538:19;13529:6;13485:73;:::i;:::-;12758:807;;;;;;;;;:::o;13571:143::-;13628:5;13659:6;13653:13;13644:22;;13675:33;13702:5;13675:33;:::i;:::-;13571:143;;;;:::o;13720:663::-;13808:6;13816;13824;13873:2;13861:9;13852:7;13848:23;13844:32;13841:119;;;13879:79;;:::i;:::-;13841:119;13999:1;14024:64;14080:7;14071:6;14060:9;14056:22;14024:64;:::i;:::-;14014:74;;13970:128;14137:2;14163:64;14219:7;14210:6;14199:9;14195:22;14163:64;:::i;:::-;14153:74;;14108:129;14276:2;14302:64;14358:7;14349:6;14338:9;14334:22;14302:64;:::i;:::-;14292:74;;14247:129;13720:663;;;;;:::o;14389:221::-;14529:34;14525:1;14517:6;14513:14;14506:58;14598:4;14593:2;14585:6;14581:15;14574:29;14389:221;:::o;14616:366::-;14758:3;14779:67;14843:2;14838:3;14779:67;:::i;:::-;14772:74;;14855:93;14944:3;14855:93;:::i;:::-;14973:2;14968:3;14964:12;14957:19;;14616:366;;;:::o;14988:419::-;15154:4;15192:2;15181:9;15177:18;15169:26;;15241:9;15235:4;15231:20;15227:1;15216:9;15212:17;15205:47;15269:131;15395:4;15269:131;:::i;:::-;15261:139;;14988:419;;;:::o;15413:147::-;15514:11;15551:3;15536:18;;15413:147;;;;:::o;15566:114::-;;:::o;15686:398::-;15845:3;15866:83;15947:1;15942:3;15866:83;:::i;:::-;15859:90;;15958:93;16047:3;15958:93;:::i;:::-;16076:1;16071:3;16067:11;16060:18;;15686:398;;;:::o;16090:379::-;16274:3;16296:147;16439:3;16296:147;:::i;:::-;16289:154;;16460:3;16453:10;;16090:379;;;:::o;16475:177::-;16615:29;16611:1;16603:6;16599:14;16592:53;16475:177;:::o;16658:366::-;16800:3;16821:67;16885:2;16880:3;16821:67;:::i;:::-;16814:74;;16897:93;16986:3;16897:93;:::i;:::-;17015:2;17010:3;17006:12;16999:19;;16658:366;;;:::o;17030:419::-;17196:4;17234:2;17223:9;17219:18;17211:26;;17283:9;17277:4;17273:20;17269:1;17258:9;17254:17;17247:47;17311:131;17437:4;17311:131;:::i;:::-;17303:139;;17030:419;;;:::o;17455:244::-;17595:34;17591:1;17583:6;17579:14;17572:58;17664:27;17659:2;17651:6;17647:15;17640:52;17455:244;:::o;17705:366::-;17847:3;17868:67;17932:2;17927:3;17868:67;:::i;:::-;17861:74;;17944:93;18033:3;17944:93;:::i;:::-;18062:2;18057:3;18053:12;18046:19;;17705:366;;;:::o;18077:419::-;18243:4;18281:2;18270:9;18266:18;18258:26;;18330:9;18324:4;18320:20;18316:1;18305:9;18301:17;18294:47;18358:131;18484:4;18358:131;:::i;:::-;18350:139;;18077:419;;;:::o;18502:223::-;18642:34;18638:1;18630:6;18626:14;18619:58;18711:6;18706:2;18698:6;18694:15;18687:31;18502:223;:::o;18731:366::-;18873:3;18894:67;18958:2;18953:3;18894:67;:::i;:::-;18887:74;;18970:93;19059:3;18970:93;:::i;:::-;19088:2;19083:3;19079:12;19072:19;;18731:366;;;:::o;19103:419::-;19269:4;19307:2;19296:9;19292:18;19284:26;;19356:9;19350:4;19346:20;19342:1;19331:9;19327:17;19320:47;19384:131;19510:4;19384:131;:::i;:::-;19376:139;;19103:419;;;:::o;19528:223::-;19668:34;19664:1;19656:6;19652:14;19645:58;19737:6;19732:2;19724:6;19720:15;19713:31;19528:223;:::o;19757:366::-;19899:3;19920:67;19984:2;19979:3;19920:67;:::i;:::-;19913:74;;19996:93;20085:3;19996:93;:::i;:::-;20114:2;20109:3;20105:12;20098:19;;19757:366;;;:::o;20129:419::-;20295:4;20333:2;20322:9;20318:18;20310:26;;20382:9;20376:4;20372:20;20368:1;20357:9;20353:17;20346:47;20410:131;20536:4;20410:131;:::i;:::-;20402:139;;20129:419;;;:::o;20554:221::-;20694:34;20690:1;20682:6;20678:14;20671:58;20763:4;20758:2;20750:6;20746:15;20739:29;20554:221;:::o;20781:366::-;20923:3;20944:67;21008:2;21003:3;20944:67;:::i;:::-;20937:74;;21020:93;21109:3;21020:93;:::i;:::-;21138:2;21133:3;21129:12;21122:19;;20781:366;;;:::o;21153:419::-;21319:4;21357:2;21346:9;21342:18;21334:26;;21406:9;21400:4;21396:20;21392:1;21381:9;21377:17;21370:47;21434:131;21560:4;21434:131;:::i;:::-;21426:139;;21153:419;;;:::o;21578:224::-;21718:34;21714:1;21706:6;21702:14;21695:58;21787:7;21782:2;21774:6;21770:15;21763:32;21578:224;:::o;21808:366::-;21950:3;21971:67;22035:2;22030:3;21971:67;:::i;:::-;21964:74;;22047:93;22136:3;22047:93;:::i;:::-;22165:2;22160:3;22156:12;22149:19;;21808:366;;;:::o;22180:419::-;22346:4;22384:2;22373:9;22369:18;22361:26;;22433:9;22427:4;22423:20;22419:1;22408:9;22404:17;22397:47;22461:131;22587:4;22461:131;:::i;:::-;22453:139;;22180:419;;;:::o;22605:222::-;22745:34;22741:1;22733:6;22729:14;22722:58;22814:5;22809:2;22801:6;22797:15;22790:30;22605:222;:::o;22833:366::-;22975:3;22996:67;23060:2;23055:3;22996:67;:::i;:::-;22989:74;;23072:93;23161:3;23072:93;:::i;:::-;23190:2;23185:3;23181:12;23174:19;;22833:366;;;:::o;23205:419::-;23371:4;23409:2;23398:9;23394:18;23386:26;;23458:9;23452:4;23448:20;23444:1;23433:9;23429:17;23422:47;23486:131;23612:4;23486:131;:::i;:::-;23478:139;;23205:419;;;:::o;23630:240::-;23770:34;23766:1;23758:6;23754:14;23747:58;23839:23;23834:2;23826:6;23822:15;23815:48;23630:240;:::o;23876:366::-;24018:3;24039:67;24103:2;24098:3;24039:67;:::i;:::-;24032:74;;24115:93;24204:3;24115:93;:::i;:::-;24233:2;24228:3;24224:12;24217:19;;23876:366;;;:::o;24248:419::-;24414:4;24452:2;24441:9;24437:18;24429:26;;24501:9;24495:4;24491:20;24487:1;24476:9;24472:17;24465:47;24529:131;24655:4;24529:131;:::i;:::-;24521:139;;24248:419;;;:::o;24673:169::-;24813:21;24809:1;24801:6;24797:14;24790:45;24673:169;:::o;24848:366::-;24990:3;25011:67;25075:2;25070:3;25011:67;:::i;:::-;25004:74;;25087:93;25176:3;25087:93;:::i;:::-;25205:2;25200:3;25196:12;25189:19;;24848:366;;;:::o;25220:419::-;25386:4;25424:2;25413:9;25409:18;25401:26;;25473:9;25467:4;25463:20;25459:1;25448:9;25444:17;25437:47;25501:131;25627:4;25501:131;:::i;:::-;25493:139;;25220:419;;;:::o;25645:241::-;25785:34;25781:1;25773:6;25769:14;25762:58;25854:24;25849:2;25841:6;25837:15;25830:49;25645:241;:::o;25892:366::-;26034:3;26055:67;26119:2;26114:3;26055:67;:::i;:::-;26048:74;;26131:93;26220:3;26131:93;:::i;:::-;26249:2;26244:3;26240:12;26233:19;;25892:366;;;:::o;26264:419::-;26430:4;26468:2;26457:9;26453:18;26445:26;;26517:9;26511:4;26507:20;26503:1;26492:9;26488:17;26481:47;26545:131;26671:4;26545:131;:::i;:::-;26537:139;;26264:419;;;:::o;26689:194::-;26729:4;26749:20;26767:1;26749:20;:::i;:::-;26744:25;;26783:20;26801:1;26783:20;:::i;:::-;26778:25;;26827:1;26824;26820:9;26812:17;;26851:1;26845:4;26842:11;26839:37;;;26856:18;;:::i;:::-;26839:37;26689:194;;;;:::o;26889:177::-;27029:29;27025:1;27017:6;27013:14;27006:53;26889:177;:::o;27072:366::-;27214:3;27235:67;27299:2;27294:3;27235:67;:::i;:::-;27228:74;;27311:93;27400:3;27311:93;:::i;:::-;27429:2;27424:3;27420:12;27413:19;;27072:366;;;:::o;27444:419::-;27610:4;27648:2;27637:9;27633:18;27625:26;;27697:9;27691:4;27687:20;27683:1;27672:9;27668:17;27661:47;27725:131;27851:4;27725:131;:::i;:::-;27717:139;;27444:419;;;:::o;27869:442::-;28018:4;28056:2;28045:9;28041:18;28033:26;;28069:71;28137:1;28126:9;28122:17;28113:6;28069:71;:::i;:::-;28150:72;28218:2;28207:9;28203:18;28194:6;28150:72;:::i;:::-;28232;28300:2;28289:9;28285:18;28276:6;28232:72;:::i;:::-;27869:442;;;;;;:::o;28317:220::-;28457:34;28453:1;28445:6;28441:14;28434:58;28526:3;28521:2;28513:6;28509:15;28502:28;28317:220;:::o;28543:366::-;28685:3;28706:67;28770:2;28765:3;28706:67;:::i;:::-;28699:74;;28782:93;28871:3;28782:93;:::i;:::-;28900:2;28895:3;28891:12;28884:19;;28543:366;;;:::o;28915:419::-;29081:4;29119:2;29108:9;29104:18;29096:26;;29168:9;29162:4;29158:20;29154:1;29143:9;29139:17;29132:47;29196:131;29322:4;29196:131;:::i;:::-;29188:139;;28915:419;;;:::o;29340:180::-;29388:77;29385:1;29378:88;29485:4;29482:1;29475:15;29509:4;29506:1;29499:15;29526:180;29574:77;29571:1;29564:88;29671:4;29668:1;29661:15;29695:4;29692:1;29685:15;29712:114;29779:6;29813:5;29807:12;29797:22;;29712:114;;;:::o;29832:184::-;29931:11;29965:6;29960:3;29953:19;30005:4;30000:3;29996:14;29981:29;;29832:184;;;;:::o;30022:132::-;30089:4;30112:3;30104:11;;30142:4;30137:3;30133:14;30125:22;;30022:132;;;:::o;30160:108::-;30237:24;30255:5;30237:24;:::i;:::-;30232:3;30225:37;30160:108;;:::o;30274:179::-;30343:10;30364:46;30406:3;30398:6;30364:46;:::i;:::-;30442:4;30437:3;30433:14;30419:28;;30274:179;;;;:::o;30459:113::-;30529:4;30561;30556:3;30552:14;30544:22;;30459:113;;;:::o;30608:732::-;30727:3;30756:54;30804:5;30756:54;:::i;:::-;30826:86;30905:6;30900:3;30826:86;:::i;:::-;30819:93;;30936:56;30986:5;30936:56;:::i;:::-;31015:7;31046:1;31031:284;31056:6;31053:1;31050:13;31031:284;;;31132:6;31126:13;31159:63;31218:3;31203:13;31159:63;:::i;:::-;31152:70;;31245:60;31298:6;31245:60;:::i;:::-;31235:70;;31091:224;31078:1;31075;31071:9;31066:14;;31031:284;;;31035:14;31331:3;31324:10;;30732:608;;;30608:732;;;;:::o;31346:831::-;31609:4;31647:3;31636:9;31632:19;31624:27;;31661:71;31729:1;31718:9;31714:17;31705:6;31661:71;:::i;:::-;31742:80;31818:2;31807:9;31803:18;31794:6;31742:80;:::i;:::-;31869:9;31863:4;31859:20;31854:2;31843:9;31839:18;31832:48;31897:108;32000:4;31991:6;31897:108;:::i;:::-;31889:116;;32015:72;32083:2;32072:9;32068:18;32059:6;32015:72;:::i;:::-;32097:73;32165:3;32154:9;32150:19;32141:6;32097:73;:::i;:::-;31346:831;;;;;;;;:::o

Swarm Source

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