BERA Price: $6.04 (-1.86%)

Contract

0xbD5cf602E5C62ac1A3A597347952D6cE8B1114b0

Overview

BERA Balance

Berachain LogoBerachain LogoBerachain Logo0 BERA

BERA Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer Ownersh...9588132025-02-10 13:26:4238 days ago1739194002IN
0xbD5cf602...E8B1114b0
0 BERA0.000005140.18000001

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PriceOracle

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 200 runs

Other Settings:
cancun EvmVersion, MIT license
File 1 of 9 : PriceOracle.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.17 <0.9.0;

import {IPriceOracle} from "src/registrar/interfaces/IPriceOracle.sol";
import {IPyth} from "@pythnetwork/pyth-sdk-solidity/IPyth.sol";
import {PythStructs} from "@pythnetwork/pyth-sdk-solidity/PythStructs.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";

import {StringUtils} from "src/utils/StringUtils.sol";
import {console} from "forge-std/console.sol";

contract PriceOracle is IPriceOracle, Ownable {
    using StringUtils for string;

    IPyth pyth;
    bytes32 beraUsdPythPriceFeedId;

    /// @notice The minimum price in wei. If conversion is less than this, revert. Editable by admin
    uint256 minPriceInWei;

    /// @notice Thrown when the price is too low.
    error PriceTooLow();

    /// @notice Thrown when the Pyth contract is invalid.
    error InvalidPyth();

    /// @notice Emitted when the minimum price in wei is set.
    event MinPriceInWeiSet(uint256 minPriceInWei_);

    /// @notice Emitted when the Pyth price feed id is set.
    event BeraUsdPythPriceFeedIdSet(bytes32 beraUsdPythPriceFeedId_);

    /// @notice Emitted when the Pyth contract is set.
    event PythSet(address pyth_);

    constructor(address pyth_, bytes32 beraUsdPythPriceFeedId_) Ownable(msg.sender) {
        if (pyth_ == address(0)) revert InvalidPyth();

        pyth = IPyth(pyth_);
        beraUsdPythPriceFeedId = beraUsdPythPriceFeedId_;
    }

    function setMinPriceInWei(uint256 minPriceInWei_) external onlyOwner {
        minPriceInWei = minPriceInWei_;
        emit MinPriceInWeiSet(minPriceInWei_);
    }

    function setBeraUsdPythPriceFeedId(bytes32 beraUsdPythPriceFeedId_) external onlyOwner {
        beraUsdPythPriceFeedId = beraUsdPythPriceFeedId_;
        emit BeraUsdPythPriceFeedIdSet(beraUsdPythPriceFeedId_);
    }

    function setPyth(address pyth_) external onlyOwner {
        pyth = IPyth(pyth_);
        emit PythSet(pyth_);
    }

    /// @notice Calculates the price for a given label with a default payment method of ETH.
    /// @param label The label to query.
    /// @param expires The expiry of the label.
    /// @param duration The duration of the registration in seconds.
    /// @return The price of the label.
    function price(string calldata label, uint256 expires, uint256 duration) external view returns (Price memory) {
        return price(label, expires, duration, Payment.BERA);
    }

    /// @notice Calculates the price for a given label with a specified payment method.
    /// @param label The label to query.
    /// param expiry The expiry of the label. Not used atm
    /// @param duration The duration of the registration in seconds.
    /// @param payment The payment method.
    /// @return The price of the label.
    function price(string calldata label, uint256, uint256 duration, Payment payment)
        public
        view
        returns (Price memory)
    {
        // Implement your logic to calculate the base and premium price
        (uint256 basePrice, uint256 discount) = calculateBasePrice(label, duration);

        // Adjust the price based on the payment method if necessary
        if (payment == Payment.BERA) {
            basePrice = convertToToken(basePrice);
            discount = convertToToken(discount);
        }

        return Price(basePrice, discount);
    }

    /// @notice Calculates the base price for a given label and duration.
    /// @param label The label to query.
    /// @param duration The duration of the registration.
    /// @return base The base price before discount.
    /// @return discount The discount.
    function calculateBasePrice(string calldata label, uint256 duration)
        internal
        pure
        returns (uint256 base, uint256 discount)
    {
        uint256 nameLength = label.strlen();

        uint256 pricePerYear;
        // notation is $_cents_4zeros => $*10^6
        if (nameLength == 1) {
            pricePerYear = 420_00_0000; // 1 character 420$
        } else if (nameLength == 2) {
            pricePerYear = 269_00_0000; // 2 characters 269$
        } else if (nameLength == 3) {
            pricePerYear = 169_00_0000; // 3 characters 169$
        } else if (nameLength == 4) {
            pricePerYear = 69_00_0000; // 4 characters 69$
        } else {
            pricePerYear = 25_00_0000; // 5+ characters 25$
        }

        uint256 discount_;
        if (duration <= 365 days) {
            discount_ = 0;
        } else if (duration <= 2 * 365 days) {
            discount_ = 5;
        } else if (duration <= 3 * 365 days) {
            discount_ = 15;
        } else if (duration <= 4 * 365 days) {
            discount_ = 30;
        } else {
            discount_ = 40;
        }

        uint256 totalPrice = (pricePerYear * duration) / 365 days;
        uint256 discountAmount = (totalPrice * discount_) / 100;
        return (totalPrice, discountAmount);
    }

    /// @notice Converts a price from a stablecoin equivalent to ETH.
    /// @dev This function can revert with StalePrice
    /// @param price_ The price in stablecoin.
    /// @return The price in BERA.
    function convertToToken(uint256 price_) internal view returns (uint256) {
        PythStructs.Price memory conversionRate = pyth.getPriceNoOlderThan(beraUsdPythPriceFeedId, 30);

        uint256 beraPrice18Decimals =
            (uint256(uint64(conversionRate.price)) * (10 ** 18)) / (10 ** uint8(uint32(-1 * conversionRate.expo)));
        // 6 is the number of decimals in USD prices, so 18-6=12
        uint256 oneDollarInWei = ((10 ** 12) * (10 ** 18)) / beraPrice18Decimals;

        // if the price of 1 dollar is less than the minimum price, revert
        // prevent the price from being too low if price feed is down
        if (oneDollarInWei <= minPriceInWei) revert PriceTooLow();

        return price_ * oneDollarInWei;
    }
}

File 2 of 9 : IPriceOracle.sol
//SPDX-License-Identifier: MIT
pragma solidity >=0.8.17 <0.9.0;

interface IPriceOracle {
    /// @notice The payment method for registration.
    enum Payment {
        BERA,
        STABLE
    }

    /// @notice The price for a given label.
    struct Price {
        uint256 base;
        uint256 discount;
    }

    /// @notice The price for a given label.
    /// This assumes a default payment method of BERA.
    /// @param label The label to query.
    /// @param expires The expiry of the label.
    /// @param duration The duration of the registration.
    /// @return The price of the label.
    function price(string calldata label, uint256 expires, uint256 duration) external view returns (Price memory);

    /// @notice The price for a given label.
    /// @param label The label to query.
    /// @param expires The expiry of the label.
    /// @param duration The duration of the registration.
    /// @param payment The payment method.
    /// @return The price of the label.
    function price(string calldata label, uint256 expires, uint256 duration, Payment payment)
        external
        view
        returns (Price memory);
}

File 3 of 9 : IPyth.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

import "./PythStructs.sol";
import "./IPythEvents.sol";

/// @title Consume prices from the Pyth Network (https://pyth.network/).
/// @dev Please refer to the guidance at https://docs.pyth.network/documentation/pythnet-price-feeds/best-practices for how to consume prices safely.
/// @author Pyth Data Association
interface IPyth is IPythEvents {
    /// @notice Returns the price of a price feed without any sanity checks.
    /// @dev This function returns the most recent price update in this contract without any recency checks.
    /// This function is unsafe as the returned price update may be arbitrarily far in the past.
    ///
    /// Users of this function should check the `publishTime` in the price to ensure that the returned price is
    /// sufficiently recent for their application. If you are considering using this function, it may be
    /// safer / easier to use `getPriceNoOlderThan`.
    /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.
    function getPriceUnsafe(
        bytes32 id
    ) external view returns (PythStructs.Price memory price);

    /// @notice Returns the price that is no older than `age` seconds of the current time.
    /// @dev This function is a sanity-checked version of `getPriceUnsafe` which is useful in
    /// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently
    /// recently.
    /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.
    function getPriceNoOlderThan(
        bytes32 id,
        uint age
    ) external view returns (PythStructs.Price memory price);

    /// @notice Returns the exponentially-weighted moving average price of a price feed without any sanity checks.
    /// @dev This function returns the same price as `getEmaPrice` in the case where the price is available.
    /// However, if the price is not recent this function returns the latest available price.
    ///
    /// The returned price can be from arbitrarily far in the past; this function makes no guarantees that
    /// the returned price is recent or useful for any particular application.
    ///
    /// Users of this function should check the `publishTime` in the price to ensure that the returned price is
    /// sufficiently recent for their application. If you are considering using this function, it may be
    /// safer / easier to use either `getEmaPrice` or `getEmaPriceNoOlderThan`.
    /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.
    function getEmaPriceUnsafe(
        bytes32 id
    ) external view returns (PythStructs.Price memory price);

    /// @notice Returns the exponentially-weighted moving average price that is no older than `age` seconds
    /// of the current time.
    /// @dev This function is a sanity-checked version of `getEmaPriceUnsafe` which is useful in
    /// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently
    /// recently.
    /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.
    function getEmaPriceNoOlderThan(
        bytes32 id,
        uint age
    ) external view returns (PythStructs.Price memory price);

    /// @notice Update price feeds with given update messages.
    /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling
    /// `getUpdateFee` with the length of the `updateData` array.
    /// Prices will be updated if they are more recent than the current stored prices.
    /// The call will succeed even if the update is not the most recent.
    /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid.
    /// @param updateData Array of price update data.
    function updatePriceFeeds(bytes[] calldata updateData) external payable;

    /// @notice Wrapper around updatePriceFeeds that rejects fast if a price update is not necessary. A price update is
    /// necessary if the current on-chain publishTime is older than the given publishTime. It relies solely on the
    /// given `publishTimes` for the price feeds and does not read the actual price update publish time within `updateData`.
    ///
    /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling
    /// `getUpdateFee` with the length of the `updateData` array.
    ///
    /// `priceIds` and `publishTimes` are two arrays with the same size that correspond to senders known publishTime
    /// of each priceId when calling this method. If all of price feeds within `priceIds` have updated and have
    /// a newer or equal publish time than the given publish time, it will reject the transaction to save gas.
    /// Otherwise, it calls updatePriceFeeds method to update the prices.
    ///
    /// @dev Reverts if update is not needed or the transferred fee is not sufficient or the updateData is invalid.
    /// @param updateData Array of price update data.
    /// @param priceIds Array of price ids.
    /// @param publishTimes Array of publishTimes. `publishTimes[i]` corresponds to known `publishTime` of `priceIds[i]`
    function updatePriceFeedsIfNecessary(
        bytes[] calldata updateData,
        bytes32[] calldata priceIds,
        uint64[] calldata publishTimes
    ) external payable;

    /// @notice Returns the required fee to update an array of price updates.
    /// @param updateData Array of price update data.
    /// @return feeAmount The required fee in Wei.
    function getUpdateFee(
        bytes[] calldata updateData
    ) external view returns (uint feeAmount);

    /// @notice Parse `updateData` and return price feeds of the given `priceIds` if they are all published
    /// within `minPublishTime` and `maxPublishTime`.
    ///
    /// You can use this method if you want to use a Pyth price at a fixed time and not the most recent price;
    /// otherwise, please consider using `updatePriceFeeds`. This method may store the price updates on-chain, if they
    /// are more recent than the current stored prices.
    ///
    /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling
    /// `getUpdateFee` with the length of the `updateData` array.
    ///
    ///
    /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid or there is
    /// no update for any of the given `priceIds` within the given time range.
    /// @param updateData Array of price update data.
    /// @param priceIds Array of price ids.
    /// @param minPublishTime minimum acceptable publishTime for the given `priceIds`.
    /// @param maxPublishTime maximum acceptable publishTime for the given `priceIds`.
    /// @return priceFeeds Array of the price feeds corresponding to the given `priceIds` (with the same order).
    function parsePriceFeedUpdates(
        bytes[] calldata updateData,
        bytes32[] calldata priceIds,
        uint64 minPublishTime,
        uint64 maxPublishTime
    ) external payable returns (PythStructs.PriceFeed[] memory priceFeeds);

    /// @notice Similar to `parsePriceFeedUpdates` but ensures the updates returned are
    /// the first updates published in minPublishTime. That is, if there are multiple updates for a given timestamp,
    /// this method will return the first update. This method may store the price updates on-chain, if they
    /// are more recent than the current stored prices.
    ///
    ///
    /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid or there is
    /// no update for any of the given `priceIds` within the given time range and uniqueness condition.
    /// @param updateData Array of price update data.
    /// @param priceIds Array of price ids.
    /// @param minPublishTime minimum acceptable publishTime for the given `priceIds`.
    /// @param maxPublishTime maximum acceptable publishTime for the given `priceIds`.
    /// @return priceFeeds Array of the price feeds corresponding to the given `priceIds` (with the same order).
    function parsePriceFeedUpdatesUnique(
        bytes[] calldata updateData,
        bytes32[] calldata priceIds,
        uint64 minPublishTime,
        uint64 maxPublishTime
    ) external payable returns (PythStructs.PriceFeed[] memory priceFeeds);
}

File 4 of 9 : PythStructs.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

contract PythStructs {
    // A price with a degree of uncertainty, represented as a price +- a confidence interval.
    //
    // The confidence interval roughly corresponds to the standard error of a normal distribution.
    // Both the price and confidence are stored in a fixed-point numeric representation,
    // `x * (10^expo)`, where `expo` is the exponent.
    //
    // Please refer to the documentation at https://docs.pyth.network/documentation/pythnet-price-feeds/best-practices for how
    // to how this price safely.
    struct Price {
        // Price
        int64 price;
        // Confidence interval around the price
        uint64 conf;
        // Price exponent
        int32 expo;
        // Unix timestamp describing when the price was published
        uint publishTime;
    }

    // PriceFeed represents a current aggregate price from pyth publisher feeds.
    struct PriceFeed {
        // The price ID.
        bytes32 id;
        // Latest available price
        Price price;
        // Latest available exponentially-weighted moving average price
        Price emaPrice;
    }
}

File 5 of 9 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is set to the address provided by the deployer. This can
 * later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @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 6 of 9 : StringUtils.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

library StringUtils {
    error InvalidUTF8Byte();

    function utf8Length(string memory s) internal pure returns (uint256) {
        return bytes(s).length;
    }

    /**
     * @dev Returns the length of a given string, accurately counting characters including complex emojis.
     * @param s The string to measure the length of.
     * @return The length of the input string.
     */
    function strlen(string memory s) internal pure returns (uint256) {
        bytes memory strBytes = bytes(s);
        uint256 len = 0;
        uint256 i = 0;
        uint256 strLen = strBytes.length;

        while (i < strLen) {
            uint256 charLen = _charLength(strBytes, i);
            uint256 nextI = i + charLen;

            // Include any combining marks or modifiers immediately following the base character
            while (nextI < strLen && _isCombiningMarkOrModifier(strBytes, nextI)) {
                nextI += _charLength(strBytes, nextI);
            }

            // Handle sequences involving ZWJs by looping until no more ZWJs are found
            while (nextI < strLen && _isZeroWidthJoiner(strBytes, nextI)) {
                // Move past the ZWJ
                nextI += _charLength(strBytes, nextI);

                // Include the next character after ZWJ
                if (nextI < strLen) {
                    uint256 nextCharLen = _charLength(strBytes, nextI);
                    nextI += nextCharLen;

                    // Include any combining marks or modifiers following the character
                    while (nextI < strLen && _isCombiningMarkOrModifier(strBytes, nextI)) {
                        nextI += _charLength(strBytes, nextI);
                    }
                } else {
                    break; // No character after ZWJ
                }
            }

            // Handle regional indicators (used in flags) - always count as pairs
            if (_isRegionalIndicator(strBytes, i) && nextI < strLen && _isRegionalIndicator(strBytes, nextI)) {
                nextI += _charLength(strBytes, nextI);
            }

            // Increment length for each complete character sequence
            len++;
            i = nextI;
        }

        return len;
    }

    // Determines the length of a UTF-8 encoded character in bytes with validation
    function _charLength(bytes memory strBytes, uint256 index) private pure returns (uint256) {
        uint8 b = uint8(strBytes[index]);

        if (b < 0x80) {
            return 1; // 1-byte character (ASCII)
        } else if (b < 0xE0 && index + 1 < strBytes.length && uint8(strBytes[index + 1]) & 0xC0 == 0x80) {
            return 2; // 2-byte character
        } else if (
            b < 0xF0 && index + 2 < strBytes.length && uint8(strBytes[index + 1]) & 0xC0 == 0x80
                && uint8(strBytes[index + 2]) & 0xC0 == 0x80
        ) {
            return 3; // 3-byte character
        } else if (
            b < 0xF8 && index + 3 < strBytes.length && uint8(strBytes[index + 1]) & 0xC0 == 0x80
                && uint8(strBytes[index + 2]) & 0xC0 == 0x80 && uint8(strBytes[index + 3]) & 0xC0 == 0x80
        ) {
            return 4; // 4-byte character (including emojis)
        } else {
            revert InvalidUTF8Byte();
        }
    }

    // Checks if the sequence starting at index is a Zero-Width Joiner (ZWJ)
    function _isZeroWidthJoiner(bytes memory strBytes, uint256 index) private pure returns (bool) {
        return (
            strBytes[index] == 0xE2 && index + 2 < strBytes.length && strBytes[index + 1] == 0x80
                && strBytes[index + 2] == 0x8D
        );
    }

    // Checks if the character at index is a combining mark or modifier
    function _isCombiningMarkOrModifier(bytes memory strBytes, uint256 index) private pure returns (bool) {
        uint8 b = uint8(strBytes[index]);

        // Combining marks are in the range starting with 0xCC or 0xCD
        if (b == 0xCC || b == 0xCD) {
            return true;
        }

        // Emoji modifiers and variation selectors
        if (b == 0xE2 && index + 2 < strBytes.length) {
            uint8 b1 = uint8(strBytes[index + 1]);
            uint8 b2 = uint8(strBytes[index + 2]);
            // Check for variation selectors (e.g., U+FE0F)
            if (b1 == 0x80 && (b2 == 0x8F || b2 == 0x8E)) {
                return true;
            }
        }

        // Handle emojis with skin tone, gender modifiers, etc.
        if (b == 0xF0 && index + 3 < strBytes.length) {
            uint8 b1 = uint8(strBytes[index + 1]);
            uint8 b2 = uint8(strBytes[index + 2]);
            uint8 b3 = uint8(strBytes[index + 3]);
            // Check for specific sequences that are known modifiers
            if (
                (b1 == 0x9F && b2 == 0x8F && (b3 >= 0xBB && b3 <= 0xBF)) // Skin tone modifiers
                    || (b1 == 0x9F && b2 == 0xA4 && b3 == 0xB0)
            ) {
                // Gender modifiers
                return true;
            }
        }

        // Check for Variation Selector-16 (U+FE0F)
        if (b == 0xEF && index + 2 < strBytes.length) {
            uint8 b1 = uint8(strBytes[index + 1]);
            uint8 b2 = uint8(strBytes[index + 2]);
            if (b1 == 0xB8 && b2 == 0x8F) {
                return true;
            }
        }

        // Check for Combining Enclosing Keycap (U+20E3)
        if (b == 0xE2 && index + 2 < strBytes.length) {
            uint8 b1 = uint8(strBytes[index + 1]);
            uint8 b2 = uint8(strBytes[index + 2]);
            if (b1 == 0x83 && b2 == 0xA3) {
                return true;
            }
        }

        // Checks if the character at index is a Tag Indicator (used in special flag sequences)
        if (
            b == 0xF3 && index + 2 < strBytes.length && strBytes[index + 1] == 0xA0 && strBytes[index + 2] >= 0x80
                && strBytes[index + 2] <= 0x9F
        ) {
            return true;
        }

        return false;
    }

    // Checks if the character at index is a Regional Indicator Symbol (used for flag emojis)
    function _isRegionalIndicator(bytes memory strBytes, uint256 index) private pure returns (bool) {
        return (
            strBytes[index] == 0xF0 && index + 3 < strBytes.length && strBytes[index + 1] == 0x9F
                && strBytes[index + 2] == 0x87
        );
    }
}

File 7 of 9 : console.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;

library console {
    address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);

    function _castLogPayloadViewToPure(
        function(bytes memory) internal view fnIn
    ) internal pure returns (function(bytes memory) internal pure fnOut) {
        assembly {
            fnOut := fnIn
        }
    }

    function _sendLogPayload(bytes memory payload) internal pure {
        _castLogPayloadViewToPure(_sendLogPayloadView)(payload);
    }

    function _sendLogPayloadView(bytes memory payload) private view {
        uint256 payloadLength = payload.length;
        address consoleAddress = CONSOLE_ADDRESS;
        /// @solidity memory-safe-assembly
        assembly {
            let payloadStart := add(payload, 32)
            let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)
        }
    }

    function log() internal pure {
        _sendLogPayload(abi.encodeWithSignature("log()"));
    }

    function logInt(int p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(int)", p0));
    }

    function logUint(uint p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
    }

    function logString(string memory p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string)", p0));
    }

    function logBool(bool p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
    }

    function logAddress(address p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address)", p0));
    }

    function logBytes(bytes memory p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
    }

    function logBytes1(bytes1 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
    }

    function logBytes2(bytes2 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
    }

    function logBytes3(bytes3 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
    }

    function logBytes4(bytes4 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
    }

    function logBytes5(bytes5 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
    }

    function logBytes6(bytes6 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
    }

    function logBytes7(bytes7 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
    }

    function logBytes8(bytes8 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
    }

    function logBytes9(bytes9 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
    }

    function logBytes10(bytes10 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
    }

    function logBytes11(bytes11 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
    }

    function logBytes12(bytes12 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
    }

    function logBytes13(bytes13 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
    }

    function logBytes14(bytes14 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
    }

    function logBytes15(bytes15 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
    }

    function logBytes16(bytes16 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
    }

    function logBytes17(bytes17 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
    }

    function logBytes18(bytes18 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
    }

    function logBytes19(bytes19 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
    }

    function logBytes20(bytes20 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
    }

    function logBytes21(bytes21 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
    }

    function logBytes22(bytes22 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
    }

    function logBytes23(bytes23 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
    }

    function logBytes24(bytes24 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
    }

    function logBytes25(bytes25 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
    }

    function logBytes26(bytes26 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
    }

    function logBytes27(bytes27 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
    }

    function logBytes28(bytes28 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
    }

    function logBytes29(bytes29 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
    }

    function logBytes30(bytes30 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
    }

    function logBytes31(bytes31 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
    }

    function logBytes32(bytes32 p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
    }

    function log(uint p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
    }

    function log(int p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(int)", p0));
    }

    function log(string memory p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string)", p0));
    }

    function log(bool p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
    }

    function log(address p0) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address)", p0));
    }

    function log(uint p0, uint p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1));
    }

    function log(uint p0, string memory p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1));
    }

    function log(uint p0, bool p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1));
    }

    function log(uint p0, address p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1));
    }

    function log(string memory p0, uint p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1));
    }

    function log(string memory p0, int p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,int)", p0, p1));
    }

    function log(string memory p0, string memory p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
    }

    function log(string memory p0, bool p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
    }

    function log(string memory p0, address p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
    }

    function log(bool p0, uint p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1));
    }

    function log(bool p0, string memory p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
    }

    function log(bool p0, bool p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
    }

    function log(bool p0, address p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
    }

    function log(address p0, uint p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1));
    }

    function log(address p0, string memory p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
    }

    function log(address p0, bool p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
    }

    function log(address p0, address p1) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
    }

    function log(uint p0, uint p1, uint p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2));
    }

    function log(uint p0, uint p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2));
    }

    function log(uint p0, uint p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2));
    }

    function log(uint p0, uint p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2));
    }

    function log(uint p0, string memory p1, uint p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2));
    }

    function log(uint p0, string memory p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2));
    }

    function log(uint p0, string memory p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2));
    }

    function log(uint p0, string memory p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2));
    }

    function log(uint p0, bool p1, uint p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2));
    }

    function log(uint p0, bool p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2));
    }

    function log(uint p0, bool p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2));
    }

    function log(uint p0, bool p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2));
    }

    function log(uint p0, address p1, uint p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2));
    }

    function log(uint p0, address p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2));
    }

    function log(uint p0, address p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2));
    }

    function log(uint p0, address p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2));
    }

    function log(string memory p0, uint p1, uint p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2));
    }

    function log(string memory p0, uint p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2));
    }

    function log(string memory p0, uint p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2));
    }

    function log(string memory p0, uint p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2));
    }

    function log(string memory p0, string memory p1, uint p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2));
    }

    function log(string memory p0, string memory p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
    }

    function log(string memory p0, string memory p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
    }

    function log(string memory p0, string memory p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
    }

    function log(string memory p0, bool p1, uint p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2));
    }

    function log(string memory p0, bool p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
    }

    function log(string memory p0, bool p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
    }

    function log(string memory p0, bool p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
    }

    function log(string memory p0, address p1, uint p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2));
    }

    function log(string memory p0, address p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
    }

    function log(string memory p0, address p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
    }

    function log(string memory p0, address p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
    }

    function log(bool p0, uint p1, uint p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2));
    }

    function log(bool p0, uint p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2));
    }

    function log(bool p0, uint p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2));
    }

    function log(bool p0, uint p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2));
    }

    function log(bool p0, string memory p1, uint p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2));
    }

    function log(bool p0, string memory p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
    }

    function log(bool p0, string memory p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
    }

    function log(bool p0, string memory p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
    }

    function log(bool p0, bool p1, uint p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2));
    }

    function log(bool p0, bool p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
    }

    function log(bool p0, bool p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
    }

    function log(bool p0, bool p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
    }

    function log(bool p0, address p1, uint p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2));
    }

    function log(bool p0, address p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
    }

    function log(bool p0, address p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
    }

    function log(bool p0, address p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
    }

    function log(address p0, uint p1, uint p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2));
    }

    function log(address p0, uint p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2));
    }

    function log(address p0, uint p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2));
    }

    function log(address p0, uint p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2));
    }

    function log(address p0, string memory p1, uint p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2));
    }

    function log(address p0, string memory p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
    }

    function log(address p0, string memory p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
    }

    function log(address p0, string memory p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
    }

    function log(address p0, bool p1, uint p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2));
    }

    function log(address p0, bool p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
    }

    function log(address p0, bool p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
    }

    function log(address p0, bool p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
    }

    function log(address p0, address p1, uint p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2));
    }

    function log(address p0, address p1, string memory p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
    }

    function log(address p0, address p1, bool p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
    }

    function log(address p0, address p1, address p2) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
    }

    function log(uint p0, uint p1, uint p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3));
    }

    function log(uint p0, uint p1, uint p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3));
    }

    function log(uint p0, uint p1, uint p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3));
    }

    function log(uint p0, uint p1, uint p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3));
    }

    function log(uint p0, uint p1, string memory p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3));
    }

    function log(uint p0, uint p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3));
    }

    function log(uint p0, uint p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3));
    }

    function log(uint p0, uint p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3));
    }

    function log(uint p0, uint p1, bool p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3));
    }

    function log(uint p0, uint p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3));
    }

    function log(uint p0, uint p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3));
    }

    function log(uint p0, uint p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3));
    }

    function log(uint p0, uint p1, address p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3));
    }

    function log(uint p0, uint p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3));
    }

    function log(uint p0, uint p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3));
    }

    function log(uint p0, uint p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3));
    }

    function log(uint p0, string memory p1, uint p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3));
    }

    function log(uint p0, string memory p1, uint p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3));
    }

    function log(uint p0, string memory p1, uint p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3));
    }

    function log(uint p0, string memory p1, uint p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3));
    }

    function log(uint p0, string memory p1, string memory p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3));
    }

    function log(uint p0, string memory p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3));
    }

    function log(uint p0, string memory p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3));
    }

    function log(uint p0, string memory p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3));
    }

    function log(uint p0, string memory p1, bool p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3));
    }

    function log(uint p0, string memory p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3));
    }

    function log(uint p0, string memory p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3));
    }

    function log(uint p0, string memory p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3));
    }

    function log(uint p0, string memory p1, address p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3));
    }

    function log(uint p0, string memory p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3));
    }

    function log(uint p0, string memory p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3));
    }

    function log(uint p0, string memory p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3));
    }

    function log(uint p0, bool p1, uint p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3));
    }

    function log(uint p0, bool p1, uint p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3));
    }

    function log(uint p0, bool p1, uint p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3));
    }

    function log(uint p0, bool p1, uint p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3));
    }

    function log(uint p0, bool p1, string memory p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3));
    }

    function log(uint p0, bool p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3));
    }

    function log(uint p0, bool p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3));
    }

    function log(uint p0, bool p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3));
    }

    function log(uint p0, bool p1, bool p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3));
    }

    function log(uint p0, bool p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3));
    }

    function log(uint p0, bool p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3));
    }

    function log(uint p0, bool p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3));
    }

    function log(uint p0, bool p1, address p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3));
    }

    function log(uint p0, bool p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3));
    }

    function log(uint p0, bool p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3));
    }

    function log(uint p0, bool p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3));
    }

    function log(uint p0, address p1, uint p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3));
    }

    function log(uint p0, address p1, uint p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3));
    }

    function log(uint p0, address p1, uint p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3));
    }

    function log(uint p0, address p1, uint p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3));
    }

    function log(uint p0, address p1, string memory p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3));
    }

    function log(uint p0, address p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3));
    }

    function log(uint p0, address p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3));
    }

    function log(uint p0, address p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3));
    }

    function log(uint p0, address p1, bool p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3));
    }

    function log(uint p0, address p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3));
    }

    function log(uint p0, address p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3));
    }

    function log(uint p0, address p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3));
    }

    function log(uint p0, address p1, address p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3));
    }

    function log(uint p0, address p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3));
    }

    function log(uint p0, address p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3));
    }

    function log(uint p0, address p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint p1, uint p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint p1, uint p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint p1, uint p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint p1, uint p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint p1, string memory p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint p1, bool p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint p1, address p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, uint p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, uint p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, uint p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, uint p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, uint p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, string memory p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, bool p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, address p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, string memory p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, uint p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, uint p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, uint p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, uint p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, string memory p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, bool p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, address p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, bool p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, address p1, uint p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3));
    }

    function log(string memory p0, address p1, uint p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, address p1, uint p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, address p1, uint p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, address p1, string memory p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3));
    }

    function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, address p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, address p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, address p1, bool p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3));
    }

    function log(string memory p0, address p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, address p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, address p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
    }

    function log(string memory p0, address p1, address p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3));
    }

    function log(string memory p0, address p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
    }

    function log(string memory p0, address p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
    }

    function log(string memory p0, address p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
    }

    function log(bool p0, uint p1, uint p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3));
    }

    function log(bool p0, uint p1, uint p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3));
    }

    function log(bool p0, uint p1, uint p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3));
    }

    function log(bool p0, uint p1, uint p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3));
    }

    function log(bool p0, uint p1, string memory p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3));
    }

    function log(bool p0, uint p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3));
    }

    function log(bool p0, uint p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3));
    }

    function log(bool p0, uint p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3));
    }

    function log(bool p0, uint p1, bool p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3));
    }

    function log(bool p0, uint p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3));
    }

    function log(bool p0, uint p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3));
    }

    function log(bool p0, uint p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3));
    }

    function log(bool p0, uint p1, address p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3));
    }

    function log(bool p0, uint p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3));
    }

    function log(bool p0, uint p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3));
    }

    function log(bool p0, uint p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3));
    }

    function log(bool p0, string memory p1, uint p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3));
    }

    function log(bool p0, string memory p1, uint p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3));
    }

    function log(bool p0, string memory p1, uint p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3));
    }

    function log(bool p0, string memory p1, uint p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3));
    }

    function log(bool p0, string memory p1, string memory p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3));
    }

    function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
    }

    function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
    }

    function log(bool p0, string memory p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
    }

    function log(bool p0, string memory p1, bool p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3));
    }

    function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
    }

    function log(bool p0, string memory p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
    }

    function log(bool p0, string memory p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
    }

    function log(bool p0, string memory p1, address p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3));
    }

    function log(bool p0, string memory p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
    }

    function log(bool p0, string memory p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
    }

    function log(bool p0, string memory p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
    }

    function log(bool p0, bool p1, uint p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3));
    }

    function log(bool p0, bool p1, uint p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3));
    }

    function log(bool p0, bool p1, uint p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3));
    }

    function log(bool p0, bool p1, uint p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3));
    }

    function log(bool p0, bool p1, string memory p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3));
    }

    function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
    }

    function log(bool p0, bool p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
    }

    function log(bool p0, bool p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
    }

    function log(bool p0, bool p1, bool p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3));
    }

    function log(bool p0, bool p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
    }

    function log(bool p0, bool p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
    }

    function log(bool p0, bool p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
    }

    function log(bool p0, bool p1, address p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3));
    }

    function log(bool p0, bool p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
    }

    function log(bool p0, bool p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
    }

    function log(bool p0, bool p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
    }

    function log(bool p0, address p1, uint p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3));
    }

    function log(bool p0, address p1, uint p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3));
    }

    function log(bool p0, address p1, uint p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3));
    }

    function log(bool p0, address p1, uint p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3));
    }

    function log(bool p0, address p1, string memory p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3));
    }

    function log(bool p0, address p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
    }

    function log(bool p0, address p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
    }

    function log(bool p0, address p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
    }

    function log(bool p0, address p1, bool p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3));
    }

    function log(bool p0, address p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
    }

    function log(bool p0, address p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
    }

    function log(bool p0, address p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
    }

    function log(bool p0, address p1, address p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3));
    }

    function log(bool p0, address p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
    }

    function log(bool p0, address p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
    }

    function log(bool p0, address p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
    }

    function log(address p0, uint p1, uint p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3));
    }

    function log(address p0, uint p1, uint p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3));
    }

    function log(address p0, uint p1, uint p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3));
    }

    function log(address p0, uint p1, uint p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3));
    }

    function log(address p0, uint p1, string memory p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3));
    }

    function log(address p0, uint p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3));
    }

    function log(address p0, uint p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3));
    }

    function log(address p0, uint p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3));
    }

    function log(address p0, uint p1, bool p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3));
    }

    function log(address p0, uint p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3));
    }

    function log(address p0, uint p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3));
    }

    function log(address p0, uint p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3));
    }

    function log(address p0, uint p1, address p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3));
    }

    function log(address p0, uint p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3));
    }

    function log(address p0, uint p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3));
    }

    function log(address p0, uint p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3));
    }

    function log(address p0, string memory p1, uint p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3));
    }

    function log(address p0, string memory p1, uint p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3));
    }

    function log(address p0, string memory p1, uint p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3));
    }

    function log(address p0, string memory p1, uint p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3));
    }

    function log(address p0, string memory p1, string memory p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3));
    }

    function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3));
    }

    function log(address p0, string memory p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3));
    }

    function log(address p0, string memory p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
    }

    function log(address p0, string memory p1, bool p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3));
    }

    function log(address p0, string memory p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
    }

    function log(address p0, string memory p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
    }

    function log(address p0, string memory p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
    }

    function log(address p0, string memory p1, address p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3));
    }

    function log(address p0, string memory p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
    }

    function log(address p0, string memory p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
    }

    function log(address p0, string memory p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
    }

    function log(address p0, bool p1, uint p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3));
    }

    function log(address p0, bool p1, uint p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3));
    }

    function log(address p0, bool p1, uint p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3));
    }

    function log(address p0, bool p1, uint p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3));
    }

    function log(address p0, bool p1, string memory p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3));
    }

    function log(address p0, bool p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
    }

    function log(address p0, bool p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
    }

    function log(address p0, bool p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
    }

    function log(address p0, bool p1, bool p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3));
    }

    function log(address p0, bool p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
    }

    function log(address p0, bool p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
    }

    function log(address p0, bool p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
    }

    function log(address p0, bool p1, address p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3));
    }

    function log(address p0, bool p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
    }

    function log(address p0, bool p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
    }

    function log(address p0, bool p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
    }

    function log(address p0, address p1, uint p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3));
    }

    function log(address p0, address p1, uint p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3));
    }

    function log(address p0, address p1, uint p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3));
    }

    function log(address p0, address p1, uint p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3));
    }

    function log(address p0, address p1, string memory p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3));
    }

    function log(address p0, address p1, string memory p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
    }

    function log(address p0, address p1, string memory p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
    }

    function log(address p0, address p1, string memory p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
    }

    function log(address p0, address p1, bool p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3));
    }

    function log(address p0, address p1, bool p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
    }

    function log(address p0, address p1, bool p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
    }

    function log(address p0, address p1, bool p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
    }

    function log(address p0, address p1, address p2, uint p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3));
    }

    function log(address p0, address p1, address p2, string memory p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
    }

    function log(address p0, address p1, address p2, bool p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
    }

    function log(address p0, address p1, address p2, address p3) internal pure {
        _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
    }
}

File 8 of 9 : IPythEvents.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

/// @title IPythEvents contains the events that Pyth contract emits.
/// @dev This interface can be used for listening to the updates for off-chain and testing purposes.
interface IPythEvents {
    /// @dev Emitted when the price feed with `id` has received a fresh update.
    /// @param id The Pyth Price Feed ID.
    /// @param publishTime Publish time of the given price update.
    /// @param price Price of the given price update.
    /// @param conf Confidence interval of the given price update.
    event PriceFeedUpdate(
        bytes32 indexed id,
        uint64 publishTime,
        int64 price,
        uint64 conf
    );
}

File 9 of 9 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

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

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

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"pyth_","type":"address"},{"internalType":"bytes32","name":"beraUsdPythPriceFeedId_","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidPyth","type":"error"},{"inputs":[],"name":"InvalidUTF8Byte","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":"PriceTooLow","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"beraUsdPythPriceFeedId_","type":"bytes32"}],"name":"BeraUsdPythPriceFeedIdSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minPriceInWei_","type":"uint256"}],"name":"MinPriceInWeiSet","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":"pyth_","type":"address"}],"name":"PythSet","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"label","type":"string"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"price","outputs":[{"components":[{"internalType":"uint256","name":"base","type":"uint256"},{"internalType":"uint256","name":"discount","type":"uint256"}],"internalType":"struct IPriceOracle.Price","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"label","type":"string"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"enum IPriceOracle.Payment","name":"payment","type":"uint8"}],"name":"price","outputs":[{"components":[{"internalType":"uint256","name":"base","type":"uint256"},{"internalType":"uint256","name":"discount","type":"uint256"}],"internalType":"struct IPriceOracle.Price","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"beraUsdPythPriceFeedId_","type":"bytes32"}],"name":"setBeraUsdPythPriceFeedId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minPriceInWei_","type":"uint256"}],"name":"setMinPriceInWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pyth_","type":"address"}],"name":"setPyth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561000f575f5ffd5b506040516113c63803806113c683398101604081905261002e916100fc565b338061005357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005c816100ad565b506001600160a01b0382166100845760405163f5afe80d60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b039390931692909217909155600255610133565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5f6040838503121561010d575f5ffd5b82516001600160a01b0381168114610123575f5ffd5b6020939093015192949293505050565b611286806101405f395ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c8063c92e996c11610058578063c92e996c146100f3578063d59ff8e014610106578063ee22fd6f14610119578063f2fde38b1461012c575f5ffd5b806350e9a715146100895780635c635a75146100bc578063715018a6146100d15780638da5cb5b146100d9575b5f5ffd5b61009c610097366004610eff565b61013f565b604080518251815260209283015192810192909252015b60405180910390f35b6100cf6100ca366004610f4c565b610168565b005b6100cf6101ac565b5f546040516001600160a01b0390911681526020016100b3565b61009c610101366004610f63565b6101bf565b6100cf610114366004610f4c565b61022f565b6100cf610127366004610fcc565b61026c565b6100cf61013a366004610fcc565b6102c2565b604080518082019091525f808252602082015261015f858585855f6101bf565b95945050505050565b610170610304565b60038190556040518181527ffe213f423cc686af7a64b44eb9810dfbc91529f12a14cecb255809099ad5f062906020015b60405180910390a150565b6101b4610304565b6101bd5f610330565b565b604080518082019091525f80825260208201525f5f6101df88888761037f565b90925090505f8460018111156101f7576101f7610ff2565b0361021357610205826104ac565b9150610210816104ac565b90505b6040805180820190915291825260208201529695505050505050565b610237610304565b60028190556040518181527fcd7cc45211e8d4eb32f137374a9d21805455c5d5b169ebf0b519652be224ffbc906020016101a1565b610274610304565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f46b42f4e8500803ed21911081f9fad2d1b466f75d95552247151cc9fed56e68d906020016101a1565b6102ca610304565b6001600160a01b0381166102f857604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61030181610330565b50565b5f546001600160a01b031633146101bd5760405163118cdaa760e01b81523360048201526024016102ef565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5f5f6103c086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506105b592505050565b90505f816001036103d65750631908b100610416565b816002036103e957506310089d40610416565b816003036103fc5750630a12bc40610416565b8160040361040f575063041cdb40610416565b5063017d78405b5f6301e13380861161042957505f610466565b6303c26700861161043c57506005610466565b6305a39a80861161044f5750600f610466565b630784ce0086116104625750601e610466565b5060285b5f6301e13380610476888561101a565b6104809190611031565b90505f606461048f848461101a565b6104999190611031565b919650909450505050505b935093915050565b60015460025460405163052571af60e51b81526004810191909152601e60248201525f9182916001600160a01b039091169063a4ae35e090604401608060405180830381865afa158015610502573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610526919061107d565b90505f81604001515f1961053a9190611109565b61054590600a611203565b82516105639067ffffffffffffffff16670de0b6b3a764000061101a565b61056d9190611031565b90505f610587826c0c9f2c9cd04674edea40000000611031565b905060035481116105ab57604051636dddf41160e11b815260040160405180910390fd5b61015f818661101a565b80515f908290829081905b808210156106fb575f6105d38584610705565b90505f6105e08285611211565b90505b82811080156105f757506105f7868261093d565b15610617576106068682610705565b6106109082611211565b90506105e3565b828110801561062b575061062b8682610d47565b156106a25761063a8682610705565b6106449082611211565b9050828110156106a2575f6106598783610705565b90506106658183611211565b91505b838210801561067c575061067c878361093d565b1561069c5761068b8783610705565b6106959083611211565b9150610668565b50610617565b6106ac8685610e01565b80156106b757508281105b80156106c857506106c88682610e01565b156106e4576106d78682610705565b6106e19082611211565b90505b846106ee81611224565b95505080935050506105c0565b5090949350505050565b5f5f8383815181106107195761071961123c565b016020015160f81c90506080811015610736576001915050610937565b60e08160ff1610801561075357508351610751846001611211565b105b801561078e575083610766846001611211565b815181106107765761077661123c565b602001015160f81c60f81b60f81c60c01660ff166080145b1561079d576002915050610937565b60f08160ff161080156107ba575083516107b8846002611211565b105b80156107f55750836107cd846001611211565b815181106107dd576107dd61123c565b602001015160f81c60f81b60f81c60c01660ff166080145b8015610830575083610808846002611211565b815181106108185761081861123c565b602001015160f81c60f81b60f81c60c01660ff166080145b1561083f576003915050610937565b60f88160ff1610801561085c5750835161085a846003611211565b105b801561089757508361086f846001611211565b8151811061087f5761087f61123c565b602001015160f81c60f81b60f81c60c01660ff166080145b80156108d25750836108aa846002611211565b815181106108ba576108ba61123c565b602001015160f81c60f81b60f81c60c01660ff166080145b801561090d5750836108e5846003611211565b815181106108f5576108f561123c565b602001015160f81c60f81b60f81c60c01660ff166080145b1561091c576004915050610937565b6040516361709aff60e11b815260040160405180910390fd5b505b92915050565b5f5f8383815181106109515761095161123c565b016020015160f81c905060cc81148061096d57508060ff1660cd145b1561097c576001915050610937565b8060ff1660e214801561099957508351610997846002611211565b105b15610a23575f846109ab856001611211565b815181106109bb576109bb61123c565b016020015160f81c90505f856109d2866002611211565b815181106109e2576109e261123c565b016020015160f81c9050608060ff8316148015610a0f57508060ff16608f1480610a0f57508060ff16608e145b15610a205760019350505050610937565b50505b8060ff1660f0148015610a4057508351610a3e846003611211565b105b15610b30575f84610a52856001611211565b81518110610a6257610a6261123c565b016020015160f81c90505f85610a79866002611211565b81518110610a8957610a8961123c565b016020015160f81c90505f86610aa0876003611211565b81518110610ab057610ab061123c565b016020015160f81c9050609f60ff8416148015610ad057508160ff16608f145b8015610aef575060bb8160ff1610158015610aef575060bf8160ff1611155b80610b1a57508260ff16609f148015610b0b57508160ff1660a4145b8015610b1a57508060ff1660b0145b15610b2c576001945050505050610937565b5050505b8060ff1660ef148015610b4d57508351610b4b846002611211565b105b15610bca575f84610b5f856001611211565b81518110610b6f57610b6f61123c565b016020015160f81c90505f85610b86866002611211565b81518110610b9657610b9661123c565b016020015160f81c905060b860ff8316148015610bb657508060ff16608f145b15610bc75760019350505050610937565b50505b8060ff1660e2148015610be757508351610be5846002611211565b105b15610c64575f84610bf9856001611211565b81518110610c0957610c0961123c565b016020015160f81c90505f85610c20866002611211565b81518110610c3057610c3061123c565b016020015160f81c9050608360ff8316148015610c5057508060ff1660a3145b15610c615760019350505050610937565b50505b8060ff1660f3148015610c8157508351610c7f846002611211565b105b8015610cbb575083610c94846001611211565b81518110610ca457610ca461123c565b6020910101516001600160f81b031916600560fd1b145b8015610cf55750600160ff1b84610cd3856002611211565b81518110610ce357610ce361123c565b01602001516001600160f81b03191610155b8015610d2f5750609f60f81b84610d0d856002611211565b81518110610d1d57610d1d61123c565b01602001516001600160f81b03191611155b15610d3e576001915050610937565b505f9392505050565b5f828281518110610d5a57610d5a61123c565b6020910101516001600160f81b031916607160f91b148015610d8657508251610d84836002611211565b105b8015610dc0575082610d99836001611211565b81518110610da957610da961123c565b6020910101516001600160f81b031916600160ff1b145b8015610dfa575082610dd3836002611211565b81518110610de357610de361123c565b6020910101516001600160f81b031916608d60f81b145b9392505050565b5f828281518110610e1457610e1461123c565b6020910101516001600160f81b031916600f60fc1b148015610e4057508251610e3e836003611211565b105b8015610e7a575082610e53836001611211565b81518110610e6357610e6361123c565b6020910101516001600160f81b031916609f60f81b145b8015610dfa575082610e8d836002611211565b81518110610e9d57610e9d61123c565b6020910101516001600160f81b031916608760f81b149392505050565b5f5f83601f840112610eca575f5ffd5b50813567ffffffffffffffff811115610ee1575f5ffd5b602083019150836020828501011115610ef8575f5ffd5b9250929050565b5f5f5f5f60608587031215610f12575f5ffd5b843567ffffffffffffffff811115610f28575f5ffd5b610f3487828801610eba565b90989097506020870135966040013595509350505050565b5f60208284031215610f5c575f5ffd5b5035919050565b5f5f5f5f5f60808688031215610f77575f5ffd5b853567ffffffffffffffff811115610f8d575f5ffd5b610f9988828901610eba565b9096509450506020860135925060408601359150606086013560028110610fbe575f5ffd5b809150509295509295909350565b5f60208284031215610fdc575f5ffd5b81356001600160a01b0381168114610dfa575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761093757610937611006565b5f8261104b57634e487b7160e01b5f52601260045260245ffd5b500490565b805167ffffffffffffffff81168114611067575f5ffd5b919050565b8051600381900b8114611067575f5ffd5b5f608082840312801561108e575f5ffd5b506040516080810167ffffffffffffffff811182821017156110be57634e487b7160e01b5f52604160045260245ffd5b6040528251600781900b81146110d2575f5ffd5b81526110e060208401611050565b60208201526110f16040840161106c565b60408201526060928301519281019290925250919050565b5f8260030b8260030b028060030b915080821461093557610935611006565b6001815b60018411156104a45780850481111561114757611147611006565b600184161561115557908102905b60019390931c92800261112c565b5f8261117157506001610937565b8161117d57505f610937565b8160018114611193576002811461119d576111b9565b6001915050610937565b60ff8411156111ae576111ae611006565b50506001821b610937565b5060208310610133831016604e8410600b84101617156111dc575081810a610937565b6111e85f198484611128565b805f19048211156111fb576111fb611006565b029392505050565b5f610dfa60ff841683611163565b8082018082111561093757610937611006565b5f6001820161123557611235611006565b5060010190565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220ec6bcb0c686ecb4d41ba403c5d12ebbae2354682e6f945689060e52cfb22870564736f6c634300081c00330000000000000000000000002880ab155794e7179c9ee2e38200202908c17b43962088abcfdbdb6e30db2e340c8cf887d9efb311b1f2f17b155a63dbb6d40265

Deployed Bytecode

0x608060405234801561000f575f5ffd5b5060043610610085575f3560e01c8063c92e996c11610058578063c92e996c146100f3578063d59ff8e014610106578063ee22fd6f14610119578063f2fde38b1461012c575f5ffd5b806350e9a715146100895780635c635a75146100bc578063715018a6146100d15780638da5cb5b146100d9575b5f5ffd5b61009c610097366004610eff565b61013f565b604080518251815260209283015192810192909252015b60405180910390f35b6100cf6100ca366004610f4c565b610168565b005b6100cf6101ac565b5f546040516001600160a01b0390911681526020016100b3565b61009c610101366004610f63565b6101bf565b6100cf610114366004610f4c565b61022f565b6100cf610127366004610fcc565b61026c565b6100cf61013a366004610fcc565b6102c2565b604080518082019091525f808252602082015261015f858585855f6101bf565b95945050505050565b610170610304565b60038190556040518181527ffe213f423cc686af7a64b44eb9810dfbc91529f12a14cecb255809099ad5f062906020015b60405180910390a150565b6101b4610304565b6101bd5f610330565b565b604080518082019091525f80825260208201525f5f6101df88888761037f565b90925090505f8460018111156101f7576101f7610ff2565b0361021357610205826104ac565b9150610210816104ac565b90505b6040805180820190915291825260208201529695505050505050565b610237610304565b60028190556040518181527fcd7cc45211e8d4eb32f137374a9d21805455c5d5b169ebf0b519652be224ffbc906020016101a1565b610274610304565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f46b42f4e8500803ed21911081f9fad2d1b466f75d95552247151cc9fed56e68d906020016101a1565b6102ca610304565b6001600160a01b0381166102f857604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61030181610330565b50565b5f546001600160a01b031633146101bd5760405163118cdaa760e01b81523360048201526024016102ef565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5f5f6103c086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506105b592505050565b90505f816001036103d65750631908b100610416565b816002036103e957506310089d40610416565b816003036103fc5750630a12bc40610416565b8160040361040f575063041cdb40610416565b5063017d78405b5f6301e13380861161042957505f610466565b6303c26700861161043c57506005610466565b6305a39a80861161044f5750600f610466565b630784ce0086116104625750601e610466565b5060285b5f6301e13380610476888561101a565b6104809190611031565b90505f606461048f848461101a565b6104999190611031565b919650909450505050505b935093915050565b60015460025460405163052571af60e51b81526004810191909152601e60248201525f9182916001600160a01b039091169063a4ae35e090604401608060405180830381865afa158015610502573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610526919061107d565b90505f81604001515f1961053a9190611109565b61054590600a611203565b82516105639067ffffffffffffffff16670de0b6b3a764000061101a565b61056d9190611031565b90505f610587826c0c9f2c9cd04674edea40000000611031565b905060035481116105ab57604051636dddf41160e11b815260040160405180910390fd5b61015f818661101a565b80515f908290829081905b808210156106fb575f6105d38584610705565b90505f6105e08285611211565b90505b82811080156105f757506105f7868261093d565b15610617576106068682610705565b6106109082611211565b90506105e3565b828110801561062b575061062b8682610d47565b156106a25761063a8682610705565b6106449082611211565b9050828110156106a2575f6106598783610705565b90506106658183611211565b91505b838210801561067c575061067c878361093d565b1561069c5761068b8783610705565b6106959083611211565b9150610668565b50610617565b6106ac8685610e01565b80156106b757508281105b80156106c857506106c88682610e01565b156106e4576106d78682610705565b6106e19082611211565b90505b846106ee81611224565b95505080935050506105c0565b5090949350505050565b5f5f8383815181106107195761071961123c565b016020015160f81c90506080811015610736576001915050610937565b60e08160ff1610801561075357508351610751846001611211565b105b801561078e575083610766846001611211565b815181106107765761077661123c565b602001015160f81c60f81b60f81c60c01660ff166080145b1561079d576002915050610937565b60f08160ff161080156107ba575083516107b8846002611211565b105b80156107f55750836107cd846001611211565b815181106107dd576107dd61123c565b602001015160f81c60f81b60f81c60c01660ff166080145b8015610830575083610808846002611211565b815181106108185761081861123c565b602001015160f81c60f81b60f81c60c01660ff166080145b1561083f576003915050610937565b60f88160ff1610801561085c5750835161085a846003611211565b105b801561089757508361086f846001611211565b8151811061087f5761087f61123c565b602001015160f81c60f81b60f81c60c01660ff166080145b80156108d25750836108aa846002611211565b815181106108ba576108ba61123c565b602001015160f81c60f81b60f81c60c01660ff166080145b801561090d5750836108e5846003611211565b815181106108f5576108f561123c565b602001015160f81c60f81b60f81c60c01660ff166080145b1561091c576004915050610937565b6040516361709aff60e11b815260040160405180910390fd5b505b92915050565b5f5f8383815181106109515761095161123c565b016020015160f81c905060cc81148061096d57508060ff1660cd145b1561097c576001915050610937565b8060ff1660e214801561099957508351610997846002611211565b105b15610a23575f846109ab856001611211565b815181106109bb576109bb61123c565b016020015160f81c90505f856109d2866002611211565b815181106109e2576109e261123c565b016020015160f81c9050608060ff8316148015610a0f57508060ff16608f1480610a0f57508060ff16608e145b15610a205760019350505050610937565b50505b8060ff1660f0148015610a4057508351610a3e846003611211565b105b15610b30575f84610a52856001611211565b81518110610a6257610a6261123c565b016020015160f81c90505f85610a79866002611211565b81518110610a8957610a8961123c565b016020015160f81c90505f86610aa0876003611211565b81518110610ab057610ab061123c565b016020015160f81c9050609f60ff8416148015610ad057508160ff16608f145b8015610aef575060bb8160ff1610158015610aef575060bf8160ff1611155b80610b1a57508260ff16609f148015610b0b57508160ff1660a4145b8015610b1a57508060ff1660b0145b15610b2c576001945050505050610937565b5050505b8060ff1660ef148015610b4d57508351610b4b846002611211565b105b15610bca575f84610b5f856001611211565b81518110610b6f57610b6f61123c565b016020015160f81c90505f85610b86866002611211565b81518110610b9657610b9661123c565b016020015160f81c905060b860ff8316148015610bb657508060ff16608f145b15610bc75760019350505050610937565b50505b8060ff1660e2148015610be757508351610be5846002611211565b105b15610c64575f84610bf9856001611211565b81518110610c0957610c0961123c565b016020015160f81c90505f85610c20866002611211565b81518110610c3057610c3061123c565b016020015160f81c9050608360ff8316148015610c5057508060ff1660a3145b15610c615760019350505050610937565b50505b8060ff1660f3148015610c8157508351610c7f846002611211565b105b8015610cbb575083610c94846001611211565b81518110610ca457610ca461123c565b6020910101516001600160f81b031916600560fd1b145b8015610cf55750600160ff1b84610cd3856002611211565b81518110610ce357610ce361123c565b01602001516001600160f81b03191610155b8015610d2f5750609f60f81b84610d0d856002611211565b81518110610d1d57610d1d61123c565b01602001516001600160f81b03191611155b15610d3e576001915050610937565b505f9392505050565b5f828281518110610d5a57610d5a61123c565b6020910101516001600160f81b031916607160f91b148015610d8657508251610d84836002611211565b105b8015610dc0575082610d99836001611211565b81518110610da957610da961123c565b6020910101516001600160f81b031916600160ff1b145b8015610dfa575082610dd3836002611211565b81518110610de357610de361123c565b6020910101516001600160f81b031916608d60f81b145b9392505050565b5f828281518110610e1457610e1461123c565b6020910101516001600160f81b031916600f60fc1b148015610e4057508251610e3e836003611211565b105b8015610e7a575082610e53836001611211565b81518110610e6357610e6361123c565b6020910101516001600160f81b031916609f60f81b145b8015610dfa575082610e8d836002611211565b81518110610e9d57610e9d61123c565b6020910101516001600160f81b031916608760f81b149392505050565b5f5f83601f840112610eca575f5ffd5b50813567ffffffffffffffff811115610ee1575f5ffd5b602083019150836020828501011115610ef8575f5ffd5b9250929050565b5f5f5f5f60608587031215610f12575f5ffd5b843567ffffffffffffffff811115610f28575f5ffd5b610f3487828801610eba565b90989097506020870135966040013595509350505050565b5f60208284031215610f5c575f5ffd5b5035919050565b5f5f5f5f5f60808688031215610f77575f5ffd5b853567ffffffffffffffff811115610f8d575f5ffd5b610f9988828901610eba565b9096509450506020860135925060408601359150606086013560028110610fbe575f5ffd5b809150509295509295909350565b5f60208284031215610fdc575f5ffd5b81356001600160a01b0381168114610dfa575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761093757610937611006565b5f8261104b57634e487b7160e01b5f52601260045260245ffd5b500490565b805167ffffffffffffffff81168114611067575f5ffd5b919050565b8051600381900b8114611067575f5ffd5b5f608082840312801561108e575f5ffd5b506040516080810167ffffffffffffffff811182821017156110be57634e487b7160e01b5f52604160045260245ffd5b6040528251600781900b81146110d2575f5ffd5b81526110e060208401611050565b60208201526110f16040840161106c565b60408201526060928301519281019290925250919050565b5f8260030b8260030b028060030b915080821461093557610935611006565b6001815b60018411156104a45780850481111561114757611147611006565b600184161561115557908102905b60019390931c92800261112c565b5f8261117157506001610937565b8161117d57505f610937565b8160018114611193576002811461119d576111b9565b6001915050610937565b60ff8411156111ae576111ae611006565b50506001821b610937565b5060208310610133831016604e8410600b84101617156111dc575081810a610937565b6111e85f198484611128565b805f19048211156111fb576111fb611006565b029392505050565b5f610dfa60ff841683611163565b8082018082111561093757610937611006565b5f6001820161123557611235611006565b5060010190565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220ec6bcb0c686ecb4d41ba403c5d12ebbae2354682e6f945689060e52cfb22870564736f6c634300081c0033

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

0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b43962088abcfdbdb6e30db2e340c8cf887d9efb311b1f2f17b155a63dbb6d40265

-----Decoded View---------------
Arg [0] : pyth_ (address): 0x2880aB155794e7179c9eE2e38200202908C17B43
Arg [1] : beraUsdPythPriceFeedId_ (bytes32): 0x962088abcfdbdb6e30db2e340c8cf887d9efb311b1f2f17b155a63dbb6d40265

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b43
Arg [1] : 962088abcfdbdb6e30db2e340c8cf887d9efb311b1f2f17b155a63dbb6d40265


Deployed Bytecode Sourcemap

450:5431:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2256:179;;;;;;:::i;:::-;;:::i;:::-;;;;1227:13:9;;1209:32;;1297:4;1285:17;;;1279:24;1257:20;;;1250:54;;;;1182:18;2256:179:7;;;;;;;;1451:163;;;;;;:::i;:::-;;:::i;:::-;;2293:101:1;;;:::i;1638:85::-;1684:7;1710:6;1638:85;;-1:-1:-1;;;;;1710:6:1;;;1692:51:9;;1680:2;1665:18;1638:85:1;1546:203:9;2781:572:7;;;;;;:::i;:::-;;:::i;1620:217::-;;;;;;:::i;:::-;;:::i;1843:116::-;;;;;;:::i;:::-;;:::i;2543:215:1:-;;;;;;:::i;:::-;;:::i;2256:179:7:-;-1:-1:-1;;;;;;;;;;;;;;;;;2383:45:7;2389:5;;2396:7;2405:8;2415:12;2383:5;:45::i;:::-;2376:52;2256:179;-1:-1:-1;;;;;2256:179:7:o;1451:163::-;1531:13:1;:11;:13::i;:::-;1530::7::1;:30:::0;;;1575:32:::1;::::0;3189:25:9;;;1575:32:7::1;::::0;3177:2:9;3162:18;1575:32:7::1;;;;;;;;1451:163:::0;:::o;2293:101:1:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;2781:572:7:-;-1:-1:-1;;;;;;;;;;;;;;;;;3009:17:7;3028:16;3048:35;3067:5;;3074:8;3048:18;:35::i;:::-;3008:75;;-1:-1:-1;3008:75:7;-1:-1:-1;3178:12:7;3167:7;:23;;;;;;;;:::i;:::-;;3163:140;;3218:25;3233:9;3218:14;:25::i;:::-;3206:37;;3268:24;3283:8;3268:14;:24::i;:::-;3257:35;;3163:140;3320:26;;;;;;;;;;;;;;;;;2781:572;-1:-1:-1;;;;;;2781:572:7:o;1620:217::-;1531:13:1;:11;:13::i;:::-;1717:22:7::1;:48:::0;;;1780:50:::1;::::0;3189:25:9;;;1780:50:7::1;::::0;3177:2:9;3162:18;1780:50:7::1;3043:177:9::0;1843:116:7;1531:13:1;:11;:13::i;:::-;1904:4:7::1;:19:::0;;-1:-1:-1;;;;;;1904:19:7::1;-1:-1:-1::0;;;;;1904:19:7;::::1;::::0;;::::1;::::0;;;1938:14:::1;::::0;1692:51:9;;;1938:14:7::1;::::0;1680:2:9;1665:18;1938:14:7::1;1546:203:9::0;2543:215:1;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:1;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:1;;2700:1:::1;2672:31;::::0;::::1;1692:51:9::0;1665:18;;2672:31:1::1;;;;;;;;2623:91;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;1796:162::-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:1;735:10:2;1855:23:1;1851:101;;1901:40;;-1:-1:-1;;;1901:40:1;;735:10:2;1901:40:1;;;1692:51:9;1665:18;;1901:40:1;1546:203:9;2912:187:1;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:1;;;-1:-1:-1;;;;;;3020:17:1;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;3624:1304:7:-;3740:12;3754:16;3786:18;3807:14;:5;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3807:12:7;;-1:-1:-1;;;3807:14:7:i;:::-;3786:35;;3832:20;3914:10;3928:1;3914:15;3910:464;;-1:-1:-1;3960:11:7;3910:464;;;4012:10;4026:1;4012:15;4008:366;;-1:-1:-1;4058:11:7;4008:366;;;4111:10;4125:1;4111:15;4107:267;;-1:-1:-1;4157:11:7;4107:267;;;4210:10;4224:1;4210:15;4206:168;;-1:-1:-1;4256:10:7;4206:168;;;-1:-1:-1;4332:10:7;4206:168;4384:17;4427:8;4415;:20;4411:333;;-1:-1:-1;4463:1:7;4411:333;;;4497:12;4485:8;:24;4481:263;;-1:-1:-1;4537:1:7;4481:263;;;4571:12;4559:8;:24;4555:189;;-1:-1:-1;4611:2:7;4555:189;;;4646:12;4634:8;:24;4630:114;;-1:-1:-1;4686:2:7;4630:114;;;-1:-1:-1;4731:2:7;4630:114;4754:18;4803:8;4776:23;4791:8;4776:12;:23;:::i;:::-;4775:36;;;;:::i;:::-;4754:57;-1:-1:-1;4821:22:7;4873:3;4847:22;4860:9;4754:57;4847:22;:::i;:::-;4846:30;;;;:::i;:::-;4894:10;;-1:-1:-1;4821:55:7;;-1:-1:-1;;;;;3624:1304:7;;;;;;;:::o;5140:739::-;5264:4;;5289:22;;5264:52;;-1:-1:-1;;;5264:52:7;;;;;4249:25:9;;;;5313:2:7;4290:18:9;;;4283:34;5203:7:7;;;;-1:-1:-1;;;;;5264:4:7;;;;:24;;4222:18:9;;5264:52:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5222:94;;5327:27;5449:14;:19;;;-1:-1:-1;;5444:24:7;;;;:::i;:::-;5425:45;;:2;:45;:::i;:::-;5385:20;;5370:50;;:37;;5411:8;5370:50;:::i;:::-;5369:102;;;;:::i;:::-;5327:144;-1:-1:-1;5546:22:7;5571:47;5327:144;5572:23;5571:47;:::i;:::-;5546:72;;5796:13;;5778:14;:31;5774:57;;5818:13;;-1:-1:-1;;;5818:13:7;;;;;;;;;;;5774:57;5849:23;5858:14;5849:6;:23;:::i;450:1830:8:-;632:15;;506:7;;555:1;;506:7;;;;658:1595;669:6;665:1;:10;658:1595;;;691:15;709:24;721:8;731:1;709:11;:24::i;:::-;691:42;-1:-1:-1;747:13:8;763:11;691:42;763:1;:11;:::i;:::-;747:27;;886:140;901:6;893:5;:14;:61;;;;;911:43;938:8;948:5;911:26;:43::i;:::-;886:140;;;983:28;995:8;1005:5;983:11;:28::i;:::-;974:37;;;;:::i;:::-;;;886:140;;;1142:6;1134:5;:14;:53;;;;;1152:35;1171:8;1181:5;1152:18;:35::i;:::-;1127:740;;;1253:28;1265:8;1275:5;1253:11;:28::i;:::-;1244:37;;;;:::i;:::-;;;1368:6;1360:5;:14;1356:497;;;1398:19;1420:28;1432:8;1442:5;1420:11;:28::i;:::-;1398:50;-1:-1:-1;1470:20:8;1398:50;1470:20;;:::i;:::-;;;1601:156;1616:6;1608:5;:14;:61;;;;;1626:43;1653:8;1663:5;1626:26;:43::i;:::-;1601:156;;;1706:28;1718:8;1728:5;1706:11;:28::i;:::-;1697:37;;;;:::i;:::-;;;1601:156;;;1376:399;1127:740;;1356:497;1967:33;1988:8;1998:1;1967:20;:33::i;:::-;:51;;;;;2012:6;2004:5;:14;1967:51;:92;;;;;2022:37;2043:8;2053:5;2022:20;:37::i;:::-;1963:168;;;2088:28;2100:8;2110:5;2088:11;:28::i;:::-;2079:37;;;;:::i;:::-;;;1963:168;2214:5;;;;:::i;:::-;;;;2237;2233:9;;677:1576;;658:1595;;;-1:-1:-1;2270:3:8;;450:1830;-1:-1:-1;;;;450:1830:8:o;2369:956::-;2450:7;2469;2485:8;2494:5;2485:15;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;2520:4:8;2516:8;;2512:807;;;2547:1;2540:8;;;;;2512:807;2601:4;2597:1;:8;;;:39;;;;-1:-1:-1;2621:15:8;;2609:9;:5;2617:1;2609:9;:::i;:::-;:27;2597:39;:84;;;;-1:-1:-1;2646:8:8;2655:9;:5;2663:1;2655:9;:::i;:::-;2646:19;;;;;;;;:::i;:::-;;;;;;;;;2640:26;;2669:4;2640:33;:41;;2677:4;2640:41;2597:84;2593:726;;;2704:1;2697:8;;;;;2593:726;2763:4;2759:1;:8;;;:39;;;;-1:-1:-1;2783:15:8;;2771:9;:5;2779:1;2771:9;:::i;:::-;:27;2759:39;:84;;;;-1:-1:-1;2808:8:8;2817:9;:5;2825:1;2817:9;:::i;:::-;2808:19;;;;;;;;:::i;:::-;;;;;;;;;2802:26;;2831:4;2802:33;:41;;2839:4;2802:41;2759:84;:145;;;;-1:-1:-1;2869:8:8;2878:9;:5;2886:1;2878:9;:::i;:::-;2869:19;;;;;;;;:::i;:::-;;;;;;;;;2863:26;;2892:4;2863:33;:41;;2900:4;2863:41;2759:145;2742:577;;;2936:1;2929:8;;;;;2742:577;2995:4;2991:1;:8;;;:39;;;;-1:-1:-1;3015:15:8;;3003:9;:5;3011:1;3003:9;:::i;:::-;:27;2991:39;:84;;;;-1:-1:-1;3040:8:8;3049:9;:5;3057:1;3049:9;:::i;:::-;3040:19;;;;;;;;:::i;:::-;;;;;;;;;3034:26;;3063:4;3034:33;:41;;3071:4;3034:41;2991:84;:145;;;;-1:-1:-1;3101:8:8;3110:9;:5;3118:1;3110:9;:::i;:::-;3101:19;;;;;;;;:::i;:::-;;;;;;;;;3095:26;;3124:4;3095:33;:41;;3132:4;3095:41;2991:145;:190;;;;-1:-1:-1;3146:8:8;3155:9;:5;3163:1;3155:9;:::i;:::-;3146:19;;;;;;;;:::i;:::-;;;;;;;;;3140:26;;3169:4;3140:33;:41;;3177:4;3140:41;2991:190;2974:345;;;3213:1;3206:8;;;;;2974:345;3291:17;;-1:-1:-1;;;3291:17:8;;;;;;;;;;;2974:345;2459:866;2369:956;;;;;:::o;3760:2267::-;3856:4;3872:7;3888:8;3897:5;3888:15;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;3995:4:8;3990:9;;;:22;;;4003:1;:9;;4008:4;4003:9;3990:22;3986:64;;;4035:4;4028:11;;;;;3986:64;4115:1;:9;;4120:4;4115:9;:40;;;;-1:-1:-1;4140:15:8;;4128:9;:5;4136:1;4128:9;:::i;:::-;:27;4115:40;4111:322;;;4171:8;4188;4197:9;:5;4205:1;4197:9;:::i;:::-;4188:19;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;4222:8:8;4239;4248:9;:5;4256:1;4248:9;:::i;:::-;4239:19;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;4343:4:8;4233:26;4337:10;;;:40;;;;;4352:2;:10;;4358:4;4352:10;:24;;;;4366:2;:10;;4372:4;4366:10;4352:24;4333:90;;;4404:4;4397:11;;;;;;;4333:90;4157:276;;4111:322;4511:1;:9;;4516:4;4511:9;:40;;;;-1:-1:-1;4536:15:8;;4524:9;:5;4532:1;4524:9;:::i;:::-;:27;4511:40;4507:551;;;4567:8;4584;4593:9;:5;4601:1;4593:9;:::i;:::-;4584:19;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;4618:8:8;4635;4644:9;:5;4652:1;4644:9;:::i;:::-;4635:19;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;4669:8:8;4686;4695:9;:5;4703:1;4695:9;:::i;:::-;4686:19;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;4817:4:8;4680:26;4811:10;;;:24;;;;;4825:2;:10;;4831:4;4825:10;4811:24;:54;;;;;4846:4;4840:2;:10;;;;:24;;;;;4860:4;4854:2;:10;;;;4840:24;4810:143;;;;4914:2;:10;;4920:4;4914:10;:24;;;;;4928:2;:10;;4934:4;4928:10;4914:24;:38;;;;;4942:2;:10;;4948:4;4942:10;4914:38;4789:259;;;5029:4;5022:11;;;;;;;;4789:259;4553:505;;;4507:551;5124:1;:9;;5129:4;5124:9;:40;;;;-1:-1:-1;5149:15:8;;5137:9;:5;5145:1;5137:9;:::i;:::-;:27;5124:40;5120:246;;;5180:8;5197;5206:9;:5;5214:1;5206:9;:::i;:::-;5197:19;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;5231:8:8;5248;5257:9;:5;5265:1;5257:9;:::i;:::-;5248:19;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;5292:4:8;5242:26;5286:10;;;:24;;;;;5300:2;:10;;5306:4;5300:10;5286:24;5282:74;;;5337:4;5330:11;;;;;;;5282:74;5166:200;;5120:246;5437:1;:9;;5442:4;5437:9;:40;;;;-1:-1:-1;5462:15:8;;5450:9;:5;5458:1;5450:9;:::i;:::-;:27;5437:40;5433:246;;;5493:8;5510;5519:9;:5;5527:1;5519:9;:::i;:::-;5510:19;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;5544:8:8;5561;5570:9;:5;5578:1;5570:9;:::i;:::-;5561:19;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;5605:4:8;5555:26;5599:10;;;:24;;;;;5613:2;:10;;5619:4;5613:10;5599:24;5595:74;;;5650:4;5643:11;;;;;;;5595:74;5479:200;;5433:246;5802:1;:9;;5807:4;5802:9;:40;;;;-1:-1:-1;5827:15:8;;5815:9;:5;5823:1;5815:9;:::i;:::-;:27;5802:40;:71;;;;-1:-1:-1;5846:8:8;5855:9;:5;5863:1;5855:9;:::i;:::-;5846:19;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;5846:19:8;-1:-1:-1;;;5846:27:8;5802:71;:102;;;;-1:-1:-1;;;;5877:8:8;5886:9;:5;5894:1;5886:9;:::i;:::-;5877:19;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;5877:19:8;:27;;5802:102;:149;;;;-1:-1:-1;;;;5924:8:8;5933:9;:5;5941:1;5933:9;:::i;:::-;5924:19;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;5924:19:8;:27;;5802:149;5785:213;;;5983:4;5976:11;;;;;5785:213;-1:-1:-1;6015:5:8;;3760:2267;-1:-1:-1;;;3760:2267:8:o;3408:274::-;3496:4;3533:8;3542:5;3533:15;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3533:15:8;-1:-1:-1;;;3533:23:8;:54;;;;-1:-1:-1;3572:15:8;;3560:9;:5;3568:1;3560:9;:::i;:::-;:27;3533:54;:85;;;;-1:-1:-1;3591:8:8;3600:9;:5;3608:1;3600:9;:::i;:::-;3591:19;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3591:19:8;-1:-1:-1;;;3591:27:8;3533:85;:132;;;;-1:-1:-1;3638:8:8;3647:9;:5;3655:1;3647:9;:::i;:::-;3638:19;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3638:19:8;-1:-1:-1;;;3638:27:8;3533:132;3512:163;3408:274;-1:-1:-1;;;3408:274:8:o;6127:276::-;6217:4;6254:8;6263:5;6254:15;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;6254:15:8;-1:-1:-1;;;6254:23:8;:54;;;;-1:-1:-1;6293:15:8;;6281:9;:5;6289:1;6281:9;:::i;:::-;:27;6254:54;:85;;;;-1:-1:-1;6312:8:8;6321:9;:5;6329:1;6321:9;:::i;:::-;6312:19;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;6312:19:8;-1:-1:-1;;;6312:27:8;6254:85;:132;;;;-1:-1:-1;6359:8:8;6368:9;:5;6376:1;6368:9;:::i;:::-;6359:19;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;6359:19:8;-1:-1:-1;;;6359:27:8;;6127:276;-1:-1:-1;;;6127:276:8:o;14:348:9:-;66:8;76:6;130:3;123:4;115:6;111:17;107:27;97:55;;148:1;145;138:12;97:55;-1:-1:-1;171:20:9;;214:18;203:30;;200:50;;;246:1;243;236:12;200:50;283:4;275:6;271:17;259:29;;335:3;328:4;319:6;311;307:19;303:30;300:39;297:59;;;352:1;349;342:12;297:59;14:348;;;;;:::o;367:645::-;456:6;464;472;480;533:2;521:9;512:7;508:23;504:32;501:52;;;549:1;546;539:12;501:52;589:9;576:23;622:18;614:6;611:30;608:50;;;654:1;651;644:12;608:50;693:59;744:7;735:6;724:9;720:22;693:59;:::i;:::-;771:8;;667:85;;-1:-1:-1;875:2:9;860:18;;847:32;;976:2;961:18;948:32;;-1:-1:-1;367:645:9;-1:-1:-1;;;;367:645:9:o;1315:226::-;1374:6;1427:2;1415:9;1406:7;1402:23;1398:32;1395:52;;;1443:1;1440;1433:12;1395:52;-1:-1:-1;1488:23:9;;1315:226;-1:-1:-1;1315:226:9:o;1754:808::-;1864:6;1872;1880;1888;1896;1949:3;1937:9;1928:7;1924:23;1920:33;1917:53;;;1966:1;1963;1956:12;1917:53;2006:9;1993:23;2039:18;2031:6;2028:30;2025:50;;;2071:1;2068;2061:12;2025:50;2110:59;2161:7;2152:6;2141:9;2137:22;2110:59;:::i;:::-;2188:8;;-1:-1:-1;2084:85:9;-1:-1:-1;;2292:2:9;2277:18;;2264:32;;-1:-1:-1;2393:2:9;2378:18;;2365:32;;-1:-1:-1;2475:2:9;2460:18;;2447:32;2510:1;2498:14;;2488:42;;2526:1;2523;2516:12;2488:42;2549:7;2539:17;;;1754:808;;;;;;;;:::o;2752:286::-;2811:6;2864:2;2852:9;2843:7;2839:23;2835:32;2832:52;;;2880:1;2877;2870:12;2832:52;2906:23;;-1:-1:-1;;;;;2958:31:9;;2948:42;;2938:70;;3004:1;3001;2994:12;3225:127;3286:10;3281:3;3277:20;3274:1;3267:31;3317:4;3314:1;3307:15;3341:4;3338:1;3331:15;3539:127;3600:10;3595:3;3591:20;3588:1;3581:31;3631:4;3628:1;3621:15;3655:4;3652:1;3645:15;3671:168;3744:9;;;3775;;3792:15;;;3786:22;;3772:37;3762:71;;3813:18;;:::i;3844:217::-;3884:1;3910;3900:132;;3954:10;3949:3;3945:20;3942:1;3935:31;3989:4;3986:1;3979:15;4017:4;4014:1;4007:15;3900:132;-1:-1:-1;4046:9:9;;3844:217::o;4328:175::-;4406:13;;4459:18;4448:30;;4438:41;;4428:69;;4493:1;4490;4483:12;4428:69;4328:175;;;:::o;4508:164::-;4585:13;;4638:1;4627:20;;;4617:31;;4607:59;;4662:1;4659;4652:12;4677:964;4770:6;4830:3;4818:9;4809:7;4805:23;4801:33;4846:2;4843:22;;;4861:1;4858;4851:12;4843:22;-1:-1:-1;4910:2:9;4904:9;4952:3;4940:16;;4986:18;4971:34;;5007:22;;;4968:62;4965:185;;;5072:10;5067:3;5063:20;5060:1;5053:31;5107:4;5104:1;5097:15;5135:4;5132:1;5125:15;4965:185;5166:2;5159:22;5222:16;;5278:1;5267:20;;;5257:31;;5247:59;;5302:1;5299;5292:12;5247:59;5315:21;;5369:48;5413:2;5398:18;;5369:48;:::i;:::-;5364:2;5356:6;5352:15;5345:73;5451:47;5494:2;5483:9;5479:18;5451:47;:::i;:::-;5446:2;5434:15;;5427:72;5565:2;5550:18;;;5544:25;5585:15;;;5578:32;;;;-1:-1:-1;5438:6:9;4677:964;-1:-1:-1;4677:964:9:o;5646:237::-;5684:7;5761:1;5758;5747:16;5743:1;5740;5729:16;5725:39;5798:11;5795:1;5784:26;5773:37;;5841:11;5832:7;5829:24;5819:58;;5857:18;;:::i;5888:375::-;5976:1;5994:5;6008:249;6029:1;6019:8;6016:15;6008:249;;;6079:4;6074:3;6070:14;6064:4;6061:24;6058:50;;;6088:18;;:::i;:::-;6138:1;6128:8;6124:16;6121:49;;;6152:16;;;;6121:49;6235:1;6231:16;;;;;6191:15;;6008:249;;6268:902;6317:5;6347:8;6337:80;;-1:-1:-1;6388:1:9;6402:5;;6337:80;6436:4;6426:76;;-1:-1:-1;6473:1:9;6487:5;;6426:76;6518:4;6536:1;6531:59;;;;6604:1;6599:174;;;;6511:262;;6531:59;6561:1;6552:10;;6575:5;;;6599:174;6636:3;6626:8;6623:17;6620:43;;;6643:18;;:::i;:::-;-1:-1:-1;;6699:1:9;6685:16;;6758:5;;6511:262;;6857:2;6847:8;6844:16;6838:3;6832:4;6829:13;6825:36;6819:2;6809:8;6806:16;6801:2;6795:4;6792:12;6788:35;6785:77;6782:203;;;-1:-1:-1;6894:19:9;;;6970:5;;6782:203;7017:42;-1:-1:-1;;7042:8:9;7036:4;7017:42;:::i;:::-;7095:6;7091:1;7087:6;7083:19;7074:7;7071:32;7068:58;;;7106:18;;:::i;:::-;7144:20;;6268:902;-1:-1:-1;;;6268:902:9:o;7175:140::-;7233:5;7262:47;7303:4;7293:8;7289:19;7283:4;7262:47;:::i;7320:125::-;7385:9;;;7406:10;;;7403:36;;;7419:18;;:::i;7450:135::-;7489:3;7510:17;;;7507:43;;7530:18;;:::i;:::-;-1:-1:-1;7577:1:9;7566:13;;7450:135::o;7590:127::-;7651:10;7646:3;7642:20;7639:1;7632:31;7682:4;7679:1;7672:15;7706:4;7703:1;7696:15

Swarm Source

ipfs://ec6bcb0c686ecb4d41ba403c5d12ebbae2354682e6f945689060e52cfb228705

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.