ETH Price: $3,472.21 (+0.05%)

Token

Dev I need CA (DEV)
 

Overview

Max Total Supply

10,000,000,000 DEV

Holders

27

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.511771530521224424 DEV

Value
$0.00
0x622794225858C0623F692E237952351A52B36793
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
HustleModelWithFees

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
london EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-29
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;

// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool);
}

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

/**
 * @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.
 */
abstract 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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function factory() external pure returns (address);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
}

interface IUniswapV2Pair {
    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

interface HustleFactory {
    function feeRecipient() external view returns (address);
}

contract HustleModelWithFees is ERC20, Ownable {
    error aboveMaxTokenAmountPertransaction(uint256 amount, uint256 maxAmount);
    error aboveMaxTokenAmountPerWallet(uint256 amount, uint256 maxAmount);
    error belowMinTokenAmountPertransaction(uint256 amount, uint256 minAmount);
    error belowMinTokenAmountPerWallet(uint256 amount, uint256 minAmount);
    error tradeNotEnabled();
    error restricted(address account);
    error swapThresholdOutOfRange(uint256 threshold, uint256 minThreshold, uint256 maxThreshold);
    error feesTooHigh(uint16 fees, uint16 maxFees);

    HustleFactory public immutable hustleFactory;
    uint16 public constant PERCENT_BASE = 10000;
    uint16 public constant MAX_FEE = 925;
    uint16 public constant HUSTLE_FEES = 75;
    uint16 public ownerBuyFees;
    uint16 public ownerSellFees;
    bool public tradeEnabled;
    bool public swapping;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    uint256 public swapThreshold;
    uint256 public maxTokenAmountPertransaction;
    uint256 public maxTokenAmountPerWallet;
    uint256 public collectedFeesHustle;

    mapping(address => bool) public isUnrestricted;

    receive() external payable {}

    constructor(
        string memory _name,
        string memory _symbol,
        uint256 _totalSupply,
        address ownerAddress,
        address _routerAddress,
        uint16 _ownerBuyFees,
        uint16 _ownerSellFees,
        bool _tradeEnabled
    ) ERC20(_name, _symbol) {
        if (_ownerBuyFees > MAX_FEE || _ownerSellFees > MAX_FEE) {
            revert feesTooHigh(_ownerBuyFees, MAX_FEE);
        }

        hustleFactory = HustleFactory(msg.sender);
        uniswapV2Router = IUniswapV2Router02(_routerAddress);

        ownerBuyFees = _ownerBuyFees;
        ownerSellFees = _ownerSellFees;
        _transferOwnership(ownerAddress);

        _approve(address(this), address(uniswapV2Router), type(uint256).max);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());

        isUnrestricted[ownerAddress] = true;
        isUnrestricted[address(this)] = true;
        isUnrestricted[msg.sender] = true;

        _mint(msg.sender, _totalSupply * 10 ** decimals());

        tradeEnabled = _tradeEnabled;

        swapThreshold = totalSupply() / 1000;
        maxTokenAmountPertransaction = totalSupply() / 50;
        maxTokenAmountPerWallet = totalSupply() / 50;
    }

    function setIsUnrestricted(address account, bool isUnrestricted_) external onlyOwner {
        if (account == address(this) || account == address(uniswapV2Pair)) {
            revert restricted(account);
        }

        isUnrestricted[account] = isUnrestricted_;
    }

    function setOwnerBuyFees(uint16 _ownerBuyFees) external onlyOwner {
        if (_ownerBuyFees > MAX_FEE) revert feesTooHigh(_ownerBuyFees, MAX_FEE);
        ownerBuyFees = _ownerBuyFees;
    }

    function setOwnerSellFees(uint16 _ownerSellFees) external onlyOwner {
        if (_ownerSellFees > MAX_FEE) {
            revert feesTooHigh(_ownerSellFees, MAX_FEE);
        }

        ownerSellFees = _ownerSellFees;
    }

    function setSwapThreshold(uint256 _swapThreshold) external onlyOwner {
        if (_swapThreshold < totalSupply() / 100000 || _swapThreshold > totalSupply() / 100) {
            revert swapThresholdOutOfRange(_swapThreshold, totalSupply() / 100000, totalSupply() / 100);
        }

        swapThreshold = _swapThreshold;
    }

    function setMaxTokenAmountPertransaction(uint256 _maxTokenAmountPertransaction) external onlyOwner {
        if (_maxTokenAmountPertransaction < totalSupply() / 1000) {
            revert belowMinTokenAmountPertransaction(_maxTokenAmountPertransaction, totalSupply() / 1000);
        }
        maxTokenAmountPertransaction = _maxTokenAmountPertransaction;
    }

    function setMaxTokenAmountPerWallet(uint256 _maxTokenAmountPerWallet) external onlyOwner {
        if (_maxTokenAmountPerWallet < totalSupply() / 1000) {
            revert belowMinTokenAmountPerWallet(_maxTokenAmountPerWallet, totalSupply() / 1000);
        }
        maxTokenAmountPerWallet = _maxTokenAmountPerWallet;
    }

    function enableTrade() external onlyOwner {
        tradeEnabled = true;
    }

    function transferOwnership(address newOwner) public override onlyOwner {
        if (newOwner == uniswapV2Pair) revert restricted(newOwner);
        _transferOwnership(newOwner);
        isUnrestricted[newOwner] = true;
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        if (_isUnrestricted(from, to)) {
            super._transfer(from, to, amount);
            return;
        }

        if (!tradeEnabled) revert tradeNotEnabled();

        bool buying = from == uniswapV2Pair && to != address(uniswapV2Router);
        bool selling = from != address(uniswapV2Router) && to == uniswapV2Pair;

        if (!buying && !selling) {
            _checkTransferAmounts(to, amount);
            super._transfer(from, to, amount);
            return;
        }

        if (msg.sender != uniswapV2Pair && !swapping && balanceOf(address(this)) >= swapThreshold) _distributeFees();

        uint16 ownerFees = buying ? ownerBuyFees : selling ? ownerSellFees : 0;

        uint256 hustleCollects = (amount * HUSTLE_FEES) / PERCENT_BASE;
        collectedFeesHustle += hustleCollects;

        uint256 totalFees = (amount * ownerFees) / PERCENT_BASE + hustleCollects;

        uint256 amountAfterFees = amount - totalFees;
        _checkTransferAmounts(to, amountAfterFees);

        if (totalFees > 0) super._transfer(from, address(this), totalFees);
        super._transfer(from, to, amountAfterFees);
    }

    function _checkTransferAmounts(address to, uint256 amount) internal view {
        if (amount > maxTokenAmountPertransaction) {
            revert aboveMaxTokenAmountPertransaction(amount, maxTokenAmountPertransaction);
        }
        if (to == uniswapV2Pair) return;

        if (balanceOf(to) + amount > maxTokenAmountPerWallet) {
            revert aboveMaxTokenAmountPerWallet(amount, maxTokenAmountPerWallet);
        }
    }

    function _isUnrestricted(address from, address to) internal view returns (bool) {
        return
            tx.origin == owner() || isUnrestricted[msg.sender] || isUnrestricted[from] || isUnrestricted[to] || swapping;
    }

    function calculateAmountOutEth(uint256 amount) public view returns (uint256) {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        try uniswapV2Router.getAmountsOut(amount, path) returns (uint256[] memory amountsOut) {
            return amountsOut[1];
        } catch {
            return 0;
        }
    }

    function _swapBalanceToETHAndSend(uint256 amountOut) private {
        swapping = true;
        uint256 amountIn = balanceOf(address(this));
        uint256 hustleSharePercent = (collectedFeesHustle * PERCENT_BASE) / amountIn;
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        uint256 amountOutMin = (amountOut * 95) / 100;
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountIn, amountOutMin, path, address(this), block.timestamp
        );

        uint256 amountETH = address(this).balance;
        uint256 hustleShare = (amountETH * hustleSharePercent) / PERCENT_BASE;
        collectedFeesHustle = 0;

        (bool success,) = payable(hustleFactory.feeRecipient()).call{value: hustleShare}("");
        require(success, "Transfer failed.");

        (success,) = payable(owner()).call{value: address(this).balance, gas: 10000}("");
        if (!success) {
            (success,) = payable(hustleFactory.feeRecipient()).call{value: address(this).balance}("");
            require(success, "Transfer failed.");
        }
        // make low level call to avoid revert if recipient is a contract with no payable fallback
        // if failure occurs, the funds will be sent to hustleFactory.feeRecipient()

        swapping = false;
    }

    function _distributeFees() private {
        uint256 amountOutEth = calculateAmountOutEth(balanceOf(address(this)));
        _swapBalanceToETHAndSend(amountOutEth);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"address","name":"ownerAddress","type":"address"},{"internalType":"address","name":"_routerAddress","type":"address"},{"internalType":"uint16","name":"_ownerBuyFees","type":"uint16"},{"internalType":"uint16","name":"_ownerSellFees","type":"uint16"},{"internalType":"bool","name":"_tradeEnabled","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"maxAmount","type":"uint256"}],"name":"aboveMaxTokenAmountPerWallet","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"maxAmount","type":"uint256"}],"name":"aboveMaxTokenAmountPertransaction","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minAmount","type":"uint256"}],"name":"belowMinTokenAmountPerWallet","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minAmount","type":"uint256"}],"name":"belowMinTokenAmountPertransaction","type":"error"},{"inputs":[{"internalType":"uint16","name":"fees","type":"uint16"},{"internalType":"uint16","name":"maxFees","type":"uint16"}],"name":"feesTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"restricted","type":"error"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"minThreshold","type":"uint256"},{"internalType":"uint256","name":"maxThreshold","type":"uint256"}],"name":"swapThresholdOutOfRange","type":"error"},{"inputs":[],"name":"tradeNotEnabled","type":"error"},{"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":"HUSTLE_FEES","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FEE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERCENT_BASE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"calculateAmountOutEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectedFeesHustle","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hustleFactory","outputs":[{"internalType":"contract HustleFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isUnrestricted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenAmountPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenAmountPertransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerBuyFees","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerSellFees","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isUnrestricted_","type":"bool"}],"name":"setIsUnrestricted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTokenAmountPerWallet","type":"uint256"}],"name":"setMaxTokenAmountPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTokenAmountPertransaction","type":"uint256"}],"name":"setMaxTokenAmountPertransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_ownerBuyFees","type":"uint16"}],"name":"setOwnerBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_ownerSellFees","type":"uint16"}],"name":"setOwnerSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapThreshold","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040523480156200001157600080fd5b5060405162002a1a38038062002a1a8339810160408190526200003491620006a4565b878760036200004483826200080b565b5060046200005382826200080b565b505050620000706200006a6200036960201b60201c565b6200036d565b61039d61ffff841611806200008a575061039d61ffff8316115b15620000bc576040516399bfb80f60e01b815261ffff8416600482015261039d60248201526044015b60405180910390fd5b336080526001600160a01b03841660a0526005805461ffff848116600160b01b0261ffff60b01b19918716600160a01b029190911663ffffffff60a01b19909216919091171790556200010f856200036d565b620001263060a051600019620003bf60201b60201c565b60a0516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000167573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018d9190620008d7565b6001600160a01b031663c9c653963060a0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002039190620008d7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000251573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002779190620008d7565b6001600160a01b0390811660c05285166000908152600a60205260408082208054600160ff19918216811790925530845282842080548216831790553380855292909320805490931617909155620002f190620002d2601290565b620002df90600a62000a11565b620002eb908962000a22565b620004e7565b6005805460ff60c01b1916600160c01b831515021790556103e86200031560025490565b62000321919062000a3c565b60065560326200033060025490565b6200033c919062000a3c565b60075560326200034b60025490565b62000357919062000a3c565b6008555062000a759650505050505050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316620004235760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620000b3565b6001600160a01b038216620004865760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620000b3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166200053f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620000b3565b806002600082825462000553919062000a5f565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620005d757600080fd5b81516001600160401b0380821115620005f457620005f4620005af565b604051601f8301601f19908116603f011681019082821181831017156200061f576200061f620005af565b816040528381526020925086838588010111156200063c57600080fd5b600091505b8382101562000660578582018301518183018401529082019062000641565b600093810190920192909252949350505050565b80516001600160a01b03811681146200068c57600080fd5b919050565b805161ffff811681146200068c57600080fd5b600080600080600080600080610100898b031215620006c257600080fd5b88516001600160401b0380821115620006da57600080fd5b620006e88c838d01620005c5565b995060208b0151915080821115620006ff57600080fd5b506200070e8b828c01620005c5565b975050604089015195506200072660608a0162000674565b94506200073660808a0162000674565b93506200074660a08a0162000691565b92506200075660c08a0162000691565b915060e089015180151581146200076c57600080fd5b809150509295985092959890939650565b600181811c908216806200079257607f821691505b602082108103620007b357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005aa57600081815260208120601f850160051c81016020861015620007e25750805b601f850160051c820191505b818110156200080357828155600101620007ee565b505050505050565b81516001600160401b03811115620008275762000827620005af565b6200083f816200083884546200077d565b84620007b9565b602080601f8311600181146200087757600084156200085e5750858301515b600019600386901b1c1916600185901b17855562000803565b600085815260208120601f198616915b82811015620008a85788860151825594840194600190910190840162000887565b5085821015620008c75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620008ea57600080fd5b620008f58262000674565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000953578160001904821115620009375762000937620008fc565b808516156200094557918102915b93841c939080029062000917565b509250929050565b6000826200096c5750600162000a0b565b816200097b5750600062000a0b565b81600181146200099457600281146200099f57620009bf565b600191505062000a0b565b60ff841115620009b357620009b3620008fc565b50506001821b62000a0b565b5060208310610133831016604e8410600b8410161715620009e4575081810a62000a0b565b620009f0838362000912565b806000190482111562000a075762000a07620008fc565b0290505b92915050565b6000620008f560ff8416836200095b565b808202811582820484141762000a0b5762000a0b620008fc565b60008262000a5a57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a0b5762000a0b620008fc565b60805160a05160c051611f1362000b076000396000818161047701528181610b0a01528181610d88015281816110550152818161110901528181611177015261157901526000818161032401528181610c1801528181610cd001528181611091015281816110cc015281816116db01526117b90152600081816105580152818161185301526119ca0152611f136000f3fe60806040526004361061021d5760003560e01c806367540f5811610123578063a457c2d7116100ab578063d621e8131161006f578063d621e81314610673578063dd62ed3e14610694578063e34d3dd8146106b4578063f2fde38b146106d4578063f8de3f3d146106f457600080fd5b8063a457c2d7146105cd578063a9059cbb146105ed578063aed307771461060d578063bc063e1a1461063d578063be210af11461065357600080fd5b8063805d835d116100f2578063805d835d146105305780638cb55d72146105465780638da5cb5b1461057a57806395d89b41146105985780639d0014b1146105ad57600080fd5b806367540f58146104b9578063685fbc6b146104cf57806370a08231146104e5578063715018a61461051b57600080fd5b80631df1948b116101a65780633950935111610175578063395093511461040557806344aa4ece14610425578063451d1cc11461044557806349bd5a5e14610465578063600242911461049957600080fd5b80631df1948b1461039457806323b872dd146103b4578063313ce567146103d457806332caa7c0146103f057600080fd5b8063095ea7b3116101ed578063095ea7b3146102c05780630d6e2cef146102f05780631694505e146103125780631732cded1461035e57806318160ddd1461037f57600080fd5b806299d386146102295780630445b66714610240578063057de0c41461026957806306fdde031461029e57600080fd5b3661022457005b600080fd5b34801561023557600080fd5b5061023e61070a565b005b34801561024c57600080fd5b5061025660065481565b6040519081526020015b60405180910390f35b34801561027557600080fd5b5060055461028b90600160a01b900461ffff1681565b60405161ffff9091168152602001610260565b3480156102aa57600080fd5b506102b3610727565b6040516102609190611af6565b3480156102cc57600080fd5b506102e06102db366004611b59565b6107b9565b6040519015158152602001610260565b3480156102fc57600080fd5b5060055461028b90600160b01b900461ffff1681565b34801561031e57600080fd5b506103467f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610260565b34801561036a57600080fd5b506005546102e090600160c81b900460ff1681565b34801561038b57600080fd5b50600254610256565b3480156103a057600080fd5b5061023e6103af366004611b85565b6107d3565b3480156103c057600080fd5b506102e06103cf366004611ba9565b610837565b3480156103e057600080fd5b5060405160128152602001610260565b3480156103fc57600080fd5b5061028b604b81565b34801561041157600080fd5b506102e0610420366004611b59565b61085b565b34801561043157600080fd5b5061023e610440366004611b85565b61087d565b34801561045157600080fd5b5061023e610460366004611bea565b6108dc565b34801561047157600080fd5b506103467f000000000000000000000000000000000000000000000000000000000000000081565b3480156104a557600080fd5b5061023e6104b4366004611bea565b61093f565b3480156104c557600080fd5b5061025660095481565b3480156104db57600080fd5b5061025660085481565b3480156104f157600080fd5b50610256610500366004611c03565b6001600160a01b031660009081526020819052604090205490565b34801561052757600080fd5b5061023e6109a2565b34801561053c57600080fd5b5061028b61271081565b34801561055257600080fd5b506103467f000000000000000000000000000000000000000000000000000000000000000081565b34801561058657600080fd5b506005546001600160a01b0316610346565b3480156105a457600080fd5b506102b36109b6565b3480156105b957600080fd5b5061023e6105c8366004611bea565b6109c5565b3480156105d957600080fd5b506102e06105e8366004611b59565b610a65565b3480156105f957600080fd5b506102e0610608366004611b59565b610ae0565b34801561061957600080fd5b506102e0610628366004611c03565b600a6020526000908152604090205460ff1681565b34801561064957600080fd5b5061028b61039d81565b34801561065f57600080fd5b5061023e61066e366004611c20565b610aee565b34801561067f57600080fd5b506005546102e090600160c01b900460ff1681565b3480156106a057600080fd5b506102566106af366004611c5e565b610b92565b3480156106c057600080fd5b506102566106cf366004611bea565b610bbd565b3480156106e057600080fd5b5061023e6106ef366004611c03565b610d7e565b34801561070057600080fd5b5061025660075481565b610712610e10565b6005805460ff60c01b1916600160c01b179055565b60606003805461073690611c8c565b80601f016020809104026020016040519081016040528092919081815260200182805461076290611c8c565b80156107af5780601f10610784576101008083540402835291602001916107af565b820191906000526020600020905b81548152906001019060200180831161079257829003601f168201915b5050505050905090565b6000336107c7818585610e6a565b60019150505b92915050565b6107db610e10565b61039d61ffff82161115610815576040516399bfb80f60e01b815261ffff8216600482015261039d60248201526044015b60405180910390fd5b6005805461ffff909216600160b01b0261ffff60b01b19909216919091179055565b600033610845858285610f8e565b610850858585611008565b506001949350505050565b6000336107c781858561086e8383610b92565b6108789190611cd6565b610e6a565b610885610e10565b61039d61ffff821611156108ba576040516399bfb80f60e01b815261ffff8216600482015261039d602482015260440161080c565b6005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b6108e4610e10565b6103e86108f060025490565b6108fa9190611ce9565b81101561093a57806103e861090e60025490565b6109189190611ce9565b6040516388a684d160e01b81526004810192909252602482015260440161080c565b600855565b610947610e10565b6103e861095360025490565b61095d9190611ce9565b81101561099d57806103e861097160025490565b61097b9190611ce9565b60405163296ae4fd60e21b81526004810192909252602482015260440161080c565b600755565b6109aa610e10565b6109b460006112ad565b565b60606004805461073690611c8c565b6109cd610e10565b620186a06109da60025490565b6109e49190611ce9565b811080610a04575060646109f760025490565b610a019190611ce9565b81115b15610a605780620186a0610a1760025490565b610a219190611ce9565b6064610a2c60025490565b610a369190611ce9565b60405163dd362b7160e01b815260048101939093526024830191909152604482015260640161080c565b600655565b60003381610a738286610b92565b905083811015610ad35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161080c565b6108508286868403610e6a565b6000336107c7818585611008565b610af6610e10565b6001600160a01b038216301480610b3e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b15610b675760405163363675af60e21b81526001600160a01b038316600482015260240161080c565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b604080516002808252606082018352600092839291906020830190803683370190505090503081600081518110610bf657610bf6611d21565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c989190611d37565b81600181518110610cab57610cab611d21565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063d06ca61f90610d099086908590600401611d98565b600060405180830381865afa925050508015610d4757506040513d6000823e601f3d908101601f19168201604052610d449190810190611db9565b60015b610d545750600092915050565b80600181518110610d6757610d67611d21565b602002602001015192505050919050565b50919050565b610d86610e10565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603610de35760405163363675af60e21b81526001600160a01b038216600482015260240161080c565b610dec816112ad565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b6005546001600160a01b031633146109b45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161080c565b6001600160a01b038316610ecc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161080c565b6001600160a01b038216610f2d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161080c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610f9a8484610b92565b905060001981146110025781811015610ff55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161080c565b6110028484848403610e6a565b50505050565b61101283836112ff565b15611027576110228383836113a2565b505050565b600554600160c01b900460ff1661105157604051631393b97560e11b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161480156110c657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161415801561113d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b90508115801561114b575080155b1561116c5761115a8484611546565b6111658585856113a2565b5050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906111af5750600554600160c81b900460ff16155b80156111cc57506006543060009081526020819052604090205410155b156111d9576111d9611612565b6000826111ff57816111ec57600061120e565b600554600160b01b900461ffff1661120e565b600554600160a01b900461ffff165b90506000612710611220604b87611e77565b61122a9190611ce9565b9050806009600082825461123e9190611cd6565b90915550600090508161271061125861ffff861689611e77565b6112629190611ce9565b61126c9190611cd6565b9050600061127a8288611e8e565b90506112868882611546565b8115611297576112978930846113a2565b6112a28989836113a2565b505050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006113136005546001600160a01b031690565b6001600160a01b0316326001600160a01b031614806113415750336000908152600a602052604090205460ff165b8061136457506001600160a01b0383166000908152600a602052604090205460ff165b8061138757506001600160a01b0382166000908152600a602052604090205460ff165b8061139b5750600554600160c81b900460ff165b9392505050565b6001600160a01b0383166114065760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161080c565b6001600160a01b0382166114685760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161080c565b6001600160a01b038316600090815260208190526040902054818110156114e05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161080c565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611002565b600754811115611577576007546040516383eb341760e01b815261080c918391600401918252602082015260400190565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036115b4575050565b600854816115d7846001600160a01b031660009081526020819052604090205490565b6115e19190611cd6565b111561160e57600854604051637dcbf74d60e11b815261080c918391600401918252602082015260400190565b5050565b3060009081526020819052604081205461162b90610bbd565b905061163681611639565b50565b6005805460ff60c81b1916600160c81b17905530600090815260208190526040812054905060008161271061ffff166009546116759190611e77565b61167f9190611ce9565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106116b9576116b9611d21565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175b9190611d37565b8160018151811061176e5761176e611d21565b6001600160a01b03909216602092830291909101909101526000606461179586605f611e77565b61179f9190611ce9565b60405163791ac94760e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906117f69087908590879030904290600401611ea1565b600060405180830381600087803b15801561181057600080fd5b505af1158015611824573d6000803e3d6000fd5b5047925060009150612710905061183b8684611e77565b6118459190611ce9565b9050600060098190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663469048406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d39190611d37565b6001600160a01b03168260405160006040518083038185875af1925050503d806000811461191d576040519150601f19603f3d011682016040523d82523d6000602084013e611922565b606091505b50509050806119665760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161080c565b6005546040516001600160a01b03909116906127109047906000818181858888f193505050503d80600081146119b8576040519150601f19603f3d011682016040523d82523d6000602084013e6119bd565b606091505b50508091505080611adf577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663469048406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4a9190611d37565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611a94576040519150601f19603f3d011682016040523d82523d6000602084013e611a99565b606091505b50508091505080611adf5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161080c565b50506005805460ff60c81b19169055505050505050565b600060208083528351808285015260005b81811015611b2357858101830151858201604001528201611b07565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461163657600080fd5b60008060408385031215611b6c57600080fd5b8235611b7781611b44565b946020939093013593505050565b600060208284031215611b9757600080fd5b813561ffff8116811461139b57600080fd5b600080600060608486031215611bbe57600080fd5b8335611bc981611b44565b92506020840135611bd981611b44565b929592945050506040919091013590565b600060208284031215611bfc57600080fd5b5035919050565b600060208284031215611c1557600080fd5b813561139b81611b44565b60008060408385031215611c3357600080fd5b8235611c3e81611b44565b915060208301358015158114611c5357600080fd5b809150509250929050565b60008060408385031215611c7157600080fd5b8235611c7c81611b44565b91506020830135611c5381611b44565b600181811c90821680611ca057607f821691505b602082108103610d7857634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156107cd576107cd611cc0565b600082611d0657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215611d4957600080fd5b815161139b81611b44565b600081518084526020808501945080840160005b83811015611d8d5781516001600160a01b031687529582019590820190600101611d68565b509495945050505050565b828152604060208201526000611db16040830184611d54565b949350505050565b60006020808385031215611dcc57600080fd5b825167ffffffffffffffff80821115611de457600080fd5b818501915085601f830112611df857600080fd5b815181811115611e0a57611e0a611d0b565b8060051b604051601f19603f83011681018181108582111715611e2f57611e2f611d0b565b604052918252848201925083810185019188831115611e4d57600080fd5b938501935b82851015611e6b57845184529385019392850192611e52565b98975050505050505050565b80820281158282048414176107cd576107cd611cc0565b818103818111156107cd576107cd611cc0565b85815284602082015260a060408201526000611ec060a0830186611d54565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220a3996dafcff02cf1b4b14757db68a328621b85bc5a319b2159bbfa9b28c276df64736f6c634300081400330000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000002540be4000000000000000000000000004f36aca2b52c31b6a32f73f9494b0e52859d82150000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000012c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d4465762049206e6565642043410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034445560000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061021d5760003560e01c806367540f5811610123578063a457c2d7116100ab578063d621e8131161006f578063d621e81314610673578063dd62ed3e14610694578063e34d3dd8146106b4578063f2fde38b146106d4578063f8de3f3d146106f457600080fd5b8063a457c2d7146105cd578063a9059cbb146105ed578063aed307771461060d578063bc063e1a1461063d578063be210af11461065357600080fd5b8063805d835d116100f2578063805d835d146105305780638cb55d72146105465780638da5cb5b1461057a57806395d89b41146105985780639d0014b1146105ad57600080fd5b806367540f58146104b9578063685fbc6b146104cf57806370a08231146104e5578063715018a61461051b57600080fd5b80631df1948b116101a65780633950935111610175578063395093511461040557806344aa4ece14610425578063451d1cc11461044557806349bd5a5e14610465578063600242911461049957600080fd5b80631df1948b1461039457806323b872dd146103b4578063313ce567146103d457806332caa7c0146103f057600080fd5b8063095ea7b3116101ed578063095ea7b3146102c05780630d6e2cef146102f05780631694505e146103125780631732cded1461035e57806318160ddd1461037f57600080fd5b806299d386146102295780630445b66714610240578063057de0c41461026957806306fdde031461029e57600080fd5b3661022457005b600080fd5b34801561023557600080fd5b5061023e61070a565b005b34801561024c57600080fd5b5061025660065481565b6040519081526020015b60405180910390f35b34801561027557600080fd5b5060055461028b90600160a01b900461ffff1681565b60405161ffff9091168152602001610260565b3480156102aa57600080fd5b506102b3610727565b6040516102609190611af6565b3480156102cc57600080fd5b506102e06102db366004611b59565b6107b9565b6040519015158152602001610260565b3480156102fc57600080fd5b5060055461028b90600160b01b900461ffff1681565b34801561031e57600080fd5b506103467f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610260565b34801561036a57600080fd5b506005546102e090600160c81b900460ff1681565b34801561038b57600080fd5b50600254610256565b3480156103a057600080fd5b5061023e6103af366004611b85565b6107d3565b3480156103c057600080fd5b506102e06103cf366004611ba9565b610837565b3480156103e057600080fd5b5060405160128152602001610260565b3480156103fc57600080fd5b5061028b604b81565b34801561041157600080fd5b506102e0610420366004611b59565b61085b565b34801561043157600080fd5b5061023e610440366004611b85565b61087d565b34801561045157600080fd5b5061023e610460366004611bea565b6108dc565b34801561047157600080fd5b506103467f0000000000000000000000004d6650aa42031b662b8853894dc3bd8da0d7189981565b3480156104a557600080fd5b5061023e6104b4366004611bea565b61093f565b3480156104c557600080fd5b5061025660095481565b3480156104db57600080fd5b5061025660085481565b3480156104f157600080fd5b50610256610500366004611c03565b6001600160a01b031660009081526020819052604090205490565b34801561052757600080fd5b5061023e6109a2565b34801561053c57600080fd5b5061028b61271081565b34801561055257600080fd5b506103467f0000000000000000000000009b858b234162d7efa67fe1aa14aaf4861790339d81565b34801561058657600080fd5b506005546001600160a01b0316610346565b3480156105a457600080fd5b506102b36109b6565b3480156105b957600080fd5b5061023e6105c8366004611bea565b6109c5565b3480156105d957600080fd5b506102e06105e8366004611b59565b610a65565b3480156105f957600080fd5b506102e0610608366004611b59565b610ae0565b34801561061957600080fd5b506102e0610628366004611c03565b600a6020526000908152604090205460ff1681565b34801561064957600080fd5b5061028b61039d81565b34801561065f57600080fd5b5061023e61066e366004611c20565b610aee565b34801561067f57600080fd5b506005546102e090600160c01b900460ff1681565b3480156106a057600080fd5b506102566106af366004611c5e565b610b92565b3480156106c057600080fd5b506102566106cf366004611bea565b610bbd565b3480156106e057600080fd5b5061023e6106ef366004611c03565b610d7e565b34801561070057600080fd5b5061025660075481565b610712610e10565b6005805460ff60c01b1916600160c01b179055565b60606003805461073690611c8c565b80601f016020809104026020016040519081016040528092919081815260200182805461076290611c8c565b80156107af5780601f10610784576101008083540402835291602001916107af565b820191906000526020600020905b81548152906001019060200180831161079257829003601f168201915b5050505050905090565b6000336107c7818585610e6a565b60019150505b92915050565b6107db610e10565b61039d61ffff82161115610815576040516399bfb80f60e01b815261ffff8216600482015261039d60248201526044015b60405180910390fd5b6005805461ffff909216600160b01b0261ffff60b01b19909216919091179055565b600033610845858285610f8e565b610850858585611008565b506001949350505050565b6000336107c781858561086e8383610b92565b6108789190611cd6565b610e6a565b610885610e10565b61039d61ffff821611156108ba576040516399bfb80f60e01b815261ffff8216600482015261039d602482015260440161080c565b6005805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b6108e4610e10565b6103e86108f060025490565b6108fa9190611ce9565b81101561093a57806103e861090e60025490565b6109189190611ce9565b6040516388a684d160e01b81526004810192909252602482015260440161080c565b600855565b610947610e10565b6103e861095360025490565b61095d9190611ce9565b81101561099d57806103e861097160025490565b61097b9190611ce9565b60405163296ae4fd60e21b81526004810192909252602482015260440161080c565b600755565b6109aa610e10565b6109b460006112ad565b565b60606004805461073690611c8c565b6109cd610e10565b620186a06109da60025490565b6109e49190611ce9565b811080610a04575060646109f760025490565b610a019190611ce9565b81115b15610a605780620186a0610a1760025490565b610a219190611ce9565b6064610a2c60025490565b610a369190611ce9565b60405163dd362b7160e01b815260048101939093526024830191909152604482015260640161080c565b600655565b60003381610a738286610b92565b905083811015610ad35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161080c565b6108508286868403610e6a565b6000336107c7818585611008565b610af6610e10565b6001600160a01b038216301480610b3e57507f0000000000000000000000004d6650aa42031b662b8853894dc3bd8da0d718996001600160a01b0316826001600160a01b0316145b15610b675760405163363675af60e21b81526001600160a01b038316600482015260240161080c565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b604080516002808252606082018352600092839291906020830190803683370190505090503081600081518110610bf657610bf6611d21565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c989190611d37565b81600181518110610cab57610cab611d21565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063d06ca61f90610d099086908590600401611d98565b600060405180830381865afa925050508015610d4757506040513d6000823e601f3d908101601f19168201604052610d449190810190611db9565b60015b610d545750600092915050565b80600181518110610d6757610d67611d21565b602002602001015192505050919050565b50919050565b610d86610e10565b7f0000000000000000000000004d6650aa42031b662b8853894dc3bd8da0d718996001600160a01b0316816001600160a01b031603610de35760405163363675af60e21b81526001600160a01b038216600482015260240161080c565b610dec816112ad565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b6005546001600160a01b031633146109b45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161080c565b6001600160a01b038316610ecc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161080c565b6001600160a01b038216610f2d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161080c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610f9a8484610b92565b905060001981146110025781811015610ff55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161080c565b6110028484848403610e6a565b50505050565b61101283836112ff565b15611027576110228383836113a2565b505050565b600554600160c01b900460ff1661105157604051631393b97560e11b815260040160405180910390fd5b60007f0000000000000000000000004d6650aa42031b662b8853894dc3bd8da0d718996001600160a01b0316846001600160a01b03161480156110c657507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316836001600160a01b031614155b905060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316856001600160a01b03161415801561113d57507f0000000000000000000000004d6650aa42031b662b8853894dc3bd8da0d718996001600160a01b0316846001600160a01b0316145b90508115801561114b575080155b1561116c5761115a8484611546565b6111658585856113a2565b5050505050565b336001600160a01b037f0000000000000000000000004d6650aa42031b662b8853894dc3bd8da0d7189916148015906111af5750600554600160c81b900460ff16155b80156111cc57506006543060009081526020819052604090205410155b156111d9576111d9611612565b6000826111ff57816111ec57600061120e565b600554600160b01b900461ffff1661120e565b600554600160a01b900461ffff165b90506000612710611220604b87611e77565b61122a9190611ce9565b9050806009600082825461123e9190611cd6565b90915550600090508161271061125861ffff861689611e77565b6112629190611ce9565b61126c9190611cd6565b9050600061127a8288611e8e565b90506112868882611546565b8115611297576112978930846113a2565b6112a28989836113a2565b505050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006113136005546001600160a01b031690565b6001600160a01b0316326001600160a01b031614806113415750336000908152600a602052604090205460ff165b8061136457506001600160a01b0383166000908152600a602052604090205460ff165b8061138757506001600160a01b0382166000908152600a602052604090205460ff165b8061139b5750600554600160c81b900460ff165b9392505050565b6001600160a01b0383166114065760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161080c565b6001600160a01b0382166114685760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161080c565b6001600160a01b038316600090815260208190526040902054818110156114e05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161080c565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611002565b600754811115611577576007546040516383eb341760e01b815261080c918391600401918252602082015260400190565b7f0000000000000000000000004d6650aa42031b662b8853894dc3bd8da0d718996001600160a01b0316826001600160a01b0316036115b4575050565b600854816115d7846001600160a01b031660009081526020819052604090205490565b6115e19190611cd6565b111561160e57600854604051637dcbf74d60e11b815261080c918391600401918252602082015260400190565b5050565b3060009081526020819052604081205461162b90610bbd565b905061163681611639565b50565b6005805460ff60c81b1916600160c81b17905530600090815260208190526040812054905060008161271061ffff166009546116759190611e77565b61167f9190611ce9565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106116b9576116b9611d21565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175b9190611d37565b8160018151811061176e5761176e611d21565b6001600160a01b03909216602092830291909101909101526000606461179586605f611e77565b61179f9190611ce9565b60405163791ac94760e01b81529091506001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906117f69087908590879030904290600401611ea1565b600060405180830381600087803b15801561181057600080fd5b505af1158015611824573d6000803e3d6000fd5b5047925060009150612710905061183b8684611e77565b6118459190611ce9565b9050600060098190555060007f0000000000000000000000009b858b234162d7efa67fe1aa14aaf4861790339d6001600160a01b031663469048406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d39190611d37565b6001600160a01b03168260405160006040518083038185875af1925050503d806000811461191d576040519150601f19603f3d011682016040523d82523d6000602084013e611922565b606091505b50509050806119665760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161080c565b6005546040516001600160a01b03909116906127109047906000818181858888f193505050503d80600081146119b8576040519150601f19603f3d011682016040523d82523d6000602084013e6119bd565b606091505b50508091505080611adf577f0000000000000000000000009b858b234162d7efa67fe1aa14aaf4861790339d6001600160a01b031663469048406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4a9190611d37565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611a94576040519150601f19603f3d011682016040523d82523d6000602084013e611a99565b606091505b50508091505080611adf5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161080c565b50506005805460ff60c81b19169055505050505050565b600060208083528351808285015260005b81811015611b2357858101830151858201604001528201611b07565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461163657600080fd5b60008060408385031215611b6c57600080fd5b8235611b7781611b44565b946020939093013593505050565b600060208284031215611b9757600080fd5b813561ffff8116811461139b57600080fd5b600080600060608486031215611bbe57600080fd5b8335611bc981611b44565b92506020840135611bd981611b44565b929592945050506040919091013590565b600060208284031215611bfc57600080fd5b5035919050565b600060208284031215611c1557600080fd5b813561139b81611b44565b60008060408385031215611c3357600080fd5b8235611c3e81611b44565b915060208301358015158114611c5357600080fd5b809150509250929050565b60008060408385031215611c7157600080fd5b8235611c7c81611b44565b91506020830135611c5381611b44565b600181811c90821680611ca057607f821691505b602082108103610d7857634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156107cd576107cd611cc0565b600082611d0657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215611d4957600080fd5b815161139b81611b44565b600081518084526020808501945080840160005b83811015611d8d5781516001600160a01b031687529582019590820190600101611d68565b509495945050505050565b828152604060208201526000611db16040830184611d54565b949350505050565b60006020808385031215611dcc57600080fd5b825167ffffffffffffffff80821115611de457600080fd5b818501915085601f830112611df857600080fd5b815181811115611e0a57611e0a611d0b565b8060051b604051601f19603f83011681018181108582111715611e2f57611e2f611d0b565b604052918252848201925083810185019188831115611e4d57600080fd5b938501935b82851015611e6b57845184529385019392850192611e52565b98975050505050505050565b80820281158282048414176107cd576107cd611cc0565b818103818111156107cd576107cd611cc0565b85815284602082015260a060408201526000611ec060a0830186611d54565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220a3996dafcff02cf1b4b14757db68a328621b85bc5a319b2159bbfa9b28c276df64736f6c63430008140033

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

0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000002540be4000000000000000000000000004f36aca2b52c31b6a32f73f9494b0e52859d82150000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000012c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d4465762049206e6565642043410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034445560000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Dev I need CA
Arg [1] : _symbol (string): DEV
Arg [2] : _totalSupply (uint256): 10000000000
Arg [3] : ownerAddress (address): 0x4f36ACa2B52c31B6A32f73F9494B0e52859d8215
Arg [4] : _routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [5] : _ownerBuyFees (uint16): 300
Arg [6] : _ownerSellFees (uint16): 300
Arg [7] : _tradeEnabled (bool): True

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 00000000000000000000000000000000000000000000000000000002540be400
Arg [3] : 0000000000000000000000004f36aca2b52c31b6a32f73f9494b0e52859d8215
Arg [4] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [5] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [6] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [8] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [9] : 4465762049206e65656420434100000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [11] : 4445560000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

21217:8601:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25568:80;;;;;;;;;;;;;:::i;:::-;;22231:28;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;22231:28:0;;;;;;;;21999:26;;;;;;;;;;-1:-1:-1;21999:26:0;;;;-1:-1:-1;;;21999:26:0;;;;;;;;;370:6:1;358:19;;;340:38;;328:2;313:18;21999:26:0;196:188:1;6311:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8671:201::-;;;;;;;;;;-1:-1:-1;8671:201:0;;;;;:::i;:::-;;:::i;:::-;;;1563:14:1;;1556:22;1538:41;;1526:2;1511:18;8671:201:0;1398:187:1;22032:27:0;;;;;;;;;;-1:-1:-1;22032:27:0;;;;-1:-1:-1;;;22032:27:0;;;;;;22126:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1780:32:1;;;1762:51;;1750:2;1735:18;22126:51:0;1590:229:1;22097:20:0;;;;;;;;;;-1:-1:-1;22097:20:0;;;;-1:-1:-1;;;22097:20:0;;;;;;7440:108;;;;;;;;;;-1:-1:-1;7528:12:0;;7440:108;;24277:229;;;;;;;;;;-1:-1:-1;24277:229:0;;;;;:::i;:::-;;:::i;9452:261::-;;;;;;;;;;-1:-1:-1;9452:261:0;;;;;:::i;:::-;;:::i;7282:93::-;;;;;;;;;;-1:-1:-1;7282:93:0;;7365:2;2704:36:1;;2692:2;2677:18;7282:93:0;2562:184:1;21953:39:0;;;;;;;;;;;;21990:2;21953:39;;10122:238;;;;;;;;;;-1:-1:-1;10122:238:0;;;;;:::i;:::-;;:::i;24074:195::-;;;;;;;;;;-1:-1:-1;24074:195:0;;;;;:::i;:::-;;:::i;25229:331::-;;;;;;;;;;-1:-1:-1;25229:331:0;;;;;:::i;:::-;;:::i;22184:38::-;;;;;;;;;;;;;;;24855:366;;;;;;;;;;-1:-1:-1;24855:366:0;;;;;:::i;:::-;;:::i;22361:34::-;;;;;;;;;;;;;;;;22316:38;;;;;;;;;;;;;;;;7611:127;;;;;;;;;;-1:-1:-1;7611:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;7712:18:0;7685:7;7712:18;;;;;;;;;;;;7611:127;19094:103;;;;;;;;;;;;;:::i;21860:43::-;;;;;;;;;;;;21898:5;21860:43;;21809:44;;;;;;;;;;;;;;;18453:87;;;;;;;;;;-1:-1:-1;18526:6:0;;-1:-1:-1;;;;;18526:6:0;18453:87;;6530:104;;;;;;;;;;;;;:::i;24514:333::-;;;;;;;;;;-1:-1:-1;24514:333:0;;;;;:::i;:::-;;:::i;10863:436::-;;;;;;;;;;-1:-1:-1;10863:436:0;;;;;:::i;:::-;;:::i;7944:193::-;;;;;;;;;;-1:-1:-1;7944:193:0;;;;;:::i;:::-;;:::i;22404:46::-;;;;;;;;;;-1:-1:-1;22404:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21910:36;;;;;;;;;;;;21943:3;21910:36;;23789:277;;;;;;;;;;-1:-1:-1;23789:277:0;;;;;:::i;:::-;;:::i;22066:24::-;;;;;;;;;;-1:-1:-1;22066:24:0;;;;-1:-1:-1;;;22066:24:0;;;;;;8200:151;;;;;;;;;;-1:-1:-1;8200:151:0;;;;;:::i;:::-;;:::i;27834:398::-;;;;;;;;;;-1:-1:-1;27834:398:0;;;;;:::i;:::-;;:::i;25656:229::-;;;;;;;;;;-1:-1:-1;25656:229:0;;;;;:::i;:::-;;:::i;22266:43::-;;;;;;;;;;;;;;;;25568:80;18339:13;:11;:13::i;:::-;25621:12:::1;:19:::0;;-1:-1:-1;;;;25621:19:0::1;-1:-1:-1::0;;;25621:19:0::1;::::0;;25568:80::o;6311:100::-;6365:13;6398:5;6391:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6311:100;:::o;8671:201::-;8754:4;4197:10;8810:32;4197:10;8826:7;8835:6;8810:8;:32::i;:::-;8860:4;8853:11;;;8671:201;;;;;:::o;24277:229::-;18339:13;:11;:13::i;:::-;21943:3:::1;24360:24;::::0;::::1;;24356:100;;;24408:36;::::0;-1:-1:-1;;;24408:36:0;;5004:6:1;5037:15;;24408:36:0::1;::::0;::::1;5019:34:1::0;21943:3:0::1;5069:18:1::0;;;5062:43;4967:18;;24408:36:0::1;;;;;;;;24356:100;24468:13;:30:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;24468:30:0::1;-1:-1:-1::0;;;;24468:30:0;;::::1;::::0;;;::::1;::::0;;24277:229::o;9452:261::-;9549:4;4197:10;9607:38;9623:4;4197:10;9638:6;9607:15;:38::i;:::-;9656:27;9666:4;9672:2;9676:6;9656:9;:27::i;:::-;-1:-1:-1;9701:4:0;;9452:261;-1:-1:-1;;;;9452:261:0:o;10122:238::-;10210:4;4197:10;10266:64;4197:10;10282:7;10319:10;10291:25;4197:10;10282:7;10291:9;:25::i;:::-;:38;;;;:::i;:::-;10266:8;:64::i;24074:195::-;18339:13;:11;:13::i;:::-;21943:3:::1;24155:23;::::0;::::1;;24151:71;;;24187:35;::::0;-1:-1:-1;;;24187:35:0;;5004:6:1;5037:15;;24187:35:0::1;::::0;::::1;5019:34:1::0;21943:3:0::1;5069:18:1::0;;;5062:43;4967:18;;24187:35:0::1;4824:287:1::0;24151:71:0::1;24233:12;:28:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;24233:28:0::1;-1:-1:-1::0;;;;24233:28:0;;::::1;::::0;;;::::1;::::0;;24074:195::o;25229:331::-;18339:13;:11;:13::i;:::-;25376:4:::1;25360:13;7528:12:::0;;;7440:108;25360:13:::1;:20;;;;:::i;:::-;25333:24;:47;25329:163;;;25433:24;25475:4;25459:13;7528:12:::0;;;7440:108;25459:13:::1;:20;;;;:::i;:::-;25404:76;::::0;-1:-1:-1;;;25404:76:0;;::::1;::::0;::::1;5774:25:1::0;;;;5815:18;;;5808:34;5747:18;;25404:76:0::1;5600:248:1::0;25329:163:0::1;25502:23;:50:::0;25229:331::o;24855:366::-;18339:13;:11;:13::i;:::-;25017:4:::1;25001:13;7528:12:::0;;;7440:108;25001:13:::1;:20;;;;:::i;:::-;24969:29;:52;24965:178;;;25079:29;25126:4;25110:13;7528:12:::0;;;7440:108;25110:13:::1;:20;;;;:::i;:::-;25045:86;::::0;-1:-1:-1;;;25045:86:0;;::::1;::::0;::::1;5774:25:1::0;;;;5815:18;;;5808:34;5747:18;;25045:86:0::1;5600:248:1::0;24965:178:0::1;25153:28;:60:::0;24855:366::o;19094:103::-;18339:13;:11;:13::i;:::-;19159:30:::1;19186:1;19159:18;:30::i;:::-;19094:103::o:0;6530:104::-;6586:13;6619:7;6612:14;;;;;:::i;24514:333::-;18339:13;:11;:13::i;:::-;24631:6:::1;24615:13;7528:12:::0;;;7440:108;24615:13:::1;:22;;;;:::i;:::-;24598:14;:39;:79;;;;24674:3;24658:13;7528:12:::0;;;7440:108;24658:13:::1;:19;;;;:::i;:::-;24641:14;:36;24598:79;24594:203;;;24725:14;24757:6;24741:13;7528:12:::0;;;7440:108;24741:13:::1;:22;;;;:::i;:::-;24781:3;24765:13;7528:12:::0;;;7440:108;24765:13:::1;:19;;;;:::i;:::-;24701:84;::::0;-1:-1:-1;;;24701:84:0;;::::1;::::0;::::1;6055:25:1::0;;;;6096:18;;;6089:34;;;;6139:18;;;6132:34;6028:18;;24701:84:0::1;5853:319:1::0;24594:203:0::1;24809:13;:30:::0;24514:333::o;10863:436::-;10956:4;4197:10;10956:4;11039:25;4197:10;11056:7;11039:9;:25::i;:::-;11012:52;;11103:15;11083:16;:35;;11075:85;;;;-1:-1:-1;;;11075:85:0;;6379:2:1;11075:85:0;;;6361:21:1;6418:2;6398:18;;;6391:30;6457:34;6437:18;;;6430:62;-1:-1:-1;;;6508:18:1;;;6501:35;6553:19;;11075:85:0;6177:401:1;11075:85:0;11196:60;11205:5;11212:7;11240:15;11221:16;:34;11196:8;:60::i;7944:193::-;8023:4;4197:10;8079:28;4197:10;8096:2;8100:6;8079:9;:28::i;23789:277::-;18339:13;:11;:13::i;:::-;-1:-1:-1;;;;;23889:24:0;::::1;23908:4;23889:24;::::0;:61:::1;;;23936:13;-1:-1:-1::0;;;;;23917:33:0::1;:7;-1:-1:-1::0;;;;;23917:33:0::1;;23889:61;23885:120;;;23974:19;::::0;-1:-1:-1;;;23974:19:0;;-1:-1:-1;;;;;1780:32:1;;23974:19:0::1;::::0;::::1;1762:51:1::0;1735:18;;23974:19:0::1;1590:229:1::0;23885:120:0::1;-1:-1:-1::0;;;;;24017:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:41;;-1:-1:-1;;24017:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23789:277::o;8200:151::-;-1:-1:-1;;;;;8316:18:0;;;8289:7;8316:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8200:151::o;27834:398::-;27946:16;;;27960:1;27946:16;;;;;;;;27902:7;;;;27946:16;27960:1;27946:16;;;;;;;;;;-1:-1:-1;27946:16:0;27922:40;;27991:4;27973;27978:1;27973:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;27973:23:0;;;-1:-1:-1;;;;;27973:23:0;;;;;28017:15;-1:-1:-1;;;;;28017:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28007:4;28012:1;28007:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28007:32:0;;;:7;;;;;;;;;:32;28054:43;;-1:-1:-1;;;28054:43:0;;:15;:29;;;;;;:43;;28084:6;;28092:4;;28054:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28054:43:0;;;;;;;;;;;;:::i;:::-;;;28050:175;;-1:-1:-1;28212:1:0;;27834:398;-1:-1:-1;;27834:398:0:o;28050:175::-;28158:10;28169:1;28158:13;;;;;;;;:::i;:::-;;;;;;;28151:20;;;;27834:398;;;:::o;28050:175::-;27911:321;27834:398;;;:::o;25656:229::-;18339:13;:11;:13::i;:::-;25754::::1;-1:-1:-1::0;;;;;25742:25:0::1;:8;-1:-1:-1::0;;;;;25742:25:0::1;::::0;25738:58:::1;;25776:20;::::0;-1:-1:-1;;;25776:20:0;;-1:-1:-1;;;;;1780:32:1;;25776:20:0::1;::::0;::::1;1762:51:1::0;1735:18;;25776:20:0::1;1590:229:1::0;25738:58:0::1;25807:28;25826:8;25807:18;:28::i;:::-;-1:-1:-1::0;;;;;25846:24:0::1;;::::0;;;:14:::1;:24;::::0;;;;:31;;-1:-1:-1;;25846:31:0::1;25873:4;25846:31;::::0;;25656:229::o;18618:132::-;18526:6;;-1:-1:-1;;;;;18526:6:0;4197:10;18682:23;18674:68;;;;-1:-1:-1;;;18674:68:0;;9218:2:1;18674:68:0;;;9200:21:1;;;9237:18;;;9230:30;9296:34;9276:18;;;9269:62;9348:18;;18674:68:0;9016:356:1;14856:346:0;-1:-1:-1;;;;;14958:19:0;;14950:68;;;;-1:-1:-1;;;14950:68:0;;9579:2:1;14950:68:0;;;9561:21:1;9618:2;9598:18;;;9591:30;9657:34;9637:18;;;9630:62;-1:-1:-1;;;9708:18:1;;;9701:34;9752:19;;14950:68:0;9377:400:1;14950:68:0;-1:-1:-1;;;;;15037:21:0;;15029:68;;;;-1:-1:-1;;;15029:68:0;;9984:2:1;15029:68:0;;;9966:21:1;10023:2;10003:18;;;9996:30;10062:34;10042:18;;;10035:62;-1:-1:-1;;;10113:18:1;;;10106:32;10155:19;;15029:68:0;9782:398:1;15029:68:0;-1:-1:-1;;;;;15110:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15162:32;;160:25:1;;;15162:32:0;;133:18:1;15162:32:0;;;;;;;14856:346;;;:::o;15493:419::-;15594:24;15621:25;15631:5;15638:7;15621:9;:25::i;:::-;15594:52;;-1:-1:-1;;15661:16:0;:37;15657:248;;15743:6;15723:16;:26;;15715:68;;;;-1:-1:-1;;;15715:68:0;;10387:2:1;15715:68:0;;;10369:21:1;10426:2;10406:18;;;10399:30;10465:31;10445:18;;;10438:59;10514:18;;15715:68:0;10185:353:1;15715:68:0;15827:51;15836:5;15843:7;15871:6;15852:16;:25;15827:8;:51::i;:::-;15583:329;15493:419;;;:::o;25893:1248::-;25987:25;26003:4;26009:2;25987:15;:25::i;:::-;25983:112;;;26029:33;26045:4;26051:2;26055:6;26029:15;:33::i;:::-;25893:1248;;;:::o;25983:112::-;26112:12;;-1:-1:-1;;;26112:12:0;;;;26107:43;;26133:17;;-1:-1:-1;;;26133:17:0;;;;;;;;;;;26107:43;26163:11;26185:13;-1:-1:-1;;;;;26177:21:0;:4;-1:-1:-1;;;;;26177:21:0;;:55;;;;;26216:15;-1:-1:-1;;;;;26202:30:0;:2;-1:-1:-1;;;;;26202:30:0;;;26177:55;26163:69;;26243:12;26274:15;-1:-1:-1;;;;;26258:32:0;:4;-1:-1:-1;;;;;26258:32:0;;;:55;;;;;26300:13;-1:-1:-1;;;;;26294:19:0;:2;-1:-1:-1;;;;;26294:19:0;;26258:55;26243:70;;26331:6;26330:7;:19;;;;;26342:7;26341:8;26330:19;26326:154;;;26366:33;26388:2;26392:6;26366:21;:33::i;:::-;26414;26430:4;26436:2;26440:6;26414:15;:33::i;:::-;26462:7;;25893:1248;;;:::o;26326:154::-;26496:10;-1:-1:-1;;;;;26510:13:0;26496:27;;;;;:40;;-1:-1:-1;26528:8:0;;-1:-1:-1;;;26528:8:0;;;;26527:9;26496:40;:85;;;;-1:-1:-1;26568:13:0;;26558:4;7685:7;7712:18;;;;;;;;;;;26540:41;;26496:85;26492:108;;;26583:17;:15;:17::i;:::-;26613:16;26632:6;:51;;26656:7;:27;;26682:1;26632:51;;26656:27;26666:13;;-1:-1:-1;;;26666:13:0;;;;26632:51;;;26641:12;;-1:-1:-1;;;26641:12:0;;;;26632:51;26613:70;-1:-1:-1;26696:22:0;21898:5;26722:20;21990:2;26722:6;:20;:::i;:::-;26721:37;;;;:::i;:::-;26696:62;;26792:14;26769:19;;:37;;;;;;;:::i;:::-;;;;-1:-1:-1;26819:17:0;;-1:-1:-1;26877:14:0;21898:5;26840:18;26839:35;26840:18;;:6;:18;:::i;:::-;26839:35;;;;:::i;:::-;:52;;;;:::i;:::-;26819:72;-1:-1:-1;26904:23:0;26930:18;26819:72;26930:6;:18;:::i;:::-;26904:44;;26959:42;26981:2;26985:15;26959:21;:42::i;:::-;27018:13;;27014:66;;27033:47;27049:4;27063;27070:9;27033:15;:47::i;:::-;27091:42;27107:4;27113:2;27117:15;27091;:42::i;:::-;25972:1169;;;;;;25893:1248;;;:::o;19713:191::-;19806:6;;;-1:-1:-1;;;;;19823:17:0;;;-1:-1:-1;;;;;;19823:17:0;;;;;;;19856:40;;19806:6;;;19823:17;19806:6;;19856:40;;19787:16;;19856:40;19776:128;19713:191;:::o;27599:227::-;27673:4;27723:7;18526:6;;-1:-1:-1;;;;;18526:6:0;;18453:87;27723:7;-1:-1:-1;;;;;27710:20:0;:9;-1:-1:-1;;;;;27710:20:0;;:50;;;-1:-1:-1;27749:10:0;27734:26;;;;:14;:26;;;;;;;;27710:50;:74;;;-1:-1:-1;;;;;;27764:20:0;;;;;;:14;:20;;;;;;;;27710:74;:96;;;-1:-1:-1;;;;;;27788:18:0;;;;;;:14;:18;;;;;;;;27710:96;:108;;;-1:-1:-1;27810:8:0;;-1:-1:-1;;;27810:8:0;;;;27710:108;27690:128;27599:227;-1:-1:-1;;;27599:227:0:o;11769:806::-;-1:-1:-1;;;;;11866:18:0;;11858:68;;;;-1:-1:-1;;;11858:68:0;;11051:2:1;11858:68:0;;;11033:21:1;11090:2;11070:18;;;11063:30;11129:34;11109:18;;;11102:62;-1:-1:-1;;;11180:18:1;;;11173:35;11225:19;;11858:68:0;10849:401:1;11858:68:0;-1:-1:-1;;;;;11945:16:0;;11937:64;;;;-1:-1:-1;;;11937:64:0;;11457:2:1;11937:64:0;;;11439:21:1;11496:2;11476:18;;;11469:30;11535:34;11515:18;;;11508:62;-1:-1:-1;;;11586:18:1;;;11579:33;11629:19;;11937:64:0;11255:399:1;11937:64:0;-1:-1:-1;;;;;12087:15:0;;12065:19;12087:15;;;;;;;;;;;12121:21;;;;12113:72;;;;-1:-1:-1;;;12113:72:0;;11861:2:1;12113:72:0;;;11843:21:1;11900:2;11880:18;;;11873:30;11939:34;11919:18;;;11912:62;-1:-1:-1;;;11990:18:1;;;11983:36;12036:19;;12113:72:0;11659:402:1;12113:72:0;-1:-1:-1;;;;;12221:15:0;;;:9;:15;;;;;;;;;;;12239:20;;;12221:38;;12439:13;;;;;;;;;;:23;;;;;;12491:26;;160:25:1;;;12439:13:0;;12491:26;;133:18:1;12491:26:0;;;;;;;12530:37;25893:1248;27149:442;27246:28;;27237:6;:37;27233:148;;;27340:28;;27298:71;;-1:-1:-1;;;27298:71:0;;;;27332:6;;27298:71;;5774:25:1;;;5830:2;5815:18;;5808:34;5762:2;5747:18;;5600:248;27233:148:0;27401:13;-1:-1:-1;;;;;27395:19:0;:2;-1:-1:-1;;;;;27395:19:0;;27391:32;;27149:442;;:::o;27391:32::-;27464:23;;27455:6;27439:13;27449:2;-1:-1:-1;;;;;7712:18:0;7685:7;7712:18;;;;;;;;;;;;7611:127;27439:13;:22;;;;:::i;:::-;:48;27435:149;;;27548:23;;27511:61;;-1:-1:-1;;;27511:61:0;;;;27540:6;;27511:61;;5774:25:1;;;5830:2;5815:18;;5808:34;5762:2;5747:18;;5600:248;27435:149:0;27149:442;;:::o;29642:173::-;29751:4;29688:20;7712:18;;;;;;;;;;;29711:47;;27834:398;:::i;29711:47::-;29688:70;;29769:38;29794:12;29769:24;:38::i;:::-;29677:138;29642:173::o;28240:1394::-;28312:8;:15;;-1:-1:-1;;;;28312:15:0;-1:-1:-1;;;28312:15:0;;;28375:4;-1:-1:-1;7712:18:0;;;;;;;;;;;28338:43;;28392:26;28460:8;21898:5;28422:34;;:19;;:34;;;;:::i;:::-;28421:47;;;;:::i;:::-;28503:16;;;28517:1;28503:16;;;;;;;;28392:76;;-1:-1:-1;28479:21:0;;28503:16;;;;;;;;;;;;-1:-1:-1;28503:16:0;28479:40;;28548:4;28530;28535:1;28530:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;28530:23:0;;;-1:-1:-1;;;;;28530:23:0;;;;;28574:15;-1:-1:-1;;;;;28574:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28564:4;28569:1;28564:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28564:32:0;;;:7;;;;;;;;;;;:32;28607:20;28649:3;28631:14;:9;28643:2;28631:14;:::i;:::-;28630:22;;;;:::i;:::-;28663:152;;-1:-1:-1;;;28663:152:0;;28607:45;;-1:-1:-1;;;;;;28663:15:0;:66;;;;:152;;28744:8;;28607:45;;28768:4;;28782;;28789:15;;28663:152;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28848:21:0;;-1:-1:-1;28828:17:0;;-1:-1:-1;21898:5:0;;-1:-1:-1;28903:30:0;28915:18;28848:21;28903:30;:::i;:::-;28902:47;;;;:::i;:::-;28880:69;;28982:1;28960:19;:23;;;;28997:12;29022:13;-1:-1:-1;;;;;29022:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29014:42:0;29064:11;29014:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28996:84;;;29099:7;29091:36;;;;-1:-1:-1;;;29091:36:0;;13057:2:1;29091:36:0;;;13039:21:1;13096:2;13076:18;;;13069:30;-1:-1:-1;;;13115:18:1;;;13108:46;13171:18;;29091:36:0;12855:340:1;29091:36:0;18526:6;;29153:67;;-1:-1:-1;;;;;18526:6:0;;;;29210:5;;29182:21;;29153:67;;;;29182:21;18526:6;29210:5;29153:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29140:80;;;;;29236:7;29231:181;;29281:13;-1:-1:-1;;;;;29281:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29273:42:0;29323:21;29273:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29260:89;;;;;29372:7;29364:36;;;;-1:-1:-1;;;29364:36:0;;13057:2:1;29364:36:0;;;13039:21:1;13096:2;13076:18;;;13069:30;-1:-1:-1;;;13115:18:1;;;13108:46;13171:18;;29364:36:0;12855:340:1;29364:36:0;-1:-1:-1;;29610:8:0;:16;;-1:-1:-1;;;;29610:16:0;;;-1:-1:-1;;;;;;28240:1394:0:o;389:548:1:-;501:4;530:2;559;548:9;541:21;591:6;585:13;634:6;629:2;618:9;614:18;607:34;659:1;669:140;683:6;680:1;677:13;669:140;;;778:14;;;774:23;;768:30;744:17;;;763:2;740:26;733:66;698:10;;669:140;;;673:3;858:1;853:2;844:6;833:9;829:22;825:31;818:42;928:2;921;917:7;912:2;904:6;900:15;896:29;885:9;881:45;877:54;869:62;;;;389:548;;;;:::o;942:131::-;-1:-1:-1;;;;;1017:31:1;;1007:42;;997:70;;1063:1;1060;1053:12;1078:315;1146:6;1154;1207:2;1195:9;1186:7;1182:23;1178:32;1175:52;;;1223:1;1220;1213:12;1175:52;1262:9;1249:23;1281:31;1306:5;1281:31;:::i;:::-;1331:5;1383:2;1368:18;;;;1355:32;;-1:-1:-1;;;1078:315:1:o;1824:272::-;1882:6;1935:2;1923:9;1914:7;1910:23;1906:32;1903:52;;;1951:1;1948;1941:12;1903:52;1990:9;1977:23;2040:6;2033:5;2029:18;2022:5;2019:29;2009:57;;2062:1;2059;2052:12;2101:456;2178:6;2186;2194;2247:2;2235:9;2226:7;2222:23;2218:32;2215:52;;;2263:1;2260;2253:12;2215:52;2302:9;2289:23;2321:31;2346:5;2321:31;:::i;:::-;2371:5;-1:-1:-1;2428:2:1;2413:18;;2400:32;2441:33;2400:32;2441:33;:::i;:::-;2101:456;;2493:7;;-1:-1:-1;;;2547:2:1;2532:18;;;;2519:32;;2101:456::o;2751:180::-;2810:6;2863:2;2851:9;2842:7;2838:23;2834:32;2831:52;;;2879:1;2876;2869:12;2831:52;-1:-1:-1;2902:23:1;;2751:180;-1:-1:-1;2751:180:1:o;3144:247::-;3203:6;3256:2;3244:9;3235:7;3231:23;3227:32;3224:52;;;3272:1;3269;3262:12;3224:52;3311:9;3298:23;3330:31;3355:5;3330:31;:::i;3625:416::-;3690:6;3698;3751:2;3739:9;3730:7;3726:23;3722:32;3719:52;;;3767:1;3764;3757:12;3719:52;3806:9;3793:23;3825:31;3850:5;3825:31;:::i;:::-;3875:5;-1:-1:-1;3932:2:1;3917:18;;3904:32;3974:15;;3967:23;3955:36;;3945:64;;4005:1;4002;3995:12;3945:64;4028:7;4018:17;;;3625:416;;;;;:::o;4046:388::-;4114:6;4122;4175:2;4163:9;4154:7;4150:23;4146:32;4143:52;;;4191:1;4188;4181:12;4143:52;4230:9;4217:23;4249:31;4274:5;4249:31;:::i;:::-;4299:5;-1:-1:-1;4356:2:1;4341:18;;4328:32;4369:33;4328:32;4369:33;:::i;4439:380::-;4518:1;4514:12;;;;4561;;;4582:61;;4636:4;4628:6;4624:17;4614:27;;4582:61;4689:2;4681:6;4678:14;4658:18;4655:38;4652:161;;4735:10;4730:3;4726:20;4723:1;4716:31;4770:4;4767:1;4760:15;4798:4;4795:1;4788:15;5116:127;5177:10;5172:3;5168:20;5165:1;5158:31;5208:4;5205:1;5198:15;5232:4;5229:1;5222:15;5248:125;5313:9;;;5334:10;;;5331:36;;;5347:18;;:::i;5378:217::-;5418:1;5444;5434:132;;5488:10;5483:3;5479:20;5476:1;5469:31;5523:4;5520:1;5513:15;5551:4;5548:1;5541:15;5434:132;-1:-1:-1;5580:9:1;;5378:217::o;6583:127::-;6644:10;6639:3;6635:20;6632:1;6625:31;6675:4;6672:1;6665:15;6699:4;6696:1;6689:15;6715:127;6776:10;6771:3;6767:20;6764:1;6757:31;6807:4;6804:1;6797:15;6831:4;6828:1;6821:15;6847:251;6917:6;6970:2;6958:9;6949:7;6945:23;6941:32;6938:52;;;6986:1;6983;6976:12;6938:52;7018:9;7012:16;7037:31;7062:5;7037:31;:::i;7103:461::-;7156:3;7194:5;7188:12;7221:6;7216:3;7209:19;7247:4;7276:2;7271:3;7267:12;7260:19;;7313:2;7306:5;7302:14;7334:1;7344:195;7358:6;7355:1;7352:13;7344:195;;;7423:13;;-1:-1:-1;;;;;7419:39:1;7407:52;;7479:12;;;;7514:15;;;;7455:1;7373:9;7344:195;;;-1:-1:-1;7555:3:1;;7103:461;-1:-1:-1;;;;;7103:461:1:o;7569:332::-;7776:6;7765:9;7758:25;7819:2;7814;7803:9;7799:18;7792:30;7739:4;7839:56;7891:2;7880:9;7876:18;7868:6;7839:56;:::i;:::-;7831:64;7569:332;-1:-1:-1;;;;7569:332:1:o;7906:1105::-;8001:6;8032:2;8075;8063:9;8054:7;8050:23;8046:32;8043:52;;;8091:1;8088;8081:12;8043:52;8124:9;8118:16;8153:18;8194:2;8186:6;8183:14;8180:34;;;8210:1;8207;8200:12;8180:34;8248:6;8237:9;8233:22;8223:32;;8293:7;8286:4;8282:2;8278:13;8274:27;8264:55;;8315:1;8312;8305:12;8264:55;8344:2;8338:9;8366:2;8362;8359:10;8356:36;;;8372:18;;:::i;:::-;8418:2;8415:1;8411:10;8450:2;8444:9;8513:2;8509:7;8504:2;8500;8496:11;8492:25;8484:6;8480:38;8568:6;8556:10;8553:22;8548:2;8536:10;8533:18;8530:46;8527:72;;;8579:18;;:::i;:::-;8615:2;8608:22;8665:18;;;8699:15;;;;-1:-1:-1;8741:11:1;;;8737:20;;;8769:19;;;8766:39;;;8801:1;8798;8791:12;8766:39;8825:11;;;;8845:135;8861:6;8856:3;8853:15;8845:135;;;8927:10;;8915:23;;8878:12;;;;8958;;;;8845:135;;;8999:6;7906:1105;-1:-1:-1;;;;;;;;7906:1105:1:o;10543:168::-;10616:9;;;10647;;10664:15;;;10658:22;;10644:37;10634:71;;10685:18;;:::i;10716:128::-;10783:9;;;10804:11;;;10801:37;;;10818:18;;:::i;12066:574::-;12357:6;12346:9;12339:25;12400:6;12395:2;12384:9;12380:18;12373:34;12443:3;12438:2;12427:9;12423:18;12416:31;12320:4;12464:57;12516:3;12505:9;12501:19;12493:6;12464:57;:::i;:::-;-1:-1:-1;;;;;12557:32:1;;;;12552:2;12537:18;;12530:60;-1:-1:-1;12621:3:1;12606:19;12599:35;12456:65;12066:574;-1:-1:-1;;;12066:574:1:o

Swarm Source

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