Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
CrystalHatch
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
/* This contract can be used to burn Polymon NFTs that are Eggs. The information if a Polymon NFT is an egg is provided via signed message by a trusted provider. */ import "../utility-polymon-tracker/IUtilityPolymonTracker.sol"; import "../collection/MintableCollection.sol"; import "../common/interfaces/ITransferFromAndBurnFrom.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; contract CrystalHatch is Initializable, OwnableUpgradeable, PausableUpgradeable { string public constant name = "CrystalHatch"; address public trustedSigner; IUtilityPolymonTracker public utilityPolymonTracker; MintableCollection public collection; uint256 public currentId; uint256 public numOfHatches; uint256 public maxNumOfHatches; ITransferFrom public pmonToken; uint256 public pmonPerHatch; address rewardAddress; event CrystalHatch( address indexed owner, uint256 indexed burned, uint256 indexed minted ); function initialize( IUtilityPolymonTracker _utilityPolymonTracker, MintableCollection _collection, uint256 _currentId, address _trustedSigner, uint256 _maxNumOfHatches, uint256 _pmonPerHatch, ITransferFrom _pmonToken, address _rewardAddress ) public initializer { utilityPolymonTracker = _utilityPolymonTracker; collection = _collection; currentId = _currentId; trustedSigner = _trustedSigner; maxNumOfHatches = _maxNumOfHatches; pmonPerHatch = _pmonPerHatch; pmonToken = _pmonToken; rewardAddress = _rewardAddress; OwnableUpgradeable.__Ownable_init(); PausableUpgradeable.__Pausable_init(); } // hatching for softminted tokens function hatchSoftminted( IUtilityPolymonTracker.SoftMintedData memory softMinted, bytes memory signature, uint256 expiryTimestamp ) external whenNotPaused { require( ++numOfHatches < maxNumOfHatches, "Max number of hatches reached" ); _burn(softMinted); if (pmonPerHatch > 0) pmonToken.transferFrom(msg.sender, rewardAddress, pmonPerHatch); require( signatureVerification( msg.sender, softMinted.id, expiryTimestamp, signature ), "Invalid signer or signature" ); emit CrystalHatch(msg.sender, softMinted.id, currentId); collection.mint(msg.sender, currentId++); } // hatching for hardminted tokens function hatch( uint256 hardMinted, bytes memory signature, uint256 expiryTimestamp ) external whenNotPaused { require( ++numOfHatches < maxNumOfHatches, "Max number of hatches reached" ); _burn(hardMinted); if (pmonPerHatch > 0) pmonToken.transferFrom(msg.sender, rewardAddress, pmonPerHatch); require( signatureVerification( msg.sender, hardMinted, expiryTimestamp, signature ), "Invalid signer or signature" ); emit CrystalHatch(msg.sender, hardMinted, currentId); collection.mint(msg.sender, currentId++); } // burning for softminted tokens function _burn(IUtilityPolymonTracker.SoftMintedData memory softMinted) internal { require( utilityPolymonTracker.isOwnerSoftMinted(msg.sender, softMinted), "Invalid soft minted token ID" ); utilityPolymonTracker.burnToken(msg.sender, softMinted.id, false); } // burning for hardminted tokens function _burn(uint256 hardMinted) internal { require( utilityPolymonTracker.isOwnerHardMinted(msg.sender, hardMinted), "Invalid hard minted token ID" ); utilityPolymonTracker.burnToken(msg.sender, hardMinted, true); } /** PRIVATE VIEWER FUNCTIONS */ function splitSignature(bytes memory signature) private pure returns ( uint8, bytes32, bytes32 ) { require(signature.length == 65); bytes32 sigR; bytes32 sigS; uint8 sigV; assembly { sigR := mload(add(signature, 32)) sigS := mload(add(signature, 64)) sigV := byte(0, mload(add(signature, 96))) } return (sigV, sigR, sigS); } function signatureVerification( address sender, uint256 id, uint256 expiryTimestamp, bytes memory signature ) private view returns (bool) { require(expiryTimestamp > block.timestamp, "Signature expired"); bytes32 sigR; bytes32 sigS; uint8 sigV; (sigV, sigR, sigS) = splitSignature(signature); bytes32 msg = keccak256( abi.encodePacked( id, sender, address(this), getChainId(), name, expiryTimestamp ) ); return trustedSigner == ecrecover( keccak256( abi.encodePacked("\x19Ethereum Signed Message:\n32", msg) ), sigV, sigR, sigS ); } // internal method to get the chainId of the current network function getChainId() internal view returns (uint256) { uint256 chainId; assembly { chainId := chainid() } return chainId; } /** ADMIN FUNCTIONS */ function pause() external onlyOwner whenNotPaused { _pause(); } function unpause() external onlyOwner whenPaused { _unpause(); } function setUtilityPolymonTracker( IUtilityPolymonTracker _utilityPolymonTracker ) external onlyOwner { utilityPolymonTracker = _utilityPolymonTracker; } function setCollection(MintableCollection _collection) external onlyOwner { collection = _collection; } function setCurrentId(uint256 _currentId) external onlyOwner { currentId = _currentId; } function setTrustedSigner(address _trustedSigner) external onlyOwner { trustedSigner = _trustedSigner; } function setMaxNumOfHatches(uint256 _maxNumOfHatches) external onlyOwner { maxNumOfHatches = _maxNumOfHatches; } function setPmonPerHatch(uint256 _pmonPerHatch) external onlyOwner { pmonPerHatch = _pmonPerHatch; } function setPmonToken(ITransferFrom _pmonToken) external onlyOwner { pmonToken = _pmonToken; } function setRewardAddress(address _rewardAddress) external onlyOwner { rewardAddress = _rewardAddress; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/ContextUpgradeable.sol"; import "../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. * * By default, the owner account will be the one that deploys the contract. 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 { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[49] private __gap; }
// SPDX-License-Identifier: MIT // solhint-disable-next-line compiler-version pragma solidity ^0.8.0; import "../../utils/AddressUpgradeable.sol"; /** * @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 a proxied contract can't have 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. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/ContextUpgradeable.sol"; import "../proxy/utils/Initializable.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract PausableUpgradeable is Initializable, ContextUpgradeable { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ function __Pausable_init() internal initializer { __Context_init_unchained(); __Pausable_init_unchained(); } function __Pausable_init_unchained() internal initializer { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } uint256[49] private __gap; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library AddressUpgradeable { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @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://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../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 initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 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); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * 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[EIP 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; interface MintableCollection is IERC721 { function burn(uint256 tokenId) external; function mint(address to, uint256 tokenId) external; }
interface ITransferFrom { function transferFrom( address sender, address recipient, uint256 amount ) external; } interface ITransferFromAndBurnFrom is ITransferFrom { function burnFrom(address account, uint256 amount) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IUtilityPolymonTracker { struct SoftMintedData { // @dev id of the soft minted token uint256 id; // @dev first id from the booster opening uint256 first; // @dev last id from the booster opening uint256 last; } struct SoftMintedDataOld { // @dev id of the soft minted token uint256 id; // @dev all ids from booster opening uint256[] ids; } /// @notice get owner status for multiple tokens. If the owner of any of these tokens does not match the owner /// passed to this function the result is false. function isOwner( address owner, SoftMintedData[] memory softMinted, SoftMintedDataOld[] memory softMintedOld, uint256[] memory hardMinted ) external view returns (bool); /// @notice get owner status from the opener contract (only for soft minted tokens) function isOwnerSoftMinted(address owner, SoftMintedData memory data) external view returns (bool); /// @notice get owner status from the soft minter contract (only for old soft minted tokens on ethereum) function isOwnerSoftMintedOld(address owner, SoftMintedDataOld memory data) external view returns (bool); /// @notice get owner status from the ERC721 contract (only for hard minted tokens) function isOwnerHardMinted(address owner, uint256 nftId) external view returns (bool); function burnToken( address owner, uint256 nftId, bool hardminted ) external; function burnedTokens(uint256 nftId) external view returns (bool); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"burned","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"minted","type":"uint256"}],"name":"CrystalHatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"collection","outputs":[{"internalType":"contract MintableCollection","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"hardMinted","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"expiryTimestamp","type":"uint256"}],"name":"hatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"first","type":"uint256"},{"internalType":"uint256","name":"last","type":"uint256"}],"internalType":"struct IUtilityPolymonTracker.SoftMintedData","name":"softMinted","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"expiryTimestamp","type":"uint256"}],"name":"hatchSoftminted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IUtilityPolymonTracker","name":"_utilityPolymonTracker","type":"address"},{"internalType":"contract MintableCollection","name":"_collection","type":"address"},{"internalType":"uint256","name":"_currentId","type":"uint256"},{"internalType":"address","name":"_trustedSigner","type":"address"},{"internalType":"uint256","name":"_maxNumOfHatches","type":"uint256"},{"internalType":"uint256","name":"_pmonPerHatch","type":"uint256"},{"internalType":"contract ITransferFrom","name":"_pmonToken","type":"address"},{"internalType":"address","name":"_rewardAddress","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxNumOfHatches","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numOfHatches","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pmonPerHatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pmonToken","outputs":[{"internalType":"contract ITransferFrom","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract MintableCollection","name":"_collection","type":"address"}],"name":"setCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_currentId","type":"uint256"}],"name":"setCurrentId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxNumOfHatches","type":"uint256"}],"name":"setMaxNumOfHatches","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pmonPerHatch","type":"uint256"}],"name":"setPmonPerHatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ITransferFrom","name":"_pmonToken","type":"address"}],"name":"setPmonToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardAddress","type":"address"}],"name":"setRewardAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_trustedSigner","type":"address"}],"name":"setTrustedSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IUtilityPolymonTracker","name":"_utilityPolymonTracker","type":"address"}],"name":"setUtilityPolymonTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"trustedSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"utilityPolymonTracker","outputs":[{"internalType":"contract IUtilityPolymonTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061328d806100206000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80637de1e536116100de578063c33f036b11610097578063efdbf31211610071578063efdbf312146103d9578063f2fde38b146103f5578063f74d548014610411578063fbf5e35c1461042f5761018e565b8063c33f036b14610381578063e00dd1611461039f578063efaf2ffc146103bd5761018e565b80637de1e536146102e55780638456cb59146103035780638da5cb5b1461030d5780639a91b5d91461032b5780639b37aecb14610349578063c20fbd9b146103655761018e565b806356a1c7011161014b578063715018a611610125578063715018a6146102875780637598483f14610291578063768b5fd5146102ad578063792fe2e8146102c95761018e565b806356a1c701146102315780635c975abb1461024d5780635e00e6791461026b5761018e565b806306fdde03146101935780630fb9e862146101b15780633f4ba83a146101cf578063415331e4146101d957806351abc4ed146101f55780635588bb4b14610213575b600080fd5b61019b61044b565b6040516101a891906122c1565b60405180910390f35b6101b9610484565b6040516101c691906122fc565b60405180910390f35b6101d761048a565b005b6101f360048036038101906101ee91906124f5565b610557565b005b6101fd610805565b60405161020a91906125e3565b60405180910390f35b61021b61082b565b60405161022891906122fc565b60405180910390f35b61024b6004803603810190610246919061263c565b610831565b005b6102556108f1565b6040516102629190612684565b60405180910390f35b6102856004803603810190610280919061263c565b610908565b005b61028f6109c8565b005b6102ab60048036038101906102a6919061269f565b610b05565b005b6102c760048036038101906102c2919061270a565b610b8b565b005b6102e360048036038101906102de919061269f565b610c4b565b005b6102ed610cd1565b6040516102fa9190612758565b60405180910390f35b61030b610cf7565b005b610315610dc5565b6040516103229190612782565b60405180910390f35b610333610def565b60405161034091906122fc565b60405180910390f35b610363600480360381019061035e919061269f565b610df5565b005b61037f600480360381019061037a9190612819565b610e7b565b005b6103896110c6565b60405161039691906128f0565b60405180910390f35b6103a76110ec565b6040516103b491906122fc565b60405180910390f35b6103d760048036038101906103d2919061290b565b6110f2565b005b6103f360048036038101906103ee9190612938565b6111b2565b005b61040f600480360381019061040a919061263c565b611458565b005b610419611603565b6040516104269190612782565b60405180910390f35b610449600480360381019061044491906129a7565b611629565b005b6040518060400160405280600c81526020017f4372797374616c4861746368000000000000000000000000000000000000000081525081565b609b5481565b6104926116e9565b73ffffffffffffffffffffffffffffffffffffffff166104b0610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fd90612a20565b60405180910390fd5b61050e6108f1565b61054d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054490612a8c565b60405180910390fd5b6105556116f1565b565b61055f6108f1565b1561059f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059690612af8565b60405180910390fd5b609c54609b600081546105b190612b47565b919050819055106105f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ee90612bdb565b60405180910390fd5b61060083611793565b6000609e5411156106c157609d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33609f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16609e546040518463ffffffff1660e01b815260040161068e93929190612bfb565b600060405180830381600087803b1580156106a857600080fd5b505af11580156106bc573d6000803e3d6000fd5b505050505b6106d13384600001518385611909565b610710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070790612c7e565b60405180910390fd5b609a5483600001513373ffffffffffffffffffffffffffffffffffffffff167f1b2ecd28809029a8e6cc1cd813657f3a8b9e3160218a7122b932a48f07c8c30060405160405180910390a4609960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933609a60008154809291906107ad90612b47565b919050556040518363ffffffff1660e01b81526004016107ce929190612c9e565b600060405180830381600087803b1580156107e857600080fd5b505af11580156107fc573d6000803e3d6000fd5b50505050505050565b609d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b609e5481565b6108396116e9565b73ffffffffffffffffffffffffffffffffffffffff16610857610dc5565b73ffffffffffffffffffffffffffffffffffffffff16146108ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a490612a20565b60405180910390fd5b80609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000606560009054906101000a900460ff16905090565b6109106116e9565b73ffffffffffffffffffffffffffffffffffffffff1661092e610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097b90612a20565b60405180910390fd5b80609f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6109d06116e9565b73ffffffffffffffffffffffffffffffffffffffff166109ee610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3b90612a20565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610b0d6116e9565b73ffffffffffffffffffffffffffffffffffffffff16610b2b610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7890612a20565b60405180910390fd5b80609c8190555050565b610b936116e9565b73ffffffffffffffffffffffffffffffffffffffff16610bb1610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90612a20565b60405180910390fd5b80609960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c536116e9565b73ffffffffffffffffffffffffffffffffffffffff16610c71610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe90612a20565b60405180910390fd5b80609e8190555050565b609960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610cff6116e9565b73ffffffffffffffffffffffffffffffffffffffff16610d1d610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6a90612a20565b60405180910390fd5b610d7b6108f1565b15610dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db290612af8565b60405180910390fd5b610dc3611aab565b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b609c5481565b610dfd6116e9565b73ffffffffffffffffffffffffffffffffffffffff16610e1b610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6890612a20565b60405180910390fd5b80609a8190555050565b600060019054906101000a900460ff1680610ea1575060008054906101000a900460ff16155b610ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed790612d39565b60405180910390fd5b60008060019054906101000a900460ff161590508015610f30576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b88609860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087609960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086609a8190555085609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084609c8190555083609e8190555082609d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081609f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611092611b4e565b61109a611c37565b80156110bb5760008060016101000a81548160ff0219169083151502179055505b505050505050505050565b609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b609a5481565b6110fa6116e9565b73ffffffffffffffffffffffffffffffffffffffff16611118610dc5565b73ffffffffffffffffffffffffffffffffffffffff161461116e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116590612a20565b60405180910390fd5b80609d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111ba6108f1565b156111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190612af8565b60405180910390fd5b609c54609b6000815461120c90612b47565b91905081905510611252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124990612bdb565b60405180910390fd5b61125b83611d20565b6000609e54111561131c57609d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33609f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16609e546040518463ffffffff1660e01b81526004016112e993929190612bfb565b600060405180830381600087803b15801561130357600080fd5b505af1158015611317573d6000803e3d6000fd5b505050505b61132833848385611909565b611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e90612c7e565b60405180910390fd5b609a54833373ffffffffffffffffffffffffffffffffffffffff167f1b2ecd28809029a8e6cc1cd813657f3a8b9e3160218a7122b932a48f07c8c30060405160405180910390a4609960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933609a600081548092919061140090612b47565b919050556040518363ffffffff1660e01b8152600401611421929190612c9e565b600060405180830381600087803b15801561143b57600080fd5b505af115801561144f573d6000803e3d6000fd5b50505050505050565b6114606116e9565b73ffffffffffffffffffffffffffffffffffffffff1661147e610dc5565b73ffffffffffffffffffffffffffffffffffffffff16146114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb90612a20565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a90612dcb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116316116e9565b73ffffffffffffffffffffffffffffffffffffffff1661164f610dc5565b73ffffffffffffffffffffffffffffffffffffffff16146116a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169c90612a20565b60405180910390fd5b80609860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6116f96108f1565b611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f90612a8c565b60405180910390fd5b6000606560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61177c6116e9565b6040516117899190612782565b60405180910390a1565b609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a42ce7633836040518363ffffffff1660e01b81526004016117f0929190612e3c565b602060405180830381865afa15801561180d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118319190612e91565b611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790612f0a565b60405180910390fd5b609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad193fab33836000015160006040518463ffffffff1660e01b81526004016118d493929190612f2a565b600060405180830381600087803b1580156118ee57600080fd5b505af1158015611902573d6000803e3d6000fd5b5050505050565b600042831161194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194490612fad565b60405180910390fd5b600080600061195b85611e92565b8094508195508293505050506000878930611974611ed5565b6040518060400160405280600c81526020017f4372797374616c486174636800000000000000000000000000000000000000008152508b6040516020016119c096959493929190613072565b6040516020818303038152906040528051906020012090506001816040516020016119eb9190613155565b6040516020818303038152906040528051906020012083868660405160008152602001604052604051611a2194939291906131a6565b6020604051602081039080840390855afa158015611a43573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614945050505050949350505050565b611ab36108f1565b15611af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aea90612af8565b60405180910390fd5b6001606560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611b376116e9565b604051611b449190612782565b60405180910390a1565b600060019054906101000a900460ff1680611b74575060008054906101000a900460ff16155b611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa90612d39565b60405180910390fd5b60008060019054906101000a900460ff161590508015611c03576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611c0b611ee2565b611c13611fbb565b8015611c345760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680611c5d575060008054906101000a900460ff16155b611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390612d39565b60405180910390fd5b60008060019054906101000a900460ff161590508015611cec576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611cf4611ee2565b611cfc61213d565b8015611d1d5760008060016101000a81548160ff0219169083151502179055505b50565b609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b39f894e33836040518363ffffffff1660e01b8152600401611d7d929190612c9e565b602060405180830381865afa158015611d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbe9190612e91565b611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df490613237565b60405180910390fd5b609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad193fab338360016040518463ffffffff1660e01b8152600401611e5d93929190612f2a565b600060405180830381600087803b158015611e7757600080fd5b505af1158015611e8b573d6000803e3d6000fd5b5050505050565b60008060006041845114611ea557600080fd5b60008060006020870151925060408701519150606087015160001a90508083839550955095505050509193909250565b6000804690508091505090565b600060019054906101000a900460ff1680611f08575060008054906101000a900460ff16155b611f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3e90612d39565b60405180910390fd5b60008060019054906101000a900460ff161590508015611f97576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015611fb85760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680611fe1575060008054906101000a900460ff16155b612020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201790612d39565b60405180910390fd5b60008060019054906101000a900460ff161590508015612070576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600061207a6116e9565b905080603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350801561213a5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612163575060008054906101000a900460ff16155b6121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990612d39565b60405180910390fd5b60008060019054906101000a900460ff1615905080156121f2576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6000606560006101000a81548160ff021916908315150217905550801561222e5760008060016101000a81548160ff0219169083151502179055505b50565b600081519050919050565b600082825260208201905092915050565b60005b8381101561226b578082015181840152602081019050612250565b60008484015250505050565b6000601f19601f8301169050919050565b600061229382612231565b61229d818561223c565b93506122ad81856020860161224d565b6122b681612277565b840191505092915050565b600060208201905081810360008301526122db8184612288565b905092915050565b6000819050919050565b6122f6816122e3565b82525050565b600060208201905061231160008301846122ed565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61236882612277565b810181811067ffffffffffffffff8211171561238757612386612330565b5b80604052505050565b600061239a612317565b90506123a6828261235f565b919050565b6123b4816122e3565b81146123bf57600080fd5b50565b6000813590506123d1816123ab565b92915050565b6000606082840312156123ed576123ec61232b565b5b6123f76060612390565b90506000612407848285016123c2565b600083015250602061241b848285016123c2565b602083015250604061242f848285016123c2565b60408301525092915050565b600080fd5b600080fd5b600067ffffffffffffffff8211156124605761245f612330565b5b61246982612277565b9050602081019050919050565b82818337600083830152505050565b600061249861249384612445565b612390565b9050828152602081018484840111156124b4576124b3612440565b5b6124bf848285612476565b509392505050565b600082601f8301126124dc576124db61243b565b5b81356124ec848260208601612485565b91505092915050565b600080600060a0848603121561250e5761250d612321565b5b600061251c868287016123d7565b935050606084013567ffffffffffffffff81111561253d5761253c612326565b5b612549868287016124c7565b925050608061255a868287016123c2565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006125a96125a461259f84612564565b612584565b612564565b9050919050565b60006125bb8261258e565b9050919050565b60006125cd826125b0565b9050919050565b6125dd816125c2565b82525050565b60006020820190506125f860008301846125d4565b92915050565b600061260982612564565b9050919050565b612619816125fe565b811461262457600080fd5b50565b60008135905061263681612610565b92915050565b60006020828403121561265257612651612321565b5b600061266084828501612627565b91505092915050565b60008115159050919050565b61267e81612669565b82525050565b60006020820190506126996000830184612675565b92915050565b6000602082840312156126b5576126b4612321565b5b60006126c3848285016123c2565b91505092915050565b60006126d7826125fe565b9050919050565b6126e7816126cc565b81146126f257600080fd5b50565b600081359050612704816126de565b92915050565b6000602082840312156127205761271f612321565b5b600061272e848285016126f5565b91505092915050565b6000612742826125b0565b9050919050565b61275281612737565b82525050565b600060208201905061276d6000830184612749565b92915050565b61277c816125fe565b82525050565b60006020820190506127976000830184612773565b92915050565b60006127a8826125fe565b9050919050565b6127b88161279d565b81146127c357600080fd5b50565b6000813590506127d5816127af565b92915050565b60006127e6826125fe565b9050919050565b6127f6816127db565b811461280157600080fd5b50565b600081359050612813816127ed565b92915050565b600080600080600080600080610100898b03121561283a57612839612321565b5b60006128488b828c016127c6565b98505060206128598b828c016126f5565b975050604061286a8b828c016123c2565b965050606061287b8b828c01612627565b955050608061288c8b828c016123c2565b94505060a061289d8b828c016123c2565b93505060c06128ae8b828c01612804565b92505060e06128bf8b828c01612627565b9150509295985092959890939650565b60006128da826125b0565b9050919050565b6128ea816128cf565b82525050565b600060208201905061290560008301846128e1565b92915050565b60006020828403121561292157612920612321565b5b600061292f84828501612804565b91505092915050565b60008060006060848603121561295157612950612321565b5b600061295f868287016123c2565b935050602084013567ffffffffffffffff8111156129805761297f612326565b5b61298c868287016124c7565b925050604061299d868287016123c2565b9150509250925092565b6000602082840312156129bd576129bc612321565b5b60006129cb848285016127c6565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612a0a60208361223c565b9150612a15826129d4565b602082019050919050565b60006020820190508181036000830152612a39816129fd565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000612a7660148361223c565b9150612a8182612a40565b602082019050919050565b60006020820190508181036000830152612aa581612a69565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000612ae260108361223c565b9150612aed82612aac565b602082019050919050565b60006020820190508181036000830152612b1181612ad5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b52826122e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b8457612b83612b18565b5b600182019050919050565b7f4d6178206e756d626572206f6620686174636865732072656163686564000000600082015250565b6000612bc5601d8361223c565b9150612bd082612b8f565b602082019050919050565b60006020820190508181036000830152612bf481612bb8565b9050919050565b6000606082019050612c106000830186612773565b612c1d6020830185612773565b612c2a60408301846122ed565b949350505050565b7f496e76616c6964207369676e6572206f72207369676e61747572650000000000600082015250565b6000612c68601b8361223c565b9150612c7382612c32565b602082019050919050565b60006020820190508181036000830152612c9781612c5b565b9050919050565b6000604082019050612cb36000830185612773565b612cc060208301846122ed565b9392505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612d23602e8361223c565b9150612d2e82612cc7565b604082019050919050565b60006020820190508181036000830152612d5281612d16565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612db560268361223c565b9150612dc082612d59565b604082019050919050565b60006020820190508181036000830152612de481612da8565b9050919050565b612df4816122e3565b82525050565b606082016000820151612e106000850182612deb565b506020820151612e236020850182612deb565b506040820151612e366040850182612deb565b50505050565b6000608082019050612e516000830185612773565b612e5e6020830184612dfa565b9392505050565b612e6e81612669565b8114612e7957600080fd5b50565b600081519050612e8b81612e65565b92915050565b600060208284031215612ea757612ea6612321565b5b6000612eb584828501612e7c565b91505092915050565b7f496e76616c696420736f6674206d696e74656420746f6b656e20494400000000600082015250565b6000612ef4601c8361223c565b9150612eff82612ebe565b602082019050919050565b60006020820190508181036000830152612f2381612ee7565b9050919050565b6000606082019050612f3f6000830186612773565b612f4c60208301856122ed565b612f596040830184612675565b949350505050565b7f5369676e61747572652065787069726564000000000000000000000000000000600082015250565b6000612f9760118361223c565b9150612fa282612f61565b602082019050919050565b60006020820190508181036000830152612fc681612f8a565b9050919050565b6000819050919050565b612fe8612fe3826122e3565b612fcd565b82525050565b60008160601b9050919050565b600061300682612fee565b9050919050565b600061301882612ffb565b9050919050565b61303061302b826125fe565b61300d565b82525050565b600081905092915050565b600061304c82612231565b6130568185613036565b935061306681856020860161224d565b80840191505092915050565b600061307e8289612fd7565b60208201915061308e828861301f565b60148201915061309e828761301f565b6014820191506130ae8286612fd7565b6020820191506130be8285613041565b91506130ca8284612fd7565b602082019150819050979650505050505050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000613114601c83613036565b915061311f826130de565b601c82019050919050565b6000819050919050565b6000819050919050565b61314f61314a8261312a565b613134565b82525050565b600061316082613107565b915061316c828461313e565b60208201915081905092915050565b6131848161312a565b82525050565b600060ff82169050919050565b6131a08161318a565b82525050565b60006080820190506131bb600083018761317b565b6131c86020830186613197565b6131d5604083018561317b565b6131e2606083018461317b565b95945050505050565b7f496e76616c69642068617264206d696e74656420746f6b656e20494400000000600082015250565b6000613221601c8361223c565b915061322c826131eb565b602082019050919050565b6000602082019050818103600083015261325081613214565b905091905056fea264697066735822122093d987ab5ac2219cb389a01c23a75c9a904be8f1126dfab310bd34cfc0f2294c64736f6c63430008110033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80637de1e536116100de578063c33f036b11610097578063efdbf31211610071578063efdbf312146103d9578063f2fde38b146103f5578063f74d548014610411578063fbf5e35c1461042f5761018e565b8063c33f036b14610381578063e00dd1611461039f578063efaf2ffc146103bd5761018e565b80637de1e536146102e55780638456cb59146103035780638da5cb5b1461030d5780639a91b5d91461032b5780639b37aecb14610349578063c20fbd9b146103655761018e565b806356a1c7011161014b578063715018a611610125578063715018a6146102875780637598483f14610291578063768b5fd5146102ad578063792fe2e8146102c95761018e565b806356a1c701146102315780635c975abb1461024d5780635e00e6791461026b5761018e565b806306fdde03146101935780630fb9e862146101b15780633f4ba83a146101cf578063415331e4146101d957806351abc4ed146101f55780635588bb4b14610213575b600080fd5b61019b61044b565b6040516101a891906122c1565b60405180910390f35b6101b9610484565b6040516101c691906122fc565b60405180910390f35b6101d761048a565b005b6101f360048036038101906101ee91906124f5565b610557565b005b6101fd610805565b60405161020a91906125e3565b60405180910390f35b61021b61082b565b60405161022891906122fc565b60405180910390f35b61024b6004803603810190610246919061263c565b610831565b005b6102556108f1565b6040516102629190612684565b60405180910390f35b6102856004803603810190610280919061263c565b610908565b005b61028f6109c8565b005b6102ab60048036038101906102a6919061269f565b610b05565b005b6102c760048036038101906102c2919061270a565b610b8b565b005b6102e360048036038101906102de919061269f565b610c4b565b005b6102ed610cd1565b6040516102fa9190612758565b60405180910390f35b61030b610cf7565b005b610315610dc5565b6040516103229190612782565b60405180910390f35b610333610def565b60405161034091906122fc565b60405180910390f35b610363600480360381019061035e919061269f565b610df5565b005b61037f600480360381019061037a9190612819565b610e7b565b005b6103896110c6565b60405161039691906128f0565b60405180910390f35b6103a76110ec565b6040516103b491906122fc565b60405180910390f35b6103d760048036038101906103d2919061290b565b6110f2565b005b6103f360048036038101906103ee9190612938565b6111b2565b005b61040f600480360381019061040a919061263c565b611458565b005b610419611603565b6040516104269190612782565b60405180910390f35b610449600480360381019061044491906129a7565b611629565b005b6040518060400160405280600c81526020017f4372797374616c4861746368000000000000000000000000000000000000000081525081565b609b5481565b6104926116e9565b73ffffffffffffffffffffffffffffffffffffffff166104b0610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fd90612a20565b60405180910390fd5b61050e6108f1565b61054d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054490612a8c565b60405180910390fd5b6105556116f1565b565b61055f6108f1565b1561059f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059690612af8565b60405180910390fd5b609c54609b600081546105b190612b47565b919050819055106105f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ee90612bdb565b60405180910390fd5b61060083611793565b6000609e5411156106c157609d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33609f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16609e546040518463ffffffff1660e01b815260040161068e93929190612bfb565b600060405180830381600087803b1580156106a857600080fd5b505af11580156106bc573d6000803e3d6000fd5b505050505b6106d13384600001518385611909565b610710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070790612c7e565b60405180910390fd5b609a5483600001513373ffffffffffffffffffffffffffffffffffffffff167f1b2ecd28809029a8e6cc1cd813657f3a8b9e3160218a7122b932a48f07c8c30060405160405180910390a4609960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933609a60008154809291906107ad90612b47565b919050556040518363ffffffff1660e01b81526004016107ce929190612c9e565b600060405180830381600087803b1580156107e857600080fd5b505af11580156107fc573d6000803e3d6000fd5b50505050505050565b609d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b609e5481565b6108396116e9565b73ffffffffffffffffffffffffffffffffffffffff16610857610dc5565b73ffffffffffffffffffffffffffffffffffffffff16146108ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a490612a20565b60405180910390fd5b80609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000606560009054906101000a900460ff16905090565b6109106116e9565b73ffffffffffffffffffffffffffffffffffffffff1661092e610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097b90612a20565b60405180910390fd5b80609f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6109d06116e9565b73ffffffffffffffffffffffffffffffffffffffff166109ee610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3b90612a20565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610b0d6116e9565b73ffffffffffffffffffffffffffffffffffffffff16610b2b610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7890612a20565b60405180910390fd5b80609c8190555050565b610b936116e9565b73ffffffffffffffffffffffffffffffffffffffff16610bb1610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90612a20565b60405180910390fd5b80609960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c536116e9565b73ffffffffffffffffffffffffffffffffffffffff16610c71610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe90612a20565b60405180910390fd5b80609e8190555050565b609960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610cff6116e9565b73ffffffffffffffffffffffffffffffffffffffff16610d1d610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6a90612a20565b60405180910390fd5b610d7b6108f1565b15610dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db290612af8565b60405180910390fd5b610dc3611aab565b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b609c5481565b610dfd6116e9565b73ffffffffffffffffffffffffffffffffffffffff16610e1b610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6890612a20565b60405180910390fd5b80609a8190555050565b600060019054906101000a900460ff1680610ea1575060008054906101000a900460ff16155b610ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed790612d39565b60405180910390fd5b60008060019054906101000a900460ff161590508015610f30576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b88609860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087609960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086609a8190555085609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084609c8190555083609e8190555082609d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081609f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611092611b4e565b61109a611c37565b80156110bb5760008060016101000a81548160ff0219169083151502179055505b505050505050505050565b609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b609a5481565b6110fa6116e9565b73ffffffffffffffffffffffffffffffffffffffff16611118610dc5565b73ffffffffffffffffffffffffffffffffffffffff161461116e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116590612a20565b60405180910390fd5b80609d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111ba6108f1565b156111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190612af8565b60405180910390fd5b609c54609b6000815461120c90612b47565b91905081905510611252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124990612bdb565b60405180910390fd5b61125b83611d20565b6000609e54111561131c57609d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33609f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16609e546040518463ffffffff1660e01b81526004016112e993929190612bfb565b600060405180830381600087803b15801561130357600080fd5b505af1158015611317573d6000803e3d6000fd5b505050505b61132833848385611909565b611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e90612c7e565b60405180910390fd5b609a54833373ffffffffffffffffffffffffffffffffffffffff167f1b2ecd28809029a8e6cc1cd813657f3a8b9e3160218a7122b932a48f07c8c30060405160405180910390a4609960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933609a600081548092919061140090612b47565b919050556040518363ffffffff1660e01b8152600401611421929190612c9e565b600060405180830381600087803b15801561143b57600080fd5b505af115801561144f573d6000803e3d6000fd5b50505050505050565b6114606116e9565b73ffffffffffffffffffffffffffffffffffffffff1661147e610dc5565b73ffffffffffffffffffffffffffffffffffffffff16146114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb90612a20565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a90612dcb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116316116e9565b73ffffffffffffffffffffffffffffffffffffffff1661164f610dc5565b73ffffffffffffffffffffffffffffffffffffffff16146116a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169c90612a20565b60405180910390fd5b80609860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6116f96108f1565b611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f90612a8c565b60405180910390fd5b6000606560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61177c6116e9565b6040516117899190612782565b60405180910390a1565b609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631a42ce7633836040518363ffffffff1660e01b81526004016117f0929190612e3c565b602060405180830381865afa15801561180d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118319190612e91565b611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790612f0a565b60405180910390fd5b609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad193fab33836000015160006040518463ffffffff1660e01b81526004016118d493929190612f2a565b600060405180830381600087803b1580156118ee57600080fd5b505af1158015611902573d6000803e3d6000fd5b5050505050565b600042831161194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194490612fad565b60405180910390fd5b600080600061195b85611e92565b8094508195508293505050506000878930611974611ed5565b6040518060400160405280600c81526020017f4372797374616c486174636800000000000000000000000000000000000000008152508b6040516020016119c096959493929190613072565b6040516020818303038152906040528051906020012090506001816040516020016119eb9190613155565b6040516020818303038152906040528051906020012083868660405160008152602001604052604051611a2194939291906131a6565b6020604051602081039080840390855afa158015611a43573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614945050505050949350505050565b611ab36108f1565b15611af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aea90612af8565b60405180910390fd5b6001606560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611b376116e9565b604051611b449190612782565b60405180910390a1565b600060019054906101000a900460ff1680611b74575060008054906101000a900460ff16155b611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa90612d39565b60405180910390fd5b60008060019054906101000a900460ff161590508015611c03576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611c0b611ee2565b611c13611fbb565b8015611c345760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680611c5d575060008054906101000a900460ff16155b611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390612d39565b60405180910390fd5b60008060019054906101000a900460ff161590508015611cec576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611cf4611ee2565b611cfc61213d565b8015611d1d5760008060016101000a81548160ff0219169083151502179055505b50565b609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b39f894e33836040518363ffffffff1660e01b8152600401611d7d929190612c9e565b602060405180830381865afa158015611d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbe9190612e91565b611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df490613237565b60405180910390fd5b609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad193fab338360016040518463ffffffff1660e01b8152600401611e5d93929190612f2a565b600060405180830381600087803b158015611e7757600080fd5b505af1158015611e8b573d6000803e3d6000fd5b5050505050565b60008060006041845114611ea557600080fd5b60008060006020870151925060408701519150606087015160001a90508083839550955095505050509193909250565b6000804690508091505090565b600060019054906101000a900460ff1680611f08575060008054906101000a900460ff16155b611f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3e90612d39565b60405180910390fd5b60008060019054906101000a900460ff161590508015611f97576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015611fb85760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680611fe1575060008054906101000a900460ff16155b612020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201790612d39565b60405180910390fd5b60008060019054906101000a900460ff161590508015612070576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600061207a6116e9565b905080603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350801561213a5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680612163575060008054906101000a900460ff16155b6121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990612d39565b60405180910390fd5b60008060019054906101000a900460ff1615905080156121f2576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6000606560006101000a81548160ff021916908315150217905550801561222e5760008060016101000a81548160ff0219169083151502179055505b50565b600081519050919050565b600082825260208201905092915050565b60005b8381101561226b578082015181840152602081019050612250565b60008484015250505050565b6000601f19601f8301169050919050565b600061229382612231565b61229d818561223c565b93506122ad81856020860161224d565b6122b681612277565b840191505092915050565b600060208201905081810360008301526122db8184612288565b905092915050565b6000819050919050565b6122f6816122e3565b82525050565b600060208201905061231160008301846122ed565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61236882612277565b810181811067ffffffffffffffff8211171561238757612386612330565b5b80604052505050565b600061239a612317565b90506123a6828261235f565b919050565b6123b4816122e3565b81146123bf57600080fd5b50565b6000813590506123d1816123ab565b92915050565b6000606082840312156123ed576123ec61232b565b5b6123f76060612390565b90506000612407848285016123c2565b600083015250602061241b848285016123c2565b602083015250604061242f848285016123c2565b60408301525092915050565b600080fd5b600080fd5b600067ffffffffffffffff8211156124605761245f612330565b5b61246982612277565b9050602081019050919050565b82818337600083830152505050565b600061249861249384612445565b612390565b9050828152602081018484840111156124b4576124b3612440565b5b6124bf848285612476565b509392505050565b600082601f8301126124dc576124db61243b565b5b81356124ec848260208601612485565b91505092915050565b600080600060a0848603121561250e5761250d612321565b5b600061251c868287016123d7565b935050606084013567ffffffffffffffff81111561253d5761253c612326565b5b612549868287016124c7565b925050608061255a868287016123c2565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006125a96125a461259f84612564565b612584565b612564565b9050919050565b60006125bb8261258e565b9050919050565b60006125cd826125b0565b9050919050565b6125dd816125c2565b82525050565b60006020820190506125f860008301846125d4565b92915050565b600061260982612564565b9050919050565b612619816125fe565b811461262457600080fd5b50565b60008135905061263681612610565b92915050565b60006020828403121561265257612651612321565b5b600061266084828501612627565b91505092915050565b60008115159050919050565b61267e81612669565b82525050565b60006020820190506126996000830184612675565b92915050565b6000602082840312156126b5576126b4612321565b5b60006126c3848285016123c2565b91505092915050565b60006126d7826125fe565b9050919050565b6126e7816126cc565b81146126f257600080fd5b50565b600081359050612704816126de565b92915050565b6000602082840312156127205761271f612321565b5b600061272e848285016126f5565b91505092915050565b6000612742826125b0565b9050919050565b61275281612737565b82525050565b600060208201905061276d6000830184612749565b92915050565b61277c816125fe565b82525050565b60006020820190506127976000830184612773565b92915050565b60006127a8826125fe565b9050919050565b6127b88161279d565b81146127c357600080fd5b50565b6000813590506127d5816127af565b92915050565b60006127e6826125fe565b9050919050565b6127f6816127db565b811461280157600080fd5b50565b600081359050612813816127ed565b92915050565b600080600080600080600080610100898b03121561283a57612839612321565b5b60006128488b828c016127c6565b98505060206128598b828c016126f5565b975050604061286a8b828c016123c2565b965050606061287b8b828c01612627565b955050608061288c8b828c016123c2565b94505060a061289d8b828c016123c2565b93505060c06128ae8b828c01612804565b92505060e06128bf8b828c01612627565b9150509295985092959890939650565b60006128da826125b0565b9050919050565b6128ea816128cf565b82525050565b600060208201905061290560008301846128e1565b92915050565b60006020828403121561292157612920612321565b5b600061292f84828501612804565b91505092915050565b60008060006060848603121561295157612950612321565b5b600061295f868287016123c2565b935050602084013567ffffffffffffffff8111156129805761297f612326565b5b61298c868287016124c7565b925050604061299d868287016123c2565b9150509250925092565b6000602082840312156129bd576129bc612321565b5b60006129cb848285016127c6565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612a0a60208361223c565b9150612a15826129d4565b602082019050919050565b60006020820190508181036000830152612a39816129fd565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000612a7660148361223c565b9150612a8182612a40565b602082019050919050565b60006020820190508181036000830152612aa581612a69565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000612ae260108361223c565b9150612aed82612aac565b602082019050919050565b60006020820190508181036000830152612b1181612ad5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b52826122e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b8457612b83612b18565b5b600182019050919050565b7f4d6178206e756d626572206f6620686174636865732072656163686564000000600082015250565b6000612bc5601d8361223c565b9150612bd082612b8f565b602082019050919050565b60006020820190508181036000830152612bf481612bb8565b9050919050565b6000606082019050612c106000830186612773565b612c1d6020830185612773565b612c2a60408301846122ed565b949350505050565b7f496e76616c6964207369676e6572206f72207369676e61747572650000000000600082015250565b6000612c68601b8361223c565b9150612c7382612c32565b602082019050919050565b60006020820190508181036000830152612c9781612c5b565b9050919050565b6000604082019050612cb36000830185612773565b612cc060208301846122ed565b9392505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612d23602e8361223c565b9150612d2e82612cc7565b604082019050919050565b60006020820190508181036000830152612d5281612d16565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612db560268361223c565b9150612dc082612d59565b604082019050919050565b60006020820190508181036000830152612de481612da8565b9050919050565b612df4816122e3565b82525050565b606082016000820151612e106000850182612deb565b506020820151612e236020850182612deb565b506040820151612e366040850182612deb565b50505050565b6000608082019050612e516000830185612773565b612e5e6020830184612dfa565b9392505050565b612e6e81612669565b8114612e7957600080fd5b50565b600081519050612e8b81612e65565b92915050565b600060208284031215612ea757612ea6612321565b5b6000612eb584828501612e7c565b91505092915050565b7f496e76616c696420736f6674206d696e74656420746f6b656e20494400000000600082015250565b6000612ef4601c8361223c565b9150612eff82612ebe565b602082019050919050565b60006020820190508181036000830152612f2381612ee7565b9050919050565b6000606082019050612f3f6000830186612773565b612f4c60208301856122ed565b612f596040830184612675565b949350505050565b7f5369676e61747572652065787069726564000000000000000000000000000000600082015250565b6000612f9760118361223c565b9150612fa282612f61565b602082019050919050565b60006020820190508181036000830152612fc681612f8a565b9050919050565b6000819050919050565b612fe8612fe3826122e3565b612fcd565b82525050565b60008160601b9050919050565b600061300682612fee565b9050919050565b600061301882612ffb565b9050919050565b61303061302b826125fe565b61300d565b82525050565b600081905092915050565b600061304c82612231565b6130568185613036565b935061306681856020860161224d565b80840191505092915050565b600061307e8289612fd7565b60208201915061308e828861301f565b60148201915061309e828761301f565b6014820191506130ae8286612fd7565b6020820191506130be8285613041565b91506130ca8284612fd7565b602082019150819050979650505050505050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000613114601c83613036565b915061311f826130de565b601c82019050919050565b6000819050919050565b6000819050919050565b61314f61314a8261312a565b613134565b82525050565b600061316082613107565b915061316c828461313e565b60208201915081905092915050565b6131848161312a565b82525050565b600060ff82169050919050565b6131a08161318a565b82525050565b60006080820190506131bb600083018761317b565b6131c86020830186613197565b6131d5604083018561317b565b6131e2606083018461317b565b95945050505050565b7f496e76616c69642068617264206d696e74656420746f6b656e20494400000000600082015250565b6000613221601c8361223c565b915061322c826131eb565b602082019050919050565b6000602082019050818103600083015261325081613214565b905091905056fea264697066735822122093d987ab5ac2219cb389a01c23a75c9a904be8f1126dfab310bd34cfc0f2294c64736f6c63430008110033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.