S Price: $0.449361 (-0.38%)
    /

    Token

    Legends of maBeets (LOM)

    Overview

    Max Total Supply

    7,998 LOM

    Holders

    5,920

    Market

    Onchain Market Cap

    $0.00

    Circulating Supply Market Cap

    -
    Balance
    1 LOM
    0x23af0c8ebe4bfc44997b4382fb3ca0c090d4618b
    Loading...
    Loading
    Loading...
    Loading
    Loading...
    Loading

    Click here to update the token information / general information

    Contract Source Code Verified (Exact Match)

    Contract Name:
    LegendsOfMaBeets

    Compiler Version
    v0.8.28+commit.7893614a

    Optimization Enabled:
    No with 200 runs

    Other Settings:
    shanghai EvmVersion
    File 1 of 19 : LegendsOfMaBeets.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.27;
    import {ERC721Enumerable} from "openzeppelin-contracts/token/ERC721/extensions/ERC721Enumerable.sol";
    import {ERC721} from "openzeppelin-contracts/token/ERC721/ERC721.sol";
    import {Ownable} from "openzeppelin-contracts/access/Ownable.sol";
    import "./INFTDescriptor.sol";
    contract LegendsOfMaBeets is ERC721Enumerable, Ownable {
    /// @dev Nonce to use for new relicId.
    uint256 private idNonce;
    error NonExistentToken();
    /// @notice Info of each position.
    struct PositionInfo {
    uint256 amount;
    uint256 level;
    }
    /// @notice The NFT descriptor contract.
    INFTDescriptor public nftDescriptor;
    // /// @notice Info of each og position.
    mapping(uint256 => PositionInfo) private _positionForId;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 19 : ERC721Enumerable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/extensions/ERC721Enumerable.sol)
    pragma solidity ^0.8.20;
    import {ERC721} from "../ERC721.sol";
    import {IERC721Enumerable} from "./IERC721Enumerable.sol";
    import {IERC165} from "../../../utils/introspection/ERC165.sol";
    /**
    * @dev This implements an optional extension of {ERC721} defined in the ERC that adds enumerability
    * of all the token ids in the contract as well as all token ids owned by each account.
    *
    * CAUTION: {ERC721} extensions that implement custom `balanceOf` logic, such as {ERC721Consecutive},
    * interfere with enumerability and should not be used together with {ERC721Enumerable}.
    */
    abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    mapping(address owner => mapping(uint256 index => uint256)) private _ownedTokens;
    mapping(uint256 tokenId => uint256) private _ownedTokensIndex;
    uint256[] private _allTokens;
    mapping(uint256 tokenId => uint256) private _allTokensIndex;
    /**
    * @dev An `owner`'s token query was out of bounds for `index`.
    *
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 19 : ERC721.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/ERC721.sol)
    pragma solidity ^0.8.20;
    import {IERC721} from "./IERC721.sol";
    import {IERC721Metadata} from "./extensions/IERC721Metadata.sol";
    import {ERC721Utils} from "./utils/ERC721Utils.sol";
    import {Context} from "../../utils/Context.sol";
    import {Strings} from "../../utils/Strings.sol";
    import {IERC165, ERC165} from "../../utils/introspection/ERC165.sol";
    import {IERC721Errors} from "../../interfaces/draft-IERC6093.sol";
    /**
    * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC-721] Non-Fungible Token Standard, including
    * the Metadata extension, but not including the Enumerable extension, which is available separately as
    * {ERC721Enumerable}.
    */
    abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Errors {
    using Strings for uint256;
    // Token name
    string private _name;
    // Token symbol
    string private _symbol;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 19 : Ownable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
    pragma solidity ^0.8.20;
    import {Context} from "../utils/Context.sol";
    /**
    * @dev Contract module which provides a basic access control mechanism, where
    * there is an account (an owner) that can be granted exclusive access to
    * specific functions.
    *
    * The initial owner is set to the address provided by the deployer. This can
    * later be changed with {transferOwnership}.
    *
    * This module is used through inheritance. It will make available the modifier
    * `onlyOwner`, which can be applied to your functions to restrict their use to
    * the owner.
    */
    abstract contract Ownable is Context {
    address private _owner;
    /**
    * @dev The caller account is not authorized to perform an operation.
    */
    error OwnableUnauthorizedAccount(address account);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 19 : INFTDescriptor.sol
    1
    2
    3
    4
    5
    6
    7
    8
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.15;
    import "./LegendsOfMaBeets.sol";
    interface INFTDescriptor {
    function constructTokenURI(LegendsOfMaBeets.PositionInfo calldata position) external view returns (string memory);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 19 : IERC721Enumerable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Enumerable.sol)
    pragma solidity ^0.8.20;
    import {IERC721} from "../IERC721.sol";
    /**
    * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
    * @dev See https://eips.ethereum.org/EIPS/eip-721
    */
    interface IERC721Enumerable is IERC721 {
    /**
    * @dev Returns the total amount of tokens stored by the contract.
    */
    function totalSupply() external view returns (uint256);
    /**
    * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
    * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
    */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
    /**
    * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
    * Use along with {totalSupply} to enumerate all tokens.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 19 : ERC165.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/ERC165.sol)
    pragma solidity ^0.8.20;
    import {IERC165} from "./IERC165.sol";
    /**
    * @dev Implementation of the {IERC165} interface.
    *
    * Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check
    * for the additional interface id that will be supported. For example:
    *
    * ```solidity
    * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
    * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
    * }
    * ```
    */
    abstract contract ERC165 is IERC165 {
    /**
    * @dev See {IERC165-supportsInterface}.
    */
    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
    return interfaceId == type(IERC165).interfaceId;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 19 : IERC721.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol)
    pragma solidity ^0.8.20;
    import {IERC165} from "../../utils/introspection/IERC165.sol";
    /**
    * @dev Required interface of an ERC-721 compliant contract.
    */
    interface IERC721 is IERC165 {
    /**
    * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
    */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    /**
    * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
    */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    /**
    * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
    */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 19 : IERC721Metadata.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol)
    pragma solidity ^0.8.20;
    import {IERC721} from "../IERC721.sol";
    /**
    * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
    * @dev See https://eips.ethereum.org/EIPS/eip-721
    */
    interface IERC721Metadata is IERC721 {
    /**
    * @dev Returns the token collection name.
    */
    function name() external view returns (string memory);
    /**
    * @dev Returns the token collection symbol.
    */
    function symbol() external view returns (string memory);
    /**
    * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
    */
    function tokenURI(uint256 tokenId) external view returns (string memory);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 19 : ERC721Utils.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/utils/ERC721Utils.sol)
    pragma solidity ^0.8.20;
    import {IERC721Receiver} from "../IERC721Receiver.sol";
    import {IERC721Errors} from "../../../interfaces/draft-IERC6093.sol";
    /**
    * @dev Library that provide common ERC-721 utility functions.
    *
    * See https://eips.ethereum.org/EIPS/eip-721[ERC-721].
    *
    * _Available since v5.1._
    */
    library ERC721Utils {
    /**
    * @dev Performs an acceptance check for the provided `operator` by calling {IERC721-onERC721Received}
    * on the `to` address. The `operator` is generally the address that initiated the token transfer (i.e. `msg.sender`).
    *
    * The acceptance call is not executed and treated as a no-op if the target address doesn't contain code (i.e. an EOA).
    * Otherwise, the recipient must implement {IERC721Receiver-onERC721Received} and return the acceptance magic value to accept
    * the transfer.
    */
    function checkOnERC721Received(
    address operator,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 19 : Context.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // 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;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 12 of 19 : Strings.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/Strings.sol)
    pragma solidity ^0.8.20;
    import {Math} from "./math/Math.sol";
    import {SignedMath} from "./math/SignedMath.sol";
    /**
    * @dev String operations.
    */
    library Strings {
    bytes16 private constant HEX_DIGITS = "0123456789abcdef";
    uint8 private constant ADDRESS_LENGTH = 20;
    /**
    * @dev The `value` string doesn't fit in the specified `length`.
    */
    error StringsInsufficientHexLength(uint256 value, uint256 length);
    /**
    * @dev Converts a `uint256` to its ASCII `string` decimal representation.
    */
    function toString(uint256 value) internal pure returns (string memory) {
    unchecked {
    uint256 length = Math.log10(value) + 1;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 19 : draft-IERC6093.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 19 : IERC165.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Interface of the ERC-165 standard, as defined in the
    * https://eips.ethereum.org/EIPS/eip-165[ERC].
    *
    * Implementers can declare support of contract interfaces, which can then be
    * queried by others ({ERC165Checker}).
    *
    * For an implementation, see {ERC165}.
    */
    interface IERC165 {
    /**
    * @dev Returns true if this contract implements the interface defined by
    * `interfaceId`. See the corresponding
    * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
    * to learn more about how these ids are created.
    *
    * This function call must use less than 30 000 gas.
    */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 15 of 19 : IERC721Receiver.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721Receiver.sol)
    pragma solidity ^0.8.20;
    /**
    * @title ERC-721 token receiver interface
    * @dev Interface for any contract that wants to support safeTransfers
    * from ERC-721 asset contracts.
    */
    interface IERC721Receiver {
    /**
    * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
    * by `operator` from `from`, this function is called.
    *
    * It must return its Solidity selector to confirm the token transfer.
    * If any other value is returned or the interface is not implemented by the recipient, the transfer will be
    * reverted.
    *
    * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
    */
    function onERC721Received(
    address operator,
    address from,
    uint256 tokenId,
    bytes calldata data
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 16 of 19 : Math.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/math/Math.sol)
    pragma solidity ^0.8.20;
    import {Panic} from "../Panic.sol";
    import {SafeCast} from "./SafeCast.sol";
    /**
    * @dev Standard math utilities missing in the Solidity language.
    */
    library Math {
    enum Rounding {
    Floor, // Toward negative infinity
    Ceil, // Toward positive infinity
    Trunc, // Toward zero
    Expand // Away from zero
    }
    /**
    * @dev Returns the addition of two unsigned integers, with an success flag (no overflow).
    */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {
    unchecked {
    uint256 c = a + b;
    if (c < a) return (false, 0);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 17 of 19 : SignedMath.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SignedMath.sol)
    pragma solidity ^0.8.20;
    import {SafeCast} from "./SafeCast.sol";
    /**
    * @dev Standard signed math utilities missing in the Solidity language.
    */
    library SignedMath {
    /**
    * @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.
    *
    * IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.
    * However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute
    * one branch when needed, making this function more expensive.
    */
    function ternary(bool condition, int256 a, int256 b) internal pure returns (int256) {
    unchecked {
    // branchless ternary works because:
    // b ^ (a ^ b) == a
    // b ^ 0 == b
    return b ^ ((a ^ b) * int256(SafeCast.toUint(condition)));
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 18 of 19 : Panic.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/Panic.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Helper library for emitting standardized panic codes.
    *
    * ```solidity
    * contract Example {
    * using Panic for uint256;
    *
    * // Use any of the declared internal constants
    * function foo() { Panic.GENERIC.panic(); }
    *
    * // Alternatively
    * function foo() { Panic.panic(Panic.GENERIC); }
    * }
    * ```
    *
    * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].
    *
    * _Available since v5.1._
    */
    // slither-disable-next-line unused-state
    library Panic {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 19 of 19 : SafeCast.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SafeCast.sol)
    // This file was procedurally generated from scripts/generate/templates/SafeCast.js.
    pragma solidity ^0.8.20;
    /**
    * @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow
    * checks.
    *
    * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
    * easily result in undesired exploitation or bugs, since developers usually
    * assume that overflows raise errors. `SafeCast` restores this intuition by
    * reverting the transaction when such an operation overflows.
    *
    * Using this library instead of the unchecked operations eliminates an entire
    * class of bugs, so it's recommended to use it always.
    */
    library SafeCast {
    /**
    * @dev Value doesn't fit in an uint of `bits` size.
    */
    error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);
    /**
    * @dev An int value doesn't fit in an uint of `bits` size.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Settings
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    {
    "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/",
    "halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/"
    ],
    "optimizer": {
    "enabled": false,
    "runs": 200
    },
    "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
    },
    "outputSelection": {
    "*": {
    "*": [
    "evm.bytecode",
    "evm.deployedBytecode",
    "devdoc",
    "userdoc",
    "metadata",
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Contract Security Audit

    Contract ABI

    API
    [{"inputs":[{"internalType":"contract INFTDescriptor","name":"descriptor","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ERC721EnumerableForbiddenBatchMint","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"ERC721OutOfBoundsIndex","type":"error"},{"inputs":[],"name":"NonExistentToken","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getPositionForId","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"level","type":"uint256"}],"internalType":"struct LegendsOfMaBeets.PositionInfo","name":"position","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftDescriptor","outputs":[{"internalType":"contract INFTDescriptor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract INFTDescriptor","name":"newDescriptor","type":"address"}],"name":"setNFTDescriptor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

    608060405234801561000f575f5ffd5b50604051612e8c380380612e8c833981810160405281019061003191906102b7565b336040518060400160405280601281526020017f4c6567656e6473206f66206d61426565747300000000000000000000000000008152506040518060400160405280600381526020017f4c4f4d0000000000000000000000000000000000000000000000000000000000815250815f90816100ac919061051f565b5080600190816100bc919061051f565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361012f575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161012691906105fd565b60405180910390fd5b61013e8161018560201b60201c565b5080600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610616565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6102758261024c565b9050919050565b5f6102868261026b565b9050919050565b6102968161027c565b81146102a0575f5ffd5b50565b5f815190506102b18161028d565b92915050565b5f602082840312156102cc576102cb610248565b5b5f6102d9848285016102a3565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061035d57607f821691505b6020821081036103705761036f610319565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103d27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610397565b6103dc8683610397565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61042061041b610416846103f4565b6103fd565b6103f4565b9050919050565b5f819050919050565b61043983610406565b61044d61044582610427565b8484546103a3565b825550505050565b5f5f905090565b610464610455565b61046f818484610430565b505050565b5b81811015610492576104875f8261045c565b600181019050610475565b5050565b601f8211156104d7576104a881610376565b6104b184610388565b810160208510156104c0578190505b6104d46104cc85610388565b830182610474565b50505b505050565b5f82821c905092915050565b5f6104f75f19846008026104dc565b1980831691505092915050565b5f61050f83836104e8565b9150826002028217905092915050565b610528826102e2565b67ffffffffffffffff811115610541576105406102ec565b5b61054b8254610346565b610556828285610496565b5f60209050601f831160018114610587575f8415610575578287015190505b61057f8582610504565b8655506105e6565b601f19841661059586610376565b5f5b828110156105bc57848901518255600182019150602085019450602081019050610597565b868310156105d957848901516105d5601f8916826104e8565b8355505b6001600288020188555050505b505050505050565b6105f78161026b565b82525050565b5f6020820190506106105f8301846105ee565b92915050565b612869806106235f395ff3fe608060405234801561000f575f5ffd5b506004361061014b575f3560e01c80636352211e116100c1578063a22cb4651161007a578063a22cb465146103af578063b88d4fde146103cb578063c87b56dd146103e7578063e48dc13514610417578063e985e9c514610447578063f2fde38b146104775761014b565b80636352211e146102ed57806370a082311461031d578063715018a61461034d5780637cad6cd1146103575780638da5cb5b1461037357806395d89b41146103915761014b565b806318160ddd1161011357806318160ddd1461021957806323b872dd146102375780632f745c591461025357806342842e0e14610283578063442675701461029f5780634f6ccce7146102bd5761014b565b806301ffc9a71461014f57806306fdde031461017f578063081812fc1461019d578063095ea7b3146101cd578063156e29f6146101e9575b5f5ffd5b61016960048036038101906101649190611e1f565b610493565b6040516101769190611e64565b60405180910390f35b61018761050c565b6040516101949190611f07565b60405180910390f35b6101b760048036038101906101b29190611f5a565b61059b565b6040516101c49190611fc4565b60405180910390f35b6101e760048036038101906101e29190612007565b6105b6565b005b61020360048036038101906101fe9190612045565b6105cc565b60405161021091906120a4565b60405180910390f35b61022161060d565b60405161022e91906120a4565b60405180910390f35b610251600480360381019061024c91906120bd565b610619565b005b61026d60048036038101906102689190612007565b610718565b60405161027a91906120a4565b60405180910390f35b61029d600480360381019061029891906120bd565b6107bc565b005b6102a76107db565b6040516102b49190612168565b60405180910390f35b6102d760048036038101906102d29190611f5a565b610800565b6040516102e491906120a4565b60405180910390f35b61030760048036038101906103029190611f5a565b610872565b6040516103149190611fc4565b60405180910390f35b61033760048036038101906103329190612181565b610883565b60405161034491906120a4565b60405180910390f35b610355610939565b005b610371600480360381019061036c91906121e7565b61094c565b005b61037b610997565b6040516103889190611fc4565b60405180910390f35b6103996109bf565b6040516103a69190611f07565b60405180910390f35b6103c960048036038101906103c4919061223c565b610a4f565b005b6103e560048036038101906103e091906123a6565b610a65565b005b61040160048036038101906103fc9190611f5a565b610a8a565b60405161040e9190611f07565b60405180910390f35b610431600480360381019061042c9190611f5a565b610b78565b60405161043e9190612462565b60405180910390f35b610461600480360381019061045c919061247b565b610bb6565b60405161046e9190611e64565b60405180910390f35b610491600480360381019061048c9190612181565b610c44565b005b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610505575061050482610cc8565b5b9050919050565b60605f805461051a906124e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610546906124e6565b80156105915780601f1061056857610100808354040283529160200191610591565b820191905f5260205f20905b81548152906001019060200180831161057457829003601f168201915b5050505050905090565b5f6105a582610da9565b506105af82610e2f565b9050919050565b6105c882826105c3610e68565b610e6f565b5050565b5f6105d5610e81565b6105de84610f08565b90505f600d5f8381526020019081526020015f20905082815f0181905550838160010181905550509392505050565b5f600880549050905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610689575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016106809190611fc4565b60405180910390fd5b5f61069c8383610697610e68565b610f2e565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610712578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161070993929190612516565b60405180910390fd5b50505050565b5f61072283610883565b82106107675782826040517fa57d13dc00000000000000000000000000000000000000000000000000000000815260040161075e92919061254b565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b6107d683838360405180602001604052805f815250610a65565b505050565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61080961060d565b821061084e575f826040517fa57d13dc00000000000000000000000000000000000000000000000000000000815260040161084592919061254b565b60405180910390fd5b6008828154811061086257610861612572565b5b905f5260205f2001549050919050565b5f61087c82610da9565b9050919050565b5f5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108f4575f6040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016108eb9190611fc4565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610941610e81565b61094a5f611048565b565b610954610e81565b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546109ce906124e6565b80601f01602080910402602001604051908101604052809291908181526020018280546109fa906124e6565b8015610a455780601f10610a1c57610100808354040283529160200191610a45565b820191905f5260205f20905b815481529060010190602001808311610a2857829003601f168201915b5050505050905090565b610a61610a5a610e68565b838361110b565b5050565b610a70848484610619565b610a84610a7b610e68565b85858585611274565b50505050565b60605f610a9683610b78565b90505f815f015103610ad4576040517f9430a17e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2ffca74826040518263ffffffff1660e01b8152600401610b2e9190612462565b5f60405180830381865afa158015610b48573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610b70919061263d565b915050919050565b610b80611da1565b600d5f8381526020019081526020015f206040518060400160405290815f82015481526020016001820154815250509050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b610c4c610e81565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cbc575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610cb39190611fc4565b60405180910390fd5b610cc581611048565b50565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d9257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610da25750610da182611420565b5b9050919050565b5f5f610db483611489565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e2657826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610e1d91906120a4565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b610e7c83838360016114c2565b505050565b610e89610e68565b73ffffffffffffffffffffffffffffffffffffffff16610ea7610997565b73ffffffffffffffffffffffffffffffffffffffff1614610f0657610eca610e68565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610efd9190611fc4565b60405180910390fd5b565b5f600b5f8154610f17906126b1565b9190508190559050610f298282611681565b919050565b5f5f610f3b85858561169e565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f7e57610f79846118a9565b610fbd565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610fbc57610fbb81856118ed565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610ffe57610ff9846119c4565b61103d565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461103c5761103b8585611a84565b5b5b809150509392505050565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361117b57816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016111729190611fc4565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112679190611e64565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115611419578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02868685856040518563ffffffff1660e01b81526004016112d2949392919061274a565b6020604051808303815f875af192505050801561130d57506040513d601f19601f8201168201806040525081019061130a91906127a8565b60015b61138e573d805f811461133b576040519150601f19603f3d011682016040523d82523d5f602084013e611340565b606091505b505f81510361138657836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161137d9190611fc4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461141757836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161140e9190611fc4565b60405180910390fd5b505b5050505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806114fa57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561162c575f61150984610da9565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561157357508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561158657506115848184610bb6565b155b156115c857826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016115bf9190611fc4565b60405180910390fd5b811561162a57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b61169a828260405180602001604052805f815250611b08565b5050565b5f5f6116a984611489565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146116ea576116e9818486611b2b565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611775576117295f855f5f6114c2565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146117f457600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b60088054905060095f8381526020019081526020015f2081905550600881908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f6118f783610883565b90505f60075f8481526020019081526020015f205490505f60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050828214611996575f815f8581526020019081526020015f2054905080825f8581526020019081526020015f20819055508260075f8381526020019081526020015f2081905550505b60075f8581526020019081526020015f205f9055805f8481526020019081526020015f205f90555050505050565b5f60016008805490506119d791906127d3565b90505f60095f8481526020019081526020015f205490505f60088381548110611a0357611a02612572565b5b905f5260205f20015490508060088381548110611a2357611a22612572565b5b905f5260205f2001819055508160095f8381526020019081526020015f208190555060095f8581526020019081526020015f205f90556008805480611a6b57611a6a612806565b5b600190038181905f5260205f20015f9055905550505050565b5f6001611a9084610883565b611a9a91906127d3565b90508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060075f8481526020019081526020015f2081905550505050565b611b128383611bee565b611b26611b1d610e68565b5f858585611274565b505050565b611b36838383611ce1565b611be9575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611baa57806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611ba191906120a4565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611be092919061254b565b60405180910390fd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c5e575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611c559190611fc4565b60405180910390fd5b5f611c6a83835f610f2e565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611cdc575f6040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600401611cd39190611fc4565b60405180910390fd5b505050565b5f5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d9857508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d595750611d588484610bb6565b5b80611d9757508273ffffffffffffffffffffffffffffffffffffffff16611d7f83610e2f565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b60405180604001604052805f81526020015f81525090565b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611dfe81611dca565b8114611e08575f5ffd5b50565b5f81359050611e1981611df5565b92915050565b5f60208284031215611e3457611e33611dc2565b5b5f611e4184828501611e0b565b91505092915050565b5f8115159050919050565b611e5e81611e4a565b82525050565b5f602082019050611e775f830184611e55565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611eb4578082015181840152602081019050611e99565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611ed982611e7d565b611ee38185611e87565b9350611ef3818560208601611e97565b611efc81611ebf565b840191505092915050565b5f6020820190508181035f830152611f1f8184611ecf565b905092915050565b5f819050919050565b611f3981611f27565b8114611f43575f5ffd5b50565b5f81359050611f5481611f30565b92915050565b5f60208284031215611f6f57611f6e611dc2565b5b5f611f7c84828501611f46565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611fae82611f85565b9050919050565b611fbe81611fa4565b82525050565b5f602082019050611fd75f830184611fb5565b92915050565b611fe681611fa4565b8114611ff0575f5ffd5b50565b5f8135905061200181611fdd565b92915050565b5f5f6040838503121561201d5761201c611dc2565b5b5f61202a85828601611ff3565b925050602061203b85828601611f46565b9150509250929050565b5f5f5f6060848603121561205c5761205b611dc2565b5b5f61206986828701611ff3565b935050602061207a86828701611f46565b925050604061208b86828701611f46565b9150509250925092565b61209e81611f27565b82525050565b5f6020820190506120b75f830184612095565b92915050565b5f5f5f606084860312156120d4576120d3611dc2565b5b5f6120e186828701611ff3565b93505060206120f286828701611ff3565b925050604061210386828701611f46565b9150509250925092565b5f819050919050565b5f61213061212b61212684611f85565b61210d565b611f85565b9050919050565b5f61214182612116565b9050919050565b5f61215282612137565b9050919050565b61216281612148565b82525050565b5f60208201905061217b5f830184612159565b92915050565b5f6020828403121561219657612195611dc2565b5b5f6121a384828501611ff3565b91505092915050565b5f6121b682611fa4565b9050919050565b6121c6816121ac565b81146121d0575f5ffd5b50565b5f813590506121e1816121bd565b92915050565b5f602082840312156121fc576121fb611dc2565b5b5f612209848285016121d3565b91505092915050565b61221b81611e4a565b8114612225575f5ffd5b50565b5f8135905061223681612212565b92915050565b5f5f6040838503121561225257612251611dc2565b5b5f61225f85828601611ff3565b925050602061227085828601612228565b9150509250929050565b5f5ffd5b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6122b882611ebf565b810181811067ffffffffffffffff821117156122d7576122d6612282565b5b80604052505050565b5f6122e9611db9565b90506122f582826122af565b919050565b5f67ffffffffffffffff82111561231457612313612282565b5b61231d82611ebf565b9050602081019050919050565b828183375f83830152505050565b5f61234a612345846122fa565b6122e0565b9050828152602081018484840111156123665761236561227e565b5b61237184828561232a565b509392505050565b5f82601f83011261238d5761238c61227a565b5b813561239d848260208601612338565b91505092915050565b5f5f5f5f608085870312156123be576123bd611dc2565b5b5f6123cb87828801611ff3565b94505060206123dc87828801611ff3565b93505060406123ed87828801611f46565b925050606085013567ffffffffffffffff81111561240e5761240d611dc6565b5b61241a87828801612379565b91505092959194509250565b61242f81611f27565b82525050565b604082015f8201516124495f850182612426565b50602082015161245c6020850182612426565b50505050565b5f6040820190506124755f830184612435565b92915050565b5f5f6040838503121561249157612490611dc2565b5b5f61249e85828601611ff3565b92505060206124af85828601611ff3565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806124fd57607f821691505b6020821081036125105761250f6124b9565b5b50919050565b5f6060820190506125295f830186611fb5565b6125366020830185612095565b6125436040830184611fb5565b949350505050565b5f60408201905061255e5f830185611fb5565b61256b6020830184612095565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f67ffffffffffffffff8211156125b9576125b8612282565b5b6125c282611ebf565b9050602081019050919050565b5f6125e16125dc8461259f565b6122e0565b9050828152602081018484840111156125fd576125fc61227e565b5b612608848285611e97565b509392505050565b5f82601f8301126126245761262361227a565b5b81516126348482602086016125cf565b91505092915050565b5f6020828403121561265257612651611dc2565b5b5f82015167ffffffffffffffff81111561266f5761266e611dc6565b5b61267b84828501612610565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6126bb82611f27565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036126ed576126ec612684565b5b600182019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f61271c826126f8565b6127268185612702565b9350612736818560208601611e97565b61273f81611ebf565b840191505092915050565b5f60808201905061275d5f830187611fb5565b61276a6020830186611fb5565b6127776040830185612095565b81810360608301526127898184612712565b905095945050505050565b5f815190506127a281611df5565b92915050565b5f602082840312156127bd576127bc611dc2565b5b5f6127ca84828501612794565b91505092915050565b5f6127dd82611f27565b91506127e883611f27565b9250828203905081811115612800576127ff612684565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea26469706673582212201610d0542a442b0d83dd311e56a862879ea9c2f2ecc45230232409e6a67d8b9c64736f6c634300081c0033000000000000000000000000e36d5d493c0575b3153cbe3c92fa75972a598b9c

    Deployed Bytecode

    0x608060405234801561000f575f5ffd5b506004361061014b575f3560e01c80636352211e116100c1578063a22cb4651161007a578063a22cb465146103af578063b88d4fde146103cb578063c87b56dd146103e7578063e48dc13514610417578063e985e9c514610447578063f2fde38b146104775761014b565b80636352211e146102ed57806370a082311461031d578063715018a61461034d5780637cad6cd1146103575780638da5cb5b1461037357806395d89b41146103915761014b565b806318160ddd1161011357806318160ddd1461021957806323b872dd146102375780632f745c591461025357806342842e0e14610283578063442675701461029f5780634f6ccce7146102bd5761014b565b806301ffc9a71461014f57806306fdde031461017f578063081812fc1461019d578063095ea7b3146101cd578063156e29f6146101e9575b5f5ffd5b61016960048036038101906101649190611e1f565b610493565b6040516101769190611e64565b60405180910390f35b61018761050c565b6040516101949190611f07565b60405180910390f35b6101b760048036038101906101b29190611f5a565b61059b565b6040516101c49190611fc4565b60405180910390f35b6101e760048036038101906101e29190612007565b6105b6565b005b61020360048036038101906101fe9190612045565b6105cc565b60405161021091906120a4565b60405180910390f35b61022161060d565b60405161022e91906120a4565b60405180910390f35b610251600480360381019061024c91906120bd565b610619565b005b61026d60048036038101906102689190612007565b610718565b60405161027a91906120a4565b60405180910390f35b61029d600480360381019061029891906120bd565b6107bc565b005b6102a76107db565b6040516102b49190612168565b60405180910390f35b6102d760048036038101906102d29190611f5a565b610800565b6040516102e491906120a4565b60405180910390f35b61030760048036038101906103029190611f5a565b610872565b6040516103149190611fc4565b60405180910390f35b61033760048036038101906103329190612181565b610883565b60405161034491906120a4565b60405180910390f35b610355610939565b005b610371600480360381019061036c91906121e7565b61094c565b005b61037b610997565b6040516103889190611fc4565b60405180910390f35b6103996109bf565b6040516103a69190611f07565b60405180910390f35b6103c960048036038101906103c4919061223c565b610a4f565b005b6103e560048036038101906103e091906123a6565b610a65565b005b61040160048036038101906103fc9190611f5a565b610a8a565b60405161040e9190611f07565b60405180910390f35b610431600480360381019061042c9190611f5a565b610b78565b60405161043e9190612462565b60405180910390f35b610461600480360381019061045c919061247b565b610bb6565b60405161046e9190611e64565b60405180910390f35b610491600480360381019061048c9190612181565b610c44565b005b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610505575061050482610cc8565b5b9050919050565b60605f805461051a906124e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610546906124e6565b80156105915780601f1061056857610100808354040283529160200191610591565b820191905f5260205f20905b81548152906001019060200180831161057457829003601f168201915b5050505050905090565b5f6105a582610da9565b506105af82610e2f565b9050919050565b6105c882826105c3610e68565b610e6f565b5050565b5f6105d5610e81565b6105de84610f08565b90505f600d5f8381526020019081526020015f20905082815f0181905550838160010181905550509392505050565b5f600880549050905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610689575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016106809190611fc4565b60405180910390fd5b5f61069c8383610697610e68565b610f2e565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610712578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161070993929190612516565b60405180910390fd5b50505050565b5f61072283610883565b82106107675782826040517fa57d13dc00000000000000000000000000000000000000000000000000000000815260040161075e92919061254b565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b6107d683838360405180602001604052805f815250610a65565b505050565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61080961060d565b821061084e575f826040517fa57d13dc00000000000000000000000000000000000000000000000000000000815260040161084592919061254b565b60405180910390fd5b6008828154811061086257610861612572565b5b905f5260205f2001549050919050565b5f61087c82610da9565b9050919050565b5f5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108f4575f6040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016108eb9190611fc4565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610941610e81565b61094a5f611048565b565b610954610e81565b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546109ce906124e6565b80601f01602080910402602001604051908101604052809291908181526020018280546109fa906124e6565b8015610a455780601f10610a1c57610100808354040283529160200191610a45565b820191905f5260205f20905b815481529060010190602001808311610a2857829003601f168201915b5050505050905090565b610a61610a5a610e68565b838361110b565b5050565b610a70848484610619565b610a84610a7b610e68565b85858585611274565b50505050565b60605f610a9683610b78565b90505f815f015103610ad4576040517f9430a17e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2ffca74826040518263ffffffff1660e01b8152600401610b2e9190612462565b5f60405180830381865afa158015610b48573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610b70919061263d565b915050919050565b610b80611da1565b600d5f8381526020019081526020015f206040518060400160405290815f82015481526020016001820154815250509050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b610c4c610e81565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cbc575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610cb39190611fc4565b60405180910390fd5b610cc581611048565b50565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d9257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610da25750610da182611420565b5b9050919050565b5f5f610db483611489565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e2657826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610e1d91906120a4565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b610e7c83838360016114c2565b505050565b610e89610e68565b73ffffffffffffffffffffffffffffffffffffffff16610ea7610997565b73ffffffffffffffffffffffffffffffffffffffff1614610f0657610eca610e68565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610efd9190611fc4565b60405180910390fd5b565b5f600b5f8154610f17906126b1565b9190508190559050610f298282611681565b919050565b5f5f610f3b85858561169e565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f7e57610f79846118a9565b610fbd565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610fbc57610fbb81856118ed565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610ffe57610ff9846119c4565b61103d565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461103c5761103b8585611a84565b5b5b809150509392505050565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361117b57816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016111729190611fc4565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112679190611e64565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115611419578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02868685856040518563ffffffff1660e01b81526004016112d2949392919061274a565b6020604051808303815f875af192505050801561130d57506040513d601f19601f8201168201806040525081019061130a91906127a8565b60015b61138e573d805f811461133b576040519150601f19603f3d011682016040523d82523d5f602084013e611340565b606091505b505f81510361138657836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161137d9190611fc4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461141757836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161140e9190611fc4565b60405180910390fd5b505b5050505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806114fa57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561162c575f61150984610da9565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561157357508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561158657506115848184610bb6565b155b156115c857826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016115bf9190611fc4565b60405180910390fd5b811561162a57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b61169a828260405180602001604052805f815250611b08565b5050565b5f5f6116a984611489565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146116ea576116e9818486611b2b565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611775576117295f855f5f6114c2565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146117f457600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b60088054905060095f8381526020019081526020015f2081905550600881908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f6118f783610883565b90505f60075f8481526020019081526020015f205490505f60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050828214611996575f815f8581526020019081526020015f2054905080825f8581526020019081526020015f20819055508260075f8381526020019081526020015f2081905550505b60075f8581526020019081526020015f205f9055805f8481526020019081526020015f205f90555050505050565b5f60016008805490506119d791906127d3565b90505f60095f8481526020019081526020015f205490505f60088381548110611a0357611a02612572565b5b905f5260205f20015490508060088381548110611a2357611a22612572565b5b905f5260205f2001819055508160095f8381526020019081526020015f208190555060095f8581526020019081526020015f205f90556008805480611a6b57611a6a612806565b5b600190038181905f5260205f20015f9055905550505050565b5f6001611a9084610883565b611a9a91906127d3565b90508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060075f8481526020019081526020015f2081905550505050565b611b128383611bee565b611b26611b1d610e68565b5f858585611274565b505050565b611b36838383611ce1565b611be9575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611baa57806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611ba191906120a4565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611be092919061254b565b60405180910390fd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c5e575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611c559190611fc4565b60405180910390fd5b5f611c6a83835f610f2e565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611cdc575f6040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600401611cd39190611fc4565b60405180910390fd5b505050565b5f5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d9857508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d595750611d588484610bb6565b5b80611d9757508273ffffffffffffffffffffffffffffffffffffffff16611d7f83610e2f565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b60405180604001604052805f81526020015f81525090565b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611dfe81611dca565b8114611e08575f5ffd5b50565b5f81359050611e1981611df5565b92915050565b5f60208284031215611e3457611e33611dc2565b5b5f611e4184828501611e0b565b91505092915050565b5f8115159050919050565b611e5e81611e4a565b82525050565b5f602082019050611e775f830184611e55565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611eb4578082015181840152602081019050611e99565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611ed982611e7d565b611ee38185611e87565b9350611ef3818560208601611e97565b611efc81611ebf565b840191505092915050565b5f6020820190508181035f830152611f1f8184611ecf565b905092915050565b5f819050919050565b611f3981611f27565b8114611f43575f5ffd5b50565b5f81359050611f5481611f30565b92915050565b5f60208284031215611f6f57611f6e611dc2565b5b5f611f7c84828501611f46565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611fae82611f85565b9050919050565b611fbe81611fa4565b82525050565b5f602082019050611fd75f830184611fb5565b92915050565b611fe681611fa4565b8114611ff0575f5ffd5b50565b5f8135905061200181611fdd565b92915050565b5f5f6040838503121561201d5761201c611dc2565b5b5f61202a85828601611ff3565b925050602061203b85828601611f46565b9150509250929050565b5f5f5f6060848603121561205c5761205b611dc2565b5b5f61206986828701611ff3565b935050602061207a86828701611f46565b925050604061208b86828701611f46565b9150509250925092565b61209e81611f27565b82525050565b5f6020820190506120b75f830184612095565b92915050565b5f5f5f606084860312156120d4576120d3611dc2565b5b5f6120e186828701611ff3565b93505060206120f286828701611ff3565b925050604061210386828701611f46565b9150509250925092565b5f819050919050565b5f61213061212b61212684611f85565b61210d565b611f85565b9050919050565b5f61214182612116565b9050919050565b5f61215282612137565b9050919050565b61216281612148565b82525050565b5f60208201905061217b5f830184612159565b92915050565b5f6020828403121561219657612195611dc2565b5b5f6121a384828501611ff3565b91505092915050565b5f6121b682611fa4565b9050919050565b6121c6816121ac565b81146121d0575f5ffd5b50565b5f813590506121e1816121bd565b92915050565b5f602082840312156121fc576121fb611dc2565b5b5f612209848285016121d3565b91505092915050565b61221b81611e4a565b8114612225575f5ffd5b50565b5f8135905061223681612212565b92915050565b5f5f6040838503121561225257612251611dc2565b5b5f61225f85828601611ff3565b925050602061227085828601612228565b9150509250929050565b5f5ffd5b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6122b882611ebf565b810181811067ffffffffffffffff821117156122d7576122d6612282565b5b80604052505050565b5f6122e9611db9565b90506122f582826122af565b919050565b5f67ffffffffffffffff82111561231457612313612282565b5b61231d82611ebf565b9050602081019050919050565b828183375f83830152505050565b5f61234a612345846122fa565b6122e0565b9050828152602081018484840111156123665761236561227e565b5b61237184828561232a565b509392505050565b5f82601f83011261238d5761238c61227a565b5b813561239d848260208601612338565b91505092915050565b5f5f5f5f608085870312156123be576123bd611dc2565b5b5f6123cb87828801611ff3565b94505060206123dc87828801611ff3565b93505060406123ed87828801611f46565b925050606085013567ffffffffffffffff81111561240e5761240d611dc6565b5b61241a87828801612379565b91505092959194509250565b61242f81611f27565b82525050565b604082015f8201516124495f850182612426565b50602082015161245c6020850182612426565b50505050565b5f6040820190506124755f830184612435565b92915050565b5f5f6040838503121561249157612490611dc2565b5b5f61249e85828601611ff3565b92505060206124af85828601611ff3565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806124fd57607f821691505b6020821081036125105761250f6124b9565b5b50919050565b5f6060820190506125295f830186611fb5565b6125366020830185612095565b6125436040830184611fb5565b949350505050565b5f60408201905061255e5f830185611fb5565b61256b6020830184612095565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f67ffffffffffffffff8211156125b9576125b8612282565b5b6125c282611ebf565b9050602081019050919050565b5f6125e16125dc8461259f565b6122e0565b9050828152602081018484840111156125fd576125fc61227e565b5b612608848285611e97565b509392505050565b5f82601f8301126126245761262361227a565b5b81516126348482602086016125cf565b91505092915050565b5f6020828403121561265257612651611dc2565b5b5f82015167ffffffffffffffff81111561266f5761266e611dc6565b5b61267b84828501612610565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6126bb82611f27565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036126ed576126ec612684565b5b600182019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f61271c826126f8565b6127268185612702565b9350612736818560208601611e97565b61273f81611ebf565b840191505092915050565b5f60808201905061275d5f830187611fb5565b61276a6020830186611fb5565b6127776040830185612095565b81810360608301526127898184612712565b905095945050505050565b5f815190506127a281611df5565b92915050565b5f602082840312156127bd576127bc611dc2565b5b5f6127ca84828501612794565b91505092915050565b5f6127dd82611f27565b91506127e883611f27565b9250828203905081811115612800576127ff612684565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea26469706673582212201610d0542a442b0d83dd311e56a862879ea9c2f2ecc45230232409e6a67d8b9c64736f6c634300081c0033

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

    000000000000000000000000e36d5d493c0575b3153cbe3c92fa75972a598b9c

    -----Decoded View---------------
    Arg [0] : descriptor (address): 0xE36D5d493C0575B3153cBe3C92FA75972a598B9c

    -----Encoded View---------------
    1 Constructor Arguments found :
    Arg [0] : 000000000000000000000000e36d5d493c0575b3153cbe3c92fa75972a598b9c


    [ 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.