false
false

Contract Address Details

0xff6ef7a431d3f70561a332385d25a09534b2579a

Contract Name
CutTerminusDiamond
Creator
0x4cbbe9ā€“5bb1f1 at 0xb1853cā€“74b365
Implementation
0x0000000000000000000000000000000000000000
Balance
0 Xai ( )
Tokens
Fetching tokens...
Transactions
0 Transactions
Transfers
0 Transfers
Gas Used
Fetching gas used...
Last Balance Update
44844349
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
CutTerminusDiamond




Optimization enabled
true
Compiler version
v0.8.19+commit.7dd6d404




Optimization runs
999999
EVM Version
paris




Verified at
2024-06-11T22:26:58.874945Z

src/implementation/CutTerminusDiamond.sol

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

import {CutDiamond} from '../../lib/@lagunagames/lg-diamond-template/src/diamond/CutDiamond.sol';
import {IERC20} from '../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol';
import {AccessBadgeDiamond} from '../../lib/@lagunagames/cu-common/src/implementations/AccessBadgeDiamond.sol';
import {ResourceLocatorGetterDiamond} from '../../lib/@lagunagames/cu-common/src/implementations/ResourceLocatorGetterDiamond.sol';

// import {IERC165} from '../../lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol';

/// @title Dummy "implementation" contract for LG Diamond interface for ERC-1967 compatibility
/// @dev adapted from https://github.com/zdenham/diamond-etherscan?tab=readme-ov-file
/// @dev This interface is used internally to call endpoints on a deployed diamond cluster.
contract CutTerminusDiamond is CutDiamond, AccessBadgeDiamond, ResourceLocatorGetterDiamond {

    event PoolMintBatch(
        uint256 indexed id,
        address indexed operator,
        address from,
        address[] toAddresses,
        uint256[] amounts
    );
    
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /// @notice This function sets the controller of LibTerminus
    /// @dev Only the contract owner can call this function
    function initializeTerminusDiamond() external {}

    /// @notice Create a new token pool
    /// @dev Only the controller can call this function
    /// @param capacity The maximum number of tokens that can be minted
    /// @param transferable Whether the tokens can be transferred
    /// @param burnable Whether the tokens can be burned
    /// @param poolURI The URI of the pool
    /// @return poolId The ID of the new pool
    function createPool(
        uint256 capacity,
        bool transferable,
        bool burnable,
        string calldata poolURI
    ) external returns (uint256 poolId) {}

    function setController(address newController) external {}

    function poolMintBatch(uint256 id, address[] memory toAddresses, uint256[] memory amounts) external {}

    function terminusController() external view returns (address) {}

    function paymentToken() external view returns (address) {}

    function setPaymentToken(address newPaymentToken) external {}

    function poolBasePrice() external view returns (uint256) {}

    function setPoolBasePrice(uint256 newBasePrice) external {}

    function withdrawPayments(address toAddress, uint256 amount) external {}

    function contractURI() external view returns (string memory) {}

    function setContractURI(string memory _contractURI) external {}

    function setURI(uint256 poolID, string memory poolURI) external {}

    function totalPools() external view returns (uint256) {}

    function setPoolController(uint256 poolID, address newController) external {}

    function terminusPoolController(uint256 poolID) external view returns (address) {}

    function terminusPoolCapacity(uint256 poolID) external view returns (uint256) {}

    function terminusPoolSupply(uint256 poolID) external view returns (uint256) {}

    function poolIsTransferable(uint256 poolID) external view returns (bool) {}

    function poolIsBurnable(uint256 poolID) external view returns (bool) {}

    function setPoolTransferable(uint256 poolID, bool transferable) external {}

    function setPoolBurnable(uint256 poolID, bool burnable) external {}

    function createSimplePool(uint256 _capacity) external returns (uint256) {}

    function createPoolV1(uint256 _capacity, bool _transferable, bool _burnable) external returns (uint256) {}

    function createPoolV2(
        uint256 _capacity,
        bool _transferable,
        bool _burnable,
        string memory poolURI
    ) external returns (uint256) {}

    function mint(address to, uint256 poolID, uint256 amount, bytes memory data) external {}

    function mintBatch(address to, uint256[] memory poolIDs, uint256[] memory amounts, bytes memory data) external {}

    function burn(address from, uint256 poolID, uint256 amount) external {}

    function uri(uint256 poolID) external view returns (string memory) {}

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256) {}

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids) external view returns (uint256[] memory) {}

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) external {}

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool) {}

    function isApprovedForPool(uint256 poolID, address operator) external view returns (bool) {}

    function approveForPool(uint256 poolID, address operator) external {}

    function unapproveForPool(uint256 poolID, address operator) external {}

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes memory data) external {}

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) external {}
}
        

lib/@lagunagames/lg-diamond-template/src/interfaces/IERC165.sol

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

/// @title ERC-165 Standard Interface Detection
/// @dev https://eips.ethereum.org/EIPS/eip-165
interface IERC165 {
    /// @notice Query if a contract implements an interface
    /// @param interfaceID The interface identifier, as specified in ERC-165
    /// @dev Interface identification is specified in ERC-165. This function
    ///  uses less than 30,000 gas.
    /// @return `true` if the contract implements `interfaceID` and
    ///  `interfaceID` is not 0xffffffff, `false` otherwise
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
}
          

lib/@lagunagames/cu-common/src/implementations/AccessBadgeDiamond.sol

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

/// @title Dummy "implementation" contract for LG Diamond interface for ERC-1967 compatibility
/// @dev adapted from https://github.com/zdenham/diamond-etherscan?tab=readme-ov-file
/// @dev This interface is used internally to call endpoints on a deployed diamond cluster.
contract AccessBadgeDiamond {
    /// @notice Returns the 1155 pool ID for a badge
    /// @param name The name of the badge (registered on this contract)
    /// @return poolId The pool ID for the badge, on the AccessControl contract
    function getPoolByName(string memory name) external view returns (uint256 poolId) {}

    /// @notice Assign a name to an 1155 pool on the AccessControl contract
    /// @dev Contract owner only
    /// @param name The name of the badge
    /// @param poolId The pool ID for the badge, on the AccessControl contract
    function setPoolName(uint256 poolId, string memory name) external {}

    /// @notice Throw an error if the sender does not have the required badge
    /// @param badge The name of the badge
    /// @custom:throws AccessBadgeRequired
    function requireBadge(string memory badge) external view {}

    /// @notice Throw an error if the sender does not have the required badge
    /// @param poolId The pool ID of the badge
    /// @custom:throws AccessTokenRequired
    function requireBadgeById(uint256 poolId) external view {}

    /// @notice Check if an address has a badge
    /// @param a The address to check
    /// @param badge The name of the badge
    /// @return true if the address has the badge
    function hasBadge(address a, string memory badge) external view returns (bool) {}

    /// @notice Check if an address has a badge
    /// @param a The address to check
    /// @param poolId The pool ID for the badge
    /// @return true if the address has the badge
    function hasBadgeById(address a, uint256 poolId) external view returns (bool) {}
}
          

lib/@lagunagames/cu-common/src/implementations/ResourceLocatorGetterDiamond.sol

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

/// @title Dummy "implementation" contract for LG Diamond interface for ERC-1967 compatibility
/// @dev adapted from https://github.com/zdenham/diamond-etherscan?tab=readme-ov-file
/// @dev This interface is used internally to call endpoints on a deployed diamond cluster.
contract ResourceLocatorGetterDiamond {
    /// @notice Returns the Unicorn contract address
    function unicornNFTAddress() public view returns (address) {}

    /// @notice Returns the Land contract address
    function landNFTAddress() public view returns (address) {}

    /// @notice Returns the Shadowcorn contract address
    function shadowcornNFTAddress() public view returns (address) {}

    /// @notice Returns the Gem contract address
    function gemNFTAddress() public view returns (address) {}

    /// @notice Returns the Ritual contract address
    function ritualNFTAddress() public view returns (address) {}

    /// @notice Returns the RBW Token contract address
    function rbwTokenAddress() public view returns (address) {}

    /// @notice Returns the CU Token contract address
    function cuTokenAddress() public view returns (address) {}

    /// @notice Returns the UNIM Token contract address
    function unimTokenAddress() public view returns (address) {}

    /// @notice Returns the WETH Token contract address
    function wethTokenAddress() public view returns (address) {}

    /// @notice Returns the Dark Mark Token contract address
    function darkMarkTokenAddress() public view returns (address) {}

    /// @notice Returns the Unicorn Items contract address
    function unicornItemsAddress() public view returns (address) {}

    /// @notice Returns the Shadowcorn Items contract address
    function shadowcornItemsAddress() public view returns (address) {}

    /// @notice Returns the Access Control Badge contract address
    function accessControlBadgeAddress() public view returns (address) {}

    /// @notice Returns the Game Bank contract address
    function gameBankAddress() public view returns (address) {}

    /// @notice Returns the Satellite Bank contract address
    function satelliteBankAddress() public view returns (address) {}

    /// @notice Returns the Player Profile contract address
    function playerProfileAddress() public view returns (address) {}

    /// @notice Returns the Shadow Forge contract address
    function shadowForgeAddress() public view returns (address) {}

    /// @notice Returns the Dark Forest contract address
    function darkForestAddress() public view returns (address) {}

    /// @notice Returns the Game Server SSS contract address
    function gameServerSSSAddress() public view returns (address) {}

    /// @notice Returns the Game Server Oracle contract address
    function gameServerOracleAddress() public view returns (address) {}

    /// @notice Returns the Testnet Debug Registry address
    /// @dev Available on testnet deployments only
    function testnetDebugRegistryAddress() external view returns (address) {}
}
          

lib/@lagunagames/lg-diamond-template/src/diamond/CutDiamond.sol

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

import {DiamondFragment} from '../implementation/DiamondFragment.sol';
import {DiamondCutFragment} from '../implementation/DiamondCutFragment.sol';
import {DiamondLoupeFragment} from '../implementation/DiamondLoupeFragment.sol';
import {DiamondOwnerFragment} from '../implementation/DiamondOwnerFragment.sol';
import {DiamondProxyFragment} from '../implementation/DiamondProxyFragment.sol';
import {SupportsInterfaceFragment} from '../implementation/SupportsInterfaceFragment.sol';

/// @title Cut Diamond
/// @notice This is a dummy "implementation" contract for ERC-1967 compatibility,
/// @notice this interface is used by block explorers to generate the UI interface.
/// @dev adapted from https://github.com/zdenham/diamond-etherscan?tab=readme-ov-file
contract CutDiamond is
    DiamondFragment,
    DiamondCutFragment,
    DiamondLoupeFragment,
    DiamondOwnerFragment,
    DiamondProxyFragment,
    SupportsInterfaceFragment
{

}
          

lib/@lagunagames/lg-diamond-template/src/implementation/DiamondCutFragment.sol

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

import {IDiamondCut} from '../interfaces/IDiamondCut.sol';

/// @title DiamondCutFacet Interface Fragment
/// @dev Dummy "implementation" contract for LG Diamond interface for ERC-1967 compatibility
/// @dev adapted from https://github.com/zdenham/diamond-etherscan?tab=readme-ov-file
contract DiamondCutFragment {
    error InvalidFacetCutAction(IDiamondCut.FacetCutAction action);

    /// @notice Emitted when facets are added or removed
    /// @dev ERC-2535
    event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);

    /// @notice Add/replace/remove any number of functions and optionally execute
    ///         a function with delegatecall
    /// @dev The LG implementation DOES NOT SUPPORT initializers!
    /// @param _diamondCut Contains the facet addresses and function selectors
    /// @param _init The address of the contract or facet to execute _calldata
    /// @param _calldata A function call, including function selector and arguments
    ///                  _calldata is executed with delegatecall on _init
    /// @custom:selector 0x1f931c1c == bytes4(keccak256("diamondCut((address,uint8,bytes4[])[],address,bytes)"))
    function diamondCut(
        IDiamondCut.FacetCut[] calldata _diamondCut,
        address _init,
        bytes calldata _calldata
    ) external {}

    /// @notice Add/replace/remove any number of functions and optionally execute
    ///         a function with delegatecall
    /// @dev This is a convenience implementation of the above
    /// @param _diamondCut Contains the facet addresses and function selectors
    /// @custom:selector 0xe57e69c6 == bytes4(keccak256("diamondCut((address,uint8,bytes4[])[])"))
    function diamondCut(IDiamondCut.FacetCut[] calldata _diamondCut) external {}

    /// @notice Removes one selector from the Diamond, using DiamondCut
    /// @param selector - The byte4 signature for a method selector to remove
    /// @custom:emits DiamondCut
    function cutSelector(bytes4 selector) external {}

    /// @notice Removes one selector from the Diamond, using removeFunction()
    /// @param selector - The byte4 signature for a method selector to remove
    function deleteSelector(bytes4 selector) external {}

    /// @notice Removes many selectors from the Diamond, using DiamondCut
    /// @param selectors - Array of byte4 signatures for method selectors to remove
    /// @custom:emits DiamondCut
    function cutSelectors(bytes4[] memory selectors) external {}

    /// @notice Removes many selectors from the Diamond, using removeFunctions()
    /// @param selectors - Array of byte4 signatures for method selectors to remove
    function deleteSelectors(bytes4[] memory selectors) external {}

    /// @notice Removes any selectors from the Diamond that come from a target
    /// @notice contract address, using DiamondCut.
    /// @param facet - The address of the Facet smart contract to remove
    /// @custom:emits DiamondCut
    function cutFacet(address facet) external {}
}
          

lib/@lagunagames/lg-diamond-template/src/implementation/DiamondFragment.sol

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

/// @title Diamond Interface Fragment
/// @dev Dummy "implementation" contract for LG Diamond interface for ERC-1967 compatibility
/// @dev adapted from https://github.com/zdenham/diamond-etherscan?tab=readme-ov-file
contract DiamondFragment {
    error FunctionDoesNotExist(bytes4 methodSelector);
    error DiamondAlreadyInitialized();
}
          

lib/@lagunagames/lg-diamond-template/src/implementation/DiamondLoupeFragment.sol

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

import {IDiamondLoupe} from '../interfaces/IDiamondLoupe.sol';

/// @title DiamondLoupe Facet Interface Fragment
/// @dev Dummy "implementation" contract for LG Diamond interface for ERC-1967 compatibility
/// @dev adapted from https://github.com/zdenham/diamond-etherscan?tab=readme-ov-file
contract DiamondLoupeFragment {
    /// @notice Gets all facets and their selectors.
    /// @return facets_ Facet
    function facets() external view returns (IDiamondLoupe.Facet[] memory facets_) {}

    /// @notice Gets all the function selectors provided by a facet.
    /// @param _facet The facet address.
    /// @return facetFunctionSelectors_
    function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_) {}

    /// @notice Get all the facet addresses used by a diamond.
    /// @return facetAddresses_
    function facetAddresses() external view returns (address[] memory facetAddresses_) {}

    /// @notice Gets the facet that supports the given selector.
    /// @dev If facet is not found return address(0).
    /// @param _functionSelector The function selector.
    /// @return facetAddress_ The facet address.
    function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_) {}
}
          

lib/@lagunagames/lg-diamond-template/src/implementation/DiamondOwnerFragment.sol

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

import {IERC173} from '../interfaces/IERC173.sol';

/// @title DiamondOwner Facet Interface Fragment
/// @title Dummy "implementation" contract for LG Diamond interface for ERC-1967 compatibility
/// @dev adapted from https://github.com/zdenham/diamond-etherscan?tab=readme-ov-file
contract DiamondOwnerFragment is IERC173 {
    error CallerIsNotContractOwner();

    // /// @notice This emits when ownership of a contract changes.
    // /// @dev ERC-173
    // event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /// @notice Emitted when the admin account has changed.
    /// @dev ERC-1967
    event AdminChanged(address previousAdmin, address newAdmin);

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

    /// @notice Set the address of the new owner of the contract
    /// @dev Set _newOwner to address(0) to renounce any ownership.
    /// @param _newOwner The address of the new owner of the contract
    /// @custom:emits OwnershipTransferred
    /// @custom:emits AdminChanged
    function transferOwnership(address _newOwner) external {}
}
          

lib/@lagunagames/lg-diamond-template/src/implementation/DiamondProxyFragment.sol

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

/// @title DiamondProxy Facet Interface Fragment
/// @title Dummy "implementation" contract for LG Diamond interface for ERC-1967 compatibility
/// @dev adapted from https://github.com/zdenham/diamond-etherscan?tab=readme-ov-file
contract DiamondProxyFragment {
    /// @notice Emitted when the implementation is upgraded.
    /// @dev ERC-1967
    event Upgraded(address indexed implementation);

    /// @notice Sets the "implementation" contract address
    /// @param _implementation The new implementation contract
    /// @custom:emits Upgraded
    function setImplementation(address _implementation) external {}

    /// @notice Get the dummy "implementation" contract address
    /// @return The dummy "implementation" contract address
    function implementation() external view returns (address) {}
}
          

lib/@lagunagames/lg-diamond-template/src/implementation/SupportsInterfaceFragment.sol

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

import {LibSupportsInterface} from '../libraries/LibSupportsInterface.sol';
import {IERC165} from '../interfaces/IERC165.sol';

/// @title SupportsInterface Facet Interface Fragment
/// @title Dummy "implementation" contract for LG Diamond interface for ERC-1967 compatibility
/// @dev adapted from https://github.com/zdenham/diamond-etherscan?tab=readme-ov-file
contract SupportsInterfaceFragment is IERC165 {
    /// @notice Query if a contract implements an interface
    /// @param interfaceID The interface identifier, as specified in ERC-165
    /// @dev Interface identification is specified in ERC-165. This function
    ///  uses less than 30,000 gas.
    /// @return `true` if the contract implements `interfaceID` and
    ///  `interfaceID` is not 0xffffffff, `false` otherwise
    function supportsInterface(bytes4 interfaceID) external view returns (bool) {}

    /// @notice Set whether an interface is implemented
    /// @dev Only the contract owner can call this function
    /// @param interfaceID The interface identifier, as specified in ERC-165
    /// @param implemented `true` if the contract implements `interfaceID`
    function setSupportsInterface(bytes4 interfaceID, bool implemented) external {}

    /// @notice Set a list of interfaces as implemented or not
    /// @dev Only the contract owner can call this function
    /// @param interfaceIDs The interface identifiers, as specified in ERC-165
    /// @param allImplemented `true` if the contract implements all interfaces
    function setSupportsInterfaces(bytes4[] calldata interfaceIDs, bool allImplemented) external {}

    /// @notice Returns a list of interfaces that have (ever) been supported
    /// @return The list of interfaces
    function interfaces() external view returns (LibSupportsInterface.KnownInterface[] memory) {}
}
          

lib/@lagunagames/lg-diamond-template/src/interfaces/IDiamondCut.sol

//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.19;

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

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

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

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

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

lib/@lagunagames/lg-diamond-template/src/interfaces/IDiamondLoupe.sol

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

// Adapted from the Diamond 3 reference implementation by Nick Mudge:
// https://github.com/mudgen/diamond-3-hardhat

// A loupe is a small magnifying glass used to look at diamonds.
// These functions look at diamonds
interface IDiamondLoupe {
    /// These functions are expected to be called frequently
    /// by tools.

    struct Facet {
        address facetAddress;
        bytes4[] functionSelectors;
    }

    /// @notice Gets all facet addresses and their four byte function selectors.
    /// @return facets_ Facet
    function facets() external view returns (Facet[] memory facets_);

    /// @notice Gets all the function selectors supported by a specific facet.
    /// @param _facet The facet address.
    /// @return facetFunctionSelectors_
    function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);

    /// @notice Get all the facet addresses used by a diamond.
    /// @return facetAddresses_
    function facetAddresses() external view returns (address[] memory facetAddresses_);

    /// @notice Gets the facet that supports the given selector.
    /// @dev If facet is not found return address(0).
    /// @param _functionSelector The function selector.
    /// @return facetAddress_ The facet address.
    function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);
}
          

lib/@lagunagames/lg-diamond-template/src/interfaces/IERC173.sol

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

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

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

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

lib/@lagunagames/lg-diamond-template/src/libraries/LibContractOwner.sol

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

/// @title Library for the common LG implementation of ERC-173 Contract Ownership Standard
/// @author [email protected]
/// @custom:storage-location erc1967:eip1967.proxy.admin
library LibContractOwner {
    error CallerIsNotContractOwner();

    /// @notice This emits when ownership of a contract changes.
    /// @dev ERC-173
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /// @notice Emitted when the admin account has changed.
    /// @dev ERC-1967
    event AdminChanged(address previousAdmin, address newAdmin);

    //  @dev Standard storage slot for the ERC-1967 admin address
    //  @dev bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1)
    bytes32 private constant ADMIN_SLOT_POSITION = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;

    struct LibOwnerStorage {
        address contractOwner;
    }

    /// @notice Storage slot for Contract Owner state data
    function ownerStorage() internal pure returns (LibOwnerStorage storage storageSlot) {
        bytes32 position = ADMIN_SLOT_POSITION;

        // solhint-disable-next-line no-inline-assembly
        assembly {
            storageSlot.slot := position
        }
    }

    /// @notice Sets the contract owner
    /// @param newOwner The new owner
    /// @custom:emits OwnershipTransferred
    function setContractOwner(address newOwner) internal {
        LibOwnerStorage storage ls = ownerStorage();
        address previousOwner = ls.contractOwner;
        ls.contractOwner = newOwner;
        emit OwnershipTransferred(previousOwner, newOwner);
        emit AdminChanged(previousOwner, newOwner);
    }

    /// @notice Gets the contract owner wallet
    /// @return owner The contract owner
    function contractOwner() internal view returns (address owner) {
        owner = ownerStorage().contractOwner;
    }

    /// @notice Ensures that the caller is the contract owner, or throws an error.
    /// @custom:throws LibAccess: Must be contract owner
    function enforceIsContractOwner() internal view {
        if (msg.sender != ownerStorage().contractOwner) revert CallerIsNotContractOwner();
    }
}
          

lib/@lagunagames/lg-diamond-template/src/libraries/LibSupportsInterface.sol

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.19;

import {LibContractOwner} from '../libraries/LibContractOwner.sol';

/// @title Library for the common LG implementation of ERC-165
/// @author [email protected]
/// @custom:storage-location erc7201:games.laguna.LibSupportsInterface
library LibSupportsInterface {
    bytes32 public constant SUPPORTS_INTERFACE_STORAGE_POSITION =
        keccak256(abi.encode(uint256(keccak256('games.laguna.LibSupportsInterface')) - 1)) & ~bytes32(uint256(0xff));

    struct KnownInterface {
        bytes4 selector;
        bool supported;
    }

    struct SupportsInterfaceStorage {
        mapping(bytes4 selector => bool supported) supportedInterfaces;
        bytes4[] interfaces;
    }

    /// @notice Storage slot for SupportsInterface state data
    function supportsInterfaceStorage() internal pure returns (SupportsInterfaceStorage storage storageSlot) {
        bytes32 position = SUPPORTS_INTERFACE_STORAGE_POSITION;

        // solhint-disable-next-line no-inline-assembly
        assembly {
            storageSlot.slot := position
        }
    }

    /// @notice Checks if a contract implements an interface
    /// @param _interfaceId Interface ID to check
    /// @return true if the contract implements the interface
    function supportsInterface(bytes4 _interfaceId) internal view returns (bool) {
        return supportsInterfaceStorage().supportedInterfaces[_interfaceId];
    }

    /// @notice Sets whether a contract implements an interface
    /// @param _interfaceId Interface ID to set
    /// @param _implemented true if the contract implements the interface
    function setSupportsInterface(bytes4 _interfaceId, bool _implemented) internal {
        SupportsInterfaceStorage storage s = supportsInterfaceStorage();

        if (_implemented && !s.supportedInterfaces[_interfaceId]) {
            s.interfaces.push(_interfaceId);
        }

        s.supportedInterfaces[_interfaceId] = _implemented;
    }

    /// @notice Returns the list of interfaces this contract has supported, and whether they are supported currently.
    /// @return The list of interfaces
    function getKnownInterfaces() internal view returns (KnownInterface[] memory) {
        SupportsInterfaceStorage storage s = supportsInterfaceStorage();
        KnownInterface[] memory interfaces = new KnownInterface[](s.interfaces.length);
        for (uint i = 0; i < s.interfaces.length; ++i) {
            interfaces[i] = KnownInterface({
                selector: s.interfaces[i],
                supported: s.supportedInterfaces[s.interfaces[i]]
            });
        }
        return interfaces;
    }

    /// @notice Calculate the interface ID for a list of function selectors
    /// @dev Per ERC-165: "We define the interface identifier as the XOR of all function selectors in the interface"
    /// @param functionSelectors The list of function selectors in the interface
    /// @return interfaceId The ERC-165 interface ID
    function calculateInterfaceId(bytes4[] memory functionSelectors) internal pure returns (bytes4 interfaceId) {
        for (uint256 i = 0; i < functionSelectors.length; ++i) {
            interfaceId ^= functionSelectors[i];
        }
    }
}
          

lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}
          

Compiler Settings

{"viaIR":true,"remappings":["ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","@openzeppelin-contracts/=lib/openzeppelin-contracts/"],"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers"]}},"optimizer":{"runs":999999,"enabled":true,"details":{"yulDetails":{"stackAllocation":true,"optimizerSteps":"dhfoDgvulfnTUtnIf"},"yul":true,"peephole":true,"inliner":true,"deduplicate":true,"cse":true}},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"libraries":{},"evmVersion":"paris"}
              

Contract ABI

[{"type":"error","name":"CallerIsNotContractOwner","inputs":[]},{"type":"error","name":"DiamondAlreadyInitialized","inputs":[]},{"type":"error","name":"FunctionDoesNotExist","inputs":[{"type":"bytes4","name":"methodSelector","internalType":"bytes4"}]},{"type":"error","name":"InvalidFacetCutAction","inputs":[{"type":"uint8","name":"action","internalType":"enum IDiamondCut.FacetCutAction"}]},{"type":"event","name":"AdminChanged","inputs":[{"type":"address","name":"previousAdmin","internalType":"address","indexed":false},{"type":"address","name":"newAdmin","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"ApprovalForAll","inputs":[{"type":"address","name":"account","internalType":"address","indexed":true},{"type":"address","name":"operator","internalType":"address","indexed":true},{"type":"bool","name":"approved","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"DiamondCut","inputs":[{"type":"tuple[]","name":"_diamondCut","internalType":"struct IDiamondCut.FacetCut[]","indexed":false,"components":[{"type":"address","name":"facetAddress","internalType":"address"},{"type":"uint8","name":"action","internalType":"enum IDiamondCut.FacetCutAction"},{"type":"bytes4[]","name":"functionSelectors","internalType":"bytes4[]"}]},{"type":"address","name":"_init","internalType":"address","indexed":false},{"type":"bytes","name":"_calldata","internalType":"bytes","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PoolMintBatch","inputs":[{"type":"uint256","name":"id","internalType":"uint256","indexed":true},{"type":"address","name":"operator","internalType":"address","indexed":true},{"type":"address","name":"from","internalType":"address","indexed":false},{"type":"address[]","name":"toAddresses","internalType":"address[]","indexed":false},{"type":"uint256[]","name":"amounts","internalType":"uint256[]","indexed":false}],"anonymous":false},{"type":"event","name":"TransferBatch","inputs":[{"type":"address","name":"operator","internalType":"address","indexed":true},{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256[]","name":"ids","internalType":"uint256[]","indexed":false},{"type":"uint256[]","name":"values","internalType":"uint256[]","indexed":false}],"anonymous":false},{"type":"event","name":"TransferSingle","inputs":[{"type":"address","name":"operator","internalType":"address","indexed":true},{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"id","internalType":"uint256","indexed":false},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"URI","inputs":[{"type":"string","name":"value","internalType":"string","indexed":false},{"type":"uint256","name":"id","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"type":"address","name":"implementation","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"accessControlBadgeAddress","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"approveForPool","inputs":[{"type":"uint256","name":"poolID","internalType":"uint256"},{"type":"address","name":"operator","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"uint256","name":"id","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"","internalType":"uint256[]"}],"name":"balanceOfBatch","inputs":[{"type":"address[]","name":"accounts","internalType":"address[]"},{"type":"uint256[]","name":"ids","internalType":"uint256[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burn","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"uint256","name":"poolID","internalType":"uint256"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"contractURI","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"poolId","internalType":"uint256"}],"name":"createPool","inputs":[{"type":"uint256","name":"capacity","internalType":"uint256"},{"type":"bool","name":"transferable","internalType":"bool"},{"type":"bool","name":"burnable","internalType":"bool"},{"type":"string","name":"poolURI","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"createPoolV1","inputs":[{"type":"uint256","name":"_capacity","internalType":"uint256"},{"type":"bool","name":"_transferable","internalType":"bool"},{"type":"bool","name":"_burnable","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"createPoolV2","inputs":[{"type":"uint256","name":"_capacity","internalType":"uint256"},{"type":"bool","name":"_transferable","internalType":"bool"},{"type":"bool","name":"_burnable","internalType":"bool"},{"type":"string","name":"poolURI","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"createSimplePool","inputs":[{"type":"uint256","name":"_capacity","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"cuTokenAddress","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"cutFacet","inputs":[{"type":"address","name":"facet","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"cutSelector","inputs":[{"type":"bytes4","name":"selector","internalType":"bytes4"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"cutSelectors","inputs":[{"type":"bytes4[]","name":"selectors","internalType":"bytes4[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"darkForestAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"darkMarkTokenAddress","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deleteSelector","inputs":[{"type":"bytes4","name":"selector","internalType":"bytes4"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deleteSelectors","inputs":[{"type":"bytes4[]","name":"selectors","internalType":"bytes4[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"diamondCut","inputs":[{"type":"tuple[]","name":"_diamondCut","internalType":"struct IDiamondCut.FacetCut[]","components":[{"type":"address","name":"facetAddress","internalType":"address"},{"type":"uint8","name":"action","internalType":"enum IDiamondCut.FacetCutAction"},{"type":"bytes4[]","name":"functionSelectors","internalType":"bytes4[]"}]},{"type":"address","name":"_init","internalType":"address"},{"type":"bytes","name":"_calldata","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"diamondCut","inputs":[{"type":"tuple[]","name":"_diamondCut","internalType":"struct IDiamondCut.FacetCut[]","components":[{"type":"address","name":"facetAddress","internalType":"address"},{"type":"uint8","name":"action","internalType":"enum IDiamondCut.FacetCutAction"},{"type":"bytes4[]","name":"functionSelectors","internalType":"bytes4[]"}]}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"facetAddress_","internalType":"address"}],"name":"facetAddress","inputs":[{"type":"bytes4","name":"_functionSelector","internalType":"bytes4"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address[]","name":"facetAddresses_","internalType":"address[]"}],"name":"facetAddresses","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes4[]","name":"facetFunctionSelectors_","internalType":"bytes4[]"}],"name":"facetFunctionSelectors","inputs":[{"type":"address","name":"_facet","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple[]","name":"facets_","internalType":"struct IDiamondLoupe.Facet[]","components":[{"type":"address","name":"facetAddress","internalType":"address"},{"type":"bytes4[]","name":"functionSelectors","internalType":"bytes4[]"}]}],"name":"facets","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"gameBankAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"gameServerOracleAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"gameServerSSSAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"gemNFTAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"poolId","internalType":"uint256"}],"name":"getPoolByName","inputs":[{"type":"string","name":"name","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"hasBadge","inputs":[{"type":"address","name":"a","internalType":"address"},{"type":"string","name":"badge","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"hasBadgeById","inputs":[{"type":"address","name":"a","internalType":"address"},{"type":"uint256","name":"poolId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"implementation","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"initializeTerminusDiamond","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple[]","name":"","internalType":"struct LibSupportsInterface.KnownInterface[]","components":[{"type":"bytes4","name":"selector","internalType":"bytes4"},{"type":"bool","name":"supported","internalType":"bool"}]}],"name":"interfaces","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isApprovedForAll","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"address","name":"operator","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isApprovedForPool","inputs":[{"type":"uint256","name":"poolID","internalType":"uint256"},{"type":"address","name":"operator","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"landNFTAddress","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"mint","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"poolID","internalType":"uint256"},{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"bytes","name":"data","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"mintBatch","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256[]","name":"poolIDs","internalType":"uint256[]"},{"type":"uint256[]","name":"amounts","internalType":"uint256[]"},{"type":"bytes","name":"data","internalType":"bytes"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"paymentToken","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"playerProfileAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"poolBasePrice","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"poolIsBurnable","inputs":[{"type":"uint256","name":"poolID","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"poolIsTransferable","inputs":[{"type":"uint256","name":"poolID","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"poolMintBatch","inputs":[{"type":"uint256","name":"id","internalType":"uint256"},{"type":"address[]","name":"toAddresses","internalType":"address[]"},{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"rbwTokenAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[],"name":"requireBadge","inputs":[{"type":"string","name":"badge","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[],"name":"requireBadgeById","inputs":[{"type":"uint256","name":"poolId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"ritualNFTAddress","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"safeBatchTransferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256[]","name":"ids","internalType":"uint256[]"},{"type":"uint256[]","name":"amounts","internalType":"uint256[]"},{"type":"bytes","name":"data","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"safeTransferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"id","internalType":"uint256"},{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"bytes","name":"data","internalType":"bytes"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"satelliteBankAddress","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setApprovalForAll","inputs":[{"type":"address","name":"operator","internalType":"address"},{"type":"bool","name":"approved","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setContractURI","inputs":[{"type":"string","name":"_contractURI","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setController","inputs":[{"type":"address","name":"newController","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setImplementation","inputs":[{"type":"address","name":"_implementation","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPaymentToken","inputs":[{"type":"address","name":"newPaymentToken","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPoolBasePrice","inputs":[{"type":"uint256","name":"newBasePrice","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPoolBurnable","inputs":[{"type":"uint256","name":"poolID","internalType":"uint256"},{"type":"bool","name":"burnable","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPoolController","inputs":[{"type":"uint256","name":"poolID","internalType":"uint256"},{"type":"address","name":"newController","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPoolName","inputs":[{"type":"uint256","name":"poolId","internalType":"uint256"},{"type":"string","name":"name","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPoolTransferable","inputs":[{"type":"uint256","name":"poolID","internalType":"uint256"},{"type":"bool","name":"transferable","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSupportsInterface","inputs":[{"type":"bytes4","name":"interfaceID","internalType":"bytes4"},{"type":"bool","name":"implemented","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSupportsInterfaces","inputs":[{"type":"bytes4[]","name":"interfaceIDs","internalType":"bytes4[]"},{"type":"bool","name":"allImplemented","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setURI","inputs":[{"type":"uint256","name":"poolID","internalType":"uint256"},{"type":"string","name":"poolURI","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"shadowForgeAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"shadowcornItemsAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"shadowcornNFTAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"supportsInterface","inputs":[{"type":"bytes4","name":"interfaceID","internalType":"bytes4"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"terminusController","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"terminusPoolCapacity","inputs":[{"type":"uint256","name":"poolID","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"terminusPoolController","inputs":[{"type":"uint256","name":"poolID","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"terminusPoolSupply","inputs":[{"type":"uint256","name":"poolID","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"testnetDebugRegistryAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalPools","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"_newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unapproveForPool","inputs":[{"type":"uint256","name":"poolID","internalType":"uint256"},{"type":"address","name":"operator","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"unicornItemsAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"unicornNFTAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"unimTokenAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"uri","inputs":[{"type":"uint256","name":"poolID","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"wethTokenAddress","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdrawPayments","inputs":[{"type":"address","name":"toAddress","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]}]
              

Contract Creation Code

0x60806040523461001a576040516114df61002082396114df90f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8062fdd58e1461048a57806301ffc9a714610485578063027b3fc2146104805780630e7afec51461047b5780630e89341c146104765780630f1b6c5c146104715780630f9dad71146103b8578063107b70fa1461046c5780631f7fdffa146104675780631f931c1c146104625780631fbeae86146103ef57806320c32bfe1461041757806321adca961461045d5780632365c859146103c25780632eb2c2d6146104585780633013ce29146103b8578063366e59e3146103b857806339e222da146104535780633bad2d821461044e5780633c50a3c514610435578063469ab9c9146103b85780634e1273f41461044957806352ef6b2c1461044457806354e7796f1461043f5780635a06ba90146103b85780635a33d01e146103b85780635c60da1b146103b85780635dc8bdf8146103fe578063611f6eac146103b85780636463e3a0146103b357806366e5722b1461043a57806369453ce9146104355780636a326ab1146103c7578063731133e9146104305780637751423b1461042b57806378cf2e841461042b5780637a0ed627146104265780637aa6b20b146103b85780637e680266146104215780637f73a685146103b857806384fa03a11461041c57806385bc82e2146103ef578063862440e2146104175780638796fba3146103b85780638925d013146104085780638adc2e97146103b85780638cf6408f146103b85780638d350f26146103b85780638da5cb5b146103b857806392a72544146103b857806392eefe9b146103c7578063938e3d7b146103e55780639434a2df14610412578063a22cb4651461040d578063a44cfc82146103fe578063a6638c0e146103c7578063ab3c7e5214610408578063ab57e92b146103b8578063adfca15e14610403578063b507ef52146103fe578063b6319a37146103b8578063bfa36b56146103b8578063c18975c0146103b8578063c5c1dbdf146103b8578063c7df40ee146103b8578063cdffacc6146103f9578063d0c402e5146103f4578063d784d426146103c7578063dc55d0b2146103ef578063deb14a1f146103b8578063debb3856146103ea578063e0435c0b146103ea578063e0e0f3e1146103e5578063e56594f7146103b8578063e57e69c6146103e0578063e8a3d485146103db578063e985e9c5146103d6578063f242432a146103d1578063f2709f21146103cc578063f2fde38b146103c7578063f3dc0a85146103c2578063f5298aca146103bd578063f98ea099146103b85763ff6f3e0b0361048f575b610ef8565b6106d9565b611461565b610bb0565b610f68565b611412565b611383565b61132c565b6112f8565b6112e8565b6111aa565b6112b2565b610a68565b61129c565b611286565b610e54565b611264565b611190565b611243565b61120a565b610a8f565b611171565b61112a565b6110e5565b610fb9565b610fa9565b610cb8565b610f44565b610e44565b610e0b565b610d7e565b610c9c565b610c56565b610c46565b610b5c565b610a4a565b610971565b610865565b6106c4565b610691565b6105db565b6105c5565b610574565b6104fb565b600080fd5b90565b73ffffffffffffffffffffffffffffffffffffffff81165b0361048f57565b905035906104c382610497565b565b806104af565b905035906104c3826104c5565b919060408382031261048f57610494906104f281856104b6565b936020016104cb565b3461048f576105276105176105113660046104d8565b90611471565b6040519182918290815260200190565b0390f35b7fffffffff0000000000000000000000000000000000000000000000000000000081166104af565b905035906104c38261052b565b9060208282031261048f5761049491610553565b3461048f5761052761059061058a366004610560565b50600090565b60405191829182901515815260200190565b919060408382031261048f57610494906105bc81856104cb565b936020016104b6565b3461048f576105276105906105113660046105a2565b3461048f576105eb3660046104d8565b50506040515b005b9060208282031261048f57610494916104cb565b60005b83811061061a5750506000910152565b818101518382015260200161060a565b61064b61065460209361067c9361063f815190565b80835293849260200190565b95869101610607565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b0190565b60208082526104949291019061062a565b3461048f576105276106ad6106a73660046105f3565b50606090565b60405191829182610680565b600091031261048f57565b3461048f576106d43660046106b9565b604051005b3461048f576106e93660046106b9565b61052760005b6040519182918273ffffffffffffffffffffffffffffffffffffffff909116815260200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810190811067ffffffffffffffff82111761078557604052565b610716565b906104c361079760405190565b9283610745565b67ffffffffffffffff811161078557602090601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b90826000939282370152565b909291926107fa6107f58261079e565b61078a565b9381855260208501908284011161048f576104c3926107d9565b9080601f8301121561048f57816020610494933591016107e5565b91909160408184031261048f5761084683826104b6565b92602082013567ffffffffffffffff811161048f576104949201610814565b3461048f5761052761059061051136600461082f565b67ffffffffffffffff81116107855760208091020190565b909291926108a36107f58261087b565b938185526020808601920283019281841161048f57915b8383106108c75750505050565b602080916108d584866104cb565b8152019201916108ba565b9080601f8301121561048f5781602061049493359101610893565b9060808282031261048f5761091081836104b6565b92602083013567ffffffffffffffff811161048f57826109319185016108e0565b92604081013567ffffffffffffffff811161048f57836109529183016108e0565b92606082013567ffffffffffffffff811161048f576104949201610814565b3461048f576109813660046108fb565b505050506105f160405190565b909182601f8301121561048f5781359167ffffffffffffffff831161048f57602001926020830284011161048f57565b909182601f8301121561048f5781359167ffffffffffffffff831161048f57602001926001830284011161048f57565b919060608382031261048f57823567ffffffffffffffff811161048f5781610a1791850161098e565b929093610a2783602083016104b6565b92604082013567ffffffffffffffff811161048f57610a4692016109be565b9091565b3461048f57610a5a3660046109ee565b50505050506105f160405190565b3461048f576105eb3660046105a2565b91909160408184031261048f5761084683826104cb565b3461048f576105eb366004610a78565b90929192610aaf6107f58261087b565b938185526020808601920283019281841161048f57915b838310610ad35750505050565b60208091610ae184866104b6565b815201920191610ac6565b9080601f8301121561048f5781602061049493359101610a9f565b9160608383031261048f57610b1c82846104cb565b92602081013567ffffffffffffffff811161048f5783610b3d918301610aec565b92604082013567ffffffffffffffff811161048f5761049492016108e0565b3461048f57610b6c366004610b07565b5050506105f160405190565b8015156104af565b905035906104c382610b78565b919060408382031261048f5761049490610ba781856104cb565b93602001610b80565b3461048f576105eb366004610b8d565b91909160a08184031261048f57610bd783826104b6565b92610be581602084016104b6565b92604083013567ffffffffffffffff811161048f5782610c069185016108e0565b92606081013567ffffffffffffffff811161048f5783610c279183016108e0565b92608082013567ffffffffffffffff811161048f576104949201610814565b3461048f57610a5a366004610bc0565b3461048f576105276105906105113660046104d8565b909160608284031261048f57610494610c8584846104cb565b93610c938160208601610b80565b93604001610b80565b3461048f57610527610517610cb2366004610c6c565b91611488565b3461048f5761052761059061058a3660046105f3565b91909160408184031261048f57803567ffffffffffffffff811161048f5783610cf8918301610aec565b92602082013567ffffffffffffffff811161048f5761049492016108e0565b90610d37610d30610d26845190565b8084529260200190565b9260200190565b9060005b818110610d485750505090565b909192610d65610d5e6001928651815260200190565b9460200190565b929101610d3b565b602080825261049492910190610d17565b3461048f57610527610d9a610d94366004610cce565b9061149f565b60405191829182610d6d565b90610db5610d30610d26845190565b9060005b818110610dc65750505090565b909192610df2610d5e600192865173ffffffffffffffffffffffffffffffffffffffff16815260200190565b929101610db9565b602080825261049492910190610da6565b3461048f57610e1b3660046106b9565b60405180610527606082610dfa565b919060408382031261048f5761049490610ba78185610553565b3461048f576105eb366004610e2a565b3461048f5761052761051761058a3660046105f3565b90929192610e7a6107f58261087b565b938185526020808601920283019281841161048f57915b838310610e9e5750505050565b60208091610eac8486610553565b815201920191610e91565b9080601f8301121561048f5781602061049493359101610e6a565b9060208282031261048f57813567ffffffffffffffff811161048f576104949201610eb7565b3461048f57610f08366004610ed2565b50604051005b9160408383031261048f57823567ffffffffffffffff811161048f57610f398361049492860161098e565b939094602001610b80565b3461048f57610b6c366004610f0e565b9060208282031261048f57610494916104b6565b3461048f57610f08366004610f54565b9060808282031261048f57610f8d81836104b6565b92610f9b82602085016104cb565b9261095283604083016104cb565b3461048f57610981366004610f78565b3461048f57610f083660046105f3565b90610fd8610d30610d26845190565b9060005b818110610fe95750505090565b909192611021610d5e60019286517fffffffff0000000000000000000000000000000000000000000000000000000016815260200190565b929101610fdc565b805173ffffffffffffffffffffffffffffffffffffffff16825261049491604081019160200151906020818403910152610fc9565b9061049491611029565b9061107e611074835190565b8083529160200190565b90816110906020830284019460200190565b926000915b8383106110a457505050505090565b909192939460206110c76110c08385600195038752895161105e565b9760200190565b9301930191939290611095565b602080825261049492910190611068565b3461048f576110f53660046106b9565b604051806105276060826110d4565b9060208282031261048f57813567ffffffffffffffff811161048f576104949201610814565b3461048f5761052761051761058a366004611104565b9060808282031261048f5761115581836104cb565b926111638260208501610b80565b926109528360408301610b80565b3461048f57610527610517611187366004611140565b92919091611493565b3461048f576111a03660046106b9565b6105276000610517565b3461048f57610f08366004611104565b9060808282031261048f576111cf81836104cb565b926111dd8260208501610b80565b926111eb8360408301610b80565b92606082013567ffffffffffffffff811161048f57610a4692016109be565b3461048f576105276105176112203660046111ba565b9392909261147b565b919060408382031261048f5761049490610ba781856104b6565b3461048f576105eb366004611229565b602080825261049492910190610fc9565b3461048f5761052761127a6106a7366004610f54565b60405191829182611253565b3461048f576105276106ef61058a366004610560565b3461048f576105276106ef61058a3660046105f3565b3461048f57610f08366004610560565b9060208282031261048f57813567ffffffffffffffff811161048f57610a46920161098e565b3461048f576105eb3660046112c2565b3461048f576113083660046106b9565b61052760606106ad565b919060408382031261048f57610494906105bc81856104b6565b3461048f57610527610590610511366004611312565b91909160a08184031261048f5761135983826104b6565b9261136781602084016104b6565b9261137582604085016104cb565b92610c2783606083016104cb565b3461048f57610a5a366004611342565b906113a2610d30610d26845190565b9060005b8181106113b35750505090565b9091926113f9610d5e600192865180517fffffffff0000000000000000000000000000000000000000000000000000000016825260209081015115159082015260400190565b9291016113a6565b602080825261049492910190611393565b3461048f576114223660046106b9565b60405180610527606082611401565b909160608284031261048f5761049461144a84846104b6565b9361145881602086016104cb565b936040016104cb565b3461048f57610b6c366004611431565b5050610494600090565b5050505050610494600090565b505050610494600090565b50505050610494600090565b505061049460609056fea2646970667358221220e58343ad4781b32b4f8a277eaaf496a5a1796ce0432b44b6226e52371612f70e64736f6c63430008130033

Deployed ByteCode

0x6080604052600436101561001257600080fd5b60003560e01c8062fdd58e1461048a57806301ffc9a714610485578063027b3fc2146104805780630e7afec51461047b5780630e89341c146104765780630f1b6c5c146104715780630f9dad71146103b8578063107b70fa1461046c5780631f7fdffa146104675780631f931c1c146104625780631fbeae86146103ef57806320c32bfe1461041757806321adca961461045d5780632365c859146103c25780632eb2c2d6146104585780633013ce29146103b8578063366e59e3146103b857806339e222da146104535780633bad2d821461044e5780633c50a3c514610435578063469ab9c9146103b85780634e1273f41461044957806352ef6b2c1461044457806354e7796f1461043f5780635a06ba90146103b85780635a33d01e146103b85780635c60da1b146103b85780635dc8bdf8146103fe578063611f6eac146103b85780636463e3a0146103b357806366e5722b1461043a57806369453ce9146104355780636a326ab1146103c7578063731133e9146104305780637751423b1461042b57806378cf2e841461042b5780637a0ed627146104265780637aa6b20b146103b85780637e680266146104215780637f73a685146103b857806384fa03a11461041c57806385bc82e2146103ef578063862440e2146104175780638796fba3146103b85780638925d013146104085780638adc2e97146103b85780638cf6408f146103b85780638d350f26146103b85780638da5cb5b146103b857806392a72544146103b857806392eefe9b146103c7578063938e3d7b146103e55780639434a2df14610412578063a22cb4651461040d578063a44cfc82146103fe578063a6638c0e146103c7578063ab3c7e5214610408578063ab57e92b146103b8578063adfca15e14610403578063b507ef52146103fe578063b6319a37146103b8578063bfa36b56146103b8578063c18975c0146103b8578063c5c1dbdf146103b8578063c7df40ee146103b8578063cdffacc6146103f9578063d0c402e5146103f4578063d784d426146103c7578063dc55d0b2146103ef578063deb14a1f146103b8578063debb3856146103ea578063e0435c0b146103ea578063e0e0f3e1146103e5578063e56594f7146103b8578063e57e69c6146103e0578063e8a3d485146103db578063e985e9c5146103d6578063f242432a146103d1578063f2709f21146103cc578063f2fde38b146103c7578063f3dc0a85146103c2578063f5298aca146103bd578063f98ea099146103b85763ff6f3e0b0361048f575b610ef8565b6106d9565b611461565b610bb0565b610f68565b611412565b611383565b61132c565b6112f8565b6112e8565b6111aa565b6112b2565b610a68565b61129c565b611286565b610e54565b611264565b611190565b611243565b61120a565b610a8f565b611171565b61112a565b6110e5565b610fb9565b610fa9565b610cb8565b610f44565b610e44565b610e0b565b610d7e565b610c9c565b610c56565b610c46565b610b5c565b610a4a565b610971565b610865565b6106c4565b610691565b6105db565b6105c5565b610574565b6104fb565b600080fd5b90565b73ffffffffffffffffffffffffffffffffffffffff81165b0361048f57565b905035906104c382610497565b565b806104af565b905035906104c3826104c5565b919060408382031261048f57610494906104f281856104b6565b936020016104cb565b3461048f576105276105176105113660046104d8565b90611471565b6040519182918290815260200190565b0390f35b7fffffffff0000000000000000000000000000000000000000000000000000000081166104af565b905035906104c38261052b565b9060208282031261048f5761049491610553565b3461048f5761052761059061058a366004610560565b50600090565b60405191829182901515815260200190565b919060408382031261048f57610494906105bc81856104cb565b936020016104b6565b3461048f576105276105906105113660046105a2565b3461048f576105eb3660046104d8565b50506040515b005b9060208282031261048f57610494916104cb565b60005b83811061061a5750506000910152565b818101518382015260200161060a565b61064b61065460209361067c9361063f815190565b80835293849260200190565b95869101610607565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b0190565b60208082526104949291019061062a565b3461048f576105276106ad6106a73660046105f3565b50606090565b60405191829182610680565b600091031261048f57565b3461048f576106d43660046106b9565b604051005b3461048f576106e93660046106b9565b61052760005b6040519182918273ffffffffffffffffffffffffffffffffffffffff909116815260200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810190811067ffffffffffffffff82111761078557604052565b610716565b906104c361079760405190565b9283610745565b67ffffffffffffffff811161078557602090601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b90826000939282370152565b909291926107fa6107f58261079e565b61078a565b9381855260208501908284011161048f576104c3926107d9565b9080601f8301121561048f57816020610494933591016107e5565b91909160408184031261048f5761084683826104b6565b92602082013567ffffffffffffffff811161048f576104949201610814565b3461048f5761052761059061051136600461082f565b67ffffffffffffffff81116107855760208091020190565b909291926108a36107f58261087b565b938185526020808601920283019281841161048f57915b8383106108c75750505050565b602080916108d584866104cb565b8152019201916108ba565b9080601f8301121561048f5781602061049493359101610893565b9060808282031261048f5761091081836104b6565b92602083013567ffffffffffffffff811161048f57826109319185016108e0565b92604081013567ffffffffffffffff811161048f57836109529183016108e0565b92606082013567ffffffffffffffff811161048f576104949201610814565b3461048f576109813660046108fb565b505050506105f160405190565b909182601f8301121561048f5781359167ffffffffffffffff831161048f57602001926020830284011161048f57565b909182601f8301121561048f5781359167ffffffffffffffff831161048f57602001926001830284011161048f57565b919060608382031261048f57823567ffffffffffffffff811161048f5781610a1791850161098e565b929093610a2783602083016104b6565b92604082013567ffffffffffffffff811161048f57610a4692016109be565b9091565b3461048f57610a5a3660046109ee565b50505050506105f160405190565b3461048f576105eb3660046105a2565b91909160408184031261048f5761084683826104cb565b3461048f576105eb366004610a78565b90929192610aaf6107f58261087b565b938185526020808601920283019281841161048f57915b838310610ad35750505050565b60208091610ae184866104b6565b815201920191610ac6565b9080601f8301121561048f5781602061049493359101610a9f565b9160608383031261048f57610b1c82846104cb565b92602081013567ffffffffffffffff811161048f5783610b3d918301610aec565b92604082013567ffffffffffffffff811161048f5761049492016108e0565b3461048f57610b6c366004610b07565b5050506105f160405190565b8015156104af565b905035906104c382610b78565b919060408382031261048f5761049490610ba781856104cb565b93602001610b80565b3461048f576105eb366004610b8d565b91909160a08184031261048f57610bd783826104b6565b92610be581602084016104b6565b92604083013567ffffffffffffffff811161048f5782610c069185016108e0565b92606081013567ffffffffffffffff811161048f5783610c279183016108e0565b92608082013567ffffffffffffffff811161048f576104949201610814565b3461048f57610a5a366004610bc0565b3461048f576105276105906105113660046104d8565b909160608284031261048f57610494610c8584846104cb565b93610c938160208601610b80565b93604001610b80565b3461048f57610527610517610cb2366004610c6c565b91611488565b3461048f5761052761059061058a3660046105f3565b91909160408184031261048f57803567ffffffffffffffff811161048f5783610cf8918301610aec565b92602082013567ffffffffffffffff811161048f5761049492016108e0565b90610d37610d30610d26845190565b8084529260200190565b9260200190565b9060005b818110610d485750505090565b909192610d65610d5e6001928651815260200190565b9460200190565b929101610d3b565b602080825261049492910190610d17565b3461048f57610527610d9a610d94366004610cce565b9061149f565b60405191829182610d6d565b90610db5610d30610d26845190565b9060005b818110610dc65750505090565b909192610df2610d5e600192865173ffffffffffffffffffffffffffffffffffffffff16815260200190565b929101610db9565b602080825261049492910190610da6565b3461048f57610e1b3660046106b9565b60405180610527606082610dfa565b919060408382031261048f5761049490610ba78185610553565b3461048f576105eb366004610e2a565b3461048f5761052761051761058a3660046105f3565b90929192610e7a6107f58261087b565b938185526020808601920283019281841161048f57915b838310610e9e5750505050565b60208091610eac8486610553565b815201920191610e91565b9080601f8301121561048f5781602061049493359101610e6a565b9060208282031261048f57813567ffffffffffffffff811161048f576104949201610eb7565b3461048f57610f08366004610ed2565b50604051005b9160408383031261048f57823567ffffffffffffffff811161048f57610f398361049492860161098e565b939094602001610b80565b3461048f57610b6c366004610f0e565b9060208282031261048f57610494916104b6565b3461048f57610f08366004610f54565b9060808282031261048f57610f8d81836104b6565b92610f9b82602085016104cb565b9261095283604083016104cb565b3461048f57610981366004610f78565b3461048f57610f083660046105f3565b90610fd8610d30610d26845190565b9060005b818110610fe95750505090565b909192611021610d5e60019286517fffffffff0000000000000000000000000000000000000000000000000000000016815260200190565b929101610fdc565b805173ffffffffffffffffffffffffffffffffffffffff16825261049491604081019160200151906020818403910152610fc9565b9061049491611029565b9061107e611074835190565b8083529160200190565b90816110906020830284019460200190565b926000915b8383106110a457505050505090565b909192939460206110c76110c08385600195038752895161105e565b9760200190565b9301930191939290611095565b602080825261049492910190611068565b3461048f576110f53660046106b9565b604051806105276060826110d4565b9060208282031261048f57813567ffffffffffffffff811161048f576104949201610814565b3461048f5761052761051761058a366004611104565b9060808282031261048f5761115581836104cb565b926111638260208501610b80565b926109528360408301610b80565b3461048f57610527610517611187366004611140565b92919091611493565b3461048f576111a03660046106b9565b6105276000610517565b3461048f57610f08366004611104565b9060808282031261048f576111cf81836104cb565b926111dd8260208501610b80565b926111eb8360408301610b80565b92606082013567ffffffffffffffff811161048f57610a4692016109be565b3461048f576105276105176112203660046111ba565b9392909261147b565b919060408382031261048f5761049490610ba781856104b6565b3461048f576105eb366004611229565b602080825261049492910190610fc9565b3461048f5761052761127a6106a7366004610f54565b60405191829182611253565b3461048f576105276106ef61058a366004610560565b3461048f576105276106ef61058a3660046105f3565b3461048f57610f08366004610560565b9060208282031261048f57813567ffffffffffffffff811161048f57610a46920161098e565b3461048f576105eb3660046112c2565b3461048f576113083660046106b9565b61052760606106ad565b919060408382031261048f57610494906105bc81856104b6565b3461048f57610527610590610511366004611312565b91909160a08184031261048f5761135983826104b6565b9261136781602084016104b6565b9261137582604085016104cb565b92610c2783606083016104cb565b3461048f57610a5a366004611342565b906113a2610d30610d26845190565b9060005b8181106113b35750505090565b9091926113f9610d5e600192865180517fffffffff0000000000000000000000000000000000000000000000000000000016825260209081015115159082015260400190565b9291016113a6565b602080825261049492910190611393565b3461048f576114223660046106b9565b60405180610527606082611401565b909160608284031261048f5761049461144a84846104b6565b9361145881602086016104cb565b936040016104cb565b3461048f57610b6c366004611431565b5050610494600090565b5050505050610494600090565b505050610494600090565b50505050610494600090565b505061049460609056fea2646970667358221220e58343ad4781b32b4f8a277eaaf496a5a1796ce0432b44b6226e52371612f70e64736f6c63430008130033