ETH Price: $2,951.32 (+0.35%)

Token

Stobox Token v.3 (STBU)

Overview

Max Total Supply

81,154,970.214482891856857162 STBU

Holders

235 (0.00%)

Market

Price

$0.0027 @ 0.000001 ETH (+3.30%)

Onchain Market Cap

$215,078.53

Circulating Supply Market Cap

$331,277.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
76.06730177360528952 STBU

Value
$0.20 ( ~6.77662241774029E-05 ETH) [0.0001%]
0x39041F1B366fE33F9A5a79dE5120F2Aee2577ebc
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Stobox is a global leader in tokenization, providing technology and advisory services for issuing, managing, and trading tokenized assets.

Market

Volume (24H):$30,712.00
Market Capitalization:$331,277.00
Circulating Supply:125,000,000.00 STBU
Market Data Source: Coinmarketcap

Contract Source Code Verified (Exact Match)

Contract Name:
StoboxProtocolSTV3

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 200 runs

Other Settings:
cancun EvmVersion
// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;

import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";

import {IERC173} from "./interfaces/IERC173.sol";
import {IDiamondCut} from "./interfaces/IDiamondCut.sol";
import {LibDiamond} from "./libraries/LibDiamond.sol";
import {LibERC20} from "./libraries/LibERC20.sol";

contract StoboxProtocolSTV3 is IERC20 {
    // This is used in diamond constructor
    // more arguments are added to this struct
    // this avoids stack too deep errors
    struct DiamondArgs {
        address deployer;
        address owner;
        address init;
        bytes initCalldata;
    }

    // When no function exists for function called
    error FunctionNotFound(bytes4 _functionSelector);
    error ZeroAddressIsNotAllowed();

    modifier onlyDeployer() {
        LibDiamond.enforceIsDeployer();
        _;
    }

    constructor(IDiamondCut.FacetCut[] memory _diamondCut, DiamondArgs memory _args) payable {
        LibDiamond.setDeployer(_args.deployer);
        LibDiamond.transferOwnership(_args.owner);
        LibDiamond.diamondCut(_diamondCut, _args.init, _args.initCalldata);
    }

    receive() external payable {}

    // Find facet for function that is called and execute the
    // function if a facet is found and return any value.
    fallback() external payable {
        LibDiamond.DiamondStorage storage ds;
        bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;
        // get diamond storage
        assembly {
            ds.slot := position
        }
        // get facet from function selector
        address facet = ds.facetAddressAndSelectorPosition[msg.sig].facetAddress;
        if (facet == address(0)) {
            revert FunctionNotFound(msg.sig);
        }
        // Execute external function from facet using delegatecall and return any value.
        assembly {
            // copy function selector and any arguments
            calldatacopy(0, 0, calldatasize())
            // execute function call using the facet
            let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)
            // get any return value
            returndatacopy(0, 0, returndatasize())
            // return any return value or error back to the caller
            switch result
            case 0 { revert(0, returndatasize()) }
            default { return(0, returndatasize()) }
        }
    }

    // Requirements:
    // - `to` cannot be the zero address.
    // - the caller must have a balance of at least `value`.
    function transfer(address to, uint256 value) external returns (bool) {
        return LibERC20.transfer(to, value);
    }

    // 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) external returns (bool) {
        return LibERC20.approve(spender, value);
    }

    // Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC.
    // 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) external returns (bool) {
        return LibERC20.transferFrom(from, to, value);
    }

    // @dev Set the address of the new deployer of the contract
    // Can only be called by the current deployer.
    // @param newDeployer The address of the new deployer of the contract
    function setDeployer(address newDeployer) external onlyDeployer {
        require(newDeployer != address(0), ZeroAddressIsNotAllowed());
        LibDiamond.setDeployer(newDeployer);
    }

    // @dev Set the address of the new owner of the contract
    // Can only be called by the current deployer.
    // @param newOwner The address of the new owner of the contract
    function transferOwnership(address newOwner) external onlyDeployer {
        require(newOwner != address(0), ZeroAddressIsNotAllowed());
        LibDiamond.transferOwnership(newOwner);
    }

    // @dev Returns the name of the token.
    function name() external view returns (string memory) {
        return LibERC20.name();
    }

    // @dev Returns the symbol of the token, usually a shorter version of the
    function symbol() external view returns (string memory) {
        return LibERC20.symbol();
    }

    // @dev Returns the number of decimals used to get its user representation.
    function decimals() external view returns (uint8) {
        return LibERC20.decimals();
    }

    // @dev See {IERC20-totalSupply}.
    function totalSupply() external view returns (uint256) {
        return LibERC20.totalSupply();
    }

    // @dev See {IERC20-balanceOf}.
    function balanceOf(address account) external view returns (uint256) {
        return LibERC20.balanceOf(account);
    }

    // @dev Returns the max supply of the token, 0 if unlimited.
    function maxSupply() external view returns (uint256) {
        return LibERC20.maxSupply();
    }

    function allowance(address owner_, address spender) external view returns (uint256) {
        return LibERC20.allowance(owner_, spender);
    }

    // @dev Get the address of the deployer
    function deployer() external view returns (address) {
        return LibDiamond.deployer();
    }

    // @dev Get the address of the owner
    function owner() external view returns (address) {
        return LibDiamond.owner();
    }
}

// SPDX-License-Identifier: MIT
// 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);
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/// @title ERC-173 Contract Ownership Standard
///  Note: the ERC-165 identifier for this interface is 0x7f5828d0
interface IERC173 {
    /// @dev This emits when ownership of a contract changes.
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /// @notice Get the address of the owner
    /// @return The address of the owner.
    function owner() external view returns (address);

    /// @notice Set the address of the new owner of the contract
    /// @dev Set _newOwner to address(0) to renounce any ownership.
    /// @param _newOwner The address of the new owner of the contract
    function transferOwnership(address _newOwner) external;
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;

import {IDiamond} from "./IDiamond.sol";

interface IDiamondCut is IDiamond {
    /// @notice Add/replace/remove any number of functions and optionally execute
    ///         a function with delegatecall
    /// @param _diamondCut Contains the facet addresses and function selectors
    /// @param _init The address of the contract or facet to execute _calldata
    /// @param _calldata A function call, including function selector and arguments
    ///                  _calldata is executed with delegatecall on _init
    function diamondCut(FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata) external;
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {IDiamond} from "../interfaces/IDiamond.sol";
import {IDiamondCut} from "../interfaces/IDiamondCut.sol";

library LibDiamond {
    struct FacetAddressAndSelectorPosition {
        address facetAddress;
        uint16 selectorPosition;
    }

    struct DiamondStorage {
        // function selector => facet address and selector position in selectors array
        mapping(bytes4 => FacetAddressAndSelectorPosition) facetAddressAndSelectorPosition;
        bytes4[] selectors;
        mapping(bytes4 => bool) supportedInterfaces;
        // deployer of the contract
        address deployer;
        address owner;
    }

    bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage");

    event DeployerRightsTransferred(address indexed previousDeployer, address indexed newDeployer);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address indexed _init, bytes _calldata);

    error NoSelectorsGivenToAdd();
    error NotDeployer(address _user, address _deployer);
    error NotOwner(address _user, address _owner);
    error NoSelectorsProvidedForFacetForCut(address _facetAddress);
    error CannotAddSelectorsToZeroAddress(bytes4[] _selectors);
    error NoBytecodeAtAddress(address _contractAddress, string _message);
    error IncorrectFacetCutAction(uint8 _action);
    error CannotAddFunctionToDiamondThatAlreadyExists(bytes4 _selector);
    error CannotReplaceFunctionsFromFacetWithZeroAddress(bytes4[] _selectors);
    error CannotReplaceImmutableFunction(bytes4 _selector);
    error CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet(bytes4 _selector);
    error CannotReplaceFunctionThatDoesNotExists(bytes4 _selector);
    error RemoveFacetAddressMustBeZeroAddress(address _facetAddress);
    error CannotRemoveFunctionThatDoesNotExist(bytes4 _selector);
    error CannotRemoveImmutableFunction(bytes4 _selector);
    error InitializationFunctionReverted(address _initializationContractAddress, bytes _calldata);

    function setDeployer(address _newDeployer) internal {
        DiamondStorage storage ds = diamondStorage();

        emit DeployerRightsTransferred(ds.deployer, _newDeployer);
        ds.deployer = _newDeployer;
    }

    function transferOwnership(address _newOwner) internal {
        DiamondStorage storage ds = diamondStorage();

        emit OwnershipTransferred(ds.owner, _newOwner);
        ds.owner = _newOwner;
    }

    // Internal function version of diamondCut
    function diamondCut(IDiamondCut.FacetCut[] memory _diamondCut, address _init, bytes memory _calldata) internal {
        for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {
            bytes4[] memory functionSelectors = _diamondCut[facetIndex].functionSelectors;
            address facetAddress = _diamondCut[facetIndex].facetAddress;
            if (functionSelectors.length == 0) {
                revert NoSelectorsProvidedForFacetForCut(facetAddress);
            }
            IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;
            if (action == IDiamond.FacetCutAction.Add) {
                addFunctions(facetAddress, functionSelectors);
            } else if (action == IDiamond.FacetCutAction.Replace) {
                replaceFunctions(facetAddress, functionSelectors);
            } else if (action == IDiamond.FacetCutAction.Remove) {
                removeFunctions(facetAddress, functionSelectors);
            } else {
                revert IncorrectFacetCutAction(uint8(action));
            }
        }
        emit DiamondCut(_diamondCut, _init, _calldata);
        initializeDiamondCut(_init, _calldata);
    }

    function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        if (_facetAddress == address(0)) {
            revert CannotAddSelectorsToZeroAddress(_functionSelectors);
        }
        DiamondStorage storage ds = diamondStorage();
        uint16 selectorCount = uint16(ds.selectors.length);
        enforceHasContractCode(_facetAddress, "LibDiamondCut: Add facet has no code");
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.facetAddressAndSelectorPosition[selector].facetAddress;
            if (oldFacetAddress != address(0)) {
                revert CannotAddFunctionToDiamondThatAlreadyExists(selector);
            }
            ds.facetAddressAndSelectorPosition[selector] = FacetAddressAndSelectorPosition(_facetAddress, selectorCount);
            ds.selectors.push(selector);
            selectorCount++;
        }
    }

    function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        DiamondStorage storage ds = diamondStorage();
        if (_facetAddress == address(0)) {
            revert CannotReplaceFunctionsFromFacetWithZeroAddress(_functionSelectors);
        }
        enforceHasContractCode(_facetAddress, "LibDiamondCut: Replace facet has no code");
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.facetAddressAndSelectorPosition[selector].facetAddress;
            // can't replace immutable functions -- functions defined directly in the diamond in this case
            if (oldFacetAddress == address(this)) {
                revert CannotReplaceImmutableFunction(selector);
            }
            if (oldFacetAddress == _facetAddress) {
                revert CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet(selector);
            }
            if (oldFacetAddress == address(0)) {
                revert CannotReplaceFunctionThatDoesNotExists(selector);
            }
            // replace old facet address
            ds.facetAddressAndSelectorPosition[selector].facetAddress = _facetAddress;
        }
    }

    function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        DiamondStorage storage ds = diamondStorage();
        uint256 selectorCount = ds.selectors.length;
        if (_facetAddress != address(0)) {
            revert RemoveFacetAddressMustBeZeroAddress(_facetAddress);
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            FacetAddressAndSelectorPosition memory oldFacetAddressAndSelectorPosition =
                ds.facetAddressAndSelectorPosition[selector];
            if (oldFacetAddressAndSelectorPosition.facetAddress == address(0)) {
                revert CannotRemoveFunctionThatDoesNotExist(selector);
            }

            // can't remove immutable functions -- functions defined directly in the diamond
            if (oldFacetAddressAndSelectorPosition.facetAddress == address(this)) {
                revert CannotRemoveImmutableFunction(selector);
            }
            // replace selector with last selector
            selectorCount--;
            if (oldFacetAddressAndSelectorPosition.selectorPosition != selectorCount) {
                bytes4 lastSelector = ds.selectors[selectorCount];
                ds.selectors[oldFacetAddressAndSelectorPosition.selectorPosition] = lastSelector;
                ds.facetAddressAndSelectorPosition[lastSelector].selectorPosition =
                    oldFacetAddressAndSelectorPosition.selectorPosition;
            }
            // delete last selector
            ds.selectors.pop();
            delete ds.facetAddressAndSelectorPosition[selector];
        }
    }

    function initializeDiamondCut(address _init, bytes memory _calldata) internal {
        if (_init == address(0)) {
            return;
        }
        enforceHasContractCode(_init, "LibDiamondCut: _init address has no code");
        (bool success, bytes memory error) = _init.delegatecall(_calldata);
        if (!success) {
            if (error.length > 0) {
                // bubble up error
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(error)
                    revert(add(32, error), returndata_size)
                }
            } else {
                revert InitializationFunctionReverted(_init, _calldata);
            }
        }
    }

    function diamondStorage() internal pure returns (DiamondStorage storage ds) {
        bytes32 position = DIAMOND_STORAGE_POSITION;
        assembly {
            ds.slot := position
        }
    }

    function deployer() internal view returns (address deployer_) {
        deployer_ = diamondStorage().deployer;
    }

    function owner() internal view returns (address owner_) {
        owner_ = diamondStorage().owner;
    }

    function enforceIsDeployer() internal view {
        if (msg.sender != diamondStorage().deployer) {
            revert NotDeployer(msg.sender, diamondStorage().deployer);
        }
    }

    function enforceIsOwner() internal view {
        if (msg.sender != diamondStorage().owner) {
            revert NotOwner(msg.sender, diamondStorage().owner);
        }
    }

    function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {
        uint256 contractSize;
        assembly {
            contractSize := extcodesize(_contract)
        }
        if (contractSize == 0) {
            revert NoBytecodeAtAddress(_contract, _errorMessage);
        }
    }
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

import {IERC20Errors} from "@openzeppelin/contracts/interfaces/draft-IERC6093.sol";
import {ITransferValidation} from "../interfaces/ITransferValidation.sol";

library LibERC20 {
    struct ERC20Storage {
        mapping(address account => uint256) _balances;
        mapping(address account => mapping(address spender => uint256)) _allowances;
        uint256 _totalSupply;
        string _name;
        string _symbol;
        uint8 _decimals;
        uint256 _maxSupply;
    }

    bytes32 constant ERC20_POSITION = keccak256("erc20.storage");

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    function erc20Storage() internal pure returns (ERC20Storage storage storageStruct) {
        bytes32 position = ERC20_POSITION;
        assembly {
            storageStruct.slot := position
        }
    }

    // @dev Returns the name of the token.
    function name() internal view returns (string memory) {
        return erc20Storage()._name;
    }

    // @dev Returns the symbol of the token, usually a shorter version of the
    function symbol() internal view returns (string memory) {
        return erc20Storage()._symbol;
    }

    // @dev Returns the number of decimals used to get its user representation.
    function decimals() internal view returns (uint8) {
        return erc20Storage()._decimals;
    }

    // @dev See {IERC20-totalSupply}.
    function totalSupply() internal view returns (uint256) {
        return erc20Storage()._totalSupply;
    }

    // @dev See {IERC20-balanceOf}.
    function balanceOf(address account) internal view returns (uint256) {
        return erc20Storage()._balances[account];
    }

    // @dev Returns the max supply of the token, 0 if unlimited.
    function maxSupply() internal view returns (uint256) {
        return erc20Storage()._maxSupply;
    }

    // Requirements:
    // - `to` cannot be the zero address.
    // - the caller must have a balance of at least `value`.
    function transfer(address to, uint256 value) internal returns (bool) {
        address owner_ = _msgSender();
        _transfer(owner_, to, value);
        return true;
    }

    function allowance(address owner_, address spender) internal view returns (uint256) {
        return erc20Storage()._allowances[owner_][spender];
    }

    // 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) internal returns (bool) {
        address owner_ = _msgSender();
        _approve(owner_, spender, value);
        return true;
    }

    // Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC.
    // 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) internal 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`.
    // Emits a {Transfer} event.
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert IERC20Errors.ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert IERC20Errors.ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    // @dev Emits a {Transfer} event.
    function _update(address from, address to, uint256 value) internal {
        ITransferValidation(address(this)).beforeUpdateValidation(from, to, value);

        ERC20Storage storage erc20s = erc20Storage();

        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            erc20s._totalSupply += value;
        } else {
            uint256 fromBalance = erc20s._balances[from];
            if (fromBalance < value) {
                revert IERC20Errors.ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                erc20s._balances[from] = fromBalance - value;
            }
        }

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

        emit Transfer(from, to, value);

        ITransferValidation(address(this)).afterUpdateValidation(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.
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert IERC20Errors.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.
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert IERC20Errors.ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    // @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.
    // Emits an {Approval} event.
    // - `owner` cannot be the zero address.
    // - `spender` cannot be the zero address.
    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.
    function _approve(address owner_, address spender, uint256 value, bool emitEvent) internal {
        ERC20Storage storage erc20s = erc20Storage();

        if (owner_ == address(0)) {
            revert IERC20Errors.ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert IERC20Errors.ERC20InvalidSpender(address(0));
        }
        erc20s._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 {
        uint256 currentAllowance = allowance(owner_, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert IERC20Errors.ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner_, spender, currentAllowance - value, false);
            }
        }
    }

    function _msgSender() internal view returns (address) {
        return msg.sender;
    }
}

File 7 of 9 : IDiamond.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;

interface IDiamond {
    enum FacetCutAction {
        Add,
        Replace,
        Remove
    }
    // Add=0, Replace=1, Remove=2

    struct FacetCut {
        address facetAddress;
        FacetCutAction action;
        bytes4[] functionSelectors;
    }

    event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);
}

// SPDX-License-Identifier: MIT
// 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);
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;

interface ITransferValidation {
    function beforeUpdateValidation(address from, address to, uint256 value) external view;

    function afterUpdateValidation(address from, address to, uint256 value) external view;
}

Settings
{
  "remappings": [
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": true,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamond.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamond.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"components":[{"internalType":"address","name":"deployer","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"init","type":"address"},{"internalType":"bytes","name":"initCalldata","type":"bytes"}],"internalType":"struct StoboxProtocolSTV3.DiamondArgs","name":"_args","type":"tuple"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotAddFunctionToDiamondThatAlreadyExists","type":"error"},{"inputs":[{"internalType":"bytes4[]","name":"_selectors","type":"bytes4[]"}],"name":"CannotAddSelectorsToZeroAddress","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotRemoveFunctionThatDoesNotExist","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotRemoveImmutableFunction","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotReplaceFunctionThatDoesNotExists","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet","type":"error"},{"inputs":[{"internalType":"bytes4[]","name":"_selectors","type":"bytes4[]"}],"name":"CannotReplaceFunctionsFromFacetWithZeroAddress","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotReplaceImmutableFunction","type":"error"},{"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"},{"inputs":[{"internalType":"bytes4","name":"_functionSelector","type":"bytes4"}],"name":"FunctionNotFound","type":"error"},{"inputs":[{"internalType":"uint8","name":"_action","type":"uint8"}],"name":"IncorrectFacetCutAction","type":"error"},{"inputs":[{"internalType":"address","name":"_initializationContractAddress","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"InitializationFunctionReverted","type":"error"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"},{"internalType":"string","name":"_message","type":"string"}],"name":"NoBytecodeAtAddress","type":"error"},{"inputs":[{"internalType":"address","name":"_facetAddress","type":"address"}],"name":"NoSelectorsProvidedForFacetForCut","type":"error"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address","name":"_deployer","type":"address"}],"name":"NotDeployer","type":"error"},{"inputs":[{"internalType":"address","name":"_facetAddress","type":"address"}],"name":"RemoveFacetAddressMustBeZeroAddress","type":"error"},{"inputs":[],"name":"ZeroAddressIsNotAllowed","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":"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":"previousDeployer","type":"address"},{"indexed":true,"internalType":"address","name":"newDeployer","type":"address"}],"name":"DeployerRightsTransferred","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamond.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamond.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"indexed":true,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"DiamondCut","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"},{"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"},{"stateMutability":"payable","type":"fallback"},{"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":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","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":[{"internalType":"address","name":"newDeployer","type":"address"}],"name":"setDeployer","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526118468038038061001481610a01565b92833981016040828203126108f45781516001600160401b0381116108f45782019181601f840112156108f45782519061005561005083610a26565b610a01565b93602085848152016020819460051b830101918583116108f45760208101915b8383106108f857505050506020810151906001600160401b0382116108f457016080818403126108f457604051608081016001600160401b0381118282101761040d576040526100c482610a3d565b81526100d260208301610a3d565b90602081019182526100e660408401610a3d565b60408201908152606084015190936001600160401b0382116108f4570185601f820112156108f45780519061011d61005083610a51565b96828852602083830101116108f457815f92602080939a98999a01838b015e8801015260608101869052515f5160206118265f395f51905f52546001600160a01b03918216918291167f606864aa4cc34987a8dfd5e24f90fae803f44751861578bcdf2ea0fe4af46c915f80a35f5160206118265f395f51905f5280546001600160a01b031916919091179055515f5160206118065f395f51905f52546001600160a01b03918216918291167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a35f5160206118065f395f51905f5280546001600160a01b031916919091179055515f926001600160a01b0390911691905b81518410156107e35760406102338584610a6c565b510151916001600160a01b036102498683610a6c565b515116938351156107d05760206102608784610a6c565b51015160038110156107bc578061046a5750841561044b5761ffff5f5160206117e65f395f51905f525416926102d66102996060610a01565b602481527f4c69624469616d6f6e644375743a2041646420666163657420686173206e6f20602082015263636f646560e01b604082015287610c2f565b5f935b8551851015610433576001600160e01b03196102f58688610a6c565b51165f8181525f5160206117c65f395f51905f5260205260409020546001600160a01b0316610421576103876103296109e2565b89815261ffff9390931660208085018281525f8581525f5160206117c65f395f51905f5290925260409091209451855491516001600160b01b03199092166001600160a01b03919091161760a09190911b61ffff60a01b1617909355565b5f5160206117e65f395f51905f5254906801000000000000000082101561040d576103c78260016103e494015f5160206117e65f395f51905f5255610ab8565b90919063ffffffff83549160031b9260e01c831b921b1916179055565b61ffff81146103f957600194850194016102d9565b634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b63ebbf5d0760e01b5f5260045260245ffd5b5094509490959250600191505b01929193909361021e565b6040516302b8da0760e21b8152806104668660048301610b10565b0390fd5b949694600181036105c3575086156105a8579193916104cd61048c6060610a01565b602881527f4c69624469616d6f6e644375743a205265706c61636520666163657420686173602082015267206e6f20636f646560c01b604082015288610c2f565b6001600160a01b038716945f5b8551811015610597576001600160e01b03196104f68288610a6c565b51165f8181525f5160206117c65f395f51905f5260205260409020546001600160a01b0316308114610584578a8114610571571561055f575f9081525f5160206117c65f395f51905f526020526040902080546001600160a01b031916881790556001016104da565b637479f93960e01b5f5260045260245ffd5b50631ac6ce8d60e11b5f5260045260245ffd5b50632901806d60e11b5f5260045260245ffd5b509450949095506001919250610440565b60405163cd98a96f60e01b8152806104668660048301610b10565b93949391929091600281036107a657505f5160206117e65f395f51905f5254968061079457505f5b8551811015610786576001600160e01b03196106078288610a6c565b511690815f525f5160206117c65f395f51905f5260205260405f209861062b6109e2565b99549960018060a01b038b1680825261ffff602083019c60a01c168c521561077357516001600160a01b031630146107605780156103f9575f1901988961ffff825116036106ec575b505f5160206117e65f395f51905f52549182156106d8576001925f190161069a81610ab8565b63ffffffff82549160031b1b191690555f5160206117e65f395f51905f52555f525f5160206117c65f395f51905f526020525f6040812055016105eb565b634e487b7160e01b5f52603160045260245ffd5b61075a9061ffff6106fc8c610ab8565b90549060031b1c60e01b91610717836103c784845116610ab8565b516001600160e01b03199092165f9081525f5160206117c65f395f51905f5260205260409020805461ffff60a01b19169190921660a01b61ffff60a01b16179055565b5f610674565b82630df5fd6160e31b5f5260045260245ffd5b83637a08a22d60e01b5f5260045260245ffd5b509350936001919550610440565b63d091bc8160e01b5f5260045260245ffd5b60ff90633ff4d20f60e11b5f521660045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b8463e767f91f60e01b5f5260045260245ffd5b6040805181815292519083018190526060600582901b840181019695505f9084015b82821061085e5761084f8787807f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67389806108478f828103602084015287610a94565b0390a2610b53565b604051610b579081610c6f8239f35b848803605f19018152835180516001600160a01b0316895260208101519498939492939192606083019160038210156107bc57604060809160209384870152015193606060408201528451809452019201905f905b8082106108d157505050602080600192990192019201909291610805565b82516001600160e01b0319168452602093840193909201916001909101906108b3565b5f80fd5b82516001600160401b0381116108f45782016060818903601f1901126108f45760405190606082016001600160401b0381118382101761040d5760405261094160208201610a3d565b8252604081015160038110156108f457602083015260608101516001600160401b0381116108f457602091010188601f820112156108f457805161098761005082610a26565b9160208084848152019260051b820101908b82116108f457602001915b8183106109c1575050506040820152815260209283019201610075565b82516001600160e01b0319811681036108f4578152602092830192016109a4565b60408051919082016001600160401b0381118382101761040d57604052565b6040519190601f01601f191682016001600160401b0381118382101761040d57604052565b6001600160401b03811161040d5760051b60200190565b51906001600160a01b03821682036108f457565b6001600160401b03811161040d57601f01601f191660200190565b8051821015610a805760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b905f5160206117e65f395f51905f5254821015610a80575f5160206117e65f395f51905f525f52600382901c7fc0d727610ea16241eff4447d08bb1b4595f7d2ec4515282437a13b7d0df4b922019160021b601c1690565b60206040818301928281528451809452019201905f5b818110610b335750505090565b82516001600160e01b031916845260209384019390920191600101610b26565b6001600160a01b03811691908215610c2a575f8091610bb6610b756060610a01565b602881527f4c69624469616d6f6e644375743a205f696e6974206164647265737320686173602082015267206e6f20636f646560c01b604082015282610c2f565b83519060208501905af4913d15610c22573d92610bd561005085610a51565b9384523d5f602086013e5b15610bea57505050565b825115610bf957825160208401fd5b61046660405192839263192105d760e01b84526004840152604060248401526044830190610a94565b606092610be0565b505050565b803b15610c3a575050565b6040805163919834b960e01b81526001600160a01b0390921660048301526024820152908190610466906044830190610a9456fe60806040526004361015610015575b366107ce57005b5f3560e01c806306fdde03146100f4578063095ea7b3146100ef57806318160ddd146100ea57806323b872dd146100e5578063313ce567146100e057806370a08231146100db5780638da5cb5b146100d657806395d89b41146100d157806396214735146100cc578063a9059cbb146100c7578063d5abeb01146100c2578063d5f39488146100bd578063dd62ed3e146100b85763f2fde38b0361000e57610711565b6106e2565b6106ae565b610672565b610641565b61059a565b6104a7565b610473565b610447565b610408565b61037e565b610342565b61028e565b610131565b5f91031261010357565b5f80fd5b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b34610103575f366003190112610103576040515f7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223d548060011c9060018116908115610258575b60208310821461024457828552602085019190811561022b57506001146101ba575b6101b6846101aa81860382610847565b60405191829182610107565b0390f35b7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223d5f9081529250907fc1bc66ddf6d9f731ac5c9600f2da44727b3841bfcb4d8927aec1a1707b4516575b818410610217575050016101aa8261019a565b805484840152602090930192600101610204565b60ff191682525090151560051b0190506101aa8261019a565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610178565b600435906001600160a01b038216820361010357565b602435906001600160a01b038216820361010357565b34610103576040366003190112610103576102a7610262565b602435331561032f576001600160a01b03821691821561031c576102e482916102cf336108b5565b9060018060a01b03165f5260205260405f2090565b556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b34610103575f3660031901126101035760207f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223c54604051908152f35b3461010357606036600319011261010357610397610262565b61039f610278565b604435906103b0336102cf856108b5565b5492600184016103d1575b6103c59350610926565b60405160018152602090f35b8284106103ed576103e8836103c595033383610aa8565b6103bb565b8284637dc7a0d960e11b5f523360045260245260445260645ffd5b34610103575f36600319011261010357602060ff7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223f5416604051908152f35b3461010357602036600319011261010357602061046a610465610262565b61087d565b54604051908152f35b34610103575f366003190112610103575f516020610ae25f395f51905f52546040516001600160a01b039091168152602090f35b34610103575f366003190112610103576040515f7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223e548060011c9060018116908115610590575b60208310821461024457828552602085019190811561022b575060011461051f576101b6846101aa81860382610847565b7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223e5f9081529250907f6ee639f5db3ff26ae5edbf6980842c95dab47c8e6ba17fd75536ecd3f9711b7c5b81841061057c575050016101aa8261019a565b805484840152602090930192600101610569565b91607f16916104ee565b34610103576020366003190112610103576105b3610262565b6105bb6108ed565b6001600160a01b03166105cf8115156107b8565b5f516020610b025f395f51905f525481906001600160a01b03167f606864aa4cc34987a8dfd5e24f90fae803f44751861578bcdf2ea0fe4af46c915f80a36bffffffffffffffffffffffff60a01b5f516020610b025f395f51905f525416175f516020610b025f395f51905f52555f80f35b346101035760403660031901126101035761066761065d610262565b6024359033610926565b602060405160018152f35b34610103575f3660031901126101035760207f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f224054604051908152f35b34610103575f366003190112610103575f516020610b025f395f51905f52546040516001600160a01b039091168152602090f35b3461010357604036600319011261010357602061046a610700610262565b6102cf61070b610278565b916108b5565b346101035760203660031901126101035761072a610262565b6107326108ed565b6001600160a01b03166107468115156107b8565b5f516020610ae25f395f51905f525481906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a36bffffffffffffffffffffffff60a01b5f516020610ae25f395f51905f525416175f516020610ae25f395f51905f52555f80f35b156107bf57565b632ae88f8960e21b5f5260045ffd5b5f80356001600160e01b0319168082527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020526040909120546001600160a01b0316908115610835575f8083368280378136915af43d5f803e15610831573d5ff35b3d5ffd5b630a82dd7360e31b5f5260045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761086957604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160a01b03165f9081527f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223a6020526040902090565b6001600160a01b03165f9081527f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223b6020526040902090565b5f516020610b025f395f51905f52546001600160a01b0316338190036109105750565b630eca8ea560e11b5f523360045260245260445ffd5b906001600160a01b0382168015610a95576001600160a01b038216908115610a8257303b1561010357604051632775fab560e11b81526001600160a01b03858116600483015284166024820152604481018690525f81606481305afa8015610a4557610a6e575b506109978461087d565b54858110610a4a578590036109ab8561087d565b556109b58361087d565b8054860190556040518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602090a3303b156101035760405163013e4ddd60e21b81526001600160a01b0392831660048201529116602482015260448101919091525f81606481305afa8015610a4557610a2f5750565b80610a3d5f610a4393610847565b806100f9565b565b610ad6565b63391434e360e21b5f526001600160a01b038516600452602452604485905260645ffd5b80610a3d5f610a7c93610847565b5f61098d565b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffd5b906001600160a01b0382161561032f576001600160a01b0381161561031c576102cf610ad3926108b5565b55565b6040513d5f823e3d90fdfec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131fa2646970667358221220e39fe1be05030210086e6167fe76ce4e54928e9b566f2bd219db85536596024964736f6c634300081c0033c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131cc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131dc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000004e0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000072548f7bba84816ce0df8a6317044e328ffdeb2d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000011f931c1c00000000000000000000000000000000000000000000000000000000000000000000000000000000d64dc15a62eae274341bdbc20c50f11aa06b76d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000057a0ed62700000000000000000000000000000000000000000000000000000000adfca15e0000000000000000000000000000000000000000000000000000000052ef6b2c00000000000000000000000000000000000000000000000000000000cdffacc60000000000000000000000000000000000000000000000000000000001ffc9a700000000000000000000000000000000000000000000000000000000000000000000000000000000de8d5b12acc3f7b7bf8a5a133c2e2185fd01701400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000842966c680000000000000000000000000000000000000000000000000000000079cc67900000000000000000000000000000000000000000000000000000000040c10f19000000000000000000000000000000000000000000000000000000004000aea00000000000000000000000000000000000000000000000000000000094c7bf7b0000000000000000000000000000000000000000000000000000000092dc369a0000000000000000000000000000000000000000000000000000000004e6ebc300000000000000000000000000000000000000000000000000000000136ad20400000000000000000000000000000000000000000000000000000000000000000000000000000000b14a5b8503f40922ab2baf4960f1a40d4f06d8140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000024eebf56a0000000000000000000000000000000000000000000000000000000004f93774000000000000000000000000000000000000000000000000000000000000000000000000000000001903067a38158386eaf5e1087305b18ff0db602b00000000000000000000000044d02eec5fe9d462ba0467f909258373e5674244000000000000000000000000d0c48a3fee5a003b4f82f1d058d74ab5382a4fad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000104f8f5faa2000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000cecb8f27f4200f3a000000000000000000000000000000000000000000000000000000000000000000001053746f626f7820546f6b656e20762e33000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004535442550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361015610015575b366107ce57005b5f3560e01c806306fdde03146100f4578063095ea7b3146100ef57806318160ddd146100ea57806323b872dd146100e5578063313ce567146100e057806370a08231146100db5780638da5cb5b146100d657806395d89b41146100d157806396214735146100cc578063a9059cbb146100c7578063d5abeb01146100c2578063d5f39488146100bd578063dd62ed3e146100b85763f2fde38b0361000e57610711565b6106e2565b6106ae565b610672565b610641565b61059a565b6104a7565b610473565b610447565b610408565b61037e565b610342565b61028e565b610131565b5f91031261010357565b5f80fd5b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b34610103575f366003190112610103576040515f7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223d548060011c9060018116908115610258575b60208310821461024457828552602085019190811561022b57506001146101ba575b6101b6846101aa81860382610847565b60405191829182610107565b0390f35b7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223d5f9081529250907fc1bc66ddf6d9f731ac5c9600f2da44727b3841bfcb4d8927aec1a1707b4516575b818410610217575050016101aa8261019a565b805484840152602090930192600101610204565b60ff191682525090151560051b0190506101aa8261019a565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610178565b600435906001600160a01b038216820361010357565b602435906001600160a01b038216820361010357565b34610103576040366003190112610103576102a7610262565b602435331561032f576001600160a01b03821691821561031c576102e482916102cf336108b5565b9060018060a01b03165f5260205260405f2090565b556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b34610103575f3660031901126101035760207f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223c54604051908152f35b3461010357606036600319011261010357610397610262565b61039f610278565b604435906103b0336102cf856108b5565b5492600184016103d1575b6103c59350610926565b60405160018152602090f35b8284106103ed576103e8836103c595033383610aa8565b6103bb565b8284637dc7a0d960e11b5f523360045260245260445260645ffd5b34610103575f36600319011261010357602060ff7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223f5416604051908152f35b3461010357602036600319011261010357602061046a610465610262565b61087d565b54604051908152f35b34610103575f366003190112610103575f516020610ae25f395f51905f52546040516001600160a01b039091168152602090f35b34610103575f366003190112610103576040515f7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223e548060011c9060018116908115610590575b60208310821461024457828552602085019190811561022b575060011461051f576101b6846101aa81860382610847565b7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223e5f9081529250907f6ee639f5db3ff26ae5edbf6980842c95dab47c8e6ba17fd75536ecd3f9711b7c5b81841061057c575050016101aa8261019a565b805484840152602090930192600101610569565b91607f16916104ee565b34610103576020366003190112610103576105b3610262565b6105bb6108ed565b6001600160a01b03166105cf8115156107b8565b5f516020610b025f395f51905f525481906001600160a01b03167f606864aa4cc34987a8dfd5e24f90fae803f44751861578bcdf2ea0fe4af46c915f80a36bffffffffffffffffffffffff60a01b5f516020610b025f395f51905f525416175f516020610b025f395f51905f52555f80f35b346101035760403660031901126101035761066761065d610262565b6024359033610926565b602060405160018152f35b34610103575f3660031901126101035760207f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f224054604051908152f35b34610103575f366003190112610103575f516020610b025f395f51905f52546040516001600160a01b039091168152602090f35b3461010357604036600319011261010357602061046a610700610262565b6102cf61070b610278565b916108b5565b346101035760203660031901126101035761072a610262565b6107326108ed565b6001600160a01b03166107468115156107b8565b5f516020610ae25f395f51905f525481906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a36bffffffffffffffffffffffff60a01b5f516020610ae25f395f51905f525416175f516020610ae25f395f51905f52555f80f35b156107bf57565b632ae88f8960e21b5f5260045ffd5b5f80356001600160e01b0319168082527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020526040909120546001600160a01b0316908115610835575f8083368280378136915af43d5f803e15610831573d5ff35b3d5ffd5b630a82dd7360e31b5f5260045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761086957604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160a01b03165f9081527f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223a6020526040902090565b6001600160a01b03165f9081527f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223b6020526040902090565b5f516020610b025f395f51905f52546001600160a01b0316338190036109105750565b630eca8ea560e11b5f523360045260245260445ffd5b906001600160a01b0382168015610a95576001600160a01b038216908115610a8257303b1561010357604051632775fab560e11b81526001600160a01b03858116600483015284166024820152604481018690525f81606481305afa8015610a4557610a6e575b506109978461087d565b54858110610a4a578590036109ab8561087d565b556109b58361087d565b8054860190556040518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602090a3303b156101035760405163013e4ddd60e21b81526001600160a01b0392831660048201529116602482015260448101919091525f81606481305afa8015610a4557610a2f5750565b80610a3d5f610a4393610847565b806100f9565b565b610ad6565b63391434e360e21b5f526001600160a01b038516600452602452604485905260645ffd5b80610a3d5f610a7c93610847565b5f61098d565b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffd5b906001600160a01b0382161561032f576001600160a01b0381161561031c576102cf610ad3926108b5565b55565b6040513d5f823e3d90fdfec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131fa2646970667358221220e39fe1be05030210086e6167fe76ce4e54928e9b566f2bd219db85536596024964736f6c634300081c0033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000004e0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000072548f7bba84816ce0df8a6317044e328ffdeb2d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000011f931c1c00000000000000000000000000000000000000000000000000000000000000000000000000000000d64dc15a62eae274341bdbc20c50f11aa06b76d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000057a0ed62700000000000000000000000000000000000000000000000000000000adfca15e0000000000000000000000000000000000000000000000000000000052ef6b2c00000000000000000000000000000000000000000000000000000000cdffacc60000000000000000000000000000000000000000000000000000000001ffc9a700000000000000000000000000000000000000000000000000000000000000000000000000000000de8d5b12acc3f7b7bf8a5a133c2e2185fd01701400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000842966c680000000000000000000000000000000000000000000000000000000079cc67900000000000000000000000000000000000000000000000000000000040c10f19000000000000000000000000000000000000000000000000000000004000aea00000000000000000000000000000000000000000000000000000000094c7bf7b0000000000000000000000000000000000000000000000000000000092dc369a0000000000000000000000000000000000000000000000000000000004e6ebc300000000000000000000000000000000000000000000000000000000136ad20400000000000000000000000000000000000000000000000000000000000000000000000000000000b14a5b8503f40922ab2baf4960f1a40d4f06d8140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000024eebf56a0000000000000000000000000000000000000000000000000000000004f93774000000000000000000000000000000000000000000000000000000000000000000000000000000001903067a38158386eaf5e1087305b18ff0db602b00000000000000000000000044d02eec5fe9d462ba0467f909258373e5674244000000000000000000000000d0c48a3fee5a003b4f82f1d058d74ab5382a4fad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000104f8f5faa2000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000cecb8f27f4200f3a000000000000000000000000000000000000000000000000000000000000000000001053746f626f7820546f6b656e20762e33000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004535442550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _diamondCut (tuple[]):
Arg [1] : facetAddress (address): 0x72548F7BbA84816CE0dF8a6317044E328Ffdeb2D
Arg [2] : action (uint8): 0
Arg [3] : functionSelectors (bytes4[]): 0x1f931c1

Arg [1] : facetAddress (address): 0xD64dC15A62EAe274341BDbC20c50f11AA06B76d0
Arg [2] : action (uint8): 0
Arg [3] : functionSelectors (bytes4[]): 0x01ffc9a

Arg [1] : facetAddress (address): 0xDE8d5b12aCC3F7b7BF8A5a133c2e2185fd017014
Arg [2] : action (uint8): 0
Arg [3] : functionSelectors (bytes4[]): 0x136ad20

Arg [1] : facetAddress (address): 0xb14A5b8503F40922aB2BAF4960f1A40D4F06D814
Arg [2] : action (uint8): 0
Arg [3] : functionSelectors (bytes4[]): 0x04f9377

Arg [1] : _args (tuple):
Arg [1] : deployer (address): 0x1903067A38158386EAF5E1087305B18ff0Db602B
Arg [2] : owner (address): 0x44d02eEC5fe9D462ba0467F909258373E5674244
Arg [3] : init (address): 0xD0C48A3FEe5a003B4F82f1d058d74ab5382A4fAD
Arg [4] : initCalldata (bytes): 0xf8f5faa2000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000cecb8f27f4200f3a000000000000000000000000000000000000000000000000000000000000000000001053746f626f7820546f6b656e20762e330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045354425500000000000000000000000000000000000000000000000000000000


-----Encoded View---------------
53 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000004e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000240
Arg [6] : 00000000000000000000000000000000000000000000000000000000000003c0
Arg [7] : 00000000000000000000000072548f7bba84816ce0df8a6317044e328ffdeb2d
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [11] : 1f931c1c00000000000000000000000000000000000000000000000000000000
Arg [12] : 000000000000000000000000d64dc15a62eae274341bdbc20c50f11aa06b76d0
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [16] : 7a0ed62700000000000000000000000000000000000000000000000000000000
Arg [17] : adfca15e00000000000000000000000000000000000000000000000000000000
Arg [18] : 52ef6b2c00000000000000000000000000000000000000000000000000000000
Arg [19] : cdffacc600000000000000000000000000000000000000000000000000000000
Arg [20] : 01ffc9a700000000000000000000000000000000000000000000000000000000
Arg [21] : 000000000000000000000000de8d5b12acc3f7b7bf8a5a133c2e2185fd017014
Arg [22] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [23] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [24] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [25] : 42966c6800000000000000000000000000000000000000000000000000000000
Arg [26] : 79cc679000000000000000000000000000000000000000000000000000000000
Arg [27] : 40c10f1900000000000000000000000000000000000000000000000000000000
Arg [28] : 4000aea000000000000000000000000000000000000000000000000000000000
Arg [29] : 94c7bf7b00000000000000000000000000000000000000000000000000000000
Arg [30] : 92dc369a00000000000000000000000000000000000000000000000000000000
Arg [31] : 04e6ebc300000000000000000000000000000000000000000000000000000000
Arg [32] : 136ad20400000000000000000000000000000000000000000000000000000000
Arg [33] : 000000000000000000000000b14a5b8503f40922ab2baf4960f1a40d4f06d814
Arg [34] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [35] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [36] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [37] : 4eebf56a00000000000000000000000000000000000000000000000000000000
Arg [38] : 04f9377400000000000000000000000000000000000000000000000000000000
Arg [39] : 0000000000000000000000001903067a38158386eaf5e1087305b18ff0db602b
Arg [40] : 00000000000000000000000044d02eec5fe9d462ba0467f909258373e5674244
Arg [41] : 000000000000000000000000d0c48a3fee5a003b4f82f1d058d74ab5382a4fad
Arg [42] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [43] : 0000000000000000000000000000000000000000000000000000000000000104
Arg [44] : f8f5faa200000000000000000000000000000000000000000000000000000000
Arg [45] : 0000008000000000000000000000000000000000000000000000000000000000
Arg [46] : 000000c000000000000000000000000000000000000000000000000000000000
Arg [47] : 00000012000000000000000000000000000000000000000000cecb8f27f4200f
Arg [48] : 3a00000000000000000000000000000000000000000000000000000000000000
Arg [49] : 0000001053746f626f7820546f6b656e20762e33000000000000000000000000
Arg [50] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [51] : 0000000453544255000000000000000000000000000000000000000000000000
Arg [52] : 0000000000000000000000000000000000000000000000000000000000000000


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.