Overview
APE Balance
APE Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
DragonForge
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 2000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.8.28;import "@openzeppelin/contracts/token/ERC721/IERC721.sol";import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";import "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721EnumerableUpgradeable.sol";import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";import "@openzeppelin/contracts-upgradeable/token/ERC721/utils/ERC721HolderUpgradeable.sol";import "@openzeppelin/contracts/utils/Strings.sol";import {IEntropyConsumer} from "@pythnetwork/entropy-sdk-solidity/IEntropyConsumer.sol";import {IEntropy} from "@pythnetwork/entropy-sdk-solidity/IEntropy.sol";interface IDwaginz {/// @notice Mints a new token to the specified address with the given token URI./// @param to The address to receive the newly minted token./// @param tokenUri The metadata URI for the minted token.function mint(address to, string memory tokenUri) external;}contract DragonForge isIEntropyConsumer,Initializable,OwnableUpgradeable,UUPSUpgradeable,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)pragma solidity ^0.8.20;import {ContextUpgradeable} from "../utils/ContextUpgradeable.sol";import {Initializable} from "../proxy/utils/Initializable.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 OwnableUpgradeable is Initializable, ContextUpgradeable {/// @custom:storage-location erc7201:openzeppelin.storage.Ownablestruct OwnableStorage {address _owner;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)pragma solidity ^0.8.20;/*** @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed* behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an* external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer* function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.** The initialization functions use a version number. Once a version number is used, it is consumed and cannot be* reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in* case an upgrade adds a module that needs to be initialized.** For example:** [.hljs-theme-light.nopadding]* ```solidity* contract MyToken is ERC20Upgradeable {* function initialize() initializer public {* __ERC20_init("MyToken", "MTK");* }* }** contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (proxy/utils/UUPSUpgradeable.sol)pragma solidity ^0.8.20;import {IERC1822Proxiable} from "@openzeppelin/contracts/interfaces/draft-IERC1822.sol";import {ERC1967Utils} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol";import {Initializable} from "./Initializable.sol";/*** @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an* {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.** A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is* reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing* `UUPSUpgradeable` with a custom implementation of upgrades.** The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.*/abstract contract UUPSUpgradeable is Initializable, IERC1822Proxiable {/// @custom:oz-upgrades-unsafe-allow state-variable-immutableaddress private immutable __self = address(this);/*** @dev The version of the upgrade interface of the contract. If this getter is missing, both `upgradeTo(address)`* and `upgradeToAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/ERC721.sol)pragma solidity ^0.8.20;import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";import {IERC721Metadata} from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol";import {ERC721Utils} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol";import {ContextUpgradeable} from "../../utils/ContextUpgradeable.sol";import {Strings} from "@openzeppelin/contracts/utils/Strings.sol";import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";import {ERC165Upgradeable} from "../../utils/introspection/ERC165Upgradeable.sol";import {IERC721Errors} from "@openzeppelin/contracts/interfaces/draft-IERC6093.sol";import {Initializable} from "../../proxy/utils/Initializable.sol";/*** @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC-721] Non-Fungible Token Standard, including* the Metadata extension, but not including the Enumerable extension, which is available separately as* {ERC721Enumerable}.*/abstract contract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721, IERC721Metadata, IERC721Errors {using Strings for uint256;/// @custom:storage-location erc7201:openzeppelin.storage.ERC721struct ERC721Storage {// Token name
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/extensions/ERC721Enumerable.sol)pragma solidity ^0.8.20;import {ERC721Upgradeable} from "../ERC721Upgradeable.sol";import {IERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol";import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";import {Initializable} from "../../../proxy/utils/Initializable.sol";/*** @dev This implements an optional extension of {ERC721} defined in the ERC that adds enumerability* of all the token ids in the contract as well as all token ids owned by each account.** CAUTION: {ERC721} extensions that implement custom `balanceOf` logic, such as {ERC721Consecutive},* interfere with enumerability and should not be used together with {ERC721Enumerable}.*/abstract contract ERC721EnumerableUpgradeable is Initializable, ERC721Upgradeable, IERC721Enumerable {/// @custom:storage-location erc7201:openzeppelin.storage.ERC721Enumerablestruct ERC721EnumerableStorage {mapping(address owner => mapping(uint256 index => uint256)) _ownedTokens;mapping(uint256 tokenId => uint256) _ownedTokensIndex;uint256[] _allTokens;mapping(uint256 tokenId => uint256) _allTokensIndex;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/utils/ERC721Holder.sol)pragma solidity ^0.8.20;import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";import {Initializable} from "../../../proxy/utils/Initializable.sol";/*** @dev Implementation of the {IERC721Receiver} interface.** Accepts all token transfers.* Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or* {IERC721-setApprovalForAll}.*/abstract contract ERC721HolderUpgradeable is Initializable, IERC721Receiver {function __ERC721Holder_init() internal onlyInitializing {}function __ERC721Holder_init_unchained() internal onlyInitializing {}/*** @dev See {IERC721Receiver-onERC721Received}.** Always returns `IERC721Receiver.onERC721Received.selector`.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)pragma solidity ^0.8.20;import {Initializable} from "../proxy/utils/Initializable.sol";/*** @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 ContextUpgradeable is Initializable {function __Context_init() internal onlyInitializing {}function __Context_init_unchained() internal onlyInitializing {}function _msgSender() internal view virtual returns (address) {return msg.sender;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/ERC165.sol)pragma solidity ^0.8.20;import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";import {Initializable} from "../../proxy/utils/Initializable.sol";/*** @dev Implementation of the {IERC165} interface.** Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check* for the additional interface id that will be supported. For example:** ```solidity* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);* }* ```*/abstract contract ERC165Upgradeable is Initializable, IERC165 {function __ERC165_init() internal onlyInitializing {}function __ERC165_init_unchained() internal onlyInitializing {}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)pragma solidity ^0.8.20;import {Initializable} from "../proxy/utils/Initializable.sol";/*** @dev Contract module that helps prevent reentrant calls to a function.** Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier* available, which can be applied to functions to make sure there are no nested* (reentrant) calls to them.** Note that because there is a single `nonReentrant` guard, functions marked as* `nonReentrant` may not call one another. This can be worked around by making* those functions `private`, and then adding `external` `nonReentrant` entry* points to them.** TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,* consider using {ReentrancyGuardTransient} instead.** TIP: If you would like to learn more about reentrancy and alternative ways* to protect against it, check out our blog post* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].*/abstract contract ReentrancyGuardUpgradeable is Initializable {
1234567891011121314151617181920// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC1822.sol)pragma solidity ^0.8.20;/*** @dev ERC-1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified* proxy whose upgrades are fully controlled by the current implementation.*/interface IERC1822Proxiable {/*** @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation* address.** IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks* bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this* function revert if invoked through a proxy.*/function proxiableUUID() external view returns (bytes32);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)pragma solidity ^0.8.20;/*** @dev Standard ERC-20 Errors* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.*/interface IERC20Errors {/*** @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.* @param sender Address whose tokens are being transferred.* @param balance Current balance for the interacting account.* @param needed Minimum amount required to perform a transfer.*/error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);/*** @dev Indicates a failure with the token `sender`. Used in transfers.* @param sender Address whose tokens are being transferred.*/error ERC20InvalidSender(address sender);/*** @dev Indicates a failure with the token `receiver`. Used in transfers.* @param receiver Address to which tokens are being transferred.
123456789101112131415161718192021222324// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1967.sol)pragma solidity ^0.8.20;/*** @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.*/interface IERC1967 {/*** @dev Emitted when the implementation is upgraded.*/event Upgraded(address indexed implementation);/*** @dev Emitted when the admin account has changed.*/event AdminChanged(address previousAdmin, address newAdmin);/*** @dev Emitted when the beacon is changed.*/event BeaconUpgraded(address indexed beacon);}
12345678910111213141516// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol)pragma solidity ^0.8.20;/*** @dev This is the interface that {BeaconProxy} expects of its beacon.*/interface IBeacon {/*** @dev Must return an address that can be used as a delegate call target.** {UpgradeableBeacon} will check that this address is a contract.*/function implementation() external view returns (address);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (proxy/ERC1967/ERC1967Utils.sol)pragma solidity ^0.8.21;import {IBeacon} from "../beacon/IBeacon.sol";import {IERC1967} from "../../interfaces/IERC1967.sol";import {Address} from "../../utils/Address.sol";import {StorageSlot} from "../../utils/StorageSlot.sol";/*** @dev This library provides getters and event emitting update functions for* https://eips.ethereum.org/EIPS/eip-1967[ERC-1967] slots.*/library ERC1967Utils {/*** @dev Storage slot with the address of the current implementation.* This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1.*/// solhint-disable-next-line private-vars-leading-underscorebytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;/*** @dev The `implementation` of the proxy is invalid.*/error ERC1967InvalidImplementation(address implementation);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Enumerable.sol)pragma solidity ^0.8.20;import {IERC721} from "../IERC721.sol";/*** @title ERC-721 Non-Fungible Token Standard, optional enumeration extension* @dev See https://eips.ethereum.org/EIPS/eip-721*/interface IERC721Enumerable is IERC721 {/*** @dev Returns the total amount of tokens stored by the contract.*/function totalSupply() external view returns (uint256);/*** @dev Returns a token ID owned by `owner` at a given `index` of its token list.* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.*/function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);/*** @dev Returns a token ID at a given `index` of all the tokens stored by the contract.* Use along with {totalSupply} to enumerate all tokens.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol)pragma solidity ^0.8.20;import {IERC721} from "../IERC721.sol";/*** @title ERC-721 Non-Fungible Token Standard, optional metadata extension* @dev See https://eips.ethereum.org/EIPS/eip-721*/interface IERC721Metadata is IERC721 {/*** @dev Returns the token collection name.*/function name() external view returns (string memory);/*** @dev Returns the token collection symbol.*/function symbol() external view returns (string memory);/*** @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.*/function tokenURI(uint256 tokenId) external view returns (string memory);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol)pragma solidity ^0.8.20;import {IERC165} from "../../utils/introspection/IERC165.sol";/*** @dev Required interface of an ERC-721 compliant contract.*/interface IERC721 is IERC165 {/*** @dev Emitted when `tokenId` token is transferred from `from` to `to`.*/event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);/*** @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.*/event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);/*** @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.*/event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721Receiver.sol)pragma solidity ^0.8.20;/*** @title ERC-721 token receiver interface* @dev Interface for any contract that wants to support safeTransfers* from ERC-721 asset contracts.*/interface IERC721Receiver {/*** @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}* by `operator` from `from`, this function is called.** It must return its Solidity selector to confirm the token transfer.* If any other value is returned or the interface is not implemented by the recipient, the transfer will be* reverted.** The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.*/function onERC721Received(address operator,address from,uint256 tokenId,bytes calldata data
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/utils/ERC721Utils.sol)pragma solidity ^0.8.20;import {IERC721Receiver} from "../IERC721Receiver.sol";import {IERC721Errors} from "../../../interfaces/draft-IERC6093.sol";/*** @dev Library that provide common ERC-721 utility functions.** See https://eips.ethereum.org/EIPS/eip-721[ERC-721].** _Available since v5.1._*/library ERC721Utils {/*** @dev Performs an acceptance check for the provided `operator` by calling {IERC721-onERC721Received}* on the `to` address. The `operator` is generally the address that initiated the token transfer (i.e. `msg.sender`).** The acceptance call is not executed and treated as a no-op if the target address doesn't contain code (i.e. an EOA).* Otherwise, the recipient must implement {IERC721Receiver-onERC721Received} and return the acceptance magic value to accept* the transfer.*/function checkOnERC721Received(address operator,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)pragma solidity ^0.8.20;import {Errors} from "./Errors.sol";/*** @dev Collection of functions related to the address type*/library Address {/*** @dev There's no code at `target` (it is not a contract).*/error AddressEmptyCode(address target);/*** @dev Replacement for Solidity's `transfer`: sends `amount` wei to* `recipient`, forwarding all available gas and reverting on errors.** https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost* of certain opcodes, possibly making contracts go over the 2300 gas limit* imposed by `transfer`, making them unable to receive funds via* `transfer`. {sendValue} removes this limitation.** https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)pragma solidity ^0.8.20;/*** @dev Collection of common custom errors used in multiple contracts** IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.* It is recommended to avoid relying on the error API for critical functionality.** _Available since v5.1._*/library Errors {/*** @dev The ETH balance of the account is not enough to perform the operation.*/error InsufficientBalance(uint256 balance, uint256 needed);/*** @dev A call to an address target failed. The target may have reverted.*/error FailedCall();/*** @dev The deployment failed.
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC-165 standard, as defined in the* https://eips.ethereum.org/EIPS/eip-165[ERC].** Implementers can declare support of contract interfaces, which can then be* queried by others ({ERC165Checker}).** For an implementation, see {ERC165}.*/interface IERC165 {/*** @dev Returns true if this contract implements the interface defined by* `interfaceId`. See the corresponding* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]* to learn more about how these ids are created.** This function call must use less than 30 000 gas.*/function supportsInterface(bytes4 interfaceId) external view returns (bool);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/Math.sol)pragma solidity ^0.8.20;import {Panic} from "../Panic.sol";import {SafeCast} from "./SafeCast.sol";/*** @dev Standard math utilities missing in the Solidity language.*/library Math {enum Rounding {Floor, // Toward negative infinityCeil, // Toward positive infinityTrunc, // Toward zeroExpand // Away from zero}/*** @dev Returns the addition of two unsigned integers, with an success flag (no overflow).*/function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {unchecked {uint256 c = a + b;if (c < a) return (false, 0);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SafeCast.sol)// This file was procedurally generated from scripts/generate/templates/SafeCast.js.pragma solidity ^0.8.20;/*** @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow* checks.** Downcasting from uint256/int256 in Solidity does not revert on overflow. This can* easily result in undesired exploitation or bugs, since developers usually* assume that overflows raise errors. `SafeCast` restores this intuition by* reverting the transaction when such an operation overflows.** Using this library instead of the unchecked operations eliminates an entire* class of bugs, so it's recommended to use it always.*/library SafeCast {/*** @dev Value doesn't fit in an uint of `bits` size.*/error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);/*** @dev An int value doesn't fit in an uint of `bits` size.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SignedMath.sol)pragma solidity ^0.8.20;import {SafeCast} from "./SafeCast.sol";/*** @dev Standard signed math utilities missing in the Solidity language.*/library SignedMath {/*** @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.** IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.* However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute* one branch when needed, making this function more expensive.*/function ternary(bool condition, int256 a, int256 b) internal pure returns (int256) {unchecked {// branchless ternary works because:// b ^ (a ^ b) == a// b ^ 0 == breturn b ^ ((a ^ b) * int256(SafeCast.toUint(condition)));}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/Panic.sol)pragma solidity ^0.8.20;/*** @dev Helper library for emitting standardized panic codes.** ```solidity* contract Example {* using Panic for uint256;** // Use any of the declared internal constants* function foo() { Panic.GENERIC.panic(); }** // Alternatively* function foo() { Panic.panic(Panic.GENERIC); }* }* ```** Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].** _Available since v5.1._*/// slither-disable-next-line unused-statelibrary Panic {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/StorageSlot.sol)// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.pragma solidity ^0.8.20;/*** @dev Library for reading and writing primitive types to specific storage slots.** Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.* This library helps with reading and writing to such slots without the need for inline assembly.** The functions in this library return Slot structs that contain a `value` member that can be used to read or write.** Example usage to set ERC-1967 implementation slot:* ```solidity* contract ERC1967 {* // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.* bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;** function _getImplementation() internal view returns (address) {* return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;* }** function _setImplementation(address newImplementation) internal {* require(newImplementation.code.length > 0);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/Strings.sol)pragma solidity ^0.8.20;import {Math} from "./math/Math.sol";import {SignedMath} from "./math/SignedMath.sol";/*** @dev String operations.*/library Strings {bytes16 private constant HEX_DIGITS = "0123456789abcdef";uint8 private constant ADDRESS_LENGTH = 20;/*** @dev The `value` string doesn't fit in the specified `length`.*/error StringsInsufficientHexLength(uint256 value, uint256 length);/*** @dev Converts a `uint256` to its ASCII `string` decimal representation.*/function toString(uint256 value) internal pure returns (string memory) {unchecked {uint256 length = Math.log10(value) + 1;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: Apache-2.0pragma solidity ^0.8.0;import "./EntropyStructs.sol";interface EntropyEvents {event Registered(EntropyStructs.ProviderInfo provider);event Requested(EntropyStructs.Request request);event RequestedWithCallback(address indexed provider,address indexed requestor,uint64 indexed sequenceNumber,bytes32 userRandomNumber,EntropyStructs.Request request);event Revealed(EntropyStructs.Request request,bytes32 userRevelation,bytes32 providerRevelation,bytes32 blockHash,bytes32 randomNumber);event RevealedWithCallback(EntropyStructs.Request request,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: Apache 2pragma solidity ^0.8.0;contract EntropyStructs {struct ProviderInfo {uint128 feeInWei;uint128 accruedFeesInWei;// The commitment that the provider posted to the blockchain, and the sequence number// where they committed to this. This value is not advanced after the provider commits,// and instead is stored to help providers track where they are in the hash chain.bytes32 originalCommitment;uint64 originalCommitmentSequenceNumber;// Metadata for the current commitment. Providers may optionally use this field to help// manage rotations (i.e., to pick the sequence number from the correct hash chain).bytes commitmentMetadata;// Optional URI where clients can retrieve revelations for the provider.// Client SDKs can use this field to automatically determine how to retrieve random values for each provider.// TODO: specify the API that must be implemented at this URIbytes uri;// The first sequence number that is *not* included in the current commitment (i.e., an exclusive end index).// The contract maintains the invariant that sequenceNumber <= endSequenceNumber.// If sequenceNumber == endSequenceNumber, the provider must rotate their commitment to add additional random values.uint64 endSequenceNumber;// The sequence number that will be assigned to the next inbound user request.uint64 sequenceNumber;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: Apache 2pragma solidity ^0.8.0;import "./EntropyEvents.sol";interface IEntropy is EntropyEvents {// Register msg.sender as a randomness provider. The arguments are the provider's configuration parameters// and initial commitment. Re-registering the same provider rotates the provider's commitment (and updates// the feeInWei).//// chainLength is the number of values in the hash chain *including* the commitment, that is, chainLength >= 1.function register(uint128 feeInWei,bytes32 commitment,bytes calldata commitmentMetadata,uint64 chainLength,bytes calldata uri) external;// Withdraw a portion of the accumulated fees for the provider msg.sender.// Calling this function will transfer `amount` wei to the caller (provided that they have accrued a sufficient// balance of fees in the contract).function withdraw(uint128 amount) external;// Withdraw a portion of the accumulated fees for provider. The msg.sender must be the fee manager for this provider.// Calling this function will transfer `amount` wei to the caller (provided that they have accrued a sufficient
1234567891011121314151617181920212223242526// SPDX-License-Identifier: Apache 2pragma solidity ^0.8.0;abstract contract IEntropyConsumer {// This method is called by Entropy to provide the random number to the consumer.// It asserts that the msg.sender is the Entropy contract. It is not meant to be// override by the consumer.function _entropyCallback(uint64 sequence,address provider,bytes32 randomNumber) external {address entropy = getEntropy();require(entropy != address(0), "Entropy address not set");require(msg.sender == entropy, "Only Entropy can call this function");entropyCallback(sequence, provider, randomNumber);}// getEntropy returns Entropy contract address. The method is being used to check that the// callback is indeed from Entropy contract. The consumer is expected to implement this method.// Entropy address can be found here - https://docs.pyth.network/entropy/contract-addressesfunction getEntropy() internal view virtual returns (address);// This method is expected to be implemented by the consumer to handle the random number.// It will be called by _entropyCallback after _entropyCallback ensures that the call is
1234567891011121314151617181920{"optimizer": {"enabled": true,"runs": 2000},"outputSelection": {"*": {"*": ["evm.bytecode","evm.deployedBytecode","devdoc","userdoc","metadata","abi"]}},"evmVersion": "paris","libraries": {}}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"AlreadyStaked","type":"error"},{"inputs":[],"name":"CheckinToEarly","type":"error"},{"inputs":[],"name":"ConfigMismatch","type":"error"},{"inputs":[],"name":"DirectTransferNotAllowed","type":"error"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"name":"ERC1967InvalidImplementation","type":"error"},{"inputs":[],"name":"ERC1967NonPayable","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"InputMismatch","type":"error"},{"inputs":[{"internalType":"uint256","name":"currentRewards","type":"uint256"},{"internalType":"uint256","name":"pointsRequired","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[{"internalType":"uint256","name":"sent","type":"uint256"},{"internalType":"uint256","name":"required","type":"uint256"}],"name":"InsufficientFee","type":"error"},{"inputs":[{"internalType":"address","name":"provider","type":"address"}],"name":"InvalidEntropyProvider","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"InvalidEntropySender","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"InvalidProbabilitySum","type":"error"},{"inputs":[],"name":"InvalidProvider","type":"error"},{"inputs":[],"name":"InvalidRollType","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"InvalidTokenIndex","type":"error"},{"inputs":[{"internalType":"uint64","name":"sequenceNumber","type":"uint64"}],"name":"MintAlreadyCompleted","type":"error"},{"inputs":[{"internalType":"uint64","name":"sequenceNumber","type":"uint64"}],"name":"MintRequestAlreadyCancelled","type":"error"},{"inputs":[{"internalType":"uint64","name":"requestId","type":"uint64"},{"internalType":"uint256","name":"timeLeft","type":"uint256"}],"name":"MintRequestNotYetExpired","type":"error"},{"inputs":[],"name":"MintingClosed","type":"error"},{"inputs":[],"name":"NoMintsLeft","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NotOwnerOfToken","type":"error"},{"inputs":[],"name":"NotStakedOwner","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint64","name":"sequenceNumber","type":"uint64"}],"name":"RequestAlreadyCancelled","type":"error"},{"inputs":[{"internalType":"uint64","name":"sequenceNumber","type":"uint64"}],"name":"RequestAlreadyCompleted","type":"error"},{"inputs":[{"internalType":"uint64","name":"sequenceNumber","type":"uint64"}],"name":"RequestNotCompleted","type":"error"},{"inputs":[],"name":"RollsNotInitialized","type":"error"},{"inputs":[],"name":"StakingClosed","type":"error"},{"inputs":[],"name":"TooManyRollTypes","type":"error"},{"inputs":[],"name":"UUPSUnauthorizedCallContext","type":"error"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"name":"UUPSUnsupportedProxiableUUID","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"DailyBonusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"DailyCheckin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"DinnerPartyDailyBonusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"discount","type":"uint256"}],"name":"DinnerPartyDiscountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"dwaginzAddress","type":"address"}],"name":"DwaginzContractUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint64","name":"requestId","type":"uint64"}],"name":"MintFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint64","name":"requestId","type":"uint64"}],"name":"MintRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"open","type":"bool"}],"name":"MintingModeUpdated","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":"uint256","name":"points","type":"uint256"}],"name":"PointsPerDayPerTokenUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenType","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"points","type":"uint256"}],"name":"PointsRequiredUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"provider","type":"address"}],"name":"ProviderUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"RarityLevelsInitialized","type":"event"},{"anonymous":false,"inputs":[],"name":"RollTypesInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"open","type":"bool"}],"name":"StakingModeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"TokenMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint64","name":"requestId","type":"uint64"}],"name":"TokenReadyForMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Unstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[],"name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"sequence","type":"uint64"},{"internalType":"address","name":"provider","type":"address"},{"internalType":"bytes32","name":"randomNumber","type":"bytes32"}],"name":"_entropyCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allStakers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkinBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dailyCheckIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dinnerParty","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dinnerPartyDailyBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dinnerPartyDiscount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dragons","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dwaginz","outputs":[{"internalType":"contract IDwaginz","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"entropy","outputs":[{"internalType":"contract IEntropy","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"existingRolls","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllRarityLevels","outputs":[{"components":[{"internalType":"uint256","name":"minted","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"string","name":"tokenUri","type":"string"}],"internalType":"struct DragonForge.RarityLevel[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllRollTypes","outputs":[{"components":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256[]","name":"probabilities","type":"uint256[]"}],"internalType":"struct DragonForge.RollType[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllStakers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getMintRequestsByUser","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"rollTypeId","type":"uint8"}],"name":"getRollTypeById","outputs":[{"components":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256[]","name":"probabilities","type":"uint256[]"}],"internalType":"struct DragonForge.RollType","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getTokensStaked","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasStaked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"entropy_","type":"address"},{"internalType":"uint256","name":"pointsPerHourPerToken_","type":"uint256"},{"internalType":"address","name":"dragonsAddress_","type":"address"},{"internalType":"address","name":"dinnerPartyAddress_","type":"address"},{"internalType":"address","name":"dwaginzAddress_","type":"address"},{"internalType":"address","name":"provider_","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"minted","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"string","name":"tokenUri","type":"string"}],"internalType":"struct DragonForge.RarityLevel[]","name":"_rarityLevels","type":"tuple[]"}],"name":"initializeRarityLevels","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256[]","name":"probabilities","type":"uint256[]"}],"internalType":"struct DragonForge.RollType[]","name":"newRollTypes","type":"tuple[]"}],"name":"initializeRollTypes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastCheckinTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintRequestId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"name":"mintRequests","outputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"payedPrice","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"randomNumber","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"uri","type":"string"},{"internalType":"uint8","name":"rollType","type":"uint8"},{"internalType":"bool","name":"requestCompleted","type":"bool"},{"internalType":"bool","name":"cancelled","type":"bool"},{"internalType":"bool","name":"mintFinalized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintRequestsByUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintedDragonCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"owedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"totalClaimable","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pointsPerDayPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pointsPerHourPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"provider","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"rarityLevels","outputs":[{"internalType":"uint256","name":"minted","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"string","name":"tokenUri","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rarityLevelsInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"name":"requestIdToMintId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"rollType","type":"uint8"}],"name":"requestToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint64","name":"sequenceNumber","type":"uint64"}],"name":"resolveExpiredMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rolesInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"rollTypes","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"sequenceNumber","type":"uint64"}],"name":"selectRarityAndMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"setDailyBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"setDinnerPartyDailyBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"discount","type":"uint256"}],"name":"setDinnerPartyDiscount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dwaginzAddress","type":"address"}],"name":"setDwaginzContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"open","type":"bool"}],"name":"setMintingMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pointsPerDay","type":"uint256"}],"name":"setPointsPerDayPerToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"provider_","type":"address"}],"name":"setProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"open","type":"bool"}],"name":"setStakingMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakedTokenIds","outputs":[{"internalType":"uint256","name":"stakedTokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"stakedTokenProps","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"checkInTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"}]
Contract Creation Code
60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051614ec66100fd600039600081816136610152818161368a01526139590152614ec66000f3fe6080604052600436106103a25760003560e01c8063729bab6f116101e7578063afcf7b9c1161010d578063da86e654116100a0578063f01fe8bd1161006f578063f01fe8bd14610bf9578063f2fde38b14610c0c578063f54b14bd14610c2c578063fb17177f14610c4157600080fd5b8063da86e65414610b6c578063e09877b914610b8c578063e449f34114610bb9578063ed21e78114610bd957600080fd5b8063c3982584116100dc578063c398258414610ac6578063c93c8f3414610afc578063cfd8d6c014610b2c578063d8ad1e6014610b4c57600080fd5b8063afcf7b9c14610a39578063b75476e414610a59578063c00484b814610a79578063c3214d6c14610aa657600080fd5b80638f4bb49711610185578063ad10282a11610154578063ad10282a14610983578063ad3cb1cc146109a3578063ad5cb487146109ec578063ae19773714610a1957600080fd5b80638f4bb4971461090e578063975ea3961461092d5780639ace630b14610943578063a2dc2ab71461096357600080fd5b806381985bfb116101c157806381985bfb1461087957806383c3bd99146108995780638bd0f386146108af5780638da5cb5b146108d157600080fd5b8063729bab6f146108125780637c4d6c67146108415780637c6588fc1461086357600080fd5b80634b517003116102cc57806355ca068e1161026a5780636d97acb4116102395780636d97acb41461079a5780636e4f88c8146107bb5780636f3c1e78146107dd578063715018a6146107fd57600080fd5b806355ca068e146106ce57806363b9d30f1461072d578063679e699a1461074d5780636bb2c6241461076d57600080fd5b806352a5f1f8116102a657806352a5f1f81461062a57806352d1902d1461064a57806352eb77961461065f57806354fd4d501461067f57600080fd5b80634b517003146105d45780634f1ef286146106015780635162de291461061457600080fd5b806324e73f9a11610344578063387602981161031357806338760298146105545780633c10ec1d1461057e578063469316c51461059457806347ce07cc146105b457600080fd5b806324e73f9a146104d157806331d7a262146104fe57806332515e4c1461051e578063359781621461053e57600080fd5b80630fbf0a93116103805780630fbf0a931461042a5780630fc00b581461044a578063150b7a021461046057806320003a18146104b157600080fd5b80630383169d146103a757806307e3c2fa146103c9578063085d4883146103f2575b600080fd5b3480156103b357600080fd5b506103c76103c236600461419b565b610c61565b005b3480156103d557600080fd5b506103df60055481565b6040519081526020015b60405180910390f35b3480156103fe57600080fd5b50600a54610412906001600160a01b031681565b6040516001600160a01b0390911681526020016103e9565b34801561043657600080fd5b506103c76104453660046141b4565b610ca5565b34801561045657600080fd5b506103df60015481565b34801561046c57600080fd5b5061048061047b36600461434f565b610d6c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016103e9565b3480156104bd57600080fd5b506103c76104cc3660046143bb565b610ddb565b3480156104dd57600080fd5b506104f16104ec3660046143dd565b610e2c565b6040516103e991906143fa565b34801561050a57600080fd5b506103df6105193660046143dd565b610e98565b34801561052a57600080fd5b50600b54610412906001600160a01b031681565b34801561054a57600080fd5b506103df60035481565b34801561056057600080fd5b5060005461056e9060ff1681565b60405190151581526020016103e9565b34801561058a57600080fd5b506103df60025481565b3480156105a057600080fd5b506103c76105af3660046143dd565b610ece565b3480156105c057600080fd5b50600e54610412906001600160a01b031681565b3480156105e057600080fd5b506103df6105ef3660046143dd565b60146020526000908152604090205481565b6103c761060f36600461443d565b610f31565b34801561062057600080fd5b506103df60065481565b34801561063657600080fd5b506103c76106453660046144a3565b610f4c565b34801561065657600080fd5b506103df611080565b34801561066b57600080fd5b506104f161067a3660046143dd565b6110af565b34801561068b57600080fd5b5060408051808201909152600381527f312e30000000000000000000000000000000000000000000000000000000000060208201525b6040516103e99190614534565b3480156106da57600080fd5b5061070e6106e936600461419b565b601160205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152016103e9565b34801561073957600080fd5b506103c761074836600461419b565b611119565b34801561075957600080fd5b5060005461056e9062010000900460ff1681565b34801561077957600080fd5b5061078d610788366004614547565b611156565b6040516103e991906145c4565b3480156107a657600080fd5b5060005461056e906301000000900460ff1681565b3480156107c757600080fd5b506107d06111ed565b6040516103e991906145d7565b3480156107e957600080fd5b506103c76107f836600461419b565b61124f565b34801561080957600080fd5b506103c761128c565b34801561081e57600080fd5b5061083261082d366004614547565b6112a0565b6040516103e993929190614618565b34801561084d57600080fd5b5061085661134b565b6040516103e99190614637565b34801561086f57600080fd5b506103df60085481565b34801561088557600080fd5b506103c76108943660046146c0565b611474565b3480156108a557600080fd5b506103df60045481565b3480156108bb57600080fd5b506108c46115fc565b6040516103e99190614826565b3480156108dd57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610412565b34801561091a57600080fd5b5060005461056e90610100900460ff1681565b34801561093957600080fd5b506103df60075481565b34801561094f57600080fd5b506103df61095e3660046148a0565b611780565b34801561096f57600080fd5b506103c761097e3660046148cc565b6117b1565b34801561098f57600080fd5b506103df61099e3660046148a0565b6119c8565b3480156109af57600080fd5b506106c16040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156109f857600080fd5b506103df610a073660046143dd565b600f6020526000908152604090205481565b348015610a2557600080fd5b50600c54610412906001600160a01b031681565b348015610a4557600080fd5b506103c7610a54366004614945565b6119e4565b348015610a6557600080fd5b50600d54610412906001600160a01b031681565b348015610a8557600080fd5b506103df610a94366004614547565b60186020526000908152604090205481565b348015610ab257600080fd5b50610412610ac136600461419b565b611b88565b348015610ad257600080fd5b50610ae6610ae1366004614a57565b611bb2565b6040516103e99a99989796959493929190614a74565b348015610b0857600080fd5b5061056e610b173660046143dd565b60126020526000908152604090205460ff1681565b348015610b3857600080fd5b506103c7610b473660046143dd565b611ca2565b348015610b5857600080fd5b506103c7610b673660046143bb565b611d05565b348015610b7857600080fd5b506103c7610b87366004614a57565b611d4e565b348015610b9857600080fd5b506103df610ba7366004614a57565b60156020526000908152604090205481565b348015610bc557600080fd5b506103c7610bd43660046141b4565b612492565b348015610be557600080fd5b506103c7610bf436600461419b565b612579565b6103c7610c07366004614547565b6125c4565b348015610c1857600080fd5b506103c7610c273660046143dd565b612cbf565b348015610c3857600080fd5b506103c7612d13565b348015610c4d57600080fd5b506103c7610c5c366004614a57565b612ef4565b610c696130bf565b60088190556040518181527f634bc2b8b7fdce3d2a6f7e269b98f5e05da5749b34283caa0515dcba22604a15906020015b60405180910390a150565b610cad613133565b60005460ff16610ce9576040517f5e0ff49500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805464ff0000000019166401000000001781555b81811015610d3057610d28838383818110610d1c57610d1c614ae0565b905060200201356131b4565b600101610cff565b506000805464ff0000000019169055610d6860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b60008054640100000000900460ff16610db1576040517f3ee6509d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b507f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b610de36130bf565b600080548215156101000261ff00199091161790556040517fd01e23fc98b8adc62feb5db89e26170f9e4866cdb29dd45e46d159428754527e90610c9a90831515815260200190565b6001600160a01b038116600090815260176020908152604091829020805483518184028101840190945280845260609392830182828015610e8c57602002820191906000526020600020905b815481526020019060010190808311610e78575b50505050509050919050565b6001600160a01b038116600090815260146020526040812054610eba83613493565b509150610ec78183614b0c565b9392505050565b610ed66130bf565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f0d5a421de8c308461de4227dc89f8ca5a18edd7e662dbeef0dd435708db7aa4b90602001610c9a565b610f39613656565b610f4282613726565b610d68828261372e565b6000610f60600e546001600160a01b031690565b90506001600160a01b038116610fd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f456e74726f70792061646472657373206e6f742073657400000000000000000060448201526064015b60405180910390fd5b336001600160a01b0382161461106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f6e6c7920456e74726f70792063616e2063616c6c20746869732066756e637460448201527f696f6e00000000000000000000000000000000000000000000000000000000006064820152608401610fce565b61107a848484613834565b50505050565b600061108a61394e565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6001600160a01b038116600090815260106020908152604091829020805483518184028101840190945280845260609392830182828015610e8c5760200282019190600052602060002090815481526020019060010190808311610e785750505050509050919050565b6111216130bf565b60058190556040518181527f8f231497a5c49759a8f67360d54c6d6276ace99f4ba86a09e908c75f2880d3b990602001610c9a565b60408051808201909152600081526060602082015260ff821660009081526018602090815260409182902082518084018452815481526001820180548551818602810186019096528086529294919385938582019392918301828280156111dc57602002820191906000526020600020905b8154815260200190600101908083116111c8575b505050505081525050915050919050565b6060600980548060200260200160405190810160405280929190818152602001828054801561124557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611227575b5050505050905090565b6112576130bf565b60068190556040518181527f4002e8e15b65eba487bb6e5d04a371e3be12bb23351b75e20c2e35d477169fd290602001610c9a565b6112946130bf565b61129e60006139b0565b565b601960205260009081526040902080546001820154600283018054929391926112c890614b1f565b80601f01602080910402602001604051908101604052809291908181526020018280546112f490614b1f565b80156113415780601f1061131657610100808354040283529160200191611341565b820191906000526020600020905b81548152906001019060200180831161132457829003601f168201915b5050505050905083565b6060600060075467ffffffffffffffff81111561136a5761136a614240565b6040519080825280602002602001820160405280156113b057816020015b6040805180820190915260008152606060208201528152602001906001900390816113885790505b50905060005b6007548160ff16101561146e5760ff811660009081526018602090815260409182902082518084018452815481526001820180548551818602810186019096528086529194929385810193929083018282801561143257602002820191906000526020600020905b81548152602001906001019080831161141e575b505050505081525050828260ff168151811061145057611450614ae0565b6020026020010181905250808061146690614b53565b9150506113b6565b50919050565b61147c6130bf565b60005b81518160ff1610156115bb576000805b838360ff16815181106114a4576114a4614ae0565b602002602001015160200151518160ff16101561151757838360ff16815181106114d0576114d0614ae0565b6020026020010151602001518160ff16815181106114f0576114f0614ae0565b6020026020010151826115039190614b0c565b91508061150f81614b53565b91505061148f565b508061271014611553576040517f75db77be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828260ff168151811061156857611568614ae0565b60209081029190910181015160ff84166000908152601883526040902081518155818301518051929391926115a3926001850192019061413b565b509050505080806115b390614b53565b91505061147f565b506000805462ff000019166201000017815581516007556040517f93fb52f4c0defe74e0410af19519d83f8ca2fa8b063f61af6cb0ebcf7bcf90339190a150565b6060600060075467ffffffffffffffff81111561161b5761161b614240565b60405190808252806020026020018201604052801561167057816020015b61165d60405180606001604052806000815260200160008152602001606081525090565b8152602001906001900390816116395790505b50905060005b6007548160ff16101561146e57601960008260ff1660ff16815260200190815260200160002060405180606001604052908160008201548152602001600182015481526020016002820180546116cb90614b1f565b80601f01602080910402602001604051908101604052809291908181526020018280546116f790614b1f565b80156117445780601f1061171957610100808354040283529160200191611744565b820191906000526020600020905b81548152906001019060200180831161172757829003601f168201915b505050505081525050828260ff168151811061176257611762614ae0565b6020026020010181905250808061177890614b53565b915050611676565b6017602052816000526040600020818154811061179c57600080fd5b90600052602060002001600091509150505481565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117fc5750825b905060008267ffffffffffffffff1660011480156118195750303b155b905081158015611827575080155b1561185e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118a957845468ff00000000000000001916680100000000000000001785555b6118b233613a2e565b6118ba613a3f565b6118c2613a47565b6118ca613a3f565b600d805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b038a811691909117909255600b805482168c8416179055600c805482168b8416179055600e805482168e8416179055600a805490911691881691909117905560018a905561193d8a6018614b72565b60025560106020527f6e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb018054600101815560005283156119bb57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b6010602052816000526040600020818154811061179c57600080fd5b6119ec6130bf565b60005462010000900460ff16611a2e576040517ff9bbd6e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260186020527f999d26de3473317ead3eeaf34ca78057f1439db67b6953469c3c96ce9caf6bd854815114611a92576040517fc19b5e1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81518160ff161015611b4a57604051806060016040528060008152602001838360ff1681518110611ac857611ac8614ae0565b6020026020010151602001518152602001838360ff1681518110611aee57611aee614ae0565b60209081029190910181015160409081015190925260ff841660009081526019825282902083518155908301516001820155908201516002820190611b339082614bd7565b509050508080611b4290614b53565b915050611a95565b506000805463ff000000191663010000001781556040517f7f0d7f141879883adc171c73d76dde9121cec1cf6e831392492e41a702e770ff9190a150565b60098181548110611b9857600080fd5b6000918252602090912001546001600160a01b0316905081565b6016602052600090815260409020805460018201546002830154600384015460048501546005860180546001600160a01b0390961696949593949293919291611bfa90614b1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2690614b1f565b8015611c735780601f10611c4857610100808354040283529160200191611c73565b820191906000526020600020905b815481529060010190602001808311611c5657829003601f168201915b5050506006909301549192505060ff80821691610100810482169162010000820481169163010000009004168a565b611caa6130bf565b600a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f04edb8310ed01a0a03457cedcf27942dd9b4a7ef37772645bbc59e4e8da004ed90602001610c9a565b611d0d6130bf565b6000805460ff19168215159081179091556040519081527f7e5b62ea496dc04c3be19fcfd2b0f3cab4ac575e334390e1894ca2a88c2bdce790602001610c9a565b67ffffffffffffffff811660009081526016602052604090206006810154610100900460ff16611db6576040517f74425a3200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610fce565b60068101546301000000900460ff1615611e08576040517fe14711c300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610fce565b600060075467ffffffffffffffff811115611e2557611e25614240565b604051908082528060200260200182016040528015611e4e578160200160208202803683370190505b5090506000805b6007548160ff161015611f0d5760ff8116600090815260196020526040902060018101549054108015611ec35750600684015460ff9081166000908152601860205260408120600101805491929091908416908110611eb657611eb6614ae0565b9060005260206000200154115b15611efb5780838381518110611edb57611edb614ae0565b60ff9092166020928302919091019091015281611ef781614c96565b9250505b80611f0581614b53565b915050611e55565b5080600003611fae57600183015483546001600160a01b031660009081526014602052604081208054909190611f44908490614b0c565b909155505060068301805462ff0000191662010000179055825460405167ffffffffffffffff861681526001600160a01b03909116907f6f6290c55281386a53797bb043876aec39c9bc5fb93c59d2189b319416d9e3a3906020015b60405180910390a250505050565b6000805b828160ff16101561203f576000848260ff1681518110611fd457611fd4614ae0565b602090810291909101810151600688015460ff908116600090815260189093526040909220600101805491935091831690811061201357612013614ae0565b9060005260206000200154836120299190614b0c565b925050808061203790614b53565b915050611fb2565b50806000036120e057600184015484546001600160a01b031660009081526014602052604081208054909190612076908490614b0c565b909155505060068401805462ff0000191662010000179055835460405167ffffffffffffffff871681526001600160a01b03909116907f6f6290c55281386a53797bb043876aec39c9bc5fb93c59d2189b319416d9e3a39060200160405180910390a25050505050565b6000806000805b60058160ff16101561223e57600060ff821615612147578589600301548560405160200161211f929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c6121429190614cc6565b612157565b8589600301546121579190614cc6565b90506000805b888160ff1610156121f85760008a8260ff168151811061217f5761217f614ae0565b60209081029190910181015160068e015460ff90811660009081526018909352604090922060010180549193509183169081106121be576121be614ae0565b9060005260206000200154836121d49190614b0c565b9250828410156121e55796506121f8565b50806121f081614b53565b91505061215d565b5060ff861660009081526019602052604090206001810154905410156122235760019350505061223e565b8461222d81614c96565b9550506000955050506001016120e7565b50806122df57600187015487546001600160a01b031660009081526014602052604081208054909190612272908490614b0c565b909155505060068701805462ff0000191662010000179055865460405167ffffffffffffffff8a1681526001600160a01b03909116907f6f6290c55281386a53797bb043876aec39c9bc5fb93c59d2189b319416d9e3a39060200160405180910390a25050505050505050565b60ff83166000908152601960205260408120805460019290612302908490614b0c565b9250508190555060016003600082825461231c9190614b0c565b909155505060035460028089019190915560ff841660009081526019602052604081208054920161234c83613a57565b60405160200161235d929190614cda565b60408051601f1981840301815291815267ffffffffffffffff8c1660009081526016602052209091506005016123938282614bd7565b5067ffffffffffffffff8a1660009081526016602052604090819020600601805463ff00000019166301000000179055600d548a5491517fd0def5210000000000000000000000000000000000000000000000000000000081526001600160a01b039182169263d0def52192612410929116908590600401614d88565b600060405180830381600087803b15801561242a57600080fd5b505af115801561243e573d6000803e3d6000fd5b50508a546003546040519081526001600160a01b0390911692507fb9144c96c86541f6fa89c9f2f02495cccf4b08cd6643e26d34ee00aa586558a8915060200160405180910390a250505050505050505050565b61249a613133565b60008190036124d5576040517f609f982f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806124e133613493565b915091506124ee81613af7565b8115612519573360009081526014602052604081208054849290612513908490614b0c565b90915550505b60005b8381101561254d5761254585858381811061253957612539614ae0565b90506020020135613b43565b60010161251c565b505050610d6860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6125816130bf565b61258c601882614db2565b60015560028190556040518181527fe649fb22a1eadca8ab516cf70d4d4d4df019180fcfa64e69dcd8bd0a0f1ec3e890602001610c9a565b6125cc613133565b6007548160ff161061260a576040517f9915af2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1661264b576040517fa7e4d9bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff8116600090815260186020526040812090805b600183015460ff821610156126d457826001018160ff168154811061268757612687614ae0565b9060005260206000200154600003156126c25760ff811660009081526019602052604090206001810154905410156126c257600191506126d4565b806126cc81614b53565b915050612660565b508061270c576040517f60c2fe3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600090156127b757600654600c546040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561277b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279f9190614dc6565b6127aa906064614b72565b6127b49190614db2565b90505b60ff841660009081526018602052604090205460328211156127d857603291505b60646127e48382614ddf565b6127ee9083614b72565b6127f89190614db2565b905060008061280633613493565b9150915061281381613af7565b3360009081526014602052604081205461282d9084614b0c565b905083811015612873576040517fcf4791810000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610fce565b600e54600a546040517fb88c91480000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600092919091169063b88c914890602401602060405180830381865afa1580156128dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129019190614df2565b6fffffffffffffffffffffffffffffffff16905080341015612958576040517fa458261b00000000000000000000000000000000000000000000000000000000815234600482015260248101829052604401610fce565b60006129648684614ddf565b3360009081526014602052604081208290556004805492935060019290919061298e908490614b0c565b9091555050600e54600a5460408051426020808301919091523360601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168284015282516034818403018152605483019384905280519101207f19cb825f000000000000000000000000000000000000000000000000000000009092526001600160a01b039283166058820152607881019190915260009291909116906319cb825f90859060980160206040518083038185885af1158015612a55573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a7a9190614e24565b9050604051806101400160405280336001600160a01b0316815260200188815260200160008152602001600081526020014281526020016040518060200160405280600081525081526020018c60ff16815260200160001515815260200160001515815260200160001515815250601660008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005019081612b799190614bd7565b5060c0820151600691909101805460e0840151610100808601516101209096015160ff9095167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090931692909217901515909102177fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff16620100009315159390930263ff00000019169290921763010000009115159190910217905560045467ffffffffffffffff821660008181526015602090815260408083209490945533808352601782528483208054600181018255908452928290209092018390559251918252917f443a04e0e8473b1953759330661fba17954caf7e1462044e16472108918e50bc910160405180910390a250505050505050505050612cbc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50565b612cc76130bf565b6001600160a01b038116612d0a576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610fce565b612cbc816139b0565b612d1b613133565b60005460ff16612d57576040517f5e0ff49500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600f6020526040902054612d749062015180614b0c565b421015612dad576040517fa15db8b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c546040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e339190614dc6565b905060085481612e439190614b72565b600554612e509190614b0c565b3360009081526014602052604081208054909190612e6f908490614b0c565b9091555050336000818152600f602052604090819020429081905560055491517f28b131c4e2da70e2aaf0daf291b825eae0fb46025cfbe446c660a8a1b893005992612ec2928252602082015260400190565b60405180910390a25061129e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b67ffffffffffffffff811660009081526016602052604090206006810154610100900460ff1615612f5d576040517fe14711c300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610fce565b600681015462010000900460ff1615612fae576040517f92f6a17500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610fce565b6004810154612fc09062015180614b0c565b4211613029578142826004015462015180612fdb9190614b0c565b612fe59190614ddf565b6040517fc7788ec500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90921660048301526024820152604401610fce565b600181015481546001600160a01b031660009081526014602052604081208054909190613057908490614b0c565b909155505060068101805462ff0000191662010000179055805460405167ffffffffffffffff841681526001600160a01b03909116907f6f6290c55281386a53797bb043876aec39c9bc5fb93c59d2189b319416d9e3a3906020015b60405180910390a25050565b336130f17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461129e576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610fce565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016131ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000818152601160205260409020546001600160a01b031615613203576040517f0ae3514d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b546040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810183905233916001600160a01b031690636352211e90602401602060405180830381865afa158015613265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132899190614e41565b6001600160a01b0316146132cc576040517f3b94a19900000000000000000000000000000000000000000000000000000000815260048101829052602401610fce565b6000818152601160205260409020805473ffffffffffffffffffffffffffffffffffffffff1916331781554260019091015561333181336000908152601060209081526040808320805485855260138452918420829055600182018155835291200155565b3360009081526012602052604090205460ff166133b257336000818152601260205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff191690911790555b600b546040517f42842e0e000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390526001600160a01b03909116906342842e0e90606401600060405180830381600087803b15801561341d57600080fd5b505af1158015613431573d6000803e3d6000fd5b50506040518381523392507f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d915060200160405180910390a250565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381166000908152601060205260408120805460609190838167ffffffffffffffff8111156134cb576134cb614240565b6040519080825280602002602001820160405280156134f4578160200160208202803683370190505b5090506000805b838110156135bc57600085828154811061351757613517614ae0565b600091825260208083209091015480835260119091526040909120600181015491925090428110156135b157600061354f8242614ddf565b90506000610e10600154836135649190614b72565b61356e9190614db2565b905061357a818d614b0c565b9b5080156135ae578488888151811061359557613595614ae0565b6020908102919091010152866135aa81614c96565b9750505b50505b5050506001016134fb565b508067ffffffffffffffff8111156135d6576135d6614240565b6040519080825280602002602001820160405280156135ff578160200160208202803683370190505b50945060005b8181101561364c5782818151811061361f5761361f614ae0565b602002602001015186828151811061363957613639614ae0565b6020908102919091010152600101613605565b5050505050915091565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806136ef57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166136e37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561129e576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cbc6130bf565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613788575060408051601f3d908101601f1916820190925261378591810190614dc6565b60015b6137c9576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610fce565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114613825576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610fce565b61382f8383613c8a565b505050565b67ffffffffffffffff831660009081526016602052604090206006810154610100900460ff161561389d576040517fa9ca464700000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610fce565b600681015462010000900460ff16156138ee576040517f15352ccc00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610fce565b6003810182905560068101805461ff001916610100179055805460405167ffffffffffffffff861681526001600160a01b03909116907f046ece5b237dbc78a87b32d643863502806f4c16fde8fec124dc08991293802c90602001611fa0565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461129e576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b613a36613ce0565b612cbc81613d47565b61129e613ce0565b613a4f613ce0565b61129e613d4f565b60606000613a6483613d57565b600101905060008167ffffffffffffffff811115613a8457613a84614240565b6040519080825280601f01601f191660200182016040528015613aae576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084613ab857509392505050565b60005b8151811015610d68576000828281518110613b1757613b17614ae0565b602090810291909101810151600090815260119091526040902042600191820155919091019050613afa565b6000818152601160205260409020546001600160a01b0316338114613b94576040517f4d01b4c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152601160205260408120805473ffffffffffffffffffffffffffffffffffffffff1916815560010155613bca82613e3a565b600b546040517f42842e0e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015260448201859052909116906342842e0e90606401600060405180830381600087803b158015613c3757600080fd5b505af1158015613c4b573d6000803e3d6000fd5b50505050806001600160a01b03167f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75836040516130b391815260200190565b613c9382613f39565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115613cd85761382f8282613fd6565b610d6861404c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661129e576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cc7613ce0565b61346d613ce0565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613da0577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613dcc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310613dea57662386f26fc10000830492506010015b6305f5e1008310613e02576305f5e100830492506008015b6127108310613e1657612710830492506004015b60648310613e28576064830492506002015b600a8310613e34576001015b92915050565b33600090815260106020908152604080832084845260139092529091205481548110613e92576040517f609f982f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81546000908390613ea590600190614ddf565b81548110613eb557613eb5614ae0565b9060005260206000200154905080838381548110613ed557613ed5614ae0565b60009182526020808320909101929092558281526013909152604090208290558254839080613f0657613f06614e5e565b60019003818190600052602060002001600090559055601360008581526020019081526020016000206000905550505050565b806001600160a01b03163b600003613f88576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610fce565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051613ff39190614e74565b600060405180830381855af49150503d806000811461402e576040519150601f19603f3d011682016040523d82523d6000602084013e614033565b606091505b5091509150614043858383614084565b95945050505050565b341561129e576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261409957614094826140f9565b610ec7565b81511580156140b057506001600160a01b0384163b155b156140f2576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610fce565b5092915050565b8051156141095780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828054828255906000526020600020908101928215614176579160200282015b8281111561417657825182559160200191906001019061415b565b50614182929150614186565b5090565b5b808211156141825760008155600101614187565b6000602082840312156141ad57600080fd5b5035919050565b600080602083850312156141c757600080fd5b823567ffffffffffffffff8111156141de57600080fd5b8301601f810185136141ef57600080fd5b803567ffffffffffffffff81111561420657600080fd5b8560208260051b840101111561421b57600080fd5b6020919091019590945092505050565b6001600160a01b0381168114612cbc57600080fd5b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561427957614279614240565b60405290565b6040516060810167ffffffffffffffff8111828210171561427957614279614240565b604051601f8201601f1916810167ffffffffffffffff811182821017156142cb576142cb614240565b604052919050565b60008067ffffffffffffffff8411156142ee576142ee614240565b50601f8301601f1916602001614303816142a2565b91505082815283838301111561431857600080fd5b828260208301376000602084830101529392505050565b600082601f83011261434057600080fd5b610ec7838335602085016142d3565b6000806000806080858703121561436557600080fd5b84356143708161422b565b935060208501356143808161422b565b925060408501359150606085013567ffffffffffffffff8111156143a357600080fd5b6143af8782880161432f565b91505092959194509250565b6000602082840312156143cd57600080fd5b81358015158114610ec757600080fd5b6000602082840312156143ef57600080fd5b8135610ec78161422b565b602080825282518282018190526000918401906040840190835b81811015614432578351835260209384019390920191600101614414565b509095945050505050565b6000806040838503121561445057600080fd5b823561445b8161422b565b9150602083013567ffffffffffffffff81111561447757600080fd5b6144838582860161432f565b9150509250929050565b67ffffffffffffffff81168114612cbc57600080fd5b6000806000606084860312156144b857600080fd5b83356144c38161448d565b925060208401356144d38161422b565b929592945050506040919091013590565b60005b838110156144ff5781810151838201526020016144e7565b50506000910152565b600081518084526145208160208601602086016144e4565b601f01601f19169290920160200192915050565b602081526000610ec76020830184614508565b60006020828403121561455957600080fd5b813560ff81168114610ec757600080fd5b60006040830182518452602083015160406020860152818151808452606087019150602083019350600092505b808310156145ba5783518252602082019150602084019350600183019250614597565b5095945050505050565b602081526000610ec7602083018461456a565b602080825282518282018190526000918401906040840190835b818110156144325783516001600160a01b03168352602093840193909201916001016145f1565b8381528260208201526060604082015260006140436060830184614508565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561469057603f1987860301845261467b85835161456a565b9450602093840193919091019060010161465f565b50929695505050505050565b600067ffffffffffffffff8211156146b6576146b6614240565b5060051b60200190565b6000602082840312156146d257600080fd5b813567ffffffffffffffff8111156146e957600080fd5b8201601f810184136146fa57600080fd5b803561470d6147088261469c565b6142a2565b8082825260208201915060208360051b85010192508683111561472f57600080fd5b602084015b8381101561481b57803567ffffffffffffffff81111561475357600080fd5b85016040818a03601f1901121561476957600080fd5b614771614256565b60208201358152604082013567ffffffffffffffff81111561479257600080fd5b60208184010192505089601f8301126147aa57600080fd5b81356147b86147088261469c565b8082825260208201915060208360051b86010192508c8311156147da57600080fd5b6020850194505b828510156147fc5784358252602094850194909101906147e1565b8060208501525050508085525050602083019250602081019050614734565b509695505050505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561469057603f1987860301845281518051865260208101516020870152604081015190506060604087015261488a6060870182614508565b955050602093840193919091019060010161484e565b600080604083850312156148b357600080fd5b82356148be8161422b565b946020939093013593505050565b60008060008060008060c087890312156148e557600080fd5b86356148f08161422b565b95506020870135945060408701356149078161422b565b935060608701356149178161422b565b925060808701356149278161422b565b915060a08701356149378161422b565b809150509295509295509295565b60006020828403121561495757600080fd5b813567ffffffffffffffff81111561496e57600080fd5b8201601f8101841361497f57600080fd5b803561498d6147088261469c565b8082825260208201915060208360051b8501019250868311156149af57600080fd5b602084015b8381101561481b57803567ffffffffffffffff8111156149d357600080fd5b85016060818a03601f190112156149e957600080fd5b6149f161427f565b6020828101358252604083013590820152606082013567ffffffffffffffff811115614a1c57600080fd5b60208184010192505089601f830112614a3457600080fd5b614a438a8335602085016142d3565b6040820152845250602092830192016149b4565b600060208284031215614a6957600080fd5b8135610ec78161448d565b6001600160a01b038b16815289602082015288604082015287606082015286608082015261014060a08201526000614ab0610140830188614508565b60ff9690961660c08301525092151560e08401529015156101008301521515610120909101529695505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115613e3457613e34614af6565b600181811c90821680614b3357607f821691505b60208210810361146e57634e487b7160e01b600052602260045260246000fd5b600060ff821660ff8103614b6957614b69614af6565b60010192915050565b8082028115828204841417613e3457613e34614af6565b601f82111561382f57806000526020600020601f840160051c81016020851015614bb05750805b601f840160051c820191505b81811015614bd05760008155600101614bbc565b5050505050565b815167ffffffffffffffff811115614bf157614bf1614240565b614c0581614bff8454614b1f565b84614b89565b6020601f821160018114614c395760008315614c215750848201515b600019600385901b1c1916600184901b178455614bd0565b600084815260208120601f198516915b82811015614c695787850151825560209485019460019092019101614c49565b5084821015614c875786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006000198203614ca957614ca9614af6565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082614cd557614cd5614cb0565b500690565b6000808454614ce881614b1f565b600182168015614cff5760018114614d1457614d44565b60ff1983168652811515820286019350614d44565b87600052602060002060005b83811015614d3c57815488820152600190910190602001614d20565b505081860193505b5050508351614d578183602088016144e4565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000009101908152600501949350505050565b6001600160a01b0383168152604060208201526000614daa6040830184614508565b949350505050565b600082614dc157614dc1614cb0565b500490565b600060208284031215614dd857600080fd5b5051919050565b81810381811115613e3457613e34614af6565b600060208284031215614e0457600080fd5b81516fffffffffffffffffffffffffffffffff81168114610ec757600080fd5b600060208284031215614e3657600080fd5b8151610ec78161448d565b600060208284031215614e5357600080fd5b8151610ec78161422b565b634e487b7160e01b600052603160045260246000fd5b60008251614e868184602087016144e4565b919091019291505056fea2646970667358221220eafbd5a7e04ac3794d676ddd58ac0200bdf65bcd44ebca460482a025cc83b04264736f6c634300081c0033
Deployed Bytecode
0x6080604052600436106103a25760003560e01c8063729bab6f116101e7578063afcf7b9c1161010d578063da86e654116100a0578063f01fe8bd1161006f578063f01fe8bd14610bf9578063f2fde38b14610c0c578063f54b14bd14610c2c578063fb17177f14610c4157600080fd5b8063da86e65414610b6c578063e09877b914610b8c578063e449f34114610bb9578063ed21e78114610bd957600080fd5b8063c3982584116100dc578063c398258414610ac6578063c93c8f3414610afc578063cfd8d6c014610b2c578063d8ad1e6014610b4c57600080fd5b8063afcf7b9c14610a39578063b75476e414610a59578063c00484b814610a79578063c3214d6c14610aa657600080fd5b80638f4bb49711610185578063ad10282a11610154578063ad10282a14610983578063ad3cb1cc146109a3578063ad5cb487146109ec578063ae19773714610a1957600080fd5b80638f4bb4971461090e578063975ea3961461092d5780639ace630b14610943578063a2dc2ab71461096357600080fd5b806381985bfb116101c157806381985bfb1461087957806383c3bd99146108995780638bd0f386146108af5780638da5cb5b146108d157600080fd5b8063729bab6f146108125780637c4d6c67146108415780637c6588fc1461086357600080fd5b80634b517003116102cc57806355ca068e1161026a5780636d97acb4116102395780636d97acb41461079a5780636e4f88c8146107bb5780636f3c1e78146107dd578063715018a6146107fd57600080fd5b806355ca068e146106ce57806363b9d30f1461072d578063679e699a1461074d5780636bb2c6241461076d57600080fd5b806352a5f1f8116102a657806352a5f1f81461062a57806352d1902d1461064a57806352eb77961461065f57806354fd4d501461067f57600080fd5b80634b517003146105d45780634f1ef286146106015780635162de291461061457600080fd5b806324e73f9a11610344578063387602981161031357806338760298146105545780633c10ec1d1461057e578063469316c51461059457806347ce07cc146105b457600080fd5b806324e73f9a146104d157806331d7a262146104fe57806332515e4c1461051e578063359781621461053e57600080fd5b80630fbf0a93116103805780630fbf0a931461042a5780630fc00b581461044a578063150b7a021461046057806320003a18146104b157600080fd5b80630383169d146103a757806307e3c2fa146103c9578063085d4883146103f2575b600080fd5b3480156103b357600080fd5b506103c76103c236600461419b565b610c61565b005b3480156103d557600080fd5b506103df60055481565b6040519081526020015b60405180910390f35b3480156103fe57600080fd5b50600a54610412906001600160a01b031681565b6040516001600160a01b0390911681526020016103e9565b34801561043657600080fd5b506103c76104453660046141b4565b610ca5565b34801561045657600080fd5b506103df60015481565b34801561046c57600080fd5b5061048061047b36600461434f565b610d6c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016103e9565b3480156104bd57600080fd5b506103c76104cc3660046143bb565b610ddb565b3480156104dd57600080fd5b506104f16104ec3660046143dd565b610e2c565b6040516103e991906143fa565b34801561050a57600080fd5b506103df6105193660046143dd565b610e98565b34801561052a57600080fd5b50600b54610412906001600160a01b031681565b34801561054a57600080fd5b506103df60035481565b34801561056057600080fd5b5060005461056e9060ff1681565b60405190151581526020016103e9565b34801561058a57600080fd5b506103df60025481565b3480156105a057600080fd5b506103c76105af3660046143dd565b610ece565b3480156105c057600080fd5b50600e54610412906001600160a01b031681565b3480156105e057600080fd5b506103df6105ef3660046143dd565b60146020526000908152604090205481565b6103c761060f36600461443d565b610f31565b34801561062057600080fd5b506103df60065481565b34801561063657600080fd5b506103c76106453660046144a3565b610f4c565b34801561065657600080fd5b506103df611080565b34801561066b57600080fd5b506104f161067a3660046143dd565b6110af565b34801561068b57600080fd5b5060408051808201909152600381527f312e30000000000000000000000000000000000000000000000000000000000060208201525b6040516103e99190614534565b3480156106da57600080fd5b5061070e6106e936600461419b565b601160205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152016103e9565b34801561073957600080fd5b506103c761074836600461419b565b611119565b34801561075957600080fd5b5060005461056e9062010000900460ff1681565b34801561077957600080fd5b5061078d610788366004614547565b611156565b6040516103e991906145c4565b3480156107a657600080fd5b5060005461056e906301000000900460ff1681565b3480156107c757600080fd5b506107d06111ed565b6040516103e991906145d7565b3480156107e957600080fd5b506103c76107f836600461419b565b61124f565b34801561080957600080fd5b506103c761128c565b34801561081e57600080fd5b5061083261082d366004614547565b6112a0565b6040516103e993929190614618565b34801561084d57600080fd5b5061085661134b565b6040516103e99190614637565b34801561086f57600080fd5b506103df60085481565b34801561088557600080fd5b506103c76108943660046146c0565b611474565b3480156108a557600080fd5b506103df60045481565b3480156108bb57600080fd5b506108c46115fc565b6040516103e99190614826565b3480156108dd57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610412565b34801561091a57600080fd5b5060005461056e90610100900460ff1681565b34801561093957600080fd5b506103df60075481565b34801561094f57600080fd5b506103df61095e3660046148a0565b611780565b34801561096f57600080fd5b506103c761097e3660046148cc565b6117b1565b34801561098f57600080fd5b506103df61099e3660046148a0565b6119c8565b3480156109af57600080fd5b506106c16040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156109f857600080fd5b506103df610a073660046143dd565b600f6020526000908152604090205481565b348015610a2557600080fd5b50600c54610412906001600160a01b031681565b348015610a4557600080fd5b506103c7610a54366004614945565b6119e4565b348015610a6557600080fd5b50600d54610412906001600160a01b031681565b348015610a8557600080fd5b506103df610a94366004614547565b60186020526000908152604090205481565b348015610ab257600080fd5b50610412610ac136600461419b565b611b88565b348015610ad257600080fd5b50610ae6610ae1366004614a57565b611bb2565b6040516103e99a99989796959493929190614a74565b348015610b0857600080fd5b5061056e610b173660046143dd565b60126020526000908152604090205460ff1681565b348015610b3857600080fd5b506103c7610b473660046143dd565b611ca2565b348015610b5857600080fd5b506103c7610b673660046143bb565b611d05565b348015610b7857600080fd5b506103c7610b87366004614a57565b611d4e565b348015610b9857600080fd5b506103df610ba7366004614a57565b60156020526000908152604090205481565b348015610bc557600080fd5b506103c7610bd43660046141b4565b612492565b348015610be557600080fd5b506103c7610bf436600461419b565b612579565b6103c7610c07366004614547565b6125c4565b348015610c1857600080fd5b506103c7610c273660046143dd565b612cbf565b348015610c3857600080fd5b506103c7612d13565b348015610c4d57600080fd5b506103c7610c5c366004614a57565b612ef4565b610c696130bf565b60088190556040518181527f634bc2b8b7fdce3d2a6f7e269b98f5e05da5749b34283caa0515dcba22604a15906020015b60405180910390a150565b610cad613133565b60005460ff16610ce9576040517f5e0ff49500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805464ff0000000019166401000000001781555b81811015610d3057610d28838383818110610d1c57610d1c614ae0565b905060200201356131b4565b600101610cff565b506000805464ff0000000019169055610d6860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b60008054640100000000900460ff16610db1576040517f3ee6509d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b507f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b610de36130bf565b600080548215156101000261ff00199091161790556040517fd01e23fc98b8adc62feb5db89e26170f9e4866cdb29dd45e46d159428754527e90610c9a90831515815260200190565b6001600160a01b038116600090815260176020908152604091829020805483518184028101840190945280845260609392830182828015610e8c57602002820191906000526020600020905b815481526020019060010190808311610e78575b50505050509050919050565b6001600160a01b038116600090815260146020526040812054610eba83613493565b509150610ec78183614b0c565b9392505050565b610ed66130bf565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f0d5a421de8c308461de4227dc89f8ca5a18edd7e662dbeef0dd435708db7aa4b90602001610c9a565b610f39613656565b610f4282613726565b610d68828261372e565b6000610f60600e546001600160a01b031690565b90506001600160a01b038116610fd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f456e74726f70792061646472657373206e6f742073657400000000000000000060448201526064015b60405180910390fd5b336001600160a01b0382161461106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f6e6c7920456e74726f70792063616e2063616c6c20746869732066756e637460448201527f696f6e00000000000000000000000000000000000000000000000000000000006064820152608401610fce565b61107a848484613834565b50505050565b600061108a61394e565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6001600160a01b038116600090815260106020908152604091829020805483518184028101840190945280845260609392830182828015610e8c5760200282019190600052602060002090815481526020019060010190808311610e785750505050509050919050565b6111216130bf565b60058190556040518181527f8f231497a5c49759a8f67360d54c6d6276ace99f4ba86a09e908c75f2880d3b990602001610c9a565b60408051808201909152600081526060602082015260ff821660009081526018602090815260409182902082518084018452815481526001820180548551818602810186019096528086529294919385938582019392918301828280156111dc57602002820191906000526020600020905b8154815260200190600101908083116111c8575b505050505081525050915050919050565b6060600980548060200260200160405190810160405280929190818152602001828054801561124557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611227575b5050505050905090565b6112576130bf565b60068190556040518181527f4002e8e15b65eba487bb6e5d04a371e3be12bb23351b75e20c2e35d477169fd290602001610c9a565b6112946130bf565b61129e60006139b0565b565b601960205260009081526040902080546001820154600283018054929391926112c890614b1f565b80601f01602080910402602001604051908101604052809291908181526020018280546112f490614b1f565b80156113415780601f1061131657610100808354040283529160200191611341565b820191906000526020600020905b81548152906001019060200180831161132457829003601f168201915b5050505050905083565b6060600060075467ffffffffffffffff81111561136a5761136a614240565b6040519080825280602002602001820160405280156113b057816020015b6040805180820190915260008152606060208201528152602001906001900390816113885790505b50905060005b6007548160ff16101561146e5760ff811660009081526018602090815260409182902082518084018452815481526001820180548551818602810186019096528086529194929385810193929083018282801561143257602002820191906000526020600020905b81548152602001906001019080831161141e575b505050505081525050828260ff168151811061145057611450614ae0565b6020026020010181905250808061146690614b53565b9150506113b6565b50919050565b61147c6130bf565b60005b81518160ff1610156115bb576000805b838360ff16815181106114a4576114a4614ae0565b602002602001015160200151518160ff16101561151757838360ff16815181106114d0576114d0614ae0565b6020026020010151602001518160ff16815181106114f0576114f0614ae0565b6020026020010151826115039190614b0c565b91508061150f81614b53565b91505061148f565b508061271014611553576040517f75db77be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828260ff168151811061156857611568614ae0565b60209081029190910181015160ff84166000908152601883526040902081518155818301518051929391926115a3926001850192019061413b565b509050505080806115b390614b53565b91505061147f565b506000805462ff000019166201000017815581516007556040517f93fb52f4c0defe74e0410af19519d83f8ca2fa8b063f61af6cb0ebcf7bcf90339190a150565b6060600060075467ffffffffffffffff81111561161b5761161b614240565b60405190808252806020026020018201604052801561167057816020015b61165d60405180606001604052806000815260200160008152602001606081525090565b8152602001906001900390816116395790505b50905060005b6007548160ff16101561146e57601960008260ff1660ff16815260200190815260200160002060405180606001604052908160008201548152602001600182015481526020016002820180546116cb90614b1f565b80601f01602080910402602001604051908101604052809291908181526020018280546116f790614b1f565b80156117445780601f1061171957610100808354040283529160200191611744565b820191906000526020600020905b81548152906001019060200180831161172757829003601f168201915b505050505081525050828260ff168151811061176257611762614ae0565b6020026020010181905250808061177890614b53565b915050611676565b6017602052816000526040600020818154811061179c57600080fd5b90600052602060002001600091509150505481565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117fc5750825b905060008267ffffffffffffffff1660011480156118195750303b155b905081158015611827575080155b1561185e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118a957845468ff00000000000000001916680100000000000000001785555b6118b233613a2e565b6118ba613a3f565b6118c2613a47565b6118ca613a3f565b600d805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b038a811691909117909255600b805482168c8416179055600c805482168b8416179055600e805482168e8416179055600a805490911691881691909117905560018a905561193d8a6018614b72565b60025560106020527f6e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb018054600101815560005283156119bb57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b6010602052816000526040600020818154811061179c57600080fd5b6119ec6130bf565b60005462010000900460ff16611a2e576040517ff9bbd6e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260186020527f999d26de3473317ead3eeaf34ca78057f1439db67b6953469c3c96ce9caf6bd854815114611a92576040517fc19b5e1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81518160ff161015611b4a57604051806060016040528060008152602001838360ff1681518110611ac857611ac8614ae0565b6020026020010151602001518152602001838360ff1681518110611aee57611aee614ae0565b60209081029190910181015160409081015190925260ff841660009081526019825282902083518155908301516001820155908201516002820190611b339082614bd7565b509050508080611b4290614b53565b915050611a95565b506000805463ff000000191663010000001781556040517f7f0d7f141879883adc171c73d76dde9121cec1cf6e831392492e41a702e770ff9190a150565b60098181548110611b9857600080fd5b6000918252602090912001546001600160a01b0316905081565b6016602052600090815260409020805460018201546002830154600384015460048501546005860180546001600160a01b0390961696949593949293919291611bfa90614b1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2690614b1f565b8015611c735780601f10611c4857610100808354040283529160200191611c73565b820191906000526020600020905b815481529060010190602001808311611c5657829003601f168201915b5050506006909301549192505060ff80821691610100810482169162010000820481169163010000009004168a565b611caa6130bf565b600a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f04edb8310ed01a0a03457cedcf27942dd9b4a7ef37772645bbc59e4e8da004ed90602001610c9a565b611d0d6130bf565b6000805460ff19168215159081179091556040519081527f7e5b62ea496dc04c3be19fcfd2b0f3cab4ac575e334390e1894ca2a88c2bdce790602001610c9a565b67ffffffffffffffff811660009081526016602052604090206006810154610100900460ff16611db6576040517f74425a3200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610fce565b60068101546301000000900460ff1615611e08576040517fe14711c300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610fce565b600060075467ffffffffffffffff811115611e2557611e25614240565b604051908082528060200260200182016040528015611e4e578160200160208202803683370190505b5090506000805b6007548160ff161015611f0d5760ff8116600090815260196020526040902060018101549054108015611ec35750600684015460ff9081166000908152601860205260408120600101805491929091908416908110611eb657611eb6614ae0565b9060005260206000200154115b15611efb5780838381518110611edb57611edb614ae0565b60ff9092166020928302919091019091015281611ef781614c96565b9250505b80611f0581614b53565b915050611e55565b5080600003611fae57600183015483546001600160a01b031660009081526014602052604081208054909190611f44908490614b0c565b909155505060068301805462ff0000191662010000179055825460405167ffffffffffffffff861681526001600160a01b03909116907f6f6290c55281386a53797bb043876aec39c9bc5fb93c59d2189b319416d9e3a3906020015b60405180910390a250505050565b6000805b828160ff16101561203f576000848260ff1681518110611fd457611fd4614ae0565b602090810291909101810151600688015460ff908116600090815260189093526040909220600101805491935091831690811061201357612013614ae0565b9060005260206000200154836120299190614b0c565b925050808061203790614b53565b915050611fb2565b50806000036120e057600184015484546001600160a01b031660009081526014602052604081208054909190612076908490614b0c565b909155505060068401805462ff0000191662010000179055835460405167ffffffffffffffff871681526001600160a01b03909116907f6f6290c55281386a53797bb043876aec39c9bc5fb93c59d2189b319416d9e3a39060200160405180910390a25050505050565b6000806000805b60058160ff16101561223e57600060ff821615612147578589600301548560405160200161211f929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c6121429190614cc6565b612157565b8589600301546121579190614cc6565b90506000805b888160ff1610156121f85760008a8260ff168151811061217f5761217f614ae0565b60209081029190910181015160068e015460ff90811660009081526018909352604090922060010180549193509183169081106121be576121be614ae0565b9060005260206000200154836121d49190614b0c565b9250828410156121e55796506121f8565b50806121f081614b53565b91505061215d565b5060ff861660009081526019602052604090206001810154905410156122235760019350505061223e565b8461222d81614c96565b9550506000955050506001016120e7565b50806122df57600187015487546001600160a01b031660009081526014602052604081208054909190612272908490614b0c565b909155505060068701805462ff0000191662010000179055865460405167ffffffffffffffff8a1681526001600160a01b03909116907f6f6290c55281386a53797bb043876aec39c9bc5fb93c59d2189b319416d9e3a39060200160405180910390a25050505050505050565b60ff83166000908152601960205260408120805460019290612302908490614b0c565b9250508190555060016003600082825461231c9190614b0c565b909155505060035460028089019190915560ff841660009081526019602052604081208054920161234c83613a57565b60405160200161235d929190614cda565b60408051601f1981840301815291815267ffffffffffffffff8c1660009081526016602052209091506005016123938282614bd7565b5067ffffffffffffffff8a1660009081526016602052604090819020600601805463ff00000019166301000000179055600d548a5491517fd0def5210000000000000000000000000000000000000000000000000000000081526001600160a01b039182169263d0def52192612410929116908590600401614d88565b600060405180830381600087803b15801561242a57600080fd5b505af115801561243e573d6000803e3d6000fd5b50508a546003546040519081526001600160a01b0390911692507fb9144c96c86541f6fa89c9f2f02495cccf4b08cd6643e26d34ee00aa586558a8915060200160405180910390a250505050505050505050565b61249a613133565b60008190036124d5576040517f609f982f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806124e133613493565b915091506124ee81613af7565b8115612519573360009081526014602052604081208054849290612513908490614b0c565b90915550505b60005b8381101561254d5761254585858381811061253957612539614ae0565b90506020020135613b43565b60010161251c565b505050610d6860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6125816130bf565b61258c601882614db2565b60015560028190556040518181527fe649fb22a1eadca8ab516cf70d4d4d4df019180fcfa64e69dcd8bd0a0f1ec3e890602001610c9a565b6125cc613133565b6007548160ff161061260a576040517f9915af2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1661264b576040517fa7e4d9bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff8116600090815260186020526040812090805b600183015460ff821610156126d457826001018160ff168154811061268757612687614ae0565b9060005260206000200154600003156126c25760ff811660009081526019602052604090206001810154905410156126c257600191506126d4565b806126cc81614b53565b915050612660565b508061270c576040517f60c2fe3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600090156127b757600654600c546040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561277b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279f9190614dc6565b6127aa906064614b72565b6127b49190614db2565b90505b60ff841660009081526018602052604090205460328211156127d857603291505b60646127e48382614ddf565b6127ee9083614b72565b6127f89190614db2565b905060008061280633613493565b9150915061281381613af7565b3360009081526014602052604081205461282d9084614b0c565b905083811015612873576040517fcf4791810000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610fce565b600e54600a546040517fb88c91480000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600092919091169063b88c914890602401602060405180830381865afa1580156128dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129019190614df2565b6fffffffffffffffffffffffffffffffff16905080341015612958576040517fa458261b00000000000000000000000000000000000000000000000000000000815234600482015260248101829052604401610fce565b60006129648684614ddf565b3360009081526014602052604081208290556004805492935060019290919061298e908490614b0c565b9091555050600e54600a5460408051426020808301919091523360601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168284015282516034818403018152605483019384905280519101207f19cb825f000000000000000000000000000000000000000000000000000000009092526001600160a01b039283166058820152607881019190915260009291909116906319cb825f90859060980160206040518083038185885af1158015612a55573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a7a9190614e24565b9050604051806101400160405280336001600160a01b0316815260200188815260200160008152602001600081526020014281526020016040518060200160405280600081525081526020018c60ff16815260200160001515815260200160001515815260200160001515815250601660008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005019081612b799190614bd7565b5060c0820151600691909101805460e0840151610100808601516101209096015160ff9095167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090931692909217901515909102177fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff16620100009315159390930263ff00000019169290921763010000009115159190910217905560045467ffffffffffffffff821660008181526015602090815260408083209490945533808352601782528483208054600181018255908452928290209092018390559251918252917f443a04e0e8473b1953759330661fba17954caf7e1462044e16472108918e50bc910160405180910390a250505050505050505050612cbc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50565b612cc76130bf565b6001600160a01b038116612d0a576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610fce565b612cbc816139b0565b612d1b613133565b60005460ff16612d57576040517f5e0ff49500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600f6020526040902054612d749062015180614b0c565b421015612dad576040517fa15db8b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c546040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e339190614dc6565b905060085481612e439190614b72565b600554612e509190614b0c565b3360009081526014602052604081208054909190612e6f908490614b0c565b9091555050336000818152600f602052604090819020429081905560055491517f28b131c4e2da70e2aaf0daf291b825eae0fb46025cfbe446c660a8a1b893005992612ec2928252602082015260400190565b60405180910390a25061129e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b67ffffffffffffffff811660009081526016602052604090206006810154610100900460ff1615612f5d576040517fe14711c300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610fce565b600681015462010000900460ff1615612fae576040517f92f6a17500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610fce565b6004810154612fc09062015180614b0c565b4211613029578142826004015462015180612fdb9190614b0c565b612fe59190614ddf565b6040517fc7788ec500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90921660048301526024820152604401610fce565b600181015481546001600160a01b031660009081526014602052604081208054909190613057908490614b0c565b909155505060068101805462ff0000191662010000179055805460405167ffffffffffffffff841681526001600160a01b03909116907f6f6290c55281386a53797bb043876aec39c9bc5fb93c59d2189b319416d9e3a3906020015b60405180910390a25050565b336130f17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461129e576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610fce565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016131ae576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000818152601160205260409020546001600160a01b031615613203576040517f0ae3514d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b546040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810183905233916001600160a01b031690636352211e90602401602060405180830381865afa158015613265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132899190614e41565b6001600160a01b0316146132cc576040517f3b94a19900000000000000000000000000000000000000000000000000000000815260048101829052602401610fce565b6000818152601160205260409020805473ffffffffffffffffffffffffffffffffffffffff1916331781554260019091015561333181336000908152601060209081526040808320805485855260138452918420829055600182018155835291200155565b3360009081526012602052604090205460ff166133b257336000818152601260205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff191690911790555b600b546040517f42842e0e000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390526001600160a01b03909116906342842e0e90606401600060405180830381600087803b15801561341d57600080fd5b505af1158015613431573d6000803e3d6000fd5b50506040518381523392507f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d915060200160405180910390a250565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381166000908152601060205260408120805460609190838167ffffffffffffffff8111156134cb576134cb614240565b6040519080825280602002602001820160405280156134f4578160200160208202803683370190505b5090506000805b838110156135bc57600085828154811061351757613517614ae0565b600091825260208083209091015480835260119091526040909120600181015491925090428110156135b157600061354f8242614ddf565b90506000610e10600154836135649190614b72565b61356e9190614db2565b905061357a818d614b0c565b9b5080156135ae578488888151811061359557613595614ae0565b6020908102919091010152866135aa81614c96565b9750505b50505b5050506001016134fb565b508067ffffffffffffffff8111156135d6576135d6614240565b6040519080825280602002602001820160405280156135ff578160200160208202803683370190505b50945060005b8181101561364c5782818151811061361f5761361f614ae0565b602002602001015186828151811061363957613639614ae0565b6020908102919091010152600101613605565b5050505050915091565b306001600160a01b037f000000000000000000000000a167aa18bc286a4faf4e51d68bfc6393de724ca31614806136ef57507f000000000000000000000000a167aa18bc286a4faf4e51d68bfc6393de724ca36001600160a01b03166136e37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561129e576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cbc6130bf565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613788575060408051601f3d908101601f1916820190925261378591810190614dc6565b60015b6137c9576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610fce565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114613825576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610fce565b61382f8383613c8a565b505050565b67ffffffffffffffff831660009081526016602052604090206006810154610100900460ff161561389d576040517fa9ca464700000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610fce565b600681015462010000900460ff16156138ee576040517f15352ccc00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610fce565b6003810182905560068101805461ff001916610100179055805460405167ffffffffffffffff861681526001600160a01b03909116907f046ece5b237dbc78a87b32d643863502806f4c16fde8fec124dc08991293802c90602001611fa0565b306001600160a01b037f000000000000000000000000a167aa18bc286a4faf4e51d68bfc6393de724ca3161461129e576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b613a36613ce0565b612cbc81613d47565b61129e613ce0565b613a4f613ce0565b61129e613d4f565b60606000613a6483613d57565b600101905060008167ffffffffffffffff811115613a8457613a84614240565b6040519080825280601f01601f191660200182016040528015613aae576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084613ab857509392505050565b60005b8151811015610d68576000828281518110613b1757613b17614ae0565b602090810291909101810151600090815260119091526040902042600191820155919091019050613afa565b6000818152601160205260409020546001600160a01b0316338114613b94576040517f4d01b4c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152601160205260408120805473ffffffffffffffffffffffffffffffffffffffff1916815560010155613bca82613e3a565b600b546040517f42842e0e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015260448201859052909116906342842e0e90606401600060405180830381600087803b158015613c3757600080fd5b505af1158015613c4b573d6000803e3d6000fd5b50505050806001600160a01b03167f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75836040516130b391815260200190565b613c9382613f39565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115613cd85761382f8282613fd6565b610d6861404c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661129e576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cc7613ce0565b61346d613ce0565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613da0577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613dcc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310613dea57662386f26fc10000830492506010015b6305f5e1008310613e02576305f5e100830492506008015b6127108310613e1657612710830492506004015b60648310613e28576064830492506002015b600a8310613e34576001015b92915050565b33600090815260106020908152604080832084845260139092529091205481548110613e92576040517f609f982f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81546000908390613ea590600190614ddf565b81548110613eb557613eb5614ae0565b9060005260206000200154905080838381548110613ed557613ed5614ae0565b60009182526020808320909101929092558281526013909152604090208290558254839080613f0657613f06614e5e565b60019003818190600052602060002001600090559055601360008581526020019081526020016000206000905550505050565b806001600160a01b03163b600003613f88576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610fce565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051613ff39190614e74565b600060405180830381855af49150503d806000811461402e576040519150601f19603f3d011682016040523d82523d6000602084013e614033565b606091505b5091509150614043858383614084565b95945050505050565b341561129e576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608261409957614094826140f9565b610ec7565b81511580156140b057506001600160a01b0384163b155b156140f2576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610fce565b5092915050565b8051156141095780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828054828255906000526020600020908101928215614176579160200282015b8281111561417657825182559160200191906001019061415b565b50614182929150614186565b5090565b5b808211156141825760008155600101614187565b6000602082840312156141ad57600080fd5b5035919050565b600080602083850312156141c757600080fd5b823567ffffffffffffffff8111156141de57600080fd5b8301601f810185136141ef57600080fd5b803567ffffffffffffffff81111561420657600080fd5b8560208260051b840101111561421b57600080fd5b6020919091019590945092505050565b6001600160a01b0381168114612cbc57600080fd5b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561427957614279614240565b60405290565b6040516060810167ffffffffffffffff8111828210171561427957614279614240565b604051601f8201601f1916810167ffffffffffffffff811182821017156142cb576142cb614240565b604052919050565b60008067ffffffffffffffff8411156142ee576142ee614240565b50601f8301601f1916602001614303816142a2565b91505082815283838301111561431857600080fd5b828260208301376000602084830101529392505050565b600082601f83011261434057600080fd5b610ec7838335602085016142d3565b6000806000806080858703121561436557600080fd5b84356143708161422b565b935060208501356143808161422b565b925060408501359150606085013567ffffffffffffffff8111156143a357600080fd5b6143af8782880161432f565b91505092959194509250565b6000602082840312156143cd57600080fd5b81358015158114610ec757600080fd5b6000602082840312156143ef57600080fd5b8135610ec78161422b565b602080825282518282018190526000918401906040840190835b81811015614432578351835260209384019390920191600101614414565b509095945050505050565b6000806040838503121561445057600080fd5b823561445b8161422b565b9150602083013567ffffffffffffffff81111561447757600080fd5b6144838582860161432f565b9150509250929050565b67ffffffffffffffff81168114612cbc57600080fd5b6000806000606084860312156144b857600080fd5b83356144c38161448d565b925060208401356144d38161422b565b929592945050506040919091013590565b60005b838110156144ff5781810151838201526020016144e7565b50506000910152565b600081518084526145208160208601602086016144e4565b601f01601f19169290920160200192915050565b602081526000610ec76020830184614508565b60006020828403121561455957600080fd5b813560ff81168114610ec757600080fd5b60006040830182518452602083015160406020860152818151808452606087019150602083019350600092505b808310156145ba5783518252602082019150602084019350600183019250614597565b5095945050505050565b602081526000610ec7602083018461456a565b602080825282518282018190526000918401906040840190835b818110156144325783516001600160a01b03168352602093840193909201916001016145f1565b8381528260208201526060604082015260006140436060830184614508565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561469057603f1987860301845261467b85835161456a565b9450602093840193919091019060010161465f565b50929695505050505050565b600067ffffffffffffffff8211156146b6576146b6614240565b5060051b60200190565b6000602082840312156146d257600080fd5b813567ffffffffffffffff8111156146e957600080fd5b8201601f810184136146fa57600080fd5b803561470d6147088261469c565b6142a2565b8082825260208201915060208360051b85010192508683111561472f57600080fd5b602084015b8381101561481b57803567ffffffffffffffff81111561475357600080fd5b85016040818a03601f1901121561476957600080fd5b614771614256565b60208201358152604082013567ffffffffffffffff81111561479257600080fd5b60208184010192505089601f8301126147aa57600080fd5b81356147b86147088261469c565b8082825260208201915060208360051b86010192508c8311156147da57600080fd5b6020850194505b828510156147fc5784358252602094850194909101906147e1565b8060208501525050508085525050602083019250602081019050614734565b509695505050505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561469057603f1987860301845281518051865260208101516020870152604081015190506060604087015261488a6060870182614508565b955050602093840193919091019060010161484e565b600080604083850312156148b357600080fd5b82356148be8161422b565b946020939093013593505050565b60008060008060008060c087890312156148e557600080fd5b86356148f08161422b565b95506020870135945060408701356149078161422b565b935060608701356149178161422b565b925060808701356149278161422b565b915060a08701356149378161422b565b809150509295509295509295565b60006020828403121561495757600080fd5b813567ffffffffffffffff81111561496e57600080fd5b8201601f8101841361497f57600080fd5b803561498d6147088261469c565b8082825260208201915060208360051b8501019250868311156149af57600080fd5b602084015b8381101561481b57803567ffffffffffffffff8111156149d357600080fd5b85016060818a03601f190112156149e957600080fd5b6149f161427f565b6020828101358252604083013590820152606082013567ffffffffffffffff811115614a1c57600080fd5b60208184010192505089601f830112614a3457600080fd5b614a438a8335602085016142d3565b6040820152845250602092830192016149b4565b600060208284031215614a6957600080fd5b8135610ec78161448d565b6001600160a01b038b16815289602082015288604082015287606082015286608082015261014060a08201526000614ab0610140830188614508565b60ff9690961660c08301525092151560e08401529015156101008301521515610120909101529695505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115613e3457613e34614af6565b600181811c90821680614b3357607f821691505b60208210810361146e57634e487b7160e01b600052602260045260246000fd5b600060ff821660ff8103614b6957614b69614af6565b60010192915050565b8082028115828204841417613e3457613e34614af6565b601f82111561382f57806000526020600020601f840160051c81016020851015614bb05750805b601f840160051c820191505b81811015614bd05760008155600101614bbc565b5050505050565b815167ffffffffffffffff811115614bf157614bf1614240565b614c0581614bff8454614b1f565b84614b89565b6020601f821160018114614c395760008315614c215750848201515b600019600385901b1c1916600184901b178455614bd0565b600084815260208120601f198516915b82811015614c695787850151825560209485019460019092019101614c49565b5084821015614c875786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006000198203614ca957614ca9614af6565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082614cd557614cd5614cb0565b500690565b6000808454614ce881614b1f565b600182168015614cff5760018114614d1457614d44565b60ff1983168652811515820286019350614d44565b87600052602060002060005b83811015614d3c57815488820152600190910190602001614d20565b505081860193505b5050508351614d578183602088016144e4565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000009101908152600501949350505050565b6001600160a01b0383168152604060208201526000614daa6040830184614508565b949350505050565b600082614dc157614dc1614cb0565b500490565b600060208284031215614dd857600080fd5b5051919050565b81810381811115613e3457613e34614af6565b600060208284031215614e0457600080fd5b81516fffffffffffffffffffffffffffffffff81168114610ec757600080fd5b600060208284031215614e3657600080fd5b8151610ec78161448d565b600060208284031215614e5357600080fd5b8151610ec78161422b565b634e487b7160e01b600052603160045260246000fd5b60008251614e868184602087016144e4565b919091019291505056fea2646970667358221220eafbd5a7e04ac3794d676ddd58ac0200bdf65bcd44ebca460482a025cc83b04264736f6c634300081c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.