ETH Price: $3,479.88 (+2.58%)
Gas: 3.73 Gwei

Token

DeFrogs (DEFROGS)
 

Overview

Max Total Supply

10,000 DEFROGS

Holders

1,433

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
7 DEFROGS
0x342f870AdDb03422c0674Fc270F330547dB43869
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

DeFrogs is a collection of 10,000 DeFrogs enabled by an adjusted version of ERC404, an experimental token standard enabling persistent liquidity and semi-fungibility for Ethereum NFTs.

Market

Volume (24H):$99,600.00
Market Capitalization:$1,749,901.00
Circulating Supply:10,000.00 DEFROGS
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DeFrogs

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-02-06
*/

//SPDX-License-Identifier: UNLICENSED

/*
The Official DeFrogs Contract - ERC404
██████╗ ███████╗███████╗██████╗  ██████╗  ██████╗ ███████╗
██╔══██╗██╔════╝██╔════╝██╔══██╗██╔═══██╗██╔════╝ ██╔════╝
██║  ██║█████╗  █████╗  ██████╔╝██║   ██║██║  ███╗███████╗
██║  ██║██╔══╝  ██╔══╝  ██╔══██╗██║   ██║██║   ██║╚════██║
██████╔╝███████╗██║     ██║  ██║╚██████╔╝╚██████╔╝███████║
╚═════╝ ╚══════╝╚═╝     ╚═╝  ╚═╝ ╚═════╝  ╚═════╝ ╚══════╝
*/
pragma solidity ^0.8.0;
// File: @openzeppelin/contracts/utils/ReentrancyGuard.sol


// OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol)

pragma solidity ^0.8.20;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant NOT_ENTERED = 1;
    uint256 private constant ENTERED = 2;

    uint256 private _status;

    /**
     * @dev Unauthorized reentrant call.
     */
    error ReentrancyGuardReentrantCall();

    constructor() {
        _status = NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be NOT_ENTERED
        if (_status == ENTERED) {
            revert ReentrancyGuardReentrantCall();
        }

        // Any calls to nonReentrant after this point will fail
        _status = ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/math/SignedMath.sol


// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)

pragma solidity ^0.8.20;

/**
 * @dev Standard signed math utilities missing in the Solidity language.
 */
library SignedMath {
    /**
     * @dev Returns the largest of two signed numbers.
     */
    function max(int256 a, int256 b) internal pure returns (int256) {
        return a > b ? a : b;
    }

    /**
     * @dev Returns the smallest of two signed numbers.
     */
    function min(int256 a, int256 b) internal pure returns (int256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two signed numbers without overflow.
     * The result is rounded towards zero.
     */
    function average(int256 a, int256 b) internal pure returns (int256) {
        // Formula from the book "Hacker's Delight"
        int256 x = (a & b) + ((a ^ b) >> 1);
        return x + (int256(uint256(x) >> 255) & (a ^ b));
    }

    /**
     * @dev Returns the absolute unsigned value of a signed value.
     */
    function abs(int256 n) internal pure returns (uint256) {
        unchecked {
            // must be unchecked in order to support `n = type(int256).min`
            return uint256(n >= 0 ? n : -n);
        }
    }
}

// File: @openzeppelin/contracts/utils/math/Math.sol


// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)

pragma solidity ^0.8.20;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    /**
     * @dev Muldiv operation overflow.
     */
    error MathOverflowedMulDiv();

    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 overflow flag.
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }

    /**
     * @dev Returns the ceiling of the division of two numbers.
     *
     * This differs from standard division with `/` in that it rounds towards infinity instead
     * of rounding towards zero.
     */
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        if (b == 0) {
            // Guarantee the same behavior as in a regular Solidity division.
            return a / b;
        }

        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a == 0 ? 0 : (a - 1) / b + 1;
    }

    /**
     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or
     * denominator == 0.
     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by
     * Uniswap Labs also under MIT license.
     */
    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
        unchecked {
            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
            // variables such that product = prod1 * 2^256 + prod0.
            uint256 prod0 = x * y; // Least significant 256 bits of the product
            uint256 prod1; // Most significant 256 bits of the product
            assembly {
                let mm := mulmod(x, y, not(0))
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            // Handle non-overflow cases, 256 by 256 division.
            if (prod1 == 0) {
                // Solidity will revert if denominator == 0, unlike the div opcode on its own.
                // The surrounding unchecked block does not change this fact.
                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
                return prod0 / denominator;
            }

            // Make sure the result is less than 2^256. Also prevents denominator == 0.
            if (denominator <= prod1) {
                revert MathOverflowedMulDiv();
            }

            ///////////////////////////////////////////////
            // 512 by 256 division.
            ///////////////////////////////////////////////

            // Make division exact by subtracting the remainder from [prod1 prod0].
            uint256 remainder;
            assembly {
                // Compute remainder using mulmod.
                remainder := mulmod(x, y, denominator)

                // Subtract 256 bit number from 512 bit number.
                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }

            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.
            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.

            uint256 twos = denominator & (0 - denominator);
            assembly {
                // Divide denominator by twos.
                denominator := div(denominator, twos)

                // Divide [prod1 prod0] by twos.
                prod0 := div(prod0, twos)

                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
                twos := add(div(sub(0, twos), twos), 1)
            }

            // Shift in bits from prod1 into prod0.
            prod0 |= prod1 * twos;

            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
            // four bits. That is, denominator * inv = 1 mod 2^4.
            uint256 inverse = (3 * denominator) ^ 2;

            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also
            // works in modular arithmetic, doubling the correct bits in each step.
            inverse *= 2 - denominator * inverse; // inverse mod 2^8
            inverse *= 2 - denominator * inverse; // inverse mod 2^16
            inverse *= 2 - denominator * inverse; // inverse mod 2^32
            inverse *= 2 - denominator * inverse; // inverse mod 2^64
            inverse *= 2 - denominator * inverse; // inverse mod 2^128
            inverse *= 2 - denominator * inverse; // inverse mod 2^256

            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
            // is no longer required.
            result = prod0 * inverse;
            return result;
        }
    }

    /**
     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
     */
    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }

    /**
     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded
     * towards zero.
     *
     * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
     */
    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
        //
        // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
        //
        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
        //
        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
        uint256 result = 1 << (log2(a) >> 1);

        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
        // into the expected uint128 result.
        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }

    /**
     * @notice Calculates sqrt(a), following the selected rounding direction.
     */
    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = sqrt(a);
            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 2 of a positive value rounded towards zero.
     * Returns 0 if given 0.
     */
    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log2(value);
            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 10 of a positive value rounded towards zero.
     * Returns 0 if given 0.
     */
    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10 ** 64) {
                value /= 10 ** 64;
                result += 64;
            }
            if (value >= 10 ** 32) {
                value /= 10 ** 32;
                result += 32;
            }
            if (value >= 10 ** 16) {
                value /= 10 ** 16;
                result += 16;
            }
            if (value >= 10 ** 8) {
                value /= 10 ** 8;
                result += 8;
            }
            if (value >= 10 ** 4) {
                value /= 10 ** 4;
                result += 4;
            }
            if (value >= 10 ** 2) {
                value /= 10 ** 2;
                result += 2;
            }
            if (value >= 10 ** 1) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log10(value);
            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 256 of a positive value rounded towards zero.
     * Returns 0 if given 0.
     *
     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
     */
    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 16;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 8;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 4;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 2;
            }
            if (value >> 8 > 0) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log256(value);
            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);
        }
    }

    /**
     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.
     */
    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {
        return uint8(rounding) % 2 == 1;
    }
}

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


// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)

pragma solidity ^0.8.20;



/**
 * @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;
            string memory buffer = new string(length);
            uint256 ptr;
            /// @solidity memory-safe-assembly
            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;
                /// @solidity memory-safe-assembly
                assembly {
                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

    /**
     * @dev Converts a `int256` to its ASCII `string` decimal representation.
     */
    function toStringSigned(int256 value) internal pure returns (string memory) {
        return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value)));
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        unchecked {
            return toHexString(value, Math.log256(value) + 1);
        }
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        uint256 localValue = value;
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = HEX_DIGITS[localValue & 0xf];
            localValue >>= 4;
        }
        if (localValue != 0) {
            revert StringsInsufficientHexLength(value, length);
        }
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal
     * representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);
    }

    /**
     * @dev Returns true if the two strings are equal.
     */
    function equal(string memory a, string memory b) internal pure returns (bool) {
        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));
    }
}

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


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

pragma solidity ^0.8.20;

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

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

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

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


// OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol)

pragma solidity ^0.8.20;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    bool private _paused;

    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    /**
     * @dev The operation failed because the contract is paused.
     */
    error EnforcedPause();

    /**
     * @dev The operation failed because the contract is not paused.
     */
    error ExpectedPause();

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        if (paused()) {
            revert EnforcedPause();
        }
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        if (!paused()) {
            revert ExpectedPause();
        }
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;


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

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

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

// File: @openzeppelin/contracts/access/Ownable2Step.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable2Step.sol)

pragma solidity ^0.8.20;


/**
 * @dev Contract module which provides access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is specified at deployment time in the constructor for `Ownable`. This
 * can later be changed with {transferOwnership} and {acceptOwnership}.
 *
 * This module is used through inheritance. It will make available all functions
 * from parent (Ownable).
 */
abstract contract Ownable2Step is Ownable {
    address private _pendingOwner;

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

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

    /**
     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual override onlyOwner {
        _pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner(), newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual override {
        delete _pendingOwner;
        super._transferOwnership(newOwner);
    }

    /**
     * @dev The new owner accepts the ownership transfer.
     */
    function acceptOwnership() public virtual {
        address sender = _msgSender();
        if (pendingOwner() != sender) {
            revert OwnableUnauthorizedAccount(sender);
        }
        _transferOwnership(sender);
    }
}

// File: contracts/ERC404.sol

pragma solidity ^0.8.0;


abstract contract ERC721Receiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC721Receiver.onERC721Received.selector;
    }
}

/// @notice ERC404
///         A gas-efficient, mixed ERC20 / ERC721 implementation
///         with native liquidity and fractionalization.
///
///         This is an experimental standard designed to integrate
///         with pre-existing ERC20 / ERC721 support as smoothly as
///         possible.
///
/// @dev    In order to support full functionality of ERC20 and ERC721
///         supply assumptions are made that slightly constraint usage.
///         Ensure decimals are sufficiently large (standard 18 recommended)
///         as ids are effectively encoded in the lowest range of amounts.
///
///         NFTs are spent on ERC20 functions in a FILO queue, this is by
///         design.
///
abstract contract ERC404 is Ownable2Step {
    // Events
    event ERC20Transfer(
        address indexed from,
        address indexed to,
        uint256 amount
    );
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 amount
    );
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed id
    );
    event ERC721Approval(
        address indexed owner,
        address indexed spender,
        uint256 indexed id
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    // Errors
    error NotFound();
    error AlreadyExists();
    error InvalidRecipient();
    error InvalidSender();
    error UnsafeRecipient();
    error Unauthorized();
    error InvalidOwner();

    // Metadata
    /// @dev Token name
    string public name;

    /// @dev Token symbol
    string public symbol;

    /// @dev Decimals for fractional representation
    uint8 public immutable decimals;

    /// @dev Total supply in fractionalized representation
    uint256 public immutable totalSupply;

    /// @dev Current mint counter, monotonically increasing to ensure accurate ownership
    uint256 public minted;

    // Mappings
    /// @dev Balance of user in fractional representation
    mapping(address => uint256) public balanceOf;

    /// @dev Allowance of user in fractional representation
    mapping(address => mapping(address => uint256)) public allowance;

    /// @dev Approval in native representaion
    mapping(uint256 => address) public getApproved;

    /// @dev Approval for all in native representation
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /// @dev Owner of id in native representation
    mapping(uint256 => address) internal _ownerOf;

    /// @dev Array of owned ids in native representation
    mapping(address => uint256[]) internal _owned;

    /// @dev Tracks indices for the _owned mapping
    mapping(uint256 => uint256) internal _ownedIndex;

    /// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc)
    mapping(address => bool) public whitelist;

    // Constructor
    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals,
        uint256 _totalNativeSupply,
        address _owner
    ) Ownable(_owner) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        totalSupply = _totalNativeSupply * (10 ** decimals);
    }

    /// @notice Initialization function to set pairs / etc
    ///         saving gas by avoiding mint / burn on unnecessary targets
    function setWhitelist(address target, bool state) public onlyOwner {
        whitelist[target] = state;
    }

    /// @notice Function to find owner of a given native token
    function ownerOf(uint256 id) public view virtual returns (address owner) {
        owner = _ownerOf[id];

        if (owner == address(0)) {
            revert NotFound();
        }
    }

    /// @notice tokenURI must be implemented by child contract
    function tokenURI(uint256 id) public view virtual returns (string memory);

    /// @notice Function for token approvals
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function approve(
        address spender,
        uint256 amountOrId
    ) public virtual returns (bool) {
        if (amountOrId <= minted && amountOrId > 0) {
            address owner = _ownerOf[amountOrId];

            if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) {
                revert Unauthorized();
            }

            getApproved[amountOrId] = spender;

            emit Approval(owner, spender, amountOrId);
        } else {
            allowance[msg.sender][spender] = amountOrId;

            emit Approval(msg.sender, spender, amountOrId);
        }

        return true;
    }

    /// @notice Function native approvals
    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    /// @notice Function for mixed transfers
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function transferFrom(
        address from,
        address to,
        uint256 amountOrId
    ) public virtual {
        if (amountOrId <= minted) {
            if (from != _ownerOf[amountOrId]) {
                revert InvalidSender();
            }

            if (to == address(0)) {
                revert InvalidRecipient();
            }

            if (
                msg.sender != from &&
                !isApprovedForAll[from][msg.sender] &&
                msg.sender != getApproved[amountOrId]
            ) {
                revert Unauthorized();
            }

            balanceOf[from] -= _getUnit();

            unchecked {
                balanceOf[to] += _getUnit();
            }

            _ownerOf[amountOrId] = to;
            delete getApproved[amountOrId];

            // update _owned for sender
            uint256 updatedId = _owned[from][_owned[from].length - 1];
            _owned[from][_ownedIndex[amountOrId]] = updatedId;
            // pop
            _owned[from].pop();
            // update index for the moved id
            _ownedIndex[updatedId] = _ownedIndex[amountOrId];
            // push token to to owned
            _owned[to].push(amountOrId);
            // update index for to owned
            _ownedIndex[amountOrId] = _owned[to].length - 1;

            emit Transfer(from, to, amountOrId);
            emit ERC20Transfer(from, to, _getUnit());
        } else {
            uint256 allowed = allowance[from][msg.sender];

            if (allowed != type(uint256).max)
                allowance[from][msg.sender] = allowed - amountOrId;

            _transfer(from, to, amountOrId);
        }
    }

    /// @notice Function for fractional transfers
    function transfer(
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        return _transfer(msg.sender, to, amount);
    }

    /// @notice Function for native transfers with contract support
    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    /// @notice Function for native transfers with contract support and callback data
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    ) public virtual {
        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    /// @notice Internal function for fractional transfers
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual returns (bool) {
        uint256 unit = _getUnit();
        uint256 balanceBeforeSender = balanceOf[from];
        uint256 balanceBeforeReceiver = balanceOf[to];

        balanceOf[from] -= amount;

        unchecked {
            balanceOf[to] += amount;
        }

        // Skip burn for certain addresses to save gas
        if (!whitelist[from]) {
            uint256 tokens_to_burn = (balanceBeforeSender / unit) -
                (balanceOf[from] / unit);
            for (uint256 i = 0; i < tokens_to_burn; i++) {
                _burn(from);
            }
        }

        // Skip minting for certain addresses to save gas
        if (!whitelist[to]) {
            uint256 tokens_to_mint = (balanceOf[to] / unit) -
                (balanceBeforeReceiver / unit);
            for (uint256 i = 0; i < tokens_to_mint; i++) {
                _mint(to);
            }
        }

        emit ERC20Transfer(from, to, amount);
        return true;
    }

    // Internal utility logic
    function _getUnit() internal view returns (uint256) {
        return 10 ** decimals;
    }

    function _mint(address to) internal virtual {
        if (to == address(0)) {
            revert InvalidRecipient();
        }

        unchecked {
            minted++;
        }

        uint256 id = minted;

        if (_ownerOf[id] != address(0)) {
            revert AlreadyExists();
        }

        _ownerOf[id] = to;
        _owned[to].push(id);
        _ownedIndex[id] = _owned[to].length - 1;

        emit Transfer(address(0), to, id);
    }

    function _burn(address from) internal virtual {
        if (from == address(0)) {
            revert InvalidSender();
        }

        uint256 id = _owned[from][_owned[from].length - 1];
        _owned[from].pop();
        delete _ownedIndex[id];
        delete _ownerOf[id];
        delete getApproved[id];

        emit Transfer(from, address(0), id);
    }

    function _setNameSymbol(
        string memory _name,
        string memory _symbol
    ) internal {
        name = _name;
        symbol = _symbol;
    }
}
// File: contracts/Defrogs.sol







contract DeFrogs is ERC404, Pausable, ReentrancyGuard {
    string public baseTokenURI;
    uint256 public buyLimit;
    uint256 public sellLimit;
    uint256 public txLimit;
    mapping (address => uint256) public userBuylimit;
    mapping (address => uint256) public userSelllimit;
    using Strings for uint256;
    bool public applyTxLimit;

    constructor(
        address _owner,
        uint256 _initialSupply,
        uint8 _decimal,
        uint256 _buylimit,
        uint256 _selllimit
    ) ERC404("DeFrogs", "DEFROGS", _decimal, _initialSupply, _owner) {
        balanceOf[_owner] = _initialSupply * 10 ** _decimal;
        buyLimit = _buylimit * 10 ** _decimal;
        sellLimit = _selllimit * 10 ** _decimal;
        txLimit = 10 * 10 ** _decimal;
    }

    function setLimit(uint256 _buylimit, uint256 _selllimit) public onlyOwner{
        buyLimit = _buylimit;
        sellLimit = _selllimit;
    }

    function _mint(
        address to
    ) internal override whenNotPaused{
        return super._mint(to);
    }

    function startApplyingLimit() external onlyOwner{
        applyTxLimit = true;
    }

    function stopApplyingLimit() external onlyOwner{
        applyTxLimit = false;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override virtual whenNotPaused returns (bool){
        if(applyTxLimit){
            require(amount < txLimit, "exceed tx limit");
        }
        if(!whitelist[from]){
            userSelllimit[from] += amount;
            require(userSelllimit[from] <= sellLimit, "not allowed anymore to sell");
        }
        if(!whitelist[to]){
            userBuylimit[to] += amount;
            require(userBuylimit[to] <= buyLimit, "not allowed anymore to buy");
        }
        return super._transfer(from, to, amount);
    }

    function setTokenURI(string memory _tokenURI) public onlyOwner {
        baseTokenURI = _tokenURI;
    }

    function setNameSymbol(
        string memory _name,
        string memory _symbol
    ) public onlyOwner {
        _setNameSymbol(_name, _symbol);
    }

    function tokenURI(uint256 id) public view override returns (string memory) {
        return bytes(baseTokenURI).length > 0 ? string.concat(baseTokenURI, id.toString(), ".json") : "";
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"uint8","name":"_decimal","type":"uint8"},{"internalType":"uint256","name":"_buylimit","type":"uint256"},{"internalType":"uint256","name":"_selllimit","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","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":"amount","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyTxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","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":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","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":"id","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":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buylimit","type":"uint256"},{"internalType":"uint256","name":"_selllimit","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"setNameSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startApplyingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopApplyingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userBuylimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userSelllimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60c060405234801562000010575f80fd5b506040516200236338038062002363833981016040819052620000339162000212565b60405180604001604052806007815260200166446546726f677360c81b81525060405180604001604052806007815260200166444546524f475360c81b815250848688805f6001600160a01b0316816001600160a01b031603620000b057604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000bb81620001a5565b506002620000ca868262000313565b506003620000d9858262000313565b5060ff83166080819052620000f090600a620004ee565b620000fc908362000505565b60a0525050600d805460ff1916905550506001600e55506200012083600a620004ee565b6200012c908562000505565b6001600160a01b0386165f908152600560205260409020556200015183600a620004ee565b6200015d908362000505565b6010556200016d83600a620004ee565b62000179908262000505565b6011556200018983600a620004ee565b6200019690600a62000505565b601255506200051f9350505050565b600180546001600160a01b0319169055620001c081620001c3565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f805f60a0868803121562000227575f80fd5b85516001600160a01b03811681146200023e575f80fd5b60208701516040880151919650945060ff811681146200025c575f80fd5b6060870151608090970151959894975095949392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200029e57607f821691505b602082108103620002bd57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200030e57805f5260205f20601f840160051c81016020851015620002ea5750805b601f840160051c820191505b818110156200030b575f8155600101620002f6565b50505b505050565b81516001600160401b038111156200032f576200032f62000275565b620003478162000340845462000289565b84620002c3565b602080601f8311600181146200037d575f8415620003655750858301515b5f19600386901b1c1916600185901b178555620003d7565b5f85815260208120601f198616915b82811015620003ad578886015182559484019460019091019084016200038c565b5085821015620003cb57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200043357815f1904821115620004175762000417620003df565b808516156200042557918102915b93841c9390800290620003f8565b509250929050565b5f826200044b57506001620004e8565b816200045957505f620004e8565b81600181146200047257600281146200047d576200049d565b6001915050620004e8565b60ff841115620004915762000491620003df565b50506001821b620004e8565b5060208310610133831016604e8410600b8410161715620004c2575081810a620004e8565b620004ce8383620003f3565b805f1904821115620004e457620004e4620003df565b0290505b92915050565b5f620004fe60ff8416836200043b565b9392505050565b8082028115828204841417620004e857620004e8620003df565b60805160a051611e1b620005485f395f6102a801525f81816103120152610f040152611e1b5ff3fe608060405234801561000f575f80fd5b506004361061021e575f3560e01c8063715018a61161012a578063c87b56dd116100b4578063e30c397811610079578063e30c3978146104e2578063e985e9c5146104f3578063f0306ea414610520578063f2fde38b14610528578063f349b1731461053b575f80fd5b8063c87b56dd1461046b578063d547cfb71461047e578063dd62ed3e14610486578063e0df5b6f146104b0578063e2d6f33a146104c3575f80fd5b80639b19251a116100fa5780639b19251a14610408578063a22cb4651461042a578063a9059cbb1461043d578063b88d4fde14610450578063c6a6035a14610463575f80fd5b8063715018a6146103e057806379ba5097146103e85780638da5cb5b146103f057806395d89b4114610400575f80fd5b80634f02c420116101ab578063589210d91161017b578063589210d9146103915780635c975abb1461039a5780636352211e146103a55780636caae832146103b857806370a08231146103c1575f80fd5b80634f02c420146103595780634f91e48c14610362578063504334c21461036b57806353d6fd591461037e575f80fd5b80631e70b6df116101f15780631e70b6df146102d8578063207add91146102e557806323b872dd146102fa578063313ce5671461030d57806342842e0e14610346575f80fd5b806306fdde0314610222578063081812fc14610240578063095ea7b31461028057806318160ddd146102a3575b5f80fd5b61022a61055a565b6040516102379190611709565b60405180910390f35b61026861024e36600461173b565b60076020525f90815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610237565b61029361028e366004611768565b6105e6565b6040519015158152602001610237565b6102ca7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610237565b6015546102939060ff1681565b6102f86102f3366004611790565b610731565b005b6102f86103083660046117b0565b610744565b6103347f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610237565b6102f86103543660046117b0565b610ac0565b6102ca60045481565b6102ca60115481565b6102f8610379366004611886565b610b91565b6102f861038c3660046118e6565b610ba7565b6102ca60105481565b600d5460ff16610293565b6102686103b336600461173b565b610bd9565b6102ca60125481565b6102ca6103cf36600461191f565b60056020525f908152604090205481565b6102f8610c13565b6102f8610c26565b5f546001600160a01b0316610268565b61022a610c6f565b61029361041636600461191f565b600c6020525f908152604090205460ff1681565b6102f86104383660046118e6565b610c7c565b61029361044b366004611768565b610ce7565b6102f861045e366004611938565b610cfa565b6102f8610dba565b61022a61047936600461173b565b610dd1565b61022a610e2d565b6102ca6104943660046119cb565b600660209081525f928352604080842090915290825290205481565b6102f86104be3660046119fc565b610e3a565b6102ca6104d136600461191f565b60136020525f908152604090205481565b6001546001600160a01b0316610268565b6102936105013660046119cb565b600860209081525f928352604080842090915290825290205460ff1681565b6102f8610e4e565b6102f861053636600461191f565b610e62565b6102ca61054936600461191f565b60146020525f908152604090205481565b6002805461056790611a2e565b80601f016020809104026020016040519081016040528092919081815260200182805461059390611a2e565b80156105de5780601f106105b5576101008083540402835291602001916105de565b820191905f5260205f20905b8154815290600101906020018083116105c157829003601f168201915b505050505081565b5f60045482111580156105f857505f82115b156106cc575f828152600960205260409020546001600160a01b031633811480159061064757506001600160a01b0381165f90815260086020908152604080832033845290915290205460ff16155b15610664576040516282b42960e81b815260040160405180910390fd5b5f8381526007602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610727565b335f8181526006602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b610739610ed2565b601091909155601155565b6004548111610a54575f818152600960205260409020546001600160a01b0384811691161461078657604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0382166107ad57604051634e46966960e11b815260040160405180910390fd5b336001600160a01b038416148015906107e957506001600160a01b0383165f90815260086020908152604080832033845290915290205460ff16155b801561080b57505f818152600760205260409020546001600160a01b03163314155b15610828576040516282b42960e81b815260040160405180910390fd5b610830610efe565b6001600160a01b0384165f9081526005602052604081208054909190610857908490611a7a565b909155506108659050610efe565b6001600160a01b038084165f81815260056020908152604080832080549096019095558582526009815284822080546001600160a01b031990811690941790556007815284822080549093169092559186168252600a905290812080546108ce90600190611a7a565b815481106108de576108de611a8d565b5f9182526020808320909101546001600160a01b0387168352600a82526040808420868552600b9093529092205481549293508392811061092157610921611a8d565b5f9182526020808320909101929092556001600160a01b0386168152600a9091526040902080548061095557610955611aa1565b5f828152602080822083015f19908101839055909201909255838252600b8152604080832054848452818420556001600160a01b038616808452600a835290832080546001818101835582865293852001869055925290546109b79190611a7a565b5f838152600b602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610a3d610efe565b60405190815260200160405180910390a350505050565b6001600160a01b0383165f9081526006602090815260408083203384529091529020545f198114610aad57610a898282611a7a565b6001600160a01b0385165f9081526006602090815260408083203384529091529020555b610ab8848484610f2f565b50505b505050565b610acb838383610744565b6001600160a01b0382163b15801590610b735750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af1158015610b42573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b669190611ab5565b6001600160e01b03191614155b15610abb57604051633da6393160e01b815260040160405180910390fd5b610b99610ed2565b610ba38282611101565b5050565b610baf610ed2565b6001600160a01b03919091165f908152600c60205260409020805460ff1916911515919091179055565b5f818152600960205260409020546001600160a01b031680610c0e5760405163c5723b5160e01b815260040160405180910390fd5b919050565b610c1b610ed2565b610c245f61111a565b565b60015433906001600160a01b03168114610c635760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610c6c8161111a565b50565b6003805461056790611a2e565b335f8181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f610cf3338484610f2f565b9392505050565b610d05858585610744565b6001600160a01b0384163b15801590610d9c5750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610d4f9033908a90899089908990600401611adc565b6020604051808303815f875af1158015610d6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8f9190611ab5565b6001600160e01b03191614155b15610ab857604051633da6393160e01b815260040160405180910390fd5b610dc2610ed2565b6015805460ff19166001179055565b60605f600f8054610de190611a2e565b905011610dfc5760405180602001604052805f81525061072b565b600f610e0783611133565b604051602001610e18929190611b2e565b60405160208183030381529060405292915050565b600f805461056790611a2e565b610e42610ed2565b600f610ba38282611c05565b610e56610ed2565b6015805460ff19169055565b610e6a610ed2565b600180546001600160a01b0383166001600160a01b03199091168117909155610e9a5f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b03163314610c245760405163118cdaa760e01b8152336004820152602401610c5a565b5f610f2a7f0000000000000000000000000000000000000000000000000000000000000000600a611da5565b905090565b5f610f386111c3565b60155460ff1615610f86576012548210610f865760405162461bcd60e51b815260206004820152600f60248201526e195e18d95959081d1e081b1a5b5a5d608a1b6044820152606401610c5a565b6001600160a01b0384165f908152600c602052604090205460ff1661103a576001600160a01b0384165f9081526014602052604081208054849290610fcc908490611db3565b90915550506011546001600160a01b0385165f90815260146020526040902054111561103a5760405162461bcd60e51b815260206004820152601b60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f2073656c6c00000000006044820152606401610c5a565b6001600160a01b0383165f908152600c602052604090205460ff166110ee576001600160a01b0383165f9081526013602052604081208054849290611080908490611db3565b90915550506010546001600160a01b0384165f9081526013602052604090205411156110ee5760405162461bcd60e51b815260206004820152601a60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f206275790000000000006044820152606401610c5a565b6110f98484846111e7565b949350505050565b600261110d8382611c05565b506003610abb8282611c05565b600180546001600160a01b0319169055610c6c8161138c565b60605f61113f836113db565b60010190505f8167ffffffffffffffff81111561115e5761115e6117e9565b6040519080825280601f01601f191660200182016040528015611188576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461119257509392505050565b600d5460ff1615610c245760405163d93c066560e01b815260040160405180910390fd5b5f806111f1610efe565b6001600160a01b038087165f818152600560205260408082208054948a168352908220549282529394509192909186919061122c8386611a7a565b90915550506001600160a01b038087165f90815260056020908152604080832080548a019055928a168252600c9052205460ff166112bb576001600160a01b0387165f90815260056020526040812054611287908590611dc6565b6112918585611dc6565b61129b9190611a7a565b90505f5b818110156112b8576112b0896114b2565b60010161129f565b50505b6001600160a01b0386165f908152600c602052604090205460ff16611332575f6112e58483611dc6565b6001600160a01b0388165f90815260056020526040902054611308908690611dc6565b6113129190611a7a565b90505f5b8181101561132f57611327886115d3565b600101611316565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161137791815260200190565b60405180910390a35060019695505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106114195772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611445576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061146357662386f26fc10000830492506010015b6305f5e100831061147b576305f5e100830492506008015b612710831061148f57612710830492506004015b606483106114a1576064830492506002015b600a831061072b5760010192915050565b6001600160a01b0381166114d957604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152600a6020526040812080546114fe90600190611a7a565b8154811061150e5761150e611a8d565b905f5260205f2001549050600a5f836001600160a01b03166001600160a01b031681526020019081526020015f2080548061154b5761154b611aa1565b5f828152602080822083015f19908101839055909201909255828252600b815260408083208390556009825280832080546001600160a01b031990811690915560079092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6115db6111c3565b610c6c816001600160a01b03811661160657604051634e46966960e11b815260040160405180910390fd5b60048054600101908190555f818152600960205260409020546001600160a01b0316156116465760405163119b4fd360e11b815260040160405180910390fd5b5f81815260096020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600a8352908320805460018181018355828652938520018590559252905461169d9190611a7a565b5f828152600b602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f5b838110156117015781810151838201526020016116e9565b50505f910152565b602081525f82518060208401526117278160408501602087016116e7565b601f01601f19169190910160400192915050565b5f6020828403121561174b575f80fd5b5035919050565b80356001600160a01b0381168114610c0e575f80fd5b5f8060408385031215611779575f80fd5b61178283611752565b946020939093013593505050565b5f80604083850312156117a1575f80fd5b50508035926020909101359150565b5f805f606084860312156117c2575f80fd5b6117cb84611752565b92506117d960208501611752565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261180c575f80fd5b813567ffffffffffffffff80821115611827576118276117e9565b604051601f8301601f19908116603f0116810190828211818310171561184f5761184f6117e9565b81604052838152866020858801011115611867575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215611897575f80fd5b823567ffffffffffffffff808211156118ae575f80fd5b6118ba868387016117fd565b935060208501359150808211156118cf575f80fd5b506118dc858286016117fd565b9150509250929050565b5f80604083850312156118f7575f80fd5b61190083611752565b915060208301358015158114611914575f80fd5b809150509250929050565b5f6020828403121561192f575f80fd5b610cf382611752565b5f805f805f6080868803121561194c575f80fd5b61195586611752565b945061196360208701611752565b935060408601359250606086013567ffffffffffffffff80821115611986575f80fd5b818801915088601f830112611999575f80fd5b8135818111156119a7575f80fd5b8960208285010111156119b8575f80fd5b9699959850939650602001949392505050565b5f80604083850312156119dc575f80fd5b6119e583611752565b91506119f360208401611752565b90509250929050565b5f60208284031215611a0c575f80fd5b813567ffffffffffffffff811115611a22575f80fd5b6110f9848285016117fd565b600181811c90821680611a4257607f821691505b602082108103611a6057634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561072b5761072b611a66565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215611ac5575f80fd5b81516001600160e01b031981168114610cf3575f80fd5b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b5f808454611b3b81611a2e565b60018281168015611b535760018114611b6857611b94565b60ff1984168752821515830287019450611b94565b885f526020805f205f5b85811015611b8b5781548a820152908401908201611b72565b50505082870194505b505050508351611ba88183602088016116e7565b64173539b7b760d91b9101908152600501949350505050565b601f821115610abb57805f5260205f20601f840160051c81016020851015611be65750805b601f840160051c820191505b81811015610ab8575f8155600101611bf2565b815167ffffffffffffffff811115611c1f57611c1f6117e9565b611c3381611c2d8454611a2e565b84611bc1565b602080601f831160018114611c66575f8415611c4f5750858301515b5f19600386901b1c1916600185901b178555611cbd565b5f85815260208120601f198616915b82811015611c9457888601518255948401946001909101908401611c75565b5085821015611cb157878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b600181815b80851115611cff57815f1904821115611ce557611ce5611a66565b80851615611cf257918102915b93841c9390800290611cca565b509250929050565b5f82611d155750600161072b565b81611d2157505f61072b565b8160018114611d375760028114611d4157611d5d565b600191505061072b565b60ff841115611d5257611d52611a66565b50506001821b61072b565b5060208310610133831016604e8410600b8410161715611d80575081810a61072b565b611d8a8383611cc5565b805f1904821115611d9d57611d9d611a66565b029392505050565b5f610cf360ff841683611d07565b8082018082111561072b5761072b611a66565b5f82611de057634e487b7160e01b5f52601260045260245ffd5b50049056fea264697066735822122004cc7641a3ea63305c725dcccd930a0137a73430e19b46bd64168922a5763b1e64736f6c63430008180033000000000000000000000000cac026da5ee667bc2074d26d7b9aedb3caea2f6b0000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064

Deployed Bytecode

0x608060405234801561000f575f80fd5b506004361061021e575f3560e01c8063715018a61161012a578063c87b56dd116100b4578063e30c397811610079578063e30c3978146104e2578063e985e9c5146104f3578063f0306ea414610520578063f2fde38b14610528578063f349b1731461053b575f80fd5b8063c87b56dd1461046b578063d547cfb71461047e578063dd62ed3e14610486578063e0df5b6f146104b0578063e2d6f33a146104c3575f80fd5b80639b19251a116100fa5780639b19251a14610408578063a22cb4651461042a578063a9059cbb1461043d578063b88d4fde14610450578063c6a6035a14610463575f80fd5b8063715018a6146103e057806379ba5097146103e85780638da5cb5b146103f057806395d89b4114610400575f80fd5b80634f02c420116101ab578063589210d91161017b578063589210d9146103915780635c975abb1461039a5780636352211e146103a55780636caae832146103b857806370a08231146103c1575f80fd5b80634f02c420146103595780634f91e48c14610362578063504334c21461036b57806353d6fd591461037e575f80fd5b80631e70b6df116101f15780631e70b6df146102d8578063207add91146102e557806323b872dd146102fa578063313ce5671461030d57806342842e0e14610346575f80fd5b806306fdde0314610222578063081812fc14610240578063095ea7b31461028057806318160ddd146102a3575b5f80fd5b61022a61055a565b6040516102379190611709565b60405180910390f35b61026861024e36600461173b565b60076020525f90815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610237565b61029361028e366004611768565b6105e6565b6040519015158152602001610237565b6102ca7f00000000000000000000000000000000000000000000021e19e0c9bab240000081565b604051908152602001610237565b6015546102939060ff1681565b6102f86102f3366004611790565b610731565b005b6102f86103083660046117b0565b610744565b6103347f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff9091168152602001610237565b6102f86103543660046117b0565b610ac0565b6102ca60045481565b6102ca60115481565b6102f8610379366004611886565b610b91565b6102f861038c3660046118e6565b610ba7565b6102ca60105481565b600d5460ff16610293565b6102686103b336600461173b565b610bd9565b6102ca60125481565b6102ca6103cf36600461191f565b60056020525f908152604090205481565b6102f8610c13565b6102f8610c26565b5f546001600160a01b0316610268565b61022a610c6f565b61029361041636600461191f565b600c6020525f908152604090205460ff1681565b6102f86104383660046118e6565b610c7c565b61029361044b366004611768565b610ce7565b6102f861045e366004611938565b610cfa565b6102f8610dba565b61022a61047936600461173b565b610dd1565b61022a610e2d565b6102ca6104943660046119cb565b600660209081525f928352604080842090915290825290205481565b6102f86104be3660046119fc565b610e3a565b6102ca6104d136600461191f565b60136020525f908152604090205481565b6001546001600160a01b0316610268565b6102936105013660046119cb565b600860209081525f928352604080842090915290825290205460ff1681565b6102f8610e4e565b6102f861053636600461191f565b610e62565b6102ca61054936600461191f565b60146020525f908152604090205481565b6002805461056790611a2e565b80601f016020809104026020016040519081016040528092919081815260200182805461059390611a2e565b80156105de5780601f106105b5576101008083540402835291602001916105de565b820191905f5260205f20905b8154815290600101906020018083116105c157829003601f168201915b505050505081565b5f60045482111580156105f857505f82115b156106cc575f828152600960205260409020546001600160a01b031633811480159061064757506001600160a01b0381165f90815260086020908152604080832033845290915290205460ff16155b15610664576040516282b42960e81b815260040160405180910390fd5b5f8381526007602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610727565b335f8181526006602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b610739610ed2565b601091909155601155565b6004548111610a54575f818152600960205260409020546001600160a01b0384811691161461078657604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0382166107ad57604051634e46966960e11b815260040160405180910390fd5b336001600160a01b038416148015906107e957506001600160a01b0383165f90815260086020908152604080832033845290915290205460ff16155b801561080b57505f818152600760205260409020546001600160a01b03163314155b15610828576040516282b42960e81b815260040160405180910390fd5b610830610efe565b6001600160a01b0384165f9081526005602052604081208054909190610857908490611a7a565b909155506108659050610efe565b6001600160a01b038084165f81815260056020908152604080832080549096019095558582526009815284822080546001600160a01b031990811690941790556007815284822080549093169092559186168252600a905290812080546108ce90600190611a7a565b815481106108de576108de611a8d565b5f9182526020808320909101546001600160a01b0387168352600a82526040808420868552600b9093529092205481549293508392811061092157610921611a8d565b5f9182526020808320909101929092556001600160a01b0386168152600a9091526040902080548061095557610955611aa1565b5f828152602080822083015f19908101839055909201909255838252600b8152604080832054848452818420556001600160a01b038616808452600a835290832080546001818101835582865293852001869055925290546109b79190611a7a565b5f838152600b602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610a3d610efe565b60405190815260200160405180910390a350505050565b6001600160a01b0383165f9081526006602090815260408083203384529091529020545f198114610aad57610a898282611a7a565b6001600160a01b0385165f9081526006602090815260408083203384529091529020555b610ab8848484610f2f565b50505b505050565b610acb838383610744565b6001600160a01b0382163b15801590610b735750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af1158015610b42573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b669190611ab5565b6001600160e01b03191614155b15610abb57604051633da6393160e01b815260040160405180910390fd5b610b99610ed2565b610ba38282611101565b5050565b610baf610ed2565b6001600160a01b03919091165f908152600c60205260409020805460ff1916911515919091179055565b5f818152600960205260409020546001600160a01b031680610c0e5760405163c5723b5160e01b815260040160405180910390fd5b919050565b610c1b610ed2565b610c245f61111a565b565b60015433906001600160a01b03168114610c635760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610c6c8161111a565b50565b6003805461056790611a2e565b335f8181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f610cf3338484610f2f565b9392505050565b610d05858585610744565b6001600160a01b0384163b15801590610d9c5750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610d4f9033908a90899089908990600401611adc565b6020604051808303815f875af1158015610d6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8f9190611ab5565b6001600160e01b03191614155b15610ab857604051633da6393160e01b815260040160405180910390fd5b610dc2610ed2565b6015805460ff19166001179055565b60605f600f8054610de190611a2e565b905011610dfc5760405180602001604052805f81525061072b565b600f610e0783611133565b604051602001610e18929190611b2e565b60405160208183030381529060405292915050565b600f805461056790611a2e565b610e42610ed2565b600f610ba38282611c05565b610e56610ed2565b6015805460ff19169055565b610e6a610ed2565b600180546001600160a01b0383166001600160a01b03199091168117909155610e9a5f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b03163314610c245760405163118cdaa760e01b8152336004820152602401610c5a565b5f610f2a7f0000000000000000000000000000000000000000000000000000000000000012600a611da5565b905090565b5f610f386111c3565b60155460ff1615610f86576012548210610f865760405162461bcd60e51b815260206004820152600f60248201526e195e18d95959081d1e081b1a5b5a5d608a1b6044820152606401610c5a565b6001600160a01b0384165f908152600c602052604090205460ff1661103a576001600160a01b0384165f9081526014602052604081208054849290610fcc908490611db3565b90915550506011546001600160a01b0385165f90815260146020526040902054111561103a5760405162461bcd60e51b815260206004820152601b60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f2073656c6c00000000006044820152606401610c5a565b6001600160a01b0383165f908152600c602052604090205460ff166110ee576001600160a01b0383165f9081526013602052604081208054849290611080908490611db3565b90915550506010546001600160a01b0384165f9081526013602052604090205411156110ee5760405162461bcd60e51b815260206004820152601a60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f206275790000000000006044820152606401610c5a565b6110f98484846111e7565b949350505050565b600261110d8382611c05565b506003610abb8282611c05565b600180546001600160a01b0319169055610c6c8161138c565b60605f61113f836113db565b60010190505f8167ffffffffffffffff81111561115e5761115e6117e9565b6040519080825280601f01601f191660200182016040528015611188576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461119257509392505050565b600d5460ff1615610c245760405163d93c066560e01b815260040160405180910390fd5b5f806111f1610efe565b6001600160a01b038087165f818152600560205260408082208054948a168352908220549282529394509192909186919061122c8386611a7a565b90915550506001600160a01b038087165f90815260056020908152604080832080548a019055928a168252600c9052205460ff166112bb576001600160a01b0387165f90815260056020526040812054611287908590611dc6565b6112918585611dc6565b61129b9190611a7a565b90505f5b818110156112b8576112b0896114b2565b60010161129f565b50505b6001600160a01b0386165f908152600c602052604090205460ff16611332575f6112e58483611dc6565b6001600160a01b0388165f90815260056020526040902054611308908690611dc6565b6113129190611a7a565b90505f5b8181101561132f57611327886115d3565b600101611316565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161137791815260200190565b60405180910390a35060019695505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106114195772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611445576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061146357662386f26fc10000830492506010015b6305f5e100831061147b576305f5e100830492506008015b612710831061148f57612710830492506004015b606483106114a1576064830492506002015b600a831061072b5760010192915050565b6001600160a01b0381166114d957604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152600a6020526040812080546114fe90600190611a7a565b8154811061150e5761150e611a8d565b905f5260205f2001549050600a5f836001600160a01b03166001600160a01b031681526020019081526020015f2080548061154b5761154b611aa1565b5f828152602080822083015f19908101839055909201909255828252600b815260408083208390556009825280832080546001600160a01b031990811690915560079092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6115db6111c3565b610c6c816001600160a01b03811661160657604051634e46966960e11b815260040160405180910390fd5b60048054600101908190555f818152600960205260409020546001600160a01b0316156116465760405163119b4fd360e11b815260040160405180910390fd5b5f81815260096020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600a8352908320805460018181018355828652938520018590559252905461169d9190611a7a565b5f828152600b602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f5b838110156117015781810151838201526020016116e9565b50505f910152565b602081525f82518060208401526117278160408501602087016116e7565b601f01601f19169190910160400192915050565b5f6020828403121561174b575f80fd5b5035919050565b80356001600160a01b0381168114610c0e575f80fd5b5f8060408385031215611779575f80fd5b61178283611752565b946020939093013593505050565b5f80604083850312156117a1575f80fd5b50508035926020909101359150565b5f805f606084860312156117c2575f80fd5b6117cb84611752565b92506117d960208501611752565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261180c575f80fd5b813567ffffffffffffffff80821115611827576118276117e9565b604051601f8301601f19908116603f0116810190828211818310171561184f5761184f6117e9565b81604052838152866020858801011115611867575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215611897575f80fd5b823567ffffffffffffffff808211156118ae575f80fd5b6118ba868387016117fd565b935060208501359150808211156118cf575f80fd5b506118dc858286016117fd565b9150509250929050565b5f80604083850312156118f7575f80fd5b61190083611752565b915060208301358015158114611914575f80fd5b809150509250929050565b5f6020828403121561192f575f80fd5b610cf382611752565b5f805f805f6080868803121561194c575f80fd5b61195586611752565b945061196360208701611752565b935060408601359250606086013567ffffffffffffffff80821115611986575f80fd5b818801915088601f830112611999575f80fd5b8135818111156119a7575f80fd5b8960208285010111156119b8575f80fd5b9699959850939650602001949392505050565b5f80604083850312156119dc575f80fd5b6119e583611752565b91506119f360208401611752565b90509250929050565b5f60208284031215611a0c575f80fd5b813567ffffffffffffffff811115611a22575f80fd5b6110f9848285016117fd565b600181811c90821680611a4257607f821691505b602082108103611a6057634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561072b5761072b611a66565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215611ac5575f80fd5b81516001600160e01b031981168114610cf3575f80fd5b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b5f808454611b3b81611a2e565b60018281168015611b535760018114611b6857611b94565b60ff1984168752821515830287019450611b94565b885f526020805f205f5b85811015611b8b5781548a820152908401908201611b72565b50505082870194505b505050508351611ba88183602088016116e7565b64173539b7b760d91b9101908152600501949350505050565b601f821115610abb57805f5260205f20601f840160051c81016020851015611be65750805b601f840160051c820191505b81811015610ab8575f8155600101611bf2565b815167ffffffffffffffff811115611c1f57611c1f6117e9565b611c3381611c2d8454611a2e565b84611bc1565b602080601f831160018114611c66575f8415611c4f5750858301515b5f19600386901b1c1916600185901b178555611cbd565b5f85815260208120601f198616915b82811015611c9457888601518255948401946001909101908401611c75565b5085821015611cb157878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b600181815b80851115611cff57815f1904821115611ce557611ce5611a66565b80851615611cf257918102915b93841c9390800290611cca565b509250929050565b5f82611d155750600161072b565b81611d2157505f61072b565b8160018114611d375760028114611d4157611d5d565b600191505061072b565b60ff841115611d5257611d52611a66565b50506001821b61072b565b5060208310610133831016604e8410600b8410161715611d80575081810a61072b565b611d8a8383611cc5565b805f1904821115611d9d57611d9d611a66565b029392505050565b5f610cf360ff841683611d07565b8082018082111561072b5761072b611a66565b5f82611de057634e487b7160e01b5f52601260045260245ffd5b50049056fea264697066735822122004cc7641a3ea63305c725dcccd930a0137a73430e19b46bd64168922a5763b1e64736f6c63430008180033

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

000000000000000000000000cac026da5ee667bc2074d26d7b9aedb3caea2f6b0000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064

-----Decoded View---------------
Arg [0] : _owner (address): 0xcaC026DA5EE667Bc2074d26D7b9AEdb3cAea2f6B
Arg [1] : _initialSupply (uint256): 10000
Arg [2] : _decimal (uint8): 18
Arg [3] : _buylimit (uint256): 100
Arg [4] : _selllimit (uint256): 100

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000cac026da5ee667bc2074d26d7b9aedb3caea2f6b
Arg [1] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000064


Deployed Bytecode Sourcemap

44515:2384:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35593:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36304:46;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;36304:46:0;;;;;;-1:-1:-1;;;;;1019:32:1;;;1001:51;;989:2;974:18;36304:46:0;855:203:1;38135:642:0;;;;;;:::i;:::-;;:::i;:::-;;;1665:14:1;;1658:22;1640:41;;1628:2;1613:18;38135:642:0;1500:187:1;35829:36:0;;;;;;;;1838:25:1;;;1826:2;1811:18;35829:36:0;1692:177:1;44842:24:0;;;;;;;;;45313:145;;;;;;:::i;:::-;;:::i;:::-;;39184:1716;;;;;;:::i;:::-;;:::i;35729:31::-;;;;;;;;2632:4:1;2620:17;;;2602:36;;2590:2;2575:18;35729:31:0;2460:184:1;41196:405:0;;;;;;:::i;:::-;;:::i;35964:21::-;;;;;;44639:24;;;;;;46540:158;;;;;;:::i;:::-;;:::i;37464:111::-;;;;;;:::i;:::-;;:::i;44609:23::-;;;;;;27375:86;27446:7;;;;27375:86;;37647:193;;;;;;:::i;:::-;;:::i;44670:22::-;;;;;;36070:44;;;;;;:::i;:::-;;;;;;;;;;;;;;30748:103;;;:::i;33385:235::-;;;:::i;30073:87::-;30119:7;30146:6;-1:-1:-1;;;;;30146:6:0;30073:87;;35647:20;;;:::i;36915:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;38828:207;;;;;;:::i;:::-;;:::i;40959:160::-;;;;;;:::i;:::-;;:::i;41696:437::-;;;;;;:::i;:::-;;:::i;45589:86::-;;;:::i;46706:190::-;;;;;;:::i;:::-;;:::i;44576:26::-;;;:::i;36184:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;46426:106;;;;;;:::i;:::-;;:::i;44699:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;32473:101;32553:13;;-1:-1:-1;;;;;32553:13:0;32473:101;;36415:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;45683:86;;;:::i;32773:181::-;;;;;;:::i;:::-;;:::i;44754:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;35593:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38135:642::-;38238:4;38273:6;;38259:10;:20;;:38;;;;;38296:1;38283:10;:14;38259:38;38255:491;;;38314:13;38330:20;;;:8;:20;;;;;;-1:-1:-1;;;;;38330:20:0;38371:10;:19;;;;;:59;;-1:-1:-1;;;;;;38395:23:0;;;;;;:16;:23;;;;;;;;38419:10;38395:35;;;;;;;;;;38394:36;38371:59;38367:121;;;38458:14;;-1:-1:-1;;;38458:14:0;;;;;;;;;;;38367:121;38504:23;;;;:11;:23;;;;;;;;;:33;;-1:-1:-1;;;;;;38504:33:0;-1:-1:-1;;;;;38504:33:0;;;;;;;;;38559:36;;1838:25:1;;;38559:36:0;;;;;;1811:18:1;38559:36:0;;;;;;;38299:308;38255:491;;;38638:10;38628:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;38628:30:0;;;;;;;;;;;;:43;;;38693:41;1838:25:1;;;38628:30:0;;38638:10;38693:41;;1811:18:1;38693:41:0;;;;;;;38255:491;-1:-1:-1;38765:4:0;38135:642;;;;;:::o;45313:145::-;29959:13;:11;:13::i;:::-;45397:8:::1;:20:::0;;;;45428:9:::1;:22:::0;45313:145::o;39184:1716::-;39330:6;;39316:10;:20;39312:1581;;39365:20;;;;:8;:20;;;;;;-1:-1:-1;;;;;39357:28:0;;;39365:20;;39357:28;39353:91;;39413:15;;-1:-1:-1;;;39413:15:0;;;;;;;;;;;39353:91;-1:-1:-1;;;;;39464:16:0;;39460:82;;39508:18;;-1:-1:-1;;;39508:18:0;;;;;;;;;;;39460:82;39580:10;-1:-1:-1;;;;;39580:18:0;;;;;;:74;;-1:-1:-1;;;;;;39620:22:0;;;;;;:16;:22;;;;;;;;39643:10;39620:34;;;;;;;;;;39619:35;39580:74;:132;;;;-1:-1:-1;39689:23:0;;;;:11;:23;;;;;;-1:-1:-1;;;;;39689:23:0;39675:10;:37;;39580:132;39558:226;;;39754:14;;-1:-1:-1;;;39754:14:0;;;;;;;;;;;39558:226;39819:10;:8;:10::i;:::-;-1:-1:-1;;;;;39800:15:0;;;;;;:9;:15;;;;;:29;;:15;;;:29;;;;;:::i;:::-;;;;-1:-1:-1;39892:10:0;;-1:-1:-1;39892:8:0;:10::i;:::-;-1:-1:-1;;;;;39875:13:0;;;;;;;:9;:13;;;;;;;;:27;;;;;;;;39934:20;;;:8;:20;;;;;:25;;-1:-1:-1;;;;;;39934:25:0;;;;;;;;39981:11;:23;;;;;39974:30;;;;;;;;40082:12;;;;;:6;:12;;;;;40095:19;;:23;;-1:-1:-1;;40095:23:0;:::i;:::-;40082:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40134:12:0;;;;:6;:12;;;;;;40147:23;;;:11;:23;;;;;;;40134:37;;40082;;-1:-1:-1;40082:37:0;;40134;;;;;;:::i;:::-;;;;;;;;;;;;:49;;;;-1:-1:-1;;;;;40218:12:0;;;;:6;:12;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;40218:18:0;;;;;;;;;;;;40322:23;;;:11;:23;;;;;;;40297:22;;;;;;:48;-1:-1:-1;;;;;40399:10:0;;;;;:6;:10;;;;;:27;;40218:18;40399:27;;;;;;;;;;;;;;;40509:10;;:17;;:21;;40218:18;40509:21;:::i;:::-;40483:23;;;;:11;:23;;;;;;:47;;;;40552:30;;40495:10;;-1:-1:-1;;;;;40552:30:0;;;;;;;;;;;40622:2;-1:-1:-1;;;;;40602:35:0;40616:4;-1:-1:-1;;;;;40602:35:0;;40626:10;:8;:10::i;:::-;40602:35;;1838:25:1;;;1826:2;1811:18;40602:35:0;;;;;;;39338:1311;39184:1716;;;:::o;39312:1581::-;-1:-1:-1;;;;;40688:15:0;;40670;40688;;;:9;:15;;;;;;;;40704:10;40688:27;;;;;;;;-1:-1:-1;;40736:28:0;;40732:101;;40813:20;40823:10;40813:7;:20;:::i;:::-;-1:-1:-1;;;;;40783:15:0;;;;;;:9;:15;;;;;;;;40799:10;40783:27;;;;;;;:50;40732:101;40850:31;40860:4;40866:2;40870:10;40850:9;:31::i;:::-;;40655:238;39312:1581;39184:1716;;;:::o;41196:405::-;41320:26;41333:4;41339:2;41343;41320:12;:26::i;:::-;-1:-1:-1;;;;;41377:14:0;;;:19;;;;:154;;-1:-1:-1;41413:61:0;;-1:-1:-1;;;41413:61:0;;;41449:10;41413:61;;;7220:34:1;-1:-1:-1;;;;;7290:15:1;;;7270:18;;;7263:43;7322:18;;;7315:34;;;7385:3;7365:18;;;7358:31;-1:-1:-1;7405:19:1;;;7398:30;41491:40:0;;41413:35;;;;41491:40;;7445:19:1;;41413:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;41413:118:0;;;41377:154;41359:235;;;41565:17;;-1:-1:-1;;;41565:17:0;;;;;;;;;;;46540:158;29959:13;:11;:13::i;:::-;46660:30:::1;46675:5;46682:7;46660:14;:30::i;:::-;46540:158:::0;;:::o;37464:111::-;29959:13;:11;:13::i;:::-;-1:-1:-1;;;;;37542:17:0;;;::::1;;::::0;;;:9:::1;:17;::::0;;;;:25;;-1:-1:-1;;37542:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37464:111::o;37647:193::-;37705:13;37739:12;;;:8;:12;;;;;;-1:-1:-1;;;;;37739:12:0;;37764:69;;37811:10;;-1:-1:-1;;;37811:10:0;;;;;;;;;;;37764:69;37647:193;;;:::o;30748:103::-;29959:13;:11;:13::i;:::-;30813:30:::1;30840:1;30813:18;:30::i;:::-;30748:103::o:0;33385:235::-;32553:13;;25234:10;;-1:-1:-1;;;;;32553:13:0;33482:24;;33478:98;;33530:34;;-1:-1:-1;;;33530:34:0;;-1:-1:-1;;;;;1019:32:1;;33530:34:0;;;1001:51:1;974:18;;33530:34:0;;;;;;;;33478:98;33586:26;33605:6;33586:18;:26::i;:::-;33427:193;33385:235::o;35647:20::-;;;;;;;:::i;38828:207::-;38931:10;38914:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;38914:38:0;;;;;;;;;;;;:49;;-1:-1:-1;;38914:49:0;;;;;;;;;;38981:46;;1640:41:1;;;38914:38:0;;38931:10;38981:46;;1613:18:1;38981:46:0;;;;;;;38828:207;;:::o;40959:160::-;41054:4;41078:33;41088:10;41100:2;41104:6;41078:9;:33::i;:::-;41071:40;40959:160;-1:-1:-1;;;40959:160:0:o;41696:437::-;41850:26;41863:4;41869:2;41873;41850:12;:26::i;:::-;-1:-1:-1;;;;;41907:14:0;;;:19;;;;:156;;-1:-1:-1;41943:63:0;;-1:-1:-1;;;41943:63:0;;;42023:40;-1:-1:-1;;;;;41943:35:0;;;42023:40;;41943:63;;41979:10;;41991:4;;41997:2;;42001:4;;;;41943:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;41943:120:0;;;41907:156;41889:237;;;42097:17;;-1:-1:-1;;;42097:17:0;;;;;;;;;;;45589:86;29959:13;:11;:13::i;:::-;45648:12:::1;:19:::0;;-1:-1:-1;;45648:19:0::1;45663:4;45648:19;::::0;;45589:86::o;46706:190::-;46766:13;46828:1;46805:12;46799:26;;;;;:::i;:::-;;;:30;:89;;;;;;;;;;;;;;;;;46846:12;46860:13;:2;:11;:13::i;:::-;46832:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46792:96;46706:190;-1:-1:-1;;46706:190:0:o;44576:26::-;;;;;;;:::i;46426:106::-;29959:13;:11;:13::i;:::-;46500:12:::1;:24;46515:9:::0;46500:12;:24:::1;:::i;45683:86::-:0;29959:13;:11;:13::i;:::-;45741:12:::1;:20:::0;;-1:-1:-1;;45741:20:0::1;::::0;;45683:86::o;32773:181::-;29959:13;:11;:13::i;:::-;32863::::1;:24:::0;;-1:-1:-1;;;;;32863:24:0;::::1;-1:-1:-1::0;;;;;;32863:24:0;;::::1;::::0;::::1;::::0;;;32928:7:::1;30119::::0;30146:6;-1:-1:-1;;;;;30146:6:0;;30073:87;32928:7:::1;-1:-1:-1::0;;;;;32903:43:0::1;;;;;;;;;;;32773:181:::0;:::o;30238:166::-;30119:7;30146:6;-1:-1:-1;;;;;30146:6:0;25234:10;30298:23;30294:103;;30345:40;;-1:-1:-1;;;30345:40:0;;25234:10;30345:40;;;1001:51:1;974:18;;30345:40:0;855:203:1;43341:92:0;43384:7;43411:14;43417:8;43411:2;:14;:::i;:::-;43404:21;;43341:92;:::o;45777:641::-;45921:4;26980:19;:17;:19::i;:::-;45940:12:::1;::::0;::::1;;45937:87;;;45985:7;;45976:6;:16;45968:44;;;::::0;-1:-1:-1;;;45968:44:0;;13368:2:1;45968:44:0::1;::::0;::::1;13350:21:1::0;13407:2;13387:18;;;13380:30;-1:-1:-1;;;13426:18:1;;;13419:45;13481:18;;45968:44:0::1;13166:339:1::0;45968:44:0::1;-1:-1:-1::0;;;;;46038:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;::::1;;46034:163;;-1:-1:-1::0;;;;;46069:19:0;::::1;;::::0;;;:13:::1;:19;::::0;;;;:29;;46092:6;;46069:19;:29:::1;::::0;46092:6;;46069:29:::1;:::i;:::-;::::0;;;-1:-1:-1;;46144:9:0::1;::::0;-1:-1:-1;;;;;46121:19:0;::::1;;::::0;;;:13:::1;:19;::::0;;;;;:32:::1;;46113:72;;;::::0;-1:-1:-1;;;46113:72:0;;13842:2:1;46113:72:0::1;::::0;::::1;13824:21:1::0;13881:2;13861:18;;;13854:30;13920:29;13900:18;;;13893:57;13967:18;;46113:72:0::1;13640:351:1::0;46113:72:0::1;-1:-1:-1::0;;;;;46211:13:0;::::1;;::::0;;;:9:::1;:13;::::0;;;;;::::1;;46207:153;;-1:-1:-1::0;;;;;46240:16:0;::::1;;::::0;;;:12:::1;:16;::::0;;;;:26;;46260:6;;46240:16;:26:::1;::::0;46260:6;;46240:26:::1;:::i;:::-;::::0;;;-1:-1:-1;;46309:8:0::1;::::0;-1:-1:-1;;;;;46289:16:0;::::1;;::::0;;;:12:::1;:16;::::0;;;;;:28:::1;;46281:67;;;::::0;-1:-1:-1;;;46281:67:0;;14198:2:1;46281:67:0::1;::::0;::::1;14180:21:1::0;14237:2;14217:18;;;14210:30;14276:28;14256:18;;;14249:56;14322:18;;46281:67:0::1;13996:350:1::0;46281:67:0::1;46377:33;46393:4;46399:2;46403:6;46377:15;:33::i;:::-;46370:40:::0;45777:641;-1:-1:-1;;;;45777:641:0:o;44304:160::-;44417:4;:12;44424:5;44417:4;:12;:::i;:::-;-1:-1:-1;44440:6:0;:16;44449:7;44440:6;:16;:::i;33144:156::-;33234:13;33227:20;;-1:-1:-1;;;;;;33227:20:0;;;33258:34;33283:8;33258:24;:34::i;21924:718::-;21980:13;22031:14;22048:17;22059:5;22048:10;:17::i;:::-;22068:1;22048:21;22031:38;;22084:20;22118:6;22107:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22107:18:0;-1:-1:-1;22084:41:0;-1:-1:-1;22249:28:0;;;22265:2;22249:28;22306:290;-1:-1:-1;;22338:5:0;-1:-1:-1;;;22475:2:0;22464:14;;22459:32;22338:5;22446:46;22538:2;22529:11;;;-1:-1:-1;22559:21:0;22306:290;22559:21;-1:-1:-1;22617:6:0;21924:718;-1:-1:-1;;;21924:718:0:o;27534:132::-;27446:7;;;;27596:63;;;27632:15;;-1:-1:-1;;;27632:15:0;;;;;;;;;;;42201:1101;42322:4;42339:12;42354:10;:8;:10::i;:::-;-1:-1:-1;;;;;42405:15:0;;;42375:27;42405:15;;;:9;:15;;;;;;;;42463:13;;;;;;;;;42489:15;;;42339:25;;-1:-1:-1;42405:15:0;;42463:13;;42508:6;;42405:15;42489:25;42508:6;42405:15;42489:25;:::i;:::-;;;;-1:-1:-1;;;;;;;42552:13:0;;;;;;;:9;:13;;;;;;;;:23;;;;;;42660:15;;;;;:9;:15;;;;;;42655:251;;-1:-1:-1;;;;;42766:15:0;;42692:22;42766:15;;;:9;:15;;;;;;:22;;42784:4;;42766:22;:::i;:::-;42718:26;42740:4;42718:19;:26;:::i;:::-;42717:72;;;;:::i;:::-;42692:97;;42809:9;42804:91;42828:14;42824:1;:18;42804:91;;;42868:11;42874:4;42868:5;:11::i;:::-;42844:3;;42804:91;;;;42677:229;42655:251;-1:-1:-1;;;;;42982:13:0;;;;;;:9;:13;;;;;;;;42977:247;;43012:22;43080:28;43104:4;43080:21;:28;:::i;:::-;-1:-1:-1;;;;;43038:13:0;;;;;;:9;:13;;;;;;:20;;43054:4;;43038:20;:::i;:::-;43037:72;;;;:::i;:::-;43012:97;;43129:9;43124:89;43148:14;43144:1;:18;43124:89;;;43188:9;43194:2;43188:5;:9::i;:::-;43164:3;;43124:89;;;;42997:227;42977:247;43261:2;-1:-1:-1;;;;;43241:31:0;43255:4;-1:-1:-1;;;;;43241:31:0;;43265:6;43241:31;;;;1838:25:1;;1826:2;1811:18;;1692:177;43241:31:0;;;;;;;;-1:-1:-1;43290:4:0;;42201:1101;-1:-1:-1;;;;;;42201:1101:0:o;31386:191::-;31460:16;31479:6;;-1:-1:-1;;;;;31496:17:0;;;-1:-1:-1;;;;;;31496:17:0;;;;;;31529:40;;31479:6;;;;;;;31529:40;;31460:16;31529:40;31449:128;31386:191;:::o;18328:948::-;18381:7;;-1:-1:-1;;;18459:17:0;;18455:106;;-1:-1:-1;;;18497:17:0;;;-1:-1:-1;18543:2:0;18533:12;18455:106;18588:8;18579:5;:17;18575:106;;18626:8;18617:17;;;-1:-1:-1;18663:2:0;18653:12;18575:106;18708:8;18699:5;:17;18695:106;;18746:8;18737:17;;;-1:-1:-1;18783:2:0;18773:12;18695:106;18828:7;18819:5;:16;18815:103;;18865:7;18856:16;;;-1:-1:-1;18901:1:0;18891:11;18815:103;18945:7;18936:5;:16;18932:103;;18982:7;18973:16;;;-1:-1:-1;19018:1:0;19008:11;18932:103;19062:7;19053:5;:16;19049:103;;19099:7;19090:16;;;-1:-1:-1;19135:1:0;19125:11;19049:103;19179:7;19170:5;:16;19166:68;;19217:1;19207:11;19262:6;18328:948;-1:-1:-1;;18328:948:0:o;43923:373::-;-1:-1:-1;;;;;43984:18:0;;43980:73;;44026:15;;-1:-1:-1;;;44026:15:0;;;;;;;;;;;43980:73;-1:-1:-1;;;;;44078:12:0;;44065:10;44078:12;;;:6;:12;;;;;44091:19;;:23;;44113:1;;44091:23;:::i;:::-;44078:37;;;;;;;;:::i;:::-;;;;;;;;;44065:50;;44126:6;:12;44133:4;-1:-1:-1;;;;;44126:12:0;-1:-1:-1;;;;;44126:12:0;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;44126:18:0;;;;;;;;;;;;44162:15;;;:11;:15;;;;;;44155:22;;;44195:8;:12;;;;;44188:19;;-1:-1:-1;;;;;;44188:19:0;;;;;;44225:11;:15;;;;;;44218:22;;;;;;;;44258:30;44174:2;;44126:18;-1:-1:-1;;;;;44258:30:0;;;;;44126:18;;44258:30;43969:327;43923:373;:::o;45466:115::-;26980:19;:17;:19::i;:::-;45558:15:::1;45570:2;-1:-1:-1::0;;;;;43500:16:0;;43496:74;;43540:18;;-1:-1:-1;;;43540:18:0;;;;;;;;;;;43496:74;43607:6;:8;;;;;;;;:6;43675:12;;;:8;:12;;;;;;-1:-1:-1;;;;;43675:12:0;:26;43671:81;;43725:15;;-1:-1:-1;;;43725:15:0;;;;;;;;;;;43671:81;43764:12;;;;:8;:12;;;;;;;;:17;;-1:-1:-1;;;;;;43764:17:0;-1:-1:-1;;;;;43764:17:0;;;;;;;;43792:10;;;:6;:10;;;;;:19;;-1:-1:-1;43792:19:0;;;;;;;;;;;;;;;43840:10;;:17;;:21;;-1:-1:-1;43840:21:0;:::i;:::-;43822:15;;;;:11;:15;;;;;;:39;;;;43879:28;;43834:2;;-1:-1:-1;;;;;43879:28:0;;;;;43822:15;;43879:28;43485:430;43441:474;:::o;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;670:180::-;729:6;782:2;770:9;761:7;757:23;753:32;750:52;;;798:1;795;788:12;750:52;-1:-1:-1;821:23:1;;670:180;-1:-1:-1;670:180:1:o;1063:173::-;1131:20;;-1:-1:-1;;;;;1180:31:1;;1170:42;;1160:70;;1226:1;1223;1216:12;1241:254;1309:6;1317;1370:2;1358:9;1349:7;1345:23;1341:32;1338:52;;;1386:1;1383;1376:12;1338:52;1409:29;1428:9;1409:29;:::i;:::-;1399:39;1485:2;1470:18;;;;1457:32;;-1:-1:-1;;;1241:254:1:o;1874:248::-;1942:6;1950;2003:2;1991:9;1982:7;1978:23;1974:32;1971:52;;;2019:1;2016;2009:12;1971:52;-1:-1:-1;;2042:23:1;;;2112:2;2097:18;;;2084:32;;-1:-1:-1;1874:248:1:o;2127:328::-;2204:6;2212;2220;2273:2;2261:9;2252:7;2248:23;2244:32;2241:52;;;2289:1;2286;2279:12;2241:52;2312:29;2331:9;2312:29;:::i;:::-;2302:39;;2360:38;2394:2;2383:9;2379:18;2360:38;:::i;:::-;2350:48;;2445:2;2434:9;2430:18;2417:32;2407:42;;2127:328;;;;;:::o;2649:127::-;2710:10;2705:3;2701:20;2698:1;2691:31;2741:4;2738:1;2731:15;2765:4;2762:1;2755:15;2781:719;2824:5;2877:3;2870:4;2862:6;2858:17;2854:27;2844:55;;2895:1;2892;2885:12;2844:55;2931:6;2918:20;2957:18;2994:2;2990;2987:10;2984:36;;;3000:18;;:::i;:::-;3075:2;3069:9;3043:2;3129:13;;-1:-1:-1;;3125:22:1;;;3149:2;3121:31;3117:40;3105:53;;;3173:18;;;3193:22;;;3170:46;3167:72;;;3219:18;;:::i;:::-;3259:10;3255:2;3248:22;3294:2;3286:6;3279:18;3340:3;3333:4;3328:2;3320:6;3316:15;3312:26;3309:35;3306:55;;;3357:1;3354;3347:12;3306:55;3421:2;3414:4;3406:6;3402:17;3395:4;3387:6;3383:17;3370:54;3468:1;3461:4;3456:2;3448:6;3444:15;3440:26;3433:37;3488:6;3479:15;;;;;;2781:719;;;;:::o;3505:543::-;3593:6;3601;3654:2;3642:9;3633:7;3629:23;3625:32;3622:52;;;3670:1;3667;3660:12;3622:52;3710:9;3697:23;3739:18;3780:2;3772:6;3769:14;3766:34;;;3796:1;3793;3786:12;3766:34;3819:50;3861:7;3852:6;3841:9;3837:22;3819:50;:::i;:::-;3809:60;;3922:2;3911:9;3907:18;3894:32;3878:48;;3951:2;3941:8;3938:16;3935:36;;;3967:1;3964;3957:12;3935:36;;3990:52;4034:7;4023:8;4012:9;4008:24;3990:52;:::i;:::-;3980:62;;;3505:543;;;;;:::o;4053:347::-;4118:6;4126;4179:2;4167:9;4158:7;4154:23;4150:32;4147:52;;;4195:1;4192;4185:12;4147:52;4218:29;4237:9;4218:29;:::i;:::-;4208:39;;4297:2;4286:9;4282:18;4269:32;4344:5;4337:13;4330:21;4323:5;4320:32;4310:60;;4366:1;4363;4356:12;4310:60;4389:5;4379:15;;;4053:347;;;;;:::o;4405:186::-;4464:6;4517:2;4505:9;4496:7;4492:23;4488:32;4485:52;;;4533:1;4530;4523:12;4485:52;4556:29;4575:9;4556:29;:::i;4596:808::-;4693:6;4701;4709;4717;4725;4778:3;4766:9;4757:7;4753:23;4749:33;4746:53;;;4795:1;4792;4785:12;4746:53;4818:29;4837:9;4818:29;:::i;:::-;4808:39;;4866:38;4900:2;4889:9;4885:18;4866:38;:::i;:::-;4856:48;;4951:2;4940:9;4936:18;4923:32;4913:42;;5006:2;4995:9;4991:18;4978:32;5029:18;5070:2;5062:6;5059:14;5056:34;;;5086:1;5083;5076:12;5056:34;5124:6;5113:9;5109:22;5099:32;;5169:7;5162:4;5158:2;5154:13;5150:27;5140:55;;5191:1;5188;5181:12;5140:55;5231:2;5218:16;5257:2;5249:6;5246:14;5243:34;;;5273:1;5270;5263:12;5243:34;5318:7;5313:2;5304:6;5300:2;5296:15;5292:24;5289:37;5286:57;;;5339:1;5336;5329:12;5286:57;4596:808;;;;-1:-1:-1;4596:808:1;;-1:-1:-1;5370:2:1;5362:11;;5392:6;4596:808;-1:-1:-1;;;4596:808:1:o;5409:260::-;5477:6;5485;5538:2;5526:9;5517:7;5513:23;5509:32;5506:52;;;5554:1;5551;5544:12;5506:52;5577:29;5596:9;5577:29;:::i;:::-;5567:39;;5625:38;5659:2;5648:9;5644:18;5625:38;:::i;:::-;5615:48;;5409:260;;;;;:::o;5674:322::-;5743:6;5796:2;5784:9;5775:7;5771:23;5767:32;5764:52;;;5812:1;5809;5802:12;5764:52;5852:9;5839:23;5885:18;5877:6;5874:30;5871:50;;;5917:1;5914;5907:12;5871:50;5940;5982:7;5973:6;5962:9;5958:22;5940:50;:::i;6001:380::-;6080:1;6076:12;;;;6123;;;6144:61;;6198:4;6190:6;6186:17;6176:27;;6144:61;6251:2;6243:6;6240:14;6220:18;6217:38;6214:161;;6297:10;6292:3;6288:20;6285:1;6278:31;6332:4;6329:1;6322:15;6360:4;6357:1;6350:15;6214:161;;6001:380;;;:::o;6386:127::-;6447:10;6442:3;6438:20;6435:1;6428:31;6478:4;6475:1;6468:15;6502:4;6499:1;6492:15;6518:128;6585:9;;;6606:11;;;6603:37;;;6620:18;;:::i;6651:127::-;6712:10;6707:3;6703:20;6700:1;6693:31;6743:4;6740:1;6733:15;6767:4;6764:1;6757:15;6783:127;6844:10;6839:3;6835:20;6832:1;6825:31;6875:4;6872:1;6865:15;6899:4;6896:1;6889:15;7475:290;7544:6;7597:2;7585:9;7576:7;7572:23;7568:32;7565:52;;;7613:1;7610;7603:12;7565:52;7639:16;;-1:-1:-1;;;;;;7684:32:1;;7674:43;;7664:71;;7731:1;7728;7721:12;7770:662;-1:-1:-1;;;;;8049:15:1;;;8031:34;;8101:15;;8096:2;8081:18;;8074:43;8148:2;8133:18;;8126:34;;;8196:3;8191:2;8176:18;;8169:31;;;8216:19;;8209:35;;;7974:4;8237:6;8287;8011:3;8266:19;;8253:49;8352:1;8346:3;8337:6;8326:9;8322:22;8318:32;8311:43;8422:3;8415:2;8411:7;8406:2;8398:6;8394:15;8390:29;8379:9;8375:45;8371:55;8363:63;;7770:662;;;;;;;;:::o;8563:1177::-;8829:3;8858:1;8891:6;8885:13;8921:36;8947:9;8921:36;:::i;:::-;8976:1;8993:17;;;9019:133;;;;9166:1;9161:358;;;;8986:533;;9019:133;-1:-1:-1;;9052:24:1;;9040:37;;9125:14;;9118:22;9106:35;;9097:45;;;-1:-1:-1;9019:133:1;;9161:358;9192:6;9189:1;9182:17;9222:4;9267;9264:1;9254:18;9294:1;9308:165;9322:6;9319:1;9316:13;9308:165;;;9400:14;;9387:11;;;9380:35;9443:16;;;;9337:10;;9308:165;;;9312:3;;;9502:6;9497:3;9493:16;9486:23;;8986:533;;;;;9550:6;9544:13;9566:68;9625:8;9620:3;9613:4;9605:6;9601:17;9566:68;:::i;:::-;-1:-1:-1;;;9656:18:1;;9683:22;;;9732:1;9721:13;;8563:1177;-1:-1:-1;;;;8563:1177:1:o;9745:518::-;9847:2;9842:3;9839:11;9836:421;;;9883:5;9880:1;9873:16;9927:4;9924:1;9914:18;9997:2;9985:10;9981:19;9978:1;9974:27;9968:4;9964:38;10033:4;10021:10;10018:20;10015:47;;;-1:-1:-1;10056:4:1;10015:47;10111:2;10106:3;10102:12;10099:1;10095:20;10089:4;10085:31;10075:41;;10166:81;10184:2;10177:5;10174:13;10166:81;;;10243:1;10229:16;;10210:1;10199:13;10166:81;;10439:1345;10565:3;10559:10;10592:18;10584:6;10581:30;10578:56;;;10614:18;;:::i;:::-;10643:97;10733:6;10693:38;10725:4;10719:11;10693:38;:::i;:::-;10687:4;10643:97;:::i;:::-;10795:4;;10852:2;10841:14;;10869:1;10864:663;;;;11571:1;11588:6;11585:89;;;-1:-1:-1;11640:19:1;;;11634:26;11585:89;-1:-1:-1;;10396:1:1;10392:11;;;10388:24;10384:29;10374:40;10420:1;10416:11;;;10371:57;11687:81;;10834:944;;10864:663;8510:1;8503:14;;;8547:4;8534:18;;-1:-1:-1;;10900:20:1;;;11018:236;11032:7;11029:1;11026:14;11018:236;;;11121:19;;;11115:26;11100:42;;11213:27;;;;11181:1;11169:14;;;;11048:19;;11018:236;;;11022:3;11282:6;11273:7;11270:19;11267:201;;;11343:19;;;11337:26;-1:-1:-1;;11426:1:1;11422:14;;;11438:3;11418:24;11414:37;11410:42;11395:58;11380:74;;11267:201;;;11514:1;11505:6;11502:1;11498:14;11494:22;11488:4;11481:36;10834:944;;;;;10439:1345;;:::o;11789:416::-;11878:1;11915:5;11878:1;11929:270;11950:7;11940:8;11937:21;11929:270;;;12009:4;12005:1;12001:6;11997:17;11991:4;11988:27;11985:53;;;12018:18;;:::i;:::-;12068:7;12058:8;12054:22;12051:55;;;12088:16;;;;12051:55;12167:22;;;;12127:15;;;;11929:270;;;11933:3;11789:416;;;;;:::o;12210:806::-;12259:5;12289:8;12279:80;;-1:-1:-1;12330:1:1;12344:5;;12279:80;12378:4;12368:76;;-1:-1:-1;12415:1:1;12429:5;;12368:76;12460:4;12478:1;12473:59;;;;12546:1;12541:130;;;;12453:218;;12473:59;12503:1;12494:10;;12517:5;;;12541:130;12578:3;12568:8;12565:17;12562:43;;;12585:18;;:::i;:::-;-1:-1:-1;;12641:1:1;12627:16;;12656:5;;12453:218;;12755:2;12745:8;12742:16;12736:3;12730:4;12727:13;12723:36;12717:2;12707:8;12704:16;12699:2;12693:4;12690:12;12686:35;12683:77;12680:159;;;-1:-1:-1;12792:19:1;;;12824:5;;12680:159;12871:34;12896:8;12890:4;12871:34;:::i;:::-;12941:6;12937:1;12933:6;12929:19;12920:7;12917:32;12914:58;;;12952:18;;:::i;:::-;12990:20;;12210:806;-1:-1:-1;;;12210:806:1:o;13021:140::-;13079:5;13108:47;13149:4;13139:8;13135:19;13129:4;13108:47;:::i;13510:125::-;13575:9;;;13596:10;;;13593:36;;;13609:18;;:::i;14483:217::-;14523:1;14549;14539:132;;14593:10;14588:3;14584:20;14581:1;14574:31;14628:4;14625:1;14618:15;14656:4;14653:1;14646:15;14539:132;-1:-1:-1;14685:9:1;;14483:217::o

Swarm Source

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