ETH Price: $2,529.13 (-0.00%)

Token

4rfi.finance (4RFI)
 

Overview

Max Total Supply

9,554.047411431887560886 4RFI

Holders

18

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
29.333970314100878125 4RFI

Value
$0.00
0xa84b6fde0ef95ff18d6b6a1a8fecd490b1b6b30e
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

4RFI aims to reward its long-term holders by charging a 4% transaction tax on every transaction and re-distributes to its holders. 4RFI is also introducing an automated process of token burns.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
$4RFI

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-30
*/

/*
    4RFI - SMARTCONTRACT
    
    website: 4rfi.finance
    
    telegram: https://t.me/RFI_public
*/


// SPDX-License-Identifier: MIT

pragma solidity ^0.6.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;
    }
}


/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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);
}



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
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;
    }
}

/**
 * @dev Collection of functions related to the address type
 */
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);
            }
        }
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        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 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
      address token,
      uint liquidity,
      uint amountTokenMin,
      uint amountETHMin,
      address to,
      uint deadline
    ) external returns (uint amountETH);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    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;
}

contract $4RFI is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    IUniswapV2Router02 public immutable _uniswapV2Router;

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

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    address private currentPoolAddress;
    
    bool public tradingEnabled;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1 * 10000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _tBurnTotal;

    string private _name = '4rfi.finance';
    string private _symbol = '4RFI';
    uint8 private _decimals = 18;
    
    uint256 private _taxFee = 0;
    uint256 private _burnFee = 0;

    constructor (IUniswapV2Router02 uniswapV2Router) public {
        _rOwned[_msgSender()] = _rTotal;
        _uniswapV2Router = uniswapV2Router;
        currentPoolAddress = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    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 view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[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 isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

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

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    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 excludeAccount(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 includeAccount(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 _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((_msgSender() == currentPoolAddress || _msgSender() == address(_uniswapV2Router)) && !tradingEnabled)
                require(false, "4RFI: trading has not been enabled.");
        
        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);
        }
    }

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

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

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

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

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

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tBurn) = _getTValues(tAmount, _taxFee, _burnFee);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tBurn, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tBurn);
    }

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 burnFee) public pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tBurn = tAmount.mul(burnFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tBurn);
        return (tTransferAmount, tFee, tBurn);
    }

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

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

    function _getCurrentSupply() public 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() public view returns(uint256) {
        return _taxFee;
    }
    
    function _getburnFee() public view returns(uint256) {
        return _burnFee;
    }

    function _enableTrading() external onlyOwner() {
        tradingEnabled = !tradingEnabled;
    }

    function _setTaxFee(uint256 taxFee) external onlyOwner() {
        require(taxFee >= 0 && taxFee <= 20, 'taxFee should be in 0 - 20');
        _taxFee = taxFee;
    }
    
    function _setBurnFee(uint256 burnFee) external onlyOwner() {
        require(burnFee >= 0 && burnFee <= 20, 'burnFee should be in 0 - 20');
        _burnFee = burnFee;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IUniswapV2Router02","name":"uniswapV2Router","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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_getCurrentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"uint256","name":"tFee","type":"uint256"},{"internalType":"uint256","name":"tBurn","type":"uint256"},{"internalType":"uint256","name":"currentRate","type":"uint256"}],"name":"_getRValues","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"_getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"_getTValues","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"_getTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getburnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"_setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","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":"isExcluded","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":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"totalBurn","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":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405269021e19e0c9bab2400000600755600754600019816200002057fe5b06600019036008556040518060400160405280600c81526020017f347266692e66696e616e63650000000000000000000000000000000000000000815250600b908051906020019062000075929190620004fb565b506040518060400160405280600481526020017f3452464900000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000c3929190620004fb565b506012600d60006101000a81548160ff021916908360ff1602179055506000600e556000600f55348015620000f757600080fd5b506040516200436038038062004360833981810160405260208110156200011d57600080fd5b8101908080519060200190929190505050600062000140620004f360201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060085460016000620001f5620004f360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002b157600080fd5b505afa158015620002c6573d6000803e3d6000fd5b505050506040513d6020811015620002dd57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035157600080fd5b505afa15801562000366573d6000803e3d6000fd5b505050506040513d60208110156200037d57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620003f857600080fd5b505af11580156200040d573d6000803e3d6000fd5b505050506040513d60208110156200042457600080fd5b8101908080519060200190929190505050600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000485620004f360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040518082815260200191505060405180910390a350620005a1565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200053e57805160ff19168380011785556200056f565b828001600101855582156200056f579182015b828111156200056e57825182559160200191906001019062000551565b5b5090506200057e919062000582565b5090565b5b808211156200059d57600081600090555060010162000583565b5090565b60805160601c613d9c620005c4600039806111e75280612a855250613d9c6000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063583e05681161011a57806397a9d560116100ad578063cba0e9961161007c578063cba0e996146108f4578063dd62ed3e1461094e578063f2cc0c18146109c6578063f2fde38b14610a0a578063f84354f114610a4e576101fb565b806397a9d560146107fd578063a0ac5e1914610822578063a457c2d71461082c578063a9059cbb14610890576101fb565b80638da5cb5b116100e95780638da5cb5b146106c457806392704057146106f857806394e107841461075c57806395d89b411461077a576101fb565b8063583e0568146106005780635880b8731461063457806370a0823114610662578063715018a6146106ba576101fb565b80632fbff030116101925780633bd5d173116101615780633bd5d173146105465780633c9f861d146105745780634549b039146105925780634ada218b146105e0576101fb565b80632fbff03014610475578063313ce5671461049357806339509351146104b45780633b6b196114610518576101fb565b80631d5671e4116101ce5780631d5671e4146103235780631fcb225a1461039157806323b872dd146103af5780632d83811914610433576101fb565b806306fdde0314610200578063095ea7b31461028357806313114a9d146102e757806318160ddd14610305575b600080fd5b610208610a92565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561024857808201518184015260208101905061022d565b50505050905090810190601f1680156102755780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102cf6004803603604081101561029957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b34565b60405180821515815260200191505060405180910390f35b6102ef610b52565b6040518082815260200191505060405180910390f35b61030d610b5c565b6040518082815260200191505060405180910390f35b61036d6004803603608081101561033957600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050610b66565b60405180848152602001838152602001828152602001935050505060405180910390f35b610399610bef565b6040518082815260200191505060405180910390f35b61041b600480360360608110156103c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bf9565b60405180821515815260200191505060405180910390f35b61045f6004803603602081101561044957600080fd5b8101908080359060200190929190505050610cd2565b6040518082815260200191505060405180910390f35b61047d610d56565b6040518082815260200191505060405180910390f35b61049b610d60565b604051808260ff16815260200191505060405180910390f35b610500600480360360408110156104ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d77565b60405180821515815260200191505060405180910390f35b6105446004803603602081101561052e57600080fd5b8101908080359060200190929190505050610e2a565b005b6105726004803603602081101561055c57600080fd5b8101908080359060200190929190505050610f80565b005b61057c611111565b6040518082815260200191505060405180910390f35b6105ca600480360360408110156105a857600080fd5b810190808035906020019092919080351515906020019092919050505061111b565b6040518082815260200191505060405180910390f35b6105e86111d2565b60405180821515815260200191505060405180910390f35b6106086111e5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106606004803603602081101561064a57600080fd5b8101908080359060200190929190505050611209565b005b6106a46004803603602081101561067857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061135f565b6040518082815260200191505060405180910390f35b6106c261144a565b005b6106cc6115d0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107386004803603606081101561070e57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506115f9565b60405180848152602001838152602001828152602001935050505060405180910390f35b61076461168f565b6040518082815260200191505060405180910390f35b6107826116ba565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107c25780820151818401526020810190506107a7565b50505050905090810190601f1680156107ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61080561175c565b604051808381526020018281526020019250505060405180910390f35b61082a6119ed565b005b6108786004803603604081101561084257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ae1565b60405180821515815260200191505060405180910390f35b6108dc600480360360408110156108a657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bae565b60405180821515815260200191505060405180910390f35b6109366004803603602081101561090a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bcc565b60405180821515815260200191505060405180910390f35b6109b06004803603604081101561096457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c22565b6040518082815260200191505060405180910390f35b610a08600480360360208110156109dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ca9565b005b610a4c60048036036020811015610a2057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061205c565b005b610a9060048036036020811015610a6457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612267565b005b6060600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b2a5780601f10610aff57610100808354040283529160200191610b2a565b820191906000526020600020905b815481529060010190602001808311610b0d57829003601f168201915b5050505050905090565b6000610b48610b416125f1565b84846125f9565b6001905092915050565b6000600954905090565b6000600754905090565b600080600080610b7f85896127f090919063ffffffff16565b90506000610b9686896127f090919063ffffffff16565b90506000610bad87896127f090919063ffffffff16565b90506000610bd682610bc8858761287690919063ffffffff16565b61287690919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600f54905090565b6000610c068484846128c0565b610cc784610c126125f1565b610cc285604051806060016040528060288152602001613c5a60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c786125f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e449092919063ffffffff16565b6125f9565b600190509392505050565b6000600854821115610d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613ba4602a913960400191505060405180910390fd5b6000610d3961168f565b9050610d4e8184612f0490919063ffffffff16565b915050919050565b6000600e54905090565b6000600d60009054906101000a900460ff16905090565b6000610e20610d846125f1565b84610e1b8560036000610d956125f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f4e90919063ffffffff16565b6125f9565b6001905092915050565b610e326125f1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ef2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008110158015610f04575060148111155b610f76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6275726e4665652073686f756c6420626520696e2030202d203230000000000081525060200191505060405180910390fd5b80600f8190555050565b6000610f8a6125f1565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561102f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613d16602c913960400191505060405180910390fd5b600061103a83612fd6565b5050505050905061109381600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110eb8160085461287690919063ffffffff16565b60088190555061110683600954612f4e90919063ffffffff16565b600981905550505050565b6000600a54905090565b6000600754831115611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b816111b55760006111a584612fd6565b50505050509050809150506111cc565b60006111c084612fd6565b50505050915050809150505b92915050565b600660149054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6112116125f1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600081101580156112e3575060148111155b611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2030202d20323000000000000081525060200191505060405180910390fd5b80600e8190555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113fa57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611445565b611442600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cd2565b90505b919050565b6114526125f1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611512576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806000806116256064611617888a6127f090919063ffffffff16565b612f0490919063ffffffff16565b9050600061164f6064611641888b6127f090919063ffffffff16565b612f0490919063ffffffff16565b905060006116788261166a858c61287690919063ffffffff16565b61287690919063ffffffff16565b905080838395509550955050505093509350939050565b600080600061169c61175c565b915091506116b38183612f0490919063ffffffff16565b9250505090565b6060600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117525780601f1061172757610100808354040283529160200191611752565b820191906000526020600020905b81548152906001019060200180831161173557829003601f168201915b5050505050905090565b600080600060085490506000600754905060005b6005805490508110156119b05782600160006005848154811061178f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180611876575081600260006005848154811061180e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561188d57600854600754945094505050506119e9565b61191660016000600584815481106118a157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461287690919063ffffffff16565b92506119a1600260006005848154811061192c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361287690919063ffffffff16565b91508080600101915050611770565b506119c8600754600854612f0490919063ffffffff16565b8210156119e0576008546007549350935050506119e9565b81819350935050505b9091565b6119f56125f1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660149054906101000a900460ff1615600660146101000a81548160ff021916908315150217905550565b6000611ba4611aee6125f1565b84611b9f85604051806060016040528060258152602001613d426025913960036000611b186125f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e449092919063ffffffff16565b6125f9565b6001905092915050565b6000611bc2611bbb6125f1565b84846128c0565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611cb16125f1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613cf46022913960400191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611eca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611f9e57611f5a600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cd2565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6120646125f1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612124576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bce6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61226f6125f1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166123ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b6005805490508110156125ed578173ffffffffffffffffffffffffffffffffffffffff166005828154811061242257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125e05760056001600580549050038154811061247e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600582815481106124b657fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060058054806125a657fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556125ed565b80806001019150506123f1565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561267f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613cd06024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612705576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613bf46022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000808314156128035760009050612870565b600082840290508284828161281457fe5b041461286b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613c396021913960400191505060405180910390fd5b809150505b92915050565b60006128b883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e44565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612946576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613cab6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613b816023913960400191505060405180910390fd5b60008111612a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613c826029913960400191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a666125f1565b73ffffffffffffffffffffffffffffffffffffffff161480612ada57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612ac26125f1565b73ffffffffffffffffffffffffffffffffffffffff16145b8015612af35750600660149054906101000a900460ff16155b15612b50576000612b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613c166023913960400191505060405180910390fd5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bf35750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c0857612c0383838361303e565b612e3f565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612cab5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cc057612cbb8383836132bc565b612e3e565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d645750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d7957612d7483838361353a565b612e3d565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e1b5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e3057612e2b838383613723565b612e3c565b612e3b83838361353a565b5b5b5b5b505050565b6000838311158290612ef1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612eb6578082015181840152602081019050612e9b565b50505050905090810190601f168015612ee35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000612f4683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a36565b905092915050565b600080828401905083811015612fcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000612ff38a600e54600f546115f9565b925092509250600061300361168f565b905060008060006130168e878787610b66565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061304861168f565b905060008060008060008061305c88612fd6565b955095509550955095509550600061307d88836127f090919063ffffffff16565b90506130d189600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061316687600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131fb86600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f4e90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061324a85828585613afc565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b60006132c661168f565b90506000806000806000806132da88612fd6565b95509550955095509550955060006132fb88836127f090919063ffffffff16565b905061334f87600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133e484600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f4e90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061347986600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f4e90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134c885828585613afc565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b600061354461168f565b905060008060008060008061355888612fd6565b955095509550955095509550600061357988836127f090919063ffffffff16565b90506135cd87600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061366286600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f4e90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136b185828585613afc565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b600061372d61168f565b905060008060008060008061374188612fd6565b955095509550955095509550600061376288836127f090919063ffffffff16565b90506137b689600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061384b87600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138e084600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f4e90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061397586600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f4e90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139c485828585613afc565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b60008083118290613ae2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613aa7578082015181840152602081019050613a8c565b50505050905090810190601f168015613ad45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613aee57fe5b049050809150509392505050565b613b2383613b158660085461287690919063ffffffff16565b61287690919063ffffffff16565b600881905550613b3e82600954612f4e90919063ffffffff16565b600981905550613b5981600a54612f4e90919063ffffffff16565b600a81905550613b748160075461287690919063ffffffff16565b6007819055505050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373345246493a2074726164696e6720686173206e6f74206265656e20656e61626c65642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220300955c1af5b477e021a9148ffb33ade1b9c4226274391b57e917a11fcdb681464736f6c634300060c00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063583e05681161011a57806397a9d560116100ad578063cba0e9961161007c578063cba0e996146108f4578063dd62ed3e1461094e578063f2cc0c18146109c6578063f2fde38b14610a0a578063f84354f114610a4e576101fb565b806397a9d560146107fd578063a0ac5e1914610822578063a457c2d71461082c578063a9059cbb14610890576101fb565b80638da5cb5b116100e95780638da5cb5b146106c457806392704057146106f857806394e107841461075c57806395d89b411461077a576101fb565b8063583e0568146106005780635880b8731461063457806370a0823114610662578063715018a6146106ba576101fb565b80632fbff030116101925780633bd5d173116101615780633bd5d173146105465780633c9f861d146105745780634549b039146105925780634ada218b146105e0576101fb565b80632fbff03014610475578063313ce5671461049357806339509351146104b45780633b6b196114610518576101fb565b80631d5671e4116101ce5780631d5671e4146103235780631fcb225a1461039157806323b872dd146103af5780632d83811914610433576101fb565b806306fdde0314610200578063095ea7b31461028357806313114a9d146102e757806318160ddd14610305575b600080fd5b610208610a92565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561024857808201518184015260208101905061022d565b50505050905090810190601f1680156102755780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102cf6004803603604081101561029957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b34565b60405180821515815260200191505060405180910390f35b6102ef610b52565b6040518082815260200191505060405180910390f35b61030d610b5c565b6040518082815260200191505060405180910390f35b61036d6004803603608081101561033957600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050610b66565b60405180848152602001838152602001828152602001935050505060405180910390f35b610399610bef565b6040518082815260200191505060405180910390f35b61041b600480360360608110156103c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bf9565b60405180821515815260200191505060405180910390f35b61045f6004803603602081101561044957600080fd5b8101908080359060200190929190505050610cd2565b6040518082815260200191505060405180910390f35b61047d610d56565b6040518082815260200191505060405180910390f35b61049b610d60565b604051808260ff16815260200191505060405180910390f35b610500600480360360408110156104ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d77565b60405180821515815260200191505060405180910390f35b6105446004803603602081101561052e57600080fd5b8101908080359060200190929190505050610e2a565b005b6105726004803603602081101561055c57600080fd5b8101908080359060200190929190505050610f80565b005b61057c611111565b6040518082815260200191505060405180910390f35b6105ca600480360360408110156105a857600080fd5b810190808035906020019092919080351515906020019092919050505061111b565b6040518082815260200191505060405180910390f35b6105e86111d2565b60405180821515815260200191505060405180910390f35b6106086111e5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106606004803603602081101561064a57600080fd5b8101908080359060200190929190505050611209565b005b6106a46004803603602081101561067857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061135f565b6040518082815260200191505060405180910390f35b6106c261144a565b005b6106cc6115d0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107386004803603606081101561070e57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506115f9565b60405180848152602001838152602001828152602001935050505060405180910390f35b61076461168f565b6040518082815260200191505060405180910390f35b6107826116ba565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107c25780820151818401526020810190506107a7565b50505050905090810190601f1680156107ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61080561175c565b604051808381526020018281526020019250505060405180910390f35b61082a6119ed565b005b6108786004803603604081101561084257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ae1565b60405180821515815260200191505060405180910390f35b6108dc600480360360408110156108a657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bae565b60405180821515815260200191505060405180910390f35b6109366004803603602081101561090a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bcc565b60405180821515815260200191505060405180910390f35b6109b06004803603604081101561096457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c22565b6040518082815260200191505060405180910390f35b610a08600480360360208110156109dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ca9565b005b610a4c60048036036020811015610a2057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061205c565b005b610a9060048036036020811015610a6457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612267565b005b6060600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b2a5780601f10610aff57610100808354040283529160200191610b2a565b820191906000526020600020905b815481529060010190602001808311610b0d57829003601f168201915b5050505050905090565b6000610b48610b416125f1565b84846125f9565b6001905092915050565b6000600954905090565b6000600754905090565b600080600080610b7f85896127f090919063ffffffff16565b90506000610b9686896127f090919063ffffffff16565b90506000610bad87896127f090919063ffffffff16565b90506000610bd682610bc8858761287690919063ffffffff16565b61287690919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600f54905090565b6000610c068484846128c0565b610cc784610c126125f1565b610cc285604051806060016040528060288152602001613c5a60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c786125f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e449092919063ffffffff16565b6125f9565b600190509392505050565b6000600854821115610d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613ba4602a913960400191505060405180910390fd5b6000610d3961168f565b9050610d4e8184612f0490919063ffffffff16565b915050919050565b6000600e54905090565b6000600d60009054906101000a900460ff16905090565b6000610e20610d846125f1565b84610e1b8560036000610d956125f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f4e90919063ffffffff16565b6125f9565b6001905092915050565b610e326125f1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ef2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008110158015610f04575060148111155b610f76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6275726e4665652073686f756c6420626520696e2030202d203230000000000081525060200191505060405180910390fd5b80600f8190555050565b6000610f8a6125f1565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561102f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613d16602c913960400191505060405180910390fd5b600061103a83612fd6565b5050505050905061109381600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110eb8160085461287690919063ffffffff16565b60088190555061110683600954612f4e90919063ffffffff16565b600981905550505050565b6000600a54905090565b6000600754831115611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b816111b55760006111a584612fd6565b50505050509050809150506111cc565b60006111c084612fd6565b50505050915050809150505b92915050565b600660149054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6112116125f1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600081101580156112e3575060148111155b611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2030202d20323000000000000081525060200191505060405180910390fd5b80600e8190555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113fa57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611445565b611442600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cd2565b90505b919050565b6114526125f1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611512576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806000806116256064611617888a6127f090919063ffffffff16565b612f0490919063ffffffff16565b9050600061164f6064611641888b6127f090919063ffffffff16565b612f0490919063ffffffff16565b905060006116788261166a858c61287690919063ffffffff16565b61287690919063ffffffff16565b905080838395509550955050505093509350939050565b600080600061169c61175c565b915091506116b38183612f0490919063ffffffff16565b9250505090565b6060600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117525780601f1061172757610100808354040283529160200191611752565b820191906000526020600020905b81548152906001019060200180831161173557829003601f168201915b5050505050905090565b600080600060085490506000600754905060005b6005805490508110156119b05782600160006005848154811061178f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180611876575081600260006005848154811061180e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561188d57600854600754945094505050506119e9565b61191660016000600584815481106118a157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461287690919063ffffffff16565b92506119a1600260006005848154811061192c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361287690919063ffffffff16565b91508080600101915050611770565b506119c8600754600854612f0490919063ffffffff16565b8210156119e0576008546007549350935050506119e9565b81819350935050505b9091565b6119f56125f1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660149054906101000a900460ff1615600660146101000a81548160ff021916908315150217905550565b6000611ba4611aee6125f1565b84611b9f85604051806060016040528060258152602001613d426025913960036000611b186125f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e449092919063ffffffff16565b6125f9565b6001905092915050565b6000611bc2611bbb6125f1565b84846128c0565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611cb16125f1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613cf46022913960400191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611eca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611f9e57611f5a600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cd2565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6120646125f1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612124576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bce6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61226f6125f1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166123ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b6005805490508110156125ed578173ffffffffffffffffffffffffffffffffffffffff166005828154811061242257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125e05760056001600580549050038154811061247e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600582815481106124b657fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060058054806125a657fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556125ed565b80806001019150506123f1565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561267f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613cd06024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612705576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613bf46022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000808314156128035760009050612870565b600082840290508284828161281457fe5b041461286b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613c396021913960400191505060405180910390fd5b809150505b92915050565b60006128b883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e44565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612946576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613cab6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613b816023913960400191505060405180910390fd5b60008111612a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613c826029913960400191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a666125f1565b73ffffffffffffffffffffffffffffffffffffffff161480612ada57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16612ac26125f1565b73ffffffffffffffffffffffffffffffffffffffff16145b8015612af35750600660149054906101000a900460ff16155b15612b50576000612b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613c166023913960400191505060405180910390fd5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bf35750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c0857612c0383838361303e565b612e3f565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612cab5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cc057612cbb8383836132bc565b612e3e565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d645750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d7957612d7483838361353a565b612e3d565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e1b5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e3057612e2b838383613723565b612e3c565b612e3b83838361353a565b5b5b5b5b505050565b6000838311158290612ef1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612eb6578082015181840152602081019050612e9b565b50505050905090810190601f168015612ee35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000612f4683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a36565b905092915050565b600080828401905083811015612fcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000612ff38a600e54600f546115f9565b925092509250600061300361168f565b905060008060006130168e878787610b66565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061304861168f565b905060008060008060008061305c88612fd6565b955095509550955095509550600061307d88836127f090919063ffffffff16565b90506130d189600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061316687600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131fb86600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f4e90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061324a85828585613afc565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b60006132c661168f565b90506000806000806000806132da88612fd6565b95509550955095509550955060006132fb88836127f090919063ffffffff16565b905061334f87600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133e484600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f4e90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061347986600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f4e90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134c885828585613afc565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b600061354461168f565b905060008060008060008061355888612fd6565b955095509550955095509550600061357988836127f090919063ffffffff16565b90506135cd87600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061366286600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f4e90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136b185828585613afc565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b600061372d61168f565b905060008060008060008061374188612fd6565b955095509550955095509550600061376288836127f090919063ffffffff16565b90506137b689600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061384b87600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287690919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138e084600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f4e90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061397586600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f4e90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139c485828585613afc565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b60008083118290613ae2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613aa7578082015181840152602081019050613a8c565b50505050905090810190601f168015613ad45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613aee57fe5b049050809150509392505050565b613b2383613b158660085461287690919063ffffffff16565b61287690919063ffffffff16565b600881905550613b3e82600954612f4e90919063ffffffff16565b600981905550613b5981600a54612f4e90919063ffffffff16565b600a81905550613b748160075461287690919063ffffffff16565b6007819055505050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373345246493a2074726164696e6720686173206e6f74206265656e20656e61626c65642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220300955c1af5b477e021a9148ffb33ade1b9c4226274391b57e917a11fcdb681464736f6c634300060c0033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : uniswapV2Router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

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


Deployed Bytecode Sourcemap

18731:12562:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20037:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20949:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22060:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20314:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29479:408;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30733:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21118:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23084:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30637:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20223:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21439:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31114:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22255:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22159:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22640:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19222:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18848:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30933:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20417:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16395:148;;;:::i;:::-;;15753:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29121:350;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29895:162;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20128:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30065:560;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;30827:98;;;:::i;:::-;;21665:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20623:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21942:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20798:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23345:443;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16698:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23796:478;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20037:83;20074:13;20107:5;20100:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20037:83;:::o;20949:161::-;21024:4;21041:39;21050:12;:10;:12::i;:::-;21064:7;21073:6;21041:8;:39::i;:::-;21098:4;21091:11;;20949:161;;;;:::o;22060:87::-;22102:7;22129:10;;22122:17;;22060:87;:::o;20314:95::-;20367:7;20394;;20387:14;;20314:95;:::o;29479:408::-;29588:7;29597;29606;29626:15;29644:24;29656:11;29644:7;:11;;:24;;;;:::i;:::-;29626:42;;29679:12;29694:21;29703:11;29694:4;:8;;:21;;;;:::i;:::-;29679:36;;29726:13;29742:22;29752:11;29742:5;:9;;:22;;;;:::i;:::-;29726:38;;29775:23;29801:28;29823:5;29801:17;29813:4;29801:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;29775:54;;29848:7;29857:15;29874:4;29840:39;;;;;;;;;;29479:408;;;;;;;;:::o;30733:86::-;30776:7;30803:8;;30796:15;;30733:86;:::o;21118:313::-;21216:4;21233:36;21243:6;21251:9;21262:6;21233:9;:36::i;:::-;21280:121;21289:6;21297:12;:10;:12::i;:::-;21311:89;21349:6;21311:89;;;;;;;;;;;;;;;;;:11;:19;21323:6;21311:19;;;;;;;;;;;;;;;:33;21331:12;:10;:12::i;:::-;21311:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;21280:8;:121::i;:::-;21419:4;21412:11;;21118:313;;;;;:::o;23084:253::-;23150:7;23189;;23178;:18;;23170:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23254:19;23277:10;:8;:10::i;:::-;23254:33;;23305:24;23317:11;23305:7;:11;;:24;;;;:::i;:::-;23298:31;;;23084:253;;;:::o;30637:84::-;30679:7;30706;;30699:14;;30637:84;:::o;20223:83::-;20264:5;20289:9;;;;;;;;;;;20282:16;;20223:83;:::o;21439:218::-;21527:4;21544:83;21553:12;:10;:12::i;:::-;21567:7;21576:50;21615:10;21576:11;:25;21588:12;:10;:12::i;:::-;21576:25;;;;;;;;;;;;;;;:34;21602:7;21576:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;21544:8;:83::i;:::-;21645:4;21638:11;;21439:218;;;;:::o;31114:176::-;15975:12;:10;:12::i;:::-;15965:22;;:6;;;;;;;;;;:22;;;15957:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31203:1:::1;31192:7;:12;;:29;;;;;31219:2;31208:7;:13;;31192:29;31184:69;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31275:7;31264:8;:18;;;;31114:176:::0;:::o;22255:377::-;22307:14;22324:12;:10;:12::i;:::-;22307:29;;22356:11;:19;22368:6;22356:19;;;;;;;;;;;;;;;;;;;;;;;;;22355:20;22347:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22436:15;22460:19;22471:7;22460:10;:19::i;:::-;22435:44;;;;;;;22508:28;22528:7;22508;:15;22516:6;22508:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22490:7;:15;22498:6;22490:15;;;;;;;;;;;;;;;:46;;;;22557:20;22569:7;22557;;:11;;:20;;;;:::i;:::-;22547:7;:30;;;;22601:23;22616:7;22601:10;;:14;;:23;;;;:::i;:::-;22588:10;:36;;;;22255:377;;;:::o;22159:88::-;22201:7;22228:11;;22221:18;;22159:88;:::o;22640:436::-;22730:7;22769;;22758;:18;;22750:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22828:17;22823:246;;22863:15;22887:19;22898:7;22887:10;:19::i;:::-;22862:44;;;;;;;22928:7;22921:14;;;;;22823:246;22970:23;23001:19;23012:7;23001:10;:19::i;:::-;22968:52;;;;;;;23042:15;23035:22;;;22640:436;;;;;:::o;19222:26::-;;;;;;;;;;;;;:::o;18848:52::-;;;:::o;30933:169::-;15975:12;:10;:12::i;:::-;15965:22;;:6;;;;;;;;;;:22;;;15957:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31019:1:::1;31009:6;:11;;:27;;;;;31034:2;31024:6;:12;;31009:27;31001:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31088:6;31078:7;:16;;;;30933:169:::0;:::o;20417:198::-;20483:7;20507:11;:20;20519:7;20507:20;;;;;;;;;;;;;;;;;;;;;;;;;20503:49;;;20536:7;:16;20544:7;20536:16;;;;;;;;;;;;;;;;20529:23;;;;20503:49;20570:37;20590:7;:16;20598:7;20590:16;;;;;;;;;;;;;;;;20570:19;:37::i;:::-;20563:44;;20417:198;;;;:::o;16395:148::-;15975:12;:10;:12::i;:::-;15965:22;;:6;;;;;;;;;;:22;;;15957:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16502:1:::1;16465:40;;16486:6;::::0;::::1;;;;;;;;16465:40;;;;;;;;;;;;16533:1;16516:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16395:148::o:0;15753:79::-;15791:7;15818:6;;;;;;;;;;;15811:13;;15753:79;:::o;29121:350::-;29213:7;29222;29231;29251:12;29266:28;29290:3;29266:19;29278:6;29266:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;29251:43;;29305:13;29321:29;29346:3;29321:20;29333:7;29321;:11;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;29305:45;;29361:23;29387:28;29409:5;29387:17;29399:4;29387:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;29361:54;;29434:15;29451:4;29457:5;29426:37;;;;;;;;;29121:350;;;;;;;:::o;29895:162::-;29935:7;29956:15;29973;29992:19;:17;:19::i;:::-;29955:56;;;;30029:20;30041:7;30029;:11;;:20;;;;:::i;:::-;30022:27;;;;29895:162;:::o;20128:87::-;20167:13;20200:7;20193:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20128:87;:::o;30065:560::-;30114:7;30123;30143:15;30161:7;;30143:25;;30179:15;30197:7;;30179:25;;30226:9;30221:289;30245:9;:16;;;;30241:1;:20;30221:289;;;30311:7;30287;:21;30295:9;30305:1;30295:12;;;;;;;;;;;;;;;;;;;;;;;;;30287:21;;;;;;;;;;;;;;;;:31;:66;;;;30346:7;30322;:21;30330:9;30340:1;30330:12;;;;;;;;;;;;;;;;;;;;;;;;;30322:21;;;;;;;;;;;;;;;;:31;30287:66;30283:97;;;30363:7;;30372;;30355:25;;;;;;;;;30283:97;30405:34;30417:7;:21;30425:9;30435:1;30425:12;;;;;;;;;;;;;;;;;;;;;;;;;30417:21;;;;;;;;;;;;;;;;30405:7;:11;;:34;;;;:::i;:::-;30395:44;;30464:34;30476:7;:21;30484:9;30494:1;30484:12;;;;;;;;;;;;;;;;;;;;;;;;;30476:21;;;;;;;;;;;;;;;;30464:7;:11;;:34;;;;:::i;:::-;30454:44;;30263:3;;;;;;;30221:289;;;;30534:20;30546:7;;30534;;:11;;:20;;;;:::i;:::-;30524:7;:30;30520:61;;;30564:7;;30573;;30556:25;;;;;;;;30520:61;30600:7;30609;30592:25;;;;;;30065:560;;;:::o;30827:98::-;15975:12;:10;:12::i;:::-;15965:22;;:6;;;;;;;;;;:22;;;15957:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30903:14:::1;;;;;;;;;;;30902:15;30885:14;;:32;;;;;;;;;;;;;;;;;;30827:98::o:0;21665:269::-;21758:4;21775:129;21784:12;:10;:12::i;:::-;21798:7;21807:96;21846:15;21807:96;;;;;;;;;;;;;;;;;:11;:25;21819:12;:10;:12::i;:::-;21807:25;;;;;;;;;;;;;;;:34;21833:7;21807:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;21775:8;:129::i;:::-;21922:4;21915:11;;21665:269;;;;:::o;20623:167::-;20701:4;20718:42;20728:12;:10;:12::i;:::-;20742:9;20753:6;20718:9;:42::i;:::-;20778:4;20771:11;;20623:167;;;;:::o;21942:110::-;22000:4;22024:11;:20;22036:7;22024:20;;;;;;;;;;;;;;;;;;;;;;;;;22017:27;;21942:110;;;:::o;20798:143::-;20879:7;20906:11;:18;20918:5;20906:18;;;;;;;;;;;;;;;:27;20925:7;20906:27;;;;;;;;;;;;;;;;20899:34;;20798:143;;;;:::o;23345:443::-;15975:12;:10;:12::i;:::-;15965:22;;:6;;;;;;;;;;:22;;;15957:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23437:42:::1;23426:53;;:7;:53;;;;23418:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23538:11;:20;23550:7;23538:20;;;;;;;;;;;;;;;;;;;;;;;;;23537:21;23529:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23623:1;23604:7;:16;23612:7;23604:16;;;;;;;;;;;;;;;;:20;23601:108;;;23660:37;23680:7;:16;23688:7;23680:16;;;;;;;;;;;;;;;;23660:19;:37::i;:::-;23641:7;:16;23649:7;23641:16;;;;;;;;;;;;;;;:56;;;;23601:108;23742:4;23719:11;:20;23731:7;23719:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;23757:9;23772:7;23757:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23345:443:::0;:::o;16698:244::-;15975:12;:10;:12::i;:::-;15965:22;;:6;;;;;;;;;;:22;;;15957:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16807:1:::1;16787:22;;:8;:22;;;;16779:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16897:8;16868:38;;16889:6;::::0;::::1;;;;;;;;16868:38;;;;;;;;;;;;16926:8;16917:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16698:244:::0;:::o;23796:478::-;15975:12;:10;:12::i;:::-;15965:22;;:6;;;;;;;;;;:22;;;15957:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23877:11:::1;:20;23889:7;23877:20;;;;;;;;;;;;;;;;;;;;;;;;;23869:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23945:9;23940:327;23964:9;:16;;;;23960:1;:20;23940:327;;;24022:7;24006:23;;:9;24016:1;24006:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;24002:254;;;24065:9;24094:1;24075:9;:16;;;;:20;24065:31;;;;;;;;;;;;;;;;;;;;;;;;;24050:9;24060:1;24050:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24134:1;24115:7;:16;24123:7;24115:16;;;;;;;;;;;;;;;:20;;;;24177:5;24154:11;:20;24166:7;24154:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;24201:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24235:5;;24002:254;23982:3;;;;;;;23940:327;;;;23796:478:::0;:::o;213:106::-;266:15;301:10;294:17;;213:106;:::o;24282:337::-;24392:1;24375:19;;:5;:19;;;;24367:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24473:1;24454:21;;:7;:21;;;;24446:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24557:6;24527:11;:18;24539:5;24527:18;;;;;;;;;;;;;;;:27;24546:7;24527:27;;;;;;;;;;;;;;;:36;;;;24595:7;24579:32;;24588:5;24579:32;;;24604:6;24579:32;;;;;;;;;;;;;;;;;;24282:337;;;:::o;5480:471::-;5538:7;5788:1;5783;:6;5779:47;;;5813:1;5806:8;;;;5779:47;5838:9;5854:1;5850;:5;5838:17;;5883:1;5878;5874;:5;;;;;;:10;5866:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5942:1;5935:8;;;5480:471;;;;;:::o;4590:136::-;4648:7;4675:43;4679:1;4682;4675:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4668:50;;4590:136;;;;:::o;24627:1129::-;24742:1;24724:20;;:6;:20;;;;24716:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24826:1;24805:23;;:9;:23;;;;24797:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24896:1;24887:6;:10;24879:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24976:18;;;;;;;;;;;24960:34;;:12;:10;:12::i;:::-;:34;;;:79;;;;25022:16;24998:41;;:12;:10;:12::i;:::-;:41;;;24960:79;24959:100;;;;;25045:14;;;;;;;;;;;25044:15;24959:100;24956:175;;;25086:5;25078:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24956:175;25156:11;:19;25168:6;25156:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;25180:11;:22;25192:9;25180:22;;;;;;;;;;;;;;;;;;;;;;;;;25179:23;25156:46;25152:597;;;25219:48;25241:6;25249:9;25260:6;25219:21;:48::i;:::-;25152:597;;;25290:11;:19;25302:6;25290:19;;;;;;;;;;;;;;;;;;;;;;;;;25289:20;:46;;;;;25313:11;:22;25325:9;25313:22;;;;;;;;;;;;;;;;;;;;;;;;;25289:46;25285:464;;;25352:46;25372:6;25380:9;25391:6;25352:19;:46::i;:::-;25285:464;;;25421:11;:19;25433:6;25421:19;;;;;;;;;;;;;;;;;;;;;;;;;25420:20;:47;;;;;25445:11;:22;25457:9;25445:22;;;;;;;;;;;;;;;;;;;;;;;;;25444:23;25420:47;25416:333;;;25484:44;25502:6;25510:9;25521:6;25484:17;:44::i;:::-;25416:333;;;25550:11;:19;25562:6;25550:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;25573:11;:22;25585:9;25573:22;;;;;;;;;;;;;;;;;;;;;;;;;25550:45;25546:203;;;25612:48;25634:6;25642:9;25653:6;25612:21;:48::i;:::-;25546:203;;;25693:44;25711:6;25719:9;25730:6;25693:17;:44::i;:::-;25546:203;25416:333;25285:464;25152:597;24627:1129;;;:::o;5029:192::-;5115:7;5148:1;5143;:6;;5151:12;5135:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5175:9;5191:1;5187;:5;5175:17;;5212:1;5205:8;;;5029:192;;;;;:::o;6427:132::-;6485:7;6512:39;6516:1;6519;6512:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6505:46;;6427:132;;;;:::o;4126:181::-;4184:7;4204:9;4220:1;4216;:5;4204:17;;4245:1;4240;:6;;4232:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4298:1;4291:8;;;4126:181;;;;:::o;28645:468::-;28704:7;28713;28722;28731;28740;28749;28770:23;28795:12;28809:13;28826:39;28838:7;28847;;28856:8;;28826:11;:39::i;:::-;28769:96;;;;;;28876:19;28899:10;:8;:10::i;:::-;28876:33;;28921:15;28938:23;28963:12;28979:46;28991:7;29000:4;29006:5;29013:11;28979;:46::i;:::-;28920:105;;;;;;29044:7;29053:15;29070:4;29076:15;29093:4;29099:5;29036:69;;;;;;;;;;;;;;;;;;;28645:468;;;;;;;:::o;27007:632::-;27109:19;27132:10;:8;:10::i;:::-;27109:33;;27154:15;27171:23;27196:12;27210:23;27235:12;27249:13;27266:19;27277:7;27266:10;:19::i;:::-;27153:132;;;;;;;;;;;;27296:13;27313:22;27323:11;27313:5;:9;;:22;;;;:::i;:::-;27296:39;;27364:28;27384:7;27364;:15;27372:6;27364:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27346:7;:15;27354:6;27346:15;;;;;;;;;;;;;;;:46;;;;27421:28;27441:7;27421;:15;27429:6;27421:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27403:7;:15;27411:6;27403:15;;;;;;;;;;;;;;;:46;;;;27481:39;27504:15;27481:7;:18;27489:9;27481:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27460:7;:18;27468:9;27460:18;;;;;;;;;;;;;;;:60;;;;27534:37;27546:4;27552:5;27559:4;27565:5;27534:11;:37::i;:::-;27604:9;27587:44;;27596:6;27587:44;;;27615:15;27587:44;;;;;;;;;;;;;;;;;;27007:632;;;;;;;;;;;:::o;26347:652::-;26447:19;26470:10;:8;:10::i;:::-;26447:33;;26492:15;26509:23;26534:12;26548:23;26573:12;26587:13;26604:19;26615:7;26604:10;:19::i;:::-;26491:132;;;;;;;;;;;;26634:13;26651:22;26661:11;26651:5;:9;;:22;;;;:::i;:::-;26634:39;;26702:28;26722:7;26702;:15;26710:6;26702:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26684:7;:15;26692:6;26684:15;;;;;;;;;;;;;;;:46;;;;26762:39;26785:15;26762:7;:18;26770:9;26762:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26741:7;:18;26749:9;26741:18;;;;;;;;;;;;;;;:60;;;;26833:39;26856:15;26833:7;:18;26841:9;26833:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26812:7;:18;26820:9;26812:18;;;;;;;;;;;;;;;:60;;;;26894:37;26906:4;26912:5;26919:4;26925:5;26894:11;:37::i;:::-;26964:9;26947:44;;26956:6;26947:44;;;26975:15;26947:44;;;;;;;;;;;;;;;;;;26347:652;;;;;;;;;;;:::o;25764:575::-;25862:19;25885:10;:8;:10::i;:::-;25862:33;;25907:15;25924:23;25949:12;25963:23;25988:12;26002:13;26019:19;26030:7;26019:10;:19::i;:::-;25906:132;;;;;;;;;;;;26049:13;26066:22;26076:11;26066:5;:9;;:22;;;;:::i;:::-;26049:39;;26117:28;26137:7;26117;:15;26125:6;26117:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26099:7;:15;26107:6;26099:15;;;;;;;;;;;;;;;:46;;;;26177:39;26200:15;26177:7;:18;26185:9;26177:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26156:7;:18;26164:9;26156:18;;;;;;;;;;;;;;;:60;;;;26234:37;26246:4;26252:5;26259:4;26265:5;26234:11;:37::i;:::-;26304:9;26287:44;;26296:6;26287:44;;;26315:15;26287:44;;;;;;;;;;;;;;;;;;25764:575;;;;;;;;;;;:::o;27647:708::-;27749:19;27772:10;:8;:10::i;:::-;27749:33;;27794:15;27811:23;27836:12;27850:23;27875:12;27889:13;27906:19;27917:7;27906:10;:19::i;:::-;27793:132;;;;;;;;;;;;27936:13;27953:22;27963:11;27953:5;:9;;:22;;;;:::i;:::-;27936:39;;28004:28;28024:7;28004;:15;28012:6;28004:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27986:7;:15;27994:6;27986:15;;;;;;;;;;;;;;;:46;;;;28061:28;28081:7;28061;:15;28069:6;28061:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28043:7;:15;28051:6;28043:15;;;;;;;;;;;;;;;:46;;;;28121:39;28144:15;28121:7;:18;28129:9;28121:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28100:7;:18;28108:9;28100:18;;;;;;;;;;;;;;;:60;;;;28192:39;28215:15;28192:7;:18;28200:9;28192:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28171:7;:18;28179:9;28171:18;;;;;;;;;;;;;;;:60;;;;28250:37;28262:4;28268:5;28275:4;28281:5;28250:11;:37::i;:::-;28320:9;28303:44;;28312:6;28303:44;;;28331:15;28303:44;;;;;;;;;;;;;;;;;;27647:708;;;;;;;;;;;:::o;7055:278::-;7141:7;7173:1;7169;:5;7176:12;7161:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7200:9;7216:1;7212;:5;;;;;;7200:17;;7324:1;7317:8;;;7055:278;;;;;:::o;28363:274::-;28471:28;28493:5;28471:17;28483:4;28471:7;;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;28461:7;:38;;;;28523:20;28538:4;28523:10;;:14;;:20;;;;:::i;:::-;28510:10;:33;;;;28568:22;28584:5;28568:11;;:15;;:22;;;;:::i;:::-;28554:11;:36;;;;28611:18;28623:5;28611:7;;:11;;:18;;;;:::i;:::-;28601:7;:28;;;;28363:274;;;;:::o

Swarm Source

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