ETH Price: $3,496.81 (+2.65%)
Gas: 2 Gwei

Token

QWIKMINE (QWIK)
 

Overview

Max Total Supply

1,000,000 QWIK

Holders

300

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
724.701767836197423945 QWIK

Value
$0.00
0xb1a06f1c78ea28bed28f42b3dde157c706c0fe43
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:
QWIKMINE

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : qwik.sol
// SPDX-License-Identifier: MIT

// www.qwikmine.com

pragma solidity ^0.8.0;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        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;
 
        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 {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    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 QWIKMINE is Context, IERC20, IERC20Metadata, ERC20, Ownable {
    
    using SafeMath for uint256; 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public rescueAddress;
    address private taxWallet;
 
    bool private swapping;
    bool private tradeInLimits = true;
    bool private isTrading = false;
    bool public swapAllowed = false;
    bool public taxShortTermTraders = false;
 
    mapping (address => uint256) private _traderFirstSwapTimestamp;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTradeAmount;
    mapping (address => bool) public automatedMarketMakerPairs;
 
    uint256 private buyFeeTotal;
    uint256 private buyProtocolFee;
    uint256 private buyLiquidityFee;
    uint256 private sellFeeTotal;
    uint256 private sellProtocolFee;
    uint256 private sellLiquidityFee;
    uint256 private quickSellLiquidityFee;
    uint256 private quickSellProtocolFee;
    uint256 private tokensForProtocol;
    uint256 private tokensForLiquidity;
    uint256 private maxTradeAmount;
    uint256 private whenToSwapToken;
    uint256 private maxHolding;
    uint256 launchedAt;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); 
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    constructor(
    string memory name,
    string memory symbol,
    address _rescueAddress,
    address _taxWalletAddress,
    uint256 totalSupply,
    uint256 _buyProtocolFee,
    uint256 _sellProtocolFee,
    uint256 _quickSellProtocolFee,
    uint256 _buyLiquidityFee,
    uint256 _sellLiquidityFee,
    uint256 _quickSellLiquidityFee
    ) ERC20(name, symbol) {

    IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    excludeFromMaxTrade(address(_uniswapV2Router), true);
    uniswapV2Router = _uniswapV2Router;
  
    uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
    excludeFromMaxTrade(address(uniswapV2Pair), true);
    _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

    rescueAddress = _rescueAddress;
    taxWallet = _taxWalletAddress;

    buyProtocolFee = _buyProtocolFee;
    buyLiquidityFee = _buyLiquidityFee;
    buyFeeTotal = buyProtocolFee + buyLiquidityFee;
    sellProtocolFee = _sellProtocolFee;
    sellLiquidityFee = _sellLiquidityFee;
    sellFeeTotal = sellProtocolFee + sellLiquidityFee;
    quickSellLiquidityFee = _quickSellLiquidityFee;
    quickSellProtocolFee = _quickSellProtocolFee;

    excludeFromFees(owner(), true);
    excludeFromFees(address(this), true);
    excludeFromMaxTrade(owner(), true);
    excludeFromMaxTrade(address(this), true);

    maxTradeAmount = totalSupply * 10 / 1000;
    maxHolding = totalSupply * 10 / 1000;
    whenToSwapToken = totalSupply * 10 / 10000;

    _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {}
 
    function startTrading() external onlyOwner {
        isTrading = true;
        swapAllowed = true;
        launchedAt = block.number;
    }
 
    function removeLimits() external onlyOwner returns (bool){
        tradeInLimits = false;
        return true;
    }
 
    function updateSwapAllowed(bool enabled) external onlyOwner(){
        swapAllowed = enabled;
    }

    function setQuickSell(bool onoff) external onlyOwner  {
        taxShortTermTraders = onoff;
    }
 
    function excludeFromMaxTrade(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTradeAmount[updAds] = isEx;
    }
 
    function updateQuickBuyFees(uint256 _ProtocolFee, uint256 _liquidityFee) external onlyOwner {
        buyProtocolFee = _ProtocolFee;
        buyLiquidityFee = _liquidityFee;
        buyFeeTotal = buyProtocolFee + buyLiquidityFee;
        require(buyFeeTotal <= 40, "Cannot exceed 40% Buy fees");
    }
 
    function updateExitFee(uint256 _protocolFee, uint256 _liquidityFee, uint256 _quickSellLiquidityFee, uint256 _quickSellProtocolFee) external onlyOwner {
        sellProtocolFee = _protocolFee;
        sellLiquidityFee = _liquidityFee;
        quickSellLiquidityFee = _quickSellLiquidityFee;
        quickSellProtocolFee = _quickSellProtocolFee;
        sellFeeTotal = sellProtocolFee + sellLiquidityFee;
        require(sellFeeTotal <= 40, "Cannot exceed 40% Sell fees");
    }
 
    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 AMM Pairs"); 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function rescueTokens(IERC20 token, uint256 amount) public {
        require(address(token) != address(0), "Token address cannot be zero");
        require(msg.sender == rescueAddress, "Only the rescue address can call this function");
        token.transfer(msg.sender, amount);
    }
 
    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(tradeInLimits){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                !swapping
            ){
                if(!isTrading){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTradeAmount[to]) {
                        require(amount <= maxTradeAmount, "Transfer amount exceeds the maxTradeAmount.");
                        require(amount + balanceOf(to) <= maxHolding, "Max Holding exceeded");
                }
 
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTradeAmount[from]) {
                        require(amount <= maxTradeAmount, "Transfer amount exceeds the maxTradeAmount.");
                }
                else if(!_isExcludedMaxTradeAmount[to]){
                    require(amount + balanceOf(to) <= maxHolding, "Max Holding exceeded");
                }
            }
        }
 
        bool isBuy = from == uniswapV2Pair;
        if (!isBuy && taxShortTermTraders) {
            if (_traderFirstSwapTimestamp[from] != 0 &&
                (_traderFirstSwapTimestamp[from] + (730 hours) >= block.timestamp))  {
                sellLiquidityFee = quickSellLiquidityFee;
                sellProtocolFee = quickSellProtocolFee;
                sellFeeTotal = sellProtocolFee + sellLiquidityFee;
            } else {
                sellLiquidityFee = 0;
                sellProtocolFee = 0;
                sellFeeTotal = sellProtocolFee + sellLiquidityFee;
            }
        } else {
            if (_traderFirstSwapTimestamp[to] == 0) {
                _traderFirstSwapTimestamp[to] = block.timestamp;
            }
 
            if (!taxShortTermTraders) {
                sellLiquidityFee = 0;
                sellProtocolFee = 0;
                sellFeeTotal = sellProtocolFee + sellLiquidityFee;
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= whenToSwapToken;
 
        if( 
            canSwap &&
            swapAllowed &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        bool takeFee = !swapping;
 
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;

        if(takeFee){
            
            if (automatedMarketMakerPairs[to] && sellFeeTotal > 0){
                fees = amount.mul(sellFeeTotal).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellFeeTotal;
                tokensForProtocol += fees * sellProtocolFee / sellFeeTotal;
            }

            else if(automatedMarketMakerPairs[from] && buyFeeTotal > 0) {
                fees = amount.mul(buyFeeTotal).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyFeeTotal;
                tokensForProtocol += fees * buyProtocolFee / buyFeeTotal;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private { 
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, 
            0, 
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForProtocol;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > whenToSwapToken * 20){
          contractBalance = whenToSwapToken * 20;
        }
 
        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 ethForProtocol = ethBalance.mul(tokensForProtocol).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForProtocol;
 
 
        tokensForLiquidity = 0;
        tokensForProtocol = 0;
 
        (success,) = address(taxWallet).call{value: ethForProtocol}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(taxWallet).call{value: address(this).balance}("");
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"_rescueAddress","type":"address"},{"internalType":"address","name":"_taxWalletAddress","type":"address"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"_buyProtocolFee","type":"uint256"},{"internalType":"uint256","name":"_sellProtocolFee","type":"uint256"},{"internalType":"uint256","name":"_quickSellProtocolFee","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_quickSellLiquidityFee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTradeAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","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":[{"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":"excludeFromMaxTrade","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":"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":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setQuickSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxShortTermTraders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"_protocolFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_quickSellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_quickSellProtocolFee","type":"uint256"}],"name":"updateExitFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ProtocolFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateQuickBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600760156101000a81548160ff0219169083151502179055505f600760166101000a81548160ff0219169083151502179055505f600760176101000a81548160ff0219169083151502179055505f600760186101000a81548160ff02191690831515021790555034801562000079575f80fd5b5060405162005a4238038062005a4283398181016040528101906200009f919062000c94565b8a8a8160039081620000b2919062001006565b508060049081620000c4919062001006565b5050505f620000d86200056360201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001a08160016200056a60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200021e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002449190620010ea565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d09190620010ea565b6040518363ffffffff1660e01b8152600401620002ef9291906200112b565b6020604051808303815f875af11580156200030c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003329190620010ea565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200037a60a05160016200056a60201b60201c565b6200038f60a05160016200066360201b60201c565b8960065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508860075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600d8190555083600e81905550600e54600d546200042f919062001183565b600c81905550856010819055508260118190555060115460105462000455919062001183565b600f8190555081601281905550846013819055506200048b6200047d6200070160201b60201c565b60016200072960201b60201c565b6200049e3060016200072960201b60201c565b620004c0620004b26200070160201b60201c565b60016200056a60201b60201c565b620004d33060016200056a60201b60201c565b6103e8600a89620004e59190620011bd565b620004f1919062001234565b6016819055506103e8600a89620005099190620011bd565b62000515919062001234565b601881905550612710600a896200052d9190620011bd565b62000539919062001234565b6017819055506200055133896200087260201b60201c565b50505050505050505050505062001428565b5f33905090565b6200057a6200056360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200060b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200060290620012c9565b60405180910390fd5b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007396200056360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c190620012c9565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000866919062001305565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008da906200136e565b60405180910390fd5b620008f65f838362000a0f60201b60201c565b6200090d8160025462000a1460201b90919060201c565b60028190555062000964815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000a1460201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a0391906200139f565b60405180910390a35050565b505050565b5f80828462000a24919062001183565b90508381101562000a6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a639062001408565b60405180910390fd5b8091505092915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b62000ad78262000a8f565b810181811067ffffffffffffffff8211171562000af95762000af862000a9f565b5b80604052505050565b5f62000b0d62000a76565b905062000b1b828262000acc565b919050565b5f67ffffffffffffffff82111562000b3d5762000b3c62000a9f565b5b62000b488262000a8f565b9050602081019050919050565b5f5b8381101562000b7457808201518184015260208101905062000b57565b5f8484015250505050565b5f62000b9562000b8f8462000b20565b62000b02565b90508281526020810184848401111562000bb45762000bb362000a8b565b5b62000bc184828562000b55565b509392505050565b5f82601f83011262000be05762000bdf62000a87565b5b815162000bf284826020860162000b7f565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000c268262000bfb565b9050919050565b62000c388162000c1a565b811462000c43575f80fd5b50565b5f8151905062000c568162000c2d565b92915050565b5f819050919050565b62000c708162000c5c565b811462000c7b575f80fd5b50565b5f8151905062000c8e8162000c65565b92915050565b5f805f805f805f805f805f6101608c8e03121562000cb75762000cb662000a7f565b5b5f8c015167ffffffffffffffff81111562000cd75762000cd662000a83565b5b62000ce58e828f0162000bc9565b9b505060208c015167ffffffffffffffff81111562000d095762000d0862000a83565b5b62000d178e828f0162000bc9565b9a5050604062000d2a8e828f0162000c46565b995050606062000d3d8e828f0162000c46565b985050608062000d508e828f0162000c7e565b97505060a062000d638e828f0162000c7e565b96505060c062000d768e828f0162000c7e565b95505060e062000d898e828f0162000c7e565b94505061010062000d9d8e828f0162000c7e565b93505061012062000db18e828f0162000c7e565b92505061014062000dc58e828f0162000c7e565b9150509295989b509295989b9093969950565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000e2757607f821691505b60208210810362000e3d5762000e3c62000de2565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000ea17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e64565b62000ead868362000e64565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000eee62000ee862000ee28462000c5c565b62000ec5565b62000c5c565b9050919050565b5f819050919050565b62000f098362000ece565b62000f2162000f188262000ef5565b84845462000e70565b825550505050565b5f90565b62000f3762000f29565b62000f4481848462000efe565b505050565b5b8181101562000f6b5762000f5f5f8262000f2d565b60018101905062000f4a565b5050565b601f82111562000fba5762000f848162000e43565b62000f8f8462000e55565b8101602085101562000f9f578190505b62000fb762000fae8562000e55565b83018262000f49565b50505b505050565b5f82821c905092915050565b5f62000fdc5f198460080262000fbf565b1980831691505092915050565b5f62000ff6838362000fcb565b9150826002028217905092915050565b620010118262000dd8565b67ffffffffffffffff8111156200102d576200102c62000a9f565b5b62001039825462000e0f565b6200104682828562000f6f565b5f60209050601f8311600181146200107c575f841562001067578287015190505b62001073858262000fe9565b865550620010e2565b601f1984166200108c8662000e43565b5f5b82811015620010b5578489015182556001820191506020850194506020810190506200108e565b86831015620010d55784890151620010d1601f89168262000fcb565b8355505b6001600288020188555050505b505050505050565b5f6020828403121562001102576200110162000a7f565b5b5f620011118482850162000c46565b91505092915050565b620011258162000c1a565b82525050565b5f604082019050620011405f8301856200111a565b6200114f60208301846200111a565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200118f8262000c5c565b91506200119c8362000c5c565b9250828201905080821115620011b757620011b662001156565b5b92915050565b5f620011c98262000c5c565b9150620011d68362000c5c565b9250828202620011e68162000c5c565b915082820484148315176200120057620011ff62001156565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620012408262000c5c565b91506200124d8362000c5c565b92508262001260576200125f62001207565b5b828204905092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620012b16020836200126b565b9150620012be826200127b565b602082019050919050565b5f6020820190508181035f830152620012e281620012a3565b9050919050565b5f8115159050919050565b620012ff81620012e9565b82525050565b5f6020820190506200131a5f830184620012f4565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001356601f836200126b565b9150620013638262001320565b602082019050919050565b5f6020820190508181035f830152620013878162001348565b9050919050565b620013998162000c5c565b82525050565b5f602082019050620013b45f8301846200138e565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f620013f0601b836200126b565b9150620013fd82620013ba565b602082019050919050565b5f6020820190508181035f8301526200142181620013e2565b9050919050565b60805160a0516145c76200147b5f395f8181610dc40152818161144a01526121d201525f818161095e015281816130610152818161314001528181613167015281816131fd015261322401526145c75ff3fe6080604052600436106101e6575f3560e01c80636e2e705c11610101578063a457c2d711610094578063c646c01911610063578063c646c019146106f5578063dd62ed3e1461071d578063e80c37cd14610759578063f2fde38b14610783576101ed565b8063a457c2d714610619578063a9059cbb14610655578063b62496f514610691578063c0246668146106cd576101ed565b8063779bf33c116100d0578063779bf33c146105615780638da5cb5b1461059d57806395d89b41146105c75780639a7a23d6146105f1576101ed565b80636e2e705c146104bd57806370a08231146104e5578063715018a614610521578063751039fc14610537576101ed565b8063293230b81161017957806349bd5a5e1161014857806349bd5a5e146104055780634fbee1931461042f578063525550ea1461046b5780635737619814610495576101ed565b8063293230b8146103615780632c1a5aa514610377578063313ce5671461039f57806339509351146103c9576101ed565b8063172869c4116101b5578063172869c4146102a957806318160ddd146102d35780631f9d1b3d146102fd57806323b872dd14610325576101ed565b806305b791f2146101f157806306fdde0314610219578063095ea7b3146102435780631694505e1461027f576101ed565b366101ed57005b5f80fd5b3480156101fc575f80fd5b5061021760048036038101906102129190613366565b6107ab565b005b348015610224575f80fd5b5061022d6108af565b60405161023a919061342e565b60405180910390f35b34801561024e575f80fd5b50610269600480360381019061026491906134a8565b61093f565b6040516102769190613500565b60405180910390f35b34801561028a575f80fd5b5061029361095c565b6040516102a09190613574565b60405180910390f35b3480156102b4575f80fd5b506102bd610980565b6040516102ca9190613500565b60405180910390f35b3480156102de575f80fd5b506102e7610993565b6040516102f4919061359c565b60405180910390f35b348015610308575f80fd5b50610323600480360381019061031e91906135df565b61099c565b005b348015610330575f80fd5b5061034b6004803603810190610346919061360a565b610a4f565b6040516103589190613500565b60405180910390f35b34801561036c575f80fd5b50610375610b23565b005b348015610382575f80fd5b5061039d6004803603810190610398919061365a565b610bf8565b005b3480156103aa575f80fd5b506103b3610d0c565b6040516103c091906136d9565b60405180910390f35b3480156103d4575f80fd5b506103ef60048036038101906103ea91906134a8565b610d14565b6040516103fc9190613500565b60405180910390f35b348015610410575f80fd5b50610419610dc2565b6040516104269190613701565b60405180910390f35b34801561043a575f80fd5b506104556004803603810190610450919061371a565b610de6565b6040516104629190613500565b60405180910390f35b348015610476575f80fd5b5061047f610e38565b60405161048c9190613701565b60405180910390f35b3480156104a0575f80fd5b506104bb60048036038101906104b69190613780565b610e5d565b005b3480156104c8575f80fd5b506104e360048036038101906104de91906135df565b610fda565b005b3480156104f0575f80fd5b5061050b6004803603810190610506919061371a565b61108d565b604051610518919061359c565b60405180910390f35b34801561052c575f80fd5b506105356110d2565b005b348015610542575f80fd5b5061054b611225565b6040516105589190613500565b60405180910390f35b34801561056c575f80fd5b506105876004803603810190610582919061371a565b6112dd565b6040516105949190613500565b60405180910390f35b3480156105a8575f80fd5b506105b16112fa565b6040516105be9190613701565b60405180910390f35b3480156105d2575f80fd5b506105db611322565b6040516105e8919061342e565b60405180910390f35b3480156105fc575f80fd5b50610617600480360381019061061291906137be565b6113b2565b005b348015610624575f80fd5b5061063f600480360381019061063a91906134a8565b6114e4565b60405161064c9190613500565b60405180910390f35b348015610660575f80fd5b5061067b600480360381019061067691906134a8565b6115ac565b6040516106889190613500565b60405180910390f35b34801561069c575f80fd5b506106b760048036038101906106b2919061371a565b6115c9565b6040516106c49190613500565b60405180910390f35b3480156106d8575f80fd5b506106f360048036038101906106ee91906137be565b6115e6565b005b348015610700575f80fd5b5061071b600480360381019061071691906137be565b611722565b005b348015610728575f80fd5b50610743600480360381019061073e91906137fc565b611810565b604051610750919061359c565b60405180910390f35b348015610764575f80fd5b5061076d611892565b60405161077a9190613500565b60405180910390f35b34801561078e575f80fd5b506107a960048036038101906107a4919061371a565b6118a5565b005b6107b3611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083890613884565b60405180910390fd5b81600d8190555080600e81905550600e54600d5461085f91906138cf565b600c819055506028600c5411156108ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a29061394c565b60405180910390fd5b5050565b6060600380546108be90613997565b80601f01602080910402602001604051908101604052809291908181526020018280546108ea90613997565b80156109355780601f1061090c57610100808354040283529160200191610935565b820191905f5260205f20905b81548152906001019060200180831161091857829003601f168201915b5050505050905090565b5f61095261094b611a67565b8484611a6e565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600760179054906101000a900460ff1681565b5f600254905090565b6109a4611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2990613884565b60405180910390fd5b80600760176101000a81548160ff02191690831515021790555050565b5f610a5b848484611c31565b610b1884610a67611a67565b610b13856040518060600160405280602881526020016145456028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610aca611a67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461284b9092919063ffffffff16565b611a6e565b600190509392505050565b610b2b611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb090613884565b60405180910390fd5b6001600760166101000a81548160ff0219169083151502179055506001600760176101000a81548160ff02191690831515021790555043601981905550565b610c00611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8590613884565b60405180910390fd5b83601081905550826011819055508160128190555080601381905550601154601054610cba91906138cf565b600f819055506028600f541115610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90613a11565b60405180910390fd5b50505050565b5f6012905090565b5f610db8610d20611a67565b84610db38560015f610d30611a67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ad90919063ffffffff16565b611a6e565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec290613a79565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5190613b07565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610f95929190613b25565b6020604051808303815f875af1158015610fb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd59190613b60565b505050565b610fe2611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106790613884565b60405180910390fd5b80600760186101000a81548160ff02191690831515021790555050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6110da611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90613884565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f61122e611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b390613884565b60405180910390fd5b5f600760156101000a81548160ff0219169083151502179055506001905090565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461133190613997565b80601f016020809104026020016040519081016040528092919081815260200182805461135d90613997565b80156113a85780601f1061137f576101008083540402835291602001916113a8565b820191905f5260205f20905b81548152906001019060200180831161138b57829003601f168201915b5050505050905090565b6113ba611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f90613884565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cd90613bfb565b60405180910390fd5b6114e0828261290a565b5050565b5f6115a26114f0611a67565b8461159d8560405180606001604052806025815260200161456d6025913960015f611519611a67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461284b9092919063ffffffff16565b611a6e565b6001905092915050565b5f6115bf6115b8611a67565b8484611c31565b6001905092915050565b600b602052805f5260405f205f915054906101000a900460ff1681565b6115ee611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167390613884565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117169190613500565b60405180910390a25050565b61172a611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117af90613884565b60405180910390fd5b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600760189054906101000a900460ff1681565b6118ad611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193290613884565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a090613c89565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad390613d17565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4190613da5565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c24919061359c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9690613e33565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490613ec1565b60405180910390fd5b5f8103611d2457611d1f83835f6129a8565b612846565b600760159054906101000a900460ff16156121cf57611d416112fa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611daf5750611d7f6112fa565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611de757505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e005750600760149054906101000a900460ff16155b156121ce57600760169054906101000a900460ff16611ef45760095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611eb4575060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eea90613f29565b60405180910390fd5b5b600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611f915750600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561203857601654811115611fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd290613fb7565b60405180910390fd5b601854611fe78361108d565b82611ff291906138cf565b1115612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a9061401f565b60405180910390fd5b6121cd565b600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156120d55750600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156121245760165481111561211f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211690613fb7565b60405180910390fd5b6121cc565b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166121cb5760185461217e8361108d565b8261218991906138cf565b11156121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c19061401f565b60405180910390fd5b5b5b5b5b5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490508015801561223b5750600760189054906101000a900460ff165b15612334575f60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054141580156122d8575042622819a060085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546122d591906138cf565b10155b1561230a576012546011819055506013546010819055506011546010546122ff91906138cf565b600f8190555061232f565b5f6011819055505f60108190555060115460105461232891906138cf565b600f819055505b6123f5565b5f60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054036123bb574260085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600760189054906101000a900460ff166123f4575f6011819055505f6010819055506011546010546123ed91906138cf565b600f819055505b5b5f6123ff3061108d565b90505f60175482101590508080156124235750600760179054906101000a900460ff165b801561243c5750600760149054906101000a900460ff16155b801561248f5750600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156124e2575060095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612535575060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612578576001600760146101000a81548160ff02191690831515021790555061255d612c31565b5f600760146101000a81548160ff0219169083151502179055505b5f600760149054906101000a900460ff1615905060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612627575060095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612630575f90505b5f811561283557600b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561268e57505f600f54115b15612726576126bb60646126ad600f5489612eb690919063ffffffff16565b612f2d90919063ffffffff16565b9050600f54601154826126ce919061403d565b6126d891906140ab565b60155f8282546126e891906138cf565b92505081905550600f5460105482612700919061403d565b61270a91906140ab565b60145f82825461271a91906138cf565b92505081905550612812565b600b5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561277d57505f600c54115b15612811576127aa606461279c600c5489612eb690919063ffffffff16565b612f2d90919063ffffffff16565b9050600c54600e54826127bd919061403d565b6127c791906140ab565b60155f8282546127d791906138cf565b92505081905550600c54600d54826127ef919061403d565b6127f991906140ab565b60145f82825461280991906138cf565b925050819055505b5b5f811115612826576128258830836129a8565b5b808661283291906140db565b95505b6128408888886129a8565b50505050505b505050565b5f838311158290612892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612889919061342e565b60405180910390fd5b505f83856128a091906140db565b9050809150509392505050565b5f8082846128bb91906138cf565b905083811015612900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f790614158565b60405180910390fd5b8091505092915050565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d90613e33565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7b90613ec1565b60405180910390fd5b612a8f838383612f76565b612af88160405180606001604052806026815260200161451f602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461284b9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612b87815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ad90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c24919061359c565b60405180910390a3505050565b5f612c3b3061108d565b90505f601454601554612c4e91906138cf565b90505f80831480612c5e57505f82145b15612c6b57505050612eb4565b6014601754612c7a919061403d565b831115612c93576014601754612c90919061403d565b92505b5f60028360155486612ca5919061403d565b612caf91906140ab565b612cb991906140ab565b90505f612ccf8286612f7b90919063ffffffff16565b90505f479050612cde82612fc4565b5f612cf28247612f7b90919063ffffffff16565b90505f612d1c87612d0e60145485612eb690919063ffffffff16565b612f2d90919063ffffffff16565b90505f8183612d2b91906140db565b90505f6015819055505f60148190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612d80906141a3565b5f6040518083038185875af1925050503d805f8114612dba576040519150601f19603f3d011682016040523d82523d5f602084013e612dbf565b606091505b5050809750505f86118015612dd357505f81115b15612e2057612de286826131f7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051612e17939291906141b7565b60405180910390a15b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612e65906141a3565b5f6040518083038185875af1925050503d805f8114612e9f576040519150601f19603f3d011682016040523d82523d5f602084013e612ea4565b606091505b5050809750505050505050505050505b565b5f808303612ec6575f9050612f27565b5f8284612ed3919061403d565b9050828482612ee291906140ab565b14612f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f199061425c565b60405180910390fd5b809150505b92915050565b5f612f6e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132ce565b905092915050565b505050565b5f612fbc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061284b565b905092915050565b5f600267ffffffffffffffff811115612fe057612fdf61427a565b5b60405190808252806020026020018201604052801561300e5781602001602082028036833780820191505090505b50905030815f81518110613025576130246142a7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130ec91906142e8565b81600181518110613100576130ff6142a7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613165307f000000000000000000000000000000000000000000000000000000000000000084611a6e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016131c6959493929190614403565b5f604051808303815f87803b1580156131dd575f80fd5b505af11580156131ef573d5f803e3d5ffd5b505050505050565b613222307f000000000000000000000000000000000000000000000000000000000000000084611a6e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016132869695949392919061445b565b60606040518083038185885af11580156132a2573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906132c791906144ce565b5050505050565b5f8083118290613314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330b919061342e565b60405180910390fd5b505f838561332291906140ab565b9050809150509392505050565b5f80fd5b5f819050919050565b61334581613333565b811461334f575f80fd5b50565b5f813590506133608161333c565b92915050565b5f806040838503121561337c5761337b61332f565b5b5f61338985828601613352565b925050602061339a85828601613352565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156133db5780820151818401526020810190506133c0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613400826133a4565b61340a81856133ae565b935061341a8185602086016133be565b613423816133e6565b840191505092915050565b5f6020820190508181035f83015261344681846133f6565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6134778261344e565b9050919050565b6134878161346d565b8114613491575f80fd5b50565b5f813590506134a28161347e565b92915050565b5f80604083850312156134be576134bd61332f565b5b5f6134cb85828601613494565b92505060206134dc85828601613352565b9150509250929050565b5f8115159050919050565b6134fa816134e6565b82525050565b5f6020820190506135135f8301846134f1565b92915050565b5f819050919050565b5f61353c6135376135328461344e565b613519565b61344e565b9050919050565b5f61354d82613522565b9050919050565b5f61355e82613543565b9050919050565b61356e81613554565b82525050565b5f6020820190506135875f830184613565565b92915050565b61359681613333565b82525050565b5f6020820190506135af5f83018461358d565b92915050565b6135be816134e6565b81146135c8575f80fd5b50565b5f813590506135d9816135b5565b92915050565b5f602082840312156135f4576135f361332f565b5b5f613601848285016135cb565b91505092915050565b5f805f606084860312156136215761362061332f565b5b5f61362e86828701613494565b935050602061363f86828701613494565b925050604061365086828701613352565b9150509250925092565b5f805f80608085870312156136725761367161332f565b5b5f61367f87828801613352565b945050602061369087828801613352565b93505060406136a187828801613352565b92505060606136b287828801613352565b91505092959194509250565b5f60ff82169050919050565b6136d3816136be565b82525050565b5f6020820190506136ec5f8301846136ca565b92915050565b6136fb8161346d565b82525050565b5f6020820190506137145f8301846136f2565b92915050565b5f6020828403121561372f5761372e61332f565b5b5f61373c84828501613494565b91505092915050565b5f61374f8261346d565b9050919050565b61375f81613745565b8114613769575f80fd5b50565b5f8135905061377a81613756565b92915050565b5f80604083850312156137965761379561332f565b5b5f6137a38582860161376c565b92505060206137b485828601613352565b9150509250929050565b5f80604083850312156137d4576137d361332f565b5b5f6137e185828601613494565b92505060206137f2858286016135cb565b9150509250929050565b5f80604083850312156138125761381161332f565b5b5f61381f85828601613494565b925050602061383085828601613494565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61386e6020836133ae565b91506138798261383a565b602082019050919050565b5f6020820190508181035f83015261389b81613862565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6138d982613333565b91506138e483613333565b92508282019050808211156138fc576138fb6138a2565b5b92915050565b7f43616e6e6f7420657863656564203430252042757920666565730000000000005f82015250565b5f613936601a836133ae565b915061394182613902565b602082019050919050565b5f6020820190508181035f8301526139638161392a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806139ae57607f821691505b6020821081036139c1576139c061396a565b5b50919050565b7f43616e6e6f7420657863656564203430252053656c6c206665657300000000005f82015250565b5f6139fb601b836133ae565b9150613a06826139c7565b602082019050919050565b5f6020820190508181035f830152613a28816139ef565b9050919050565b7f546f6b656e20616464726573732063616e6e6f74206265207a65726f000000005f82015250565b5f613a63601c836133ae565b9150613a6e82613a2f565b602082019050919050565b5f6020820190508181035f830152613a9081613a57565b9050919050565b7f4f6e6c79207468652072657363756520616464726573732063616e2063616c6c5f8201527f20746869732066756e6374696f6e000000000000000000000000000000000000602082015250565b5f613af1602e836133ae565b9150613afc82613a97565b604082019050919050565b5f6020820190508181035f830152613b1e81613ae5565b9050919050565b5f604082019050613b385f8301856136f2565b613b45602083018461358d565b9392505050565b5f81519050613b5a816135b5565b92915050565b5f60208284031215613b7557613b7461332f565b5b5f613b8284828501613b4c565b91505092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f414d4d2050616972730000000000000000000000000000000000000000000000602082015250565b5f613be56029836133ae565b9150613bf082613b8b565b604082019050919050565b5f6020820190508181035f830152613c1281613bd9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613c736026836133ae565b9150613c7e82613c19565b604082019050919050565b5f6020820190508181035f830152613ca081613c67565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613d016024836133ae565b9150613d0c82613ca7565b604082019050919050565b5f6020820190508181035f830152613d2e81613cf5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d8f6022836133ae565b9150613d9a82613d35565b604082019050919050565b5f6020820190508181035f830152613dbc81613d83565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613e1d6025836133ae565b9150613e2882613dc3565b604082019050919050565b5f6020820190508181035f830152613e4a81613e11565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613eab6023836133ae565b9150613eb682613e51565b604082019050919050565b5f6020820190508181035f830152613ed881613e9f565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613f136016836133ae565b9150613f1e82613edf565b602082019050919050565b5f6020820190508181035f830152613f4081613f07565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f72616465416d6f756e742e000000000000000000000000000000000000000000602082015250565b5f613fa1602b836133ae565b9150613fac82613f47565b604082019050919050565b5f6020820190508181035f830152613fce81613f95565b9050919050565b7f4d617820486f6c64696e672065786365656465640000000000000000000000005f82015250565b5f6140096014836133ae565b915061401482613fd5565b602082019050919050565b5f6020820190508181035f83015261403681613ffd565b9050919050565b5f61404782613333565b915061405283613333565b925082820261406081613333565b91508282048414831517614077576140766138a2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6140b582613333565b91506140c083613333565b9250826140d0576140cf61407e565b5b828204905092915050565b5f6140e582613333565b91506140f083613333565b9250828203905081811115614108576141076138a2565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614142601b836133ae565b915061414d8261410e565b602082019050919050565b5f6020820190508181035f83015261416f81614136565b9050919050565b5f81905092915050565b50565b5f61418e5f83614176565b915061419982614180565b5f82019050919050565b5f6141ad82614183565b9150819050919050565b5f6060820190506141ca5f83018661358d565b6141d7602083018561358d565b6141e4604083018461358d565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6142466021836133ae565b9150614251826141ec565b604082019050919050565b5f6020820190508181035f8301526142738161423a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506142e28161347e565b92915050565b5f602082840312156142fd576142fc61332f565b5b5f61430a848285016142d4565b91505092915050565b5f819050919050565b5f61433661433161432c84614313565b613519565b613333565b9050919050565b6143468161431c565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61437e8161346d565b82525050565b5f61438f8383614375565b60208301905092915050565b5f602082019050919050565b5f6143b18261434c565b6143bb8185614356565b93506143c683614366565b805f5b838110156143f65781516143dd8882614384565b97506143e88361439b565b9250506001810190506143c9565b5085935050505092915050565b5f60a0820190506144165f83018861358d565b614423602083018761433d565b818103604083015261443581866143a7565b905061444460608301856136f2565b614451608083018461358d565b9695505050505050565b5f60c08201905061446e5f8301896136f2565b61447b602083018861358d565b614488604083018761433d565b614495606083018661433d565b6144a260808301856136f2565b6144af60a083018461358d565b979650505050505050565b5f815190506144c88161333c565b92915050565b5f805f606084860312156144e5576144e461332f565b5b5f6144f2868287016144ba565b9350506020614503868287016144ba565b9250506040614514868287016144ba565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209618246e726a0e5fc2ef79b5dd98d5a03b98573a54174d919f5997e0f5440f2164736f6c63430008160033000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a0512f6e3b435f728bd9ec1c83ad2b1cb57cf5dd000000000000000000000000973d61ea55257d7bc6a3d6c82c1f835a54182e7300000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085157494b4d494e4500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045157494b00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101e6575f3560e01c80636e2e705c11610101578063a457c2d711610094578063c646c01911610063578063c646c019146106f5578063dd62ed3e1461071d578063e80c37cd14610759578063f2fde38b14610783576101ed565b8063a457c2d714610619578063a9059cbb14610655578063b62496f514610691578063c0246668146106cd576101ed565b8063779bf33c116100d0578063779bf33c146105615780638da5cb5b1461059d57806395d89b41146105c75780639a7a23d6146105f1576101ed565b80636e2e705c146104bd57806370a08231146104e5578063715018a614610521578063751039fc14610537576101ed565b8063293230b81161017957806349bd5a5e1161014857806349bd5a5e146104055780634fbee1931461042f578063525550ea1461046b5780635737619814610495576101ed565b8063293230b8146103615780632c1a5aa514610377578063313ce5671461039f57806339509351146103c9576101ed565b8063172869c4116101b5578063172869c4146102a957806318160ddd146102d35780631f9d1b3d146102fd57806323b872dd14610325576101ed565b806305b791f2146101f157806306fdde0314610219578063095ea7b3146102435780631694505e1461027f576101ed565b366101ed57005b5f80fd5b3480156101fc575f80fd5b5061021760048036038101906102129190613366565b6107ab565b005b348015610224575f80fd5b5061022d6108af565b60405161023a919061342e565b60405180910390f35b34801561024e575f80fd5b50610269600480360381019061026491906134a8565b61093f565b6040516102769190613500565b60405180910390f35b34801561028a575f80fd5b5061029361095c565b6040516102a09190613574565b60405180910390f35b3480156102b4575f80fd5b506102bd610980565b6040516102ca9190613500565b60405180910390f35b3480156102de575f80fd5b506102e7610993565b6040516102f4919061359c565b60405180910390f35b348015610308575f80fd5b50610323600480360381019061031e91906135df565b61099c565b005b348015610330575f80fd5b5061034b6004803603810190610346919061360a565b610a4f565b6040516103589190613500565b60405180910390f35b34801561036c575f80fd5b50610375610b23565b005b348015610382575f80fd5b5061039d6004803603810190610398919061365a565b610bf8565b005b3480156103aa575f80fd5b506103b3610d0c565b6040516103c091906136d9565b60405180910390f35b3480156103d4575f80fd5b506103ef60048036038101906103ea91906134a8565b610d14565b6040516103fc9190613500565b60405180910390f35b348015610410575f80fd5b50610419610dc2565b6040516104269190613701565b60405180910390f35b34801561043a575f80fd5b506104556004803603810190610450919061371a565b610de6565b6040516104629190613500565b60405180910390f35b348015610476575f80fd5b5061047f610e38565b60405161048c9190613701565b60405180910390f35b3480156104a0575f80fd5b506104bb60048036038101906104b69190613780565b610e5d565b005b3480156104c8575f80fd5b506104e360048036038101906104de91906135df565b610fda565b005b3480156104f0575f80fd5b5061050b6004803603810190610506919061371a565b61108d565b604051610518919061359c565b60405180910390f35b34801561052c575f80fd5b506105356110d2565b005b348015610542575f80fd5b5061054b611225565b6040516105589190613500565b60405180910390f35b34801561056c575f80fd5b506105876004803603810190610582919061371a565b6112dd565b6040516105949190613500565b60405180910390f35b3480156105a8575f80fd5b506105b16112fa565b6040516105be9190613701565b60405180910390f35b3480156105d2575f80fd5b506105db611322565b6040516105e8919061342e565b60405180910390f35b3480156105fc575f80fd5b50610617600480360381019061061291906137be565b6113b2565b005b348015610624575f80fd5b5061063f600480360381019061063a91906134a8565b6114e4565b60405161064c9190613500565b60405180910390f35b348015610660575f80fd5b5061067b600480360381019061067691906134a8565b6115ac565b6040516106889190613500565b60405180910390f35b34801561069c575f80fd5b506106b760048036038101906106b2919061371a565b6115c9565b6040516106c49190613500565b60405180910390f35b3480156106d8575f80fd5b506106f360048036038101906106ee91906137be565b6115e6565b005b348015610700575f80fd5b5061071b600480360381019061071691906137be565b611722565b005b348015610728575f80fd5b50610743600480360381019061073e91906137fc565b611810565b604051610750919061359c565b60405180910390f35b348015610764575f80fd5b5061076d611892565b60405161077a9190613500565b60405180910390f35b34801561078e575f80fd5b506107a960048036038101906107a4919061371a565b6118a5565b005b6107b3611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083890613884565b60405180910390fd5b81600d8190555080600e81905550600e54600d5461085f91906138cf565b600c819055506028600c5411156108ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a29061394c565b60405180910390fd5b5050565b6060600380546108be90613997565b80601f01602080910402602001604051908101604052809291908181526020018280546108ea90613997565b80156109355780601f1061090c57610100808354040283529160200191610935565b820191905f5260205f20905b81548152906001019060200180831161091857829003601f168201915b5050505050905090565b5f61095261094b611a67565b8484611a6e565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600760179054906101000a900460ff1681565b5f600254905090565b6109a4611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2990613884565b60405180910390fd5b80600760176101000a81548160ff02191690831515021790555050565b5f610a5b848484611c31565b610b1884610a67611a67565b610b13856040518060600160405280602881526020016145456028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610aca611a67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461284b9092919063ffffffff16565b611a6e565b600190509392505050565b610b2b611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb090613884565b60405180910390fd5b6001600760166101000a81548160ff0219169083151502179055506001600760176101000a81548160ff02191690831515021790555043601981905550565b610c00611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8590613884565b60405180910390fd5b83601081905550826011819055508160128190555080601381905550601154601054610cba91906138cf565b600f819055506028600f541115610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90613a11565b60405180910390fd5b50505050565b5f6012905090565b5f610db8610d20611a67565b84610db38560015f610d30611a67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ad90919063ffffffff16565b611a6e565b6001905092915050565b7f000000000000000000000000f1b0bcf0cfb8d5156bc394425cec79bcaf787e5581565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec290613a79565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5190613b07565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610f95929190613b25565b6020604051808303815f875af1158015610fb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd59190613b60565b505050565b610fe2611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106790613884565b60405180910390fd5b80600760186101000a81548160ff02191690831515021790555050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6110da611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90613884565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f61122e611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b390613884565b60405180910390fd5b5f600760156101000a81548160ff0219169083151502179055506001905090565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461133190613997565b80601f016020809104026020016040519081016040528092919081815260200182805461135d90613997565b80156113a85780601f1061137f576101008083540402835291602001916113a8565b820191905f5260205f20905b81548152906001019060200180831161138b57829003601f168201915b5050505050905090565b6113ba611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f90613884565b60405180910390fd5b7f000000000000000000000000f1b0bcf0cfb8d5156bc394425cec79bcaf787e5573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cd90613bfb565b60405180910390fd5b6114e0828261290a565b5050565b5f6115a26114f0611a67565b8461159d8560405180606001604052806025815260200161456d6025913960015f611519611a67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461284b9092919063ffffffff16565b611a6e565b6001905092915050565b5f6115bf6115b8611a67565b8484611c31565b6001905092915050565b600b602052805f5260405f205f915054906101000a900460ff1681565b6115ee611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167390613884565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117169190613500565b60405180910390a25050565b61172a611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117af90613884565b60405180910390fd5b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600760189054906101000a900460ff1681565b6118ad611a67565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193290613884565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a090613c89565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad390613d17565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4190613da5565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c24919061359c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9690613e33565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490613ec1565b60405180910390fd5b5f8103611d2457611d1f83835f6129a8565b612846565b600760159054906101000a900460ff16156121cf57611d416112fa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611daf5750611d7f6112fa565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611de757505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e005750600760149054906101000a900460ff16155b156121ce57600760169054906101000a900460ff16611ef45760095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611eb4575060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eea90613f29565b60405180910390fd5b5b600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611f915750600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561203857601654811115611fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd290613fb7565b60405180910390fd5b601854611fe78361108d565b82611ff291906138cf565b1115612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a9061401f565b60405180910390fd5b6121cd565b600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156120d55750600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156121245760165481111561211f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211690613fb7565b60405180910390fd5b6121cc565b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166121cb5760185461217e8361108d565b8261218991906138cf565b11156121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c19061401f565b60405180910390fd5b5b5b5b5b5b5f7f000000000000000000000000f1b0bcf0cfb8d5156bc394425cec79bcaf787e5573ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490508015801561223b5750600760189054906101000a900460ff165b15612334575f60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054141580156122d8575042622819a060085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546122d591906138cf565b10155b1561230a576012546011819055506013546010819055506011546010546122ff91906138cf565b600f8190555061232f565b5f6011819055505f60108190555060115460105461232891906138cf565b600f819055505b6123f5565b5f60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054036123bb574260085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600760189054906101000a900460ff166123f4575f6011819055505f6010819055506011546010546123ed91906138cf565b600f819055505b5b5f6123ff3061108d565b90505f60175482101590508080156124235750600760179054906101000a900460ff165b801561243c5750600760149054906101000a900460ff16155b801561248f5750600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156124e2575060095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612535575060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612578576001600760146101000a81548160ff02191690831515021790555061255d612c31565b5f600760146101000a81548160ff0219169083151502179055505b5f600760149054906101000a900460ff1615905060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612627575060095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612630575f90505b5f811561283557600b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561268e57505f600f54115b15612726576126bb60646126ad600f5489612eb690919063ffffffff16565b612f2d90919063ffffffff16565b9050600f54601154826126ce919061403d565b6126d891906140ab565b60155f8282546126e891906138cf565b92505081905550600f5460105482612700919061403d565b61270a91906140ab565b60145f82825461271a91906138cf565b92505081905550612812565b600b5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561277d57505f600c54115b15612811576127aa606461279c600c5489612eb690919063ffffffff16565b612f2d90919063ffffffff16565b9050600c54600e54826127bd919061403d565b6127c791906140ab565b60155f8282546127d791906138cf565b92505081905550600c54600d54826127ef919061403d565b6127f991906140ab565b60145f82825461280991906138cf565b925050819055505b5b5f811115612826576128258830836129a8565b5b808661283291906140db565b95505b6128408888886129a8565b50505050505b505050565b5f838311158290612892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612889919061342e565b60405180910390fd5b505f83856128a091906140db565b9050809150509392505050565b5f8082846128bb91906138cf565b905083811015612900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f790614158565b60405180910390fd5b8091505092915050565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d90613e33565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7b90613ec1565b60405180910390fd5b612a8f838383612f76565b612af88160405180606001604052806026815260200161451f602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461284b9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612b87815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ad90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c24919061359c565b60405180910390a3505050565b5f612c3b3061108d565b90505f601454601554612c4e91906138cf565b90505f80831480612c5e57505f82145b15612c6b57505050612eb4565b6014601754612c7a919061403d565b831115612c93576014601754612c90919061403d565b92505b5f60028360155486612ca5919061403d565b612caf91906140ab565b612cb991906140ab565b90505f612ccf8286612f7b90919063ffffffff16565b90505f479050612cde82612fc4565b5f612cf28247612f7b90919063ffffffff16565b90505f612d1c87612d0e60145485612eb690919063ffffffff16565b612f2d90919063ffffffff16565b90505f8183612d2b91906140db565b90505f6015819055505f60148190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612d80906141a3565b5f6040518083038185875af1925050503d805f8114612dba576040519150601f19603f3d011682016040523d82523d5f602084013e612dbf565b606091505b5050809750505f86118015612dd357505f81115b15612e2057612de286826131f7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051612e17939291906141b7565b60405180910390a15b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612e65906141a3565b5f6040518083038185875af1925050503d805f8114612e9f576040519150601f19603f3d011682016040523d82523d5f602084013e612ea4565b606091505b5050809750505050505050505050505b565b5f808303612ec6575f9050612f27565b5f8284612ed3919061403d565b9050828482612ee291906140ab565b14612f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f199061425c565b60405180910390fd5b809150505b92915050565b5f612f6e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132ce565b905092915050565b505050565b5f612fbc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061284b565b905092915050565b5f600267ffffffffffffffff811115612fe057612fdf61427a565b5b60405190808252806020026020018201604052801561300e5781602001602082028036833780820191505090505b50905030815f81518110613025576130246142a7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130ec91906142e8565b81600181518110613100576130ff6142a7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613165307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611a6e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016131c6959493929190614403565b5f604051808303815f87803b1580156131dd575f80fd5b505af11580156131ef573d5f803e3d5ffd5b505050505050565b613222307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611a6e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016132869695949392919061445b565b60606040518083038185885af11580156132a2573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906132c791906144ce565b5050505050565b5f8083118290613314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330b919061342e565b60405180910390fd5b505f838561332291906140ab565b9050809150509392505050565b5f80fd5b5f819050919050565b61334581613333565b811461334f575f80fd5b50565b5f813590506133608161333c565b92915050565b5f806040838503121561337c5761337b61332f565b5b5f61338985828601613352565b925050602061339a85828601613352565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156133db5780820151818401526020810190506133c0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613400826133a4565b61340a81856133ae565b935061341a8185602086016133be565b613423816133e6565b840191505092915050565b5f6020820190508181035f83015261344681846133f6565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6134778261344e565b9050919050565b6134878161346d565b8114613491575f80fd5b50565b5f813590506134a28161347e565b92915050565b5f80604083850312156134be576134bd61332f565b5b5f6134cb85828601613494565b92505060206134dc85828601613352565b9150509250929050565b5f8115159050919050565b6134fa816134e6565b82525050565b5f6020820190506135135f8301846134f1565b92915050565b5f819050919050565b5f61353c6135376135328461344e565b613519565b61344e565b9050919050565b5f61354d82613522565b9050919050565b5f61355e82613543565b9050919050565b61356e81613554565b82525050565b5f6020820190506135875f830184613565565b92915050565b61359681613333565b82525050565b5f6020820190506135af5f83018461358d565b92915050565b6135be816134e6565b81146135c8575f80fd5b50565b5f813590506135d9816135b5565b92915050565b5f602082840312156135f4576135f361332f565b5b5f613601848285016135cb565b91505092915050565b5f805f606084860312156136215761362061332f565b5b5f61362e86828701613494565b935050602061363f86828701613494565b925050604061365086828701613352565b9150509250925092565b5f805f80608085870312156136725761367161332f565b5b5f61367f87828801613352565b945050602061369087828801613352565b93505060406136a187828801613352565b92505060606136b287828801613352565b91505092959194509250565b5f60ff82169050919050565b6136d3816136be565b82525050565b5f6020820190506136ec5f8301846136ca565b92915050565b6136fb8161346d565b82525050565b5f6020820190506137145f8301846136f2565b92915050565b5f6020828403121561372f5761372e61332f565b5b5f61373c84828501613494565b91505092915050565b5f61374f8261346d565b9050919050565b61375f81613745565b8114613769575f80fd5b50565b5f8135905061377a81613756565b92915050565b5f80604083850312156137965761379561332f565b5b5f6137a38582860161376c565b92505060206137b485828601613352565b9150509250929050565b5f80604083850312156137d4576137d361332f565b5b5f6137e185828601613494565b92505060206137f2858286016135cb565b9150509250929050565b5f80604083850312156138125761381161332f565b5b5f61381f85828601613494565b925050602061383085828601613494565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61386e6020836133ae565b91506138798261383a565b602082019050919050565b5f6020820190508181035f83015261389b81613862565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6138d982613333565b91506138e483613333565b92508282019050808211156138fc576138fb6138a2565b5b92915050565b7f43616e6e6f7420657863656564203430252042757920666565730000000000005f82015250565b5f613936601a836133ae565b915061394182613902565b602082019050919050565b5f6020820190508181035f8301526139638161392a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806139ae57607f821691505b6020821081036139c1576139c061396a565b5b50919050565b7f43616e6e6f7420657863656564203430252053656c6c206665657300000000005f82015250565b5f6139fb601b836133ae565b9150613a06826139c7565b602082019050919050565b5f6020820190508181035f830152613a28816139ef565b9050919050565b7f546f6b656e20616464726573732063616e6e6f74206265207a65726f000000005f82015250565b5f613a63601c836133ae565b9150613a6e82613a2f565b602082019050919050565b5f6020820190508181035f830152613a9081613a57565b9050919050565b7f4f6e6c79207468652072657363756520616464726573732063616e2063616c6c5f8201527f20746869732066756e6374696f6e000000000000000000000000000000000000602082015250565b5f613af1602e836133ae565b9150613afc82613a97565b604082019050919050565b5f6020820190508181035f830152613b1e81613ae5565b9050919050565b5f604082019050613b385f8301856136f2565b613b45602083018461358d565b9392505050565b5f81519050613b5a816135b5565b92915050565b5f60208284031215613b7557613b7461332f565b5b5f613b8284828501613b4c565b91505092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f414d4d2050616972730000000000000000000000000000000000000000000000602082015250565b5f613be56029836133ae565b9150613bf082613b8b565b604082019050919050565b5f6020820190508181035f830152613c1281613bd9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613c736026836133ae565b9150613c7e82613c19565b604082019050919050565b5f6020820190508181035f830152613ca081613c67565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613d016024836133ae565b9150613d0c82613ca7565b604082019050919050565b5f6020820190508181035f830152613d2e81613cf5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d8f6022836133ae565b9150613d9a82613d35565b604082019050919050565b5f6020820190508181035f830152613dbc81613d83565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613e1d6025836133ae565b9150613e2882613dc3565b604082019050919050565b5f6020820190508181035f830152613e4a81613e11565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613eab6023836133ae565b9150613eb682613e51565b604082019050919050565b5f6020820190508181035f830152613ed881613e9f565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613f136016836133ae565b9150613f1e82613edf565b602082019050919050565b5f6020820190508181035f830152613f4081613f07565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f72616465416d6f756e742e000000000000000000000000000000000000000000602082015250565b5f613fa1602b836133ae565b9150613fac82613f47565b604082019050919050565b5f6020820190508181035f830152613fce81613f95565b9050919050565b7f4d617820486f6c64696e672065786365656465640000000000000000000000005f82015250565b5f6140096014836133ae565b915061401482613fd5565b602082019050919050565b5f6020820190508181035f83015261403681613ffd565b9050919050565b5f61404782613333565b915061405283613333565b925082820261406081613333565b91508282048414831517614077576140766138a2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6140b582613333565b91506140c083613333565b9250826140d0576140cf61407e565b5b828204905092915050565b5f6140e582613333565b91506140f083613333565b9250828203905081811115614108576141076138a2565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614142601b836133ae565b915061414d8261410e565b602082019050919050565b5f6020820190508181035f83015261416f81614136565b9050919050565b5f81905092915050565b50565b5f61418e5f83614176565b915061419982614180565b5f82019050919050565b5f6141ad82614183565b9150819050919050565b5f6060820190506141ca5f83018661358d565b6141d7602083018561358d565b6141e4604083018461358d565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6142466021836133ae565b9150614251826141ec565b604082019050919050565b5f6020820190508181035f8301526142738161423a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506142e28161347e565b92915050565b5f602082840312156142fd576142fc61332f565b5b5f61430a848285016142d4565b91505092915050565b5f819050919050565b5f61433661433161432c84614313565b613519565b613333565b9050919050565b6143468161431c565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61437e8161346d565b82525050565b5f61438f8383614375565b60208301905092915050565b5f602082019050919050565b5f6143b18261434c565b6143bb8185614356565b93506143c683614366565b805f5b838110156143f65781516143dd8882614384565b97506143e88361439b565b9250506001810190506143c9565b5085935050505092915050565b5f60a0820190506144165f83018861358d565b614423602083018761433d565b818103604083015261443581866143a7565b905061444460608301856136f2565b614451608083018461358d565b9695505050505050565b5f60c08201905061446e5f8301896136f2565b61447b602083018861358d565b614488604083018761433d565b614495606083018661433d565b6144a260808301856136f2565b6144af60a083018461358d565b979650505050505050565b5f815190506144c88161333c565b92915050565b5f805f606084860312156144e5576144e461332f565b5b5f6144f2868287016144ba565b9350506020614503868287016144ba565b9250506040614514868287016144ba565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209618246e726a0e5fc2ef79b5dd98d5a03b98573a54174d919f5997e0f5440f2164736f6c63430008160033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a0512f6e3b435f728bd9ec1c83ad2b1cb57cf5dd000000000000000000000000973d61ea55257d7bc6a3d6c82c1f835a54182e7300000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085157494b4d494e4500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045157494b00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): QWIKMINE
Arg [1] : symbol (string): QWIK
Arg [2] : _rescueAddress (address): 0xa0512f6e3B435f728BD9ec1c83aD2b1CB57Cf5Dd
Arg [3] : _taxWalletAddress (address): 0x973d61EA55257d7bc6a3d6C82C1F835a54182E73
Arg [4] : totalSupply (uint256): 1000000000000000000000000
Arg [5] : _buyProtocolFee (uint256): 0
Arg [6] : _sellProtocolFee (uint256): 0
Arg [7] : _quickSellProtocolFee (uint256): 0
Arg [8] : _buyLiquidityFee (uint256): 0
Arg [9] : _sellLiquidityFee (uint256): 0
Arg [10] : _quickSellLiquidityFee (uint256): 0

-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [2] : 000000000000000000000000a0512f6e3b435f728bd9ec1c83ad2b1cb57cf5dd
Arg [3] : 000000000000000000000000973d61ea55257d7bc6a3d6c82c1f835a54182e73
Arg [4] : 00000000000000000000000000000000000000000000d3c21bcecceda1000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [12] : 5157494b4d494e45000000000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [14] : 5157494b00000000000000000000000000000000000000000000000000000000


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.