Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 5,623 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Refund All Remai... | 18943484 | 323 days ago | IN | 0 ETH | 0.00299072 | ||||
Withdraw All | 18943433 | 323 days ago | IN | 0 ETH | 0.00084745 | ||||
Refund Remaining... | 14423740 | 979 days ago | IN | 0 ETH | 0.00204962 | ||||
Auction Mint | 14353976 | 990 days ago | IN | 0.1 ETH | 0.00104999 | ||||
Public Sale Mint | 14341370 | 992 days ago | IN | 0.5 ETH | 0.00166754 | ||||
Public Sale Mint | 14341366 | 992 days ago | IN | 0.1 ETH | 0.00162359 | ||||
Public Sale Mint | 14341341 | 992 days ago | IN | 0.1 ETH | 0.00169673 | ||||
Public Sale Mint | 14341333 | 992 days ago | IN | 0.5 ETH | 0.00213744 | ||||
Public Sale Mint | 14341333 | 992 days ago | IN | 0.4 ETH | 0.00214851 | ||||
Public Sale Mint | 14341333 | 992 days ago | IN | 0.4 ETH | 0.00214851 | ||||
Public Sale Mint | 14341332 | 992 days ago | IN | 0.5 ETH | 0.00188533 | ||||
Public Sale Mint | 14341332 | 992 days ago | IN | 0.1 ETH | 0.00188533 | ||||
Public Sale Mint | 14341332 | 992 days ago | IN | 0.1 ETH | 0.00188902 | ||||
Public Sale Mint | 14341332 | 992 days ago | IN | 0.1 ETH | 0.00190379 | ||||
Public Sale Mint | 14341332 | 992 days ago | IN | 0.5 ETH | 0.0019407 | ||||
Public Sale Mint | 14341331 | 992 days ago | IN | 0.3 ETH | 0.00169855 | ||||
Public Sale Mint | 14341331 | 992 days ago | IN | 0.1 ETH | 0.00171701 | ||||
Public Sale Mint | 14341331 | 992 days ago | IN | 0.1 ETH | 0.00171701 | ||||
Public Sale Mint | 14341331 | 992 days ago | IN | 0.3 ETH | 0.00171022 | ||||
Public Sale Mint | 14341330 | 992 days ago | IN | 0.3 ETH | 0.00157253 | ||||
Public Sale Mint | 14341330 | 992 days ago | IN | 0.5 ETH | 0.00157253 | ||||
Public Sale Mint | 14341330 | 992 days ago | IN | 0.5 ETH | 0.00157253 | ||||
Public Sale Mint | 14341330 | 992 days ago | IN | 0.5 ETH | 0.00157253 | ||||
Public Sale Mint | 14341330 | 992 days ago | IN | 0.5 ETH | 0.00157253 | ||||
Public Sale Mint | 14341330 | 992 days ago | IN | 0.5 ETH | 0.00157253 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
18943484 | 323 days ago | 0.1 ETH | ||||
18943484 | 323 days ago | 2.8 ETH | ||||
18943484 | 323 days ago | 0.1 ETH | ||||
18943484 | 323 days ago | 0.3 ETH | ||||
18943484 | 323 days ago | 0.6 ETH | ||||
18943484 | 323 days ago | 0.1 ETH | ||||
18943433 | 323 days ago | 202.98 ETH | ||||
14423740 | 979 days ago | 0.5 ETH | ||||
14341329 | 992 days ago | 0.4 ETH | ||||
14338287 | 992 days ago | 0.8 ETH | ||||
14338133 | 992 days ago | 0.3 ETH | ||||
14335986 | 993 days ago | 0.9 ETH | ||||
14334514 | 993 days ago | 0.2 ETH | ||||
14331941 | 993 days ago | 0.9 ETH | ||||
14331211 | 993 days ago | 0.1 ETH | ||||
14331189 | 993 days ago | 0.1 ETH | ||||
14330391 | 993 days ago | 1 ETH | ||||
14329051 | 994 days ago | 0.9 ETH | ||||
14328711 | 994 days ago | 0.4 ETH | ||||
14328550 | 994 days ago | 0.5 ETH | ||||
14328176 | 994 days ago | 0.3 ETH | ||||
14328036 | 994 days ago | 1.8 ETH | ||||
14327640 | 994 days ago | 2.4 ETH | ||||
14327480 | 994 days ago | 0.5 ETH | ||||
14326485 | 994 days ago | 0.1 ETH |
Loading...
Loading
Contract Name:
TroverseMinter
Compiler Version
v0.8.6+commit.11564f7e
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // ████████╗██████╗ ██████╗ ██╗ ██╗███████╗██████╗ ███████╗███████╗ // ╚══██╔══╝██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗██╔════╝██╔════╝ // ██║ ██████╔╝██║ ██║██║ ██║█████╗ ██████╔╝███████╗█████╗ // ██║ ██╔══██╗██║ ██║╚██╗ ██╔╝██╔══╝ ██╔══██╗╚════██║██╔══╝ // ██║ ██║ ██║╚██████╔╝ ╚████╔╝ ███████╗██║ ██║███████║███████╗ // ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; interface INFTContract { function Mint(address _to, uint256 _quantity) external payable; function numberMinted(address owner) external view returns (uint256); function totalSupplyExternal() external view returns (uint256); } contract TroverseMinter is Ownable, ReentrancyGuard { INFTContract public NFTContract; using EnumerableSet for EnumerableSet.AddressSet; uint256 public constant TOTAL_PLANETS = 10000; uint256 public constant MAX_MINT_PER_ADDRESS = 5; uint256 public constant RESERVED_PLANETS = 300; uint256 public constant RESERVED_OR_AUCTION_PLANETS = 7300; uint256 public constant AUCTION_START_PRICE = 1 ether; uint256 public constant AUCTION_END_PRICE = 0.1 ether; uint256 public constant AUCTION_PRICE_CURVE_LENGTH = 180 minutes; uint256 public constant AUCTION_DROP_INTERVAL = 20 minutes; uint256 public constant AUCTION_DROP_PER_STEP = 0.1 ether; uint256 public auctionSaleStartTime; uint256 public publicSaleStartTime; uint256 public whitelistPrice; uint256 public publicSalePrice; uint256 private publicSaleKey; mapping(address => uint256) public whitelist; uint256 public lastAuctionSalePrice = AUCTION_START_PRICE; mapping(address => uint256) public credits; mapping(address => uint256) public creditCount; EnumerableSet.AddressSet private _creditOwners; uint256 private _totalCredits; uint256 private _totalCreditCount; event CreditRefunded(address indexed owner, uint256 value); modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } constructor() { } /** * Sets the NFT contract address */ function setNFTContract(address _NFTContract) external onlyOwner { NFTContract = INFTContract(_NFTContract); } /** * Tries to mint NFTs during the Trove Auction Phase (Equalized Dutch Auction) * Based on the price of last mint, extra credits should be refunded when the auction is over * Any extra funds will be transferred back to the sender's address */ function auctionMint(uint256 quantity) external payable callerIsUser { require(auctionSaleStartTime != 0 && block.timestamp >= auctionSaleStartTime, "Sale has not started yet"); require(totalSupply() + quantity <= RESERVED_OR_AUCTION_PLANETS, "Not enough remaining reserved for auction to support desired mint amount"); require(numberMinted(msg.sender) + quantity <= MAX_MINT_PER_ADDRESS, "Can not mint this many"); lastAuctionSalePrice = getAuctionPrice(); uint256 totalCost = lastAuctionSalePrice * quantity; if (lastAuctionSalePrice > AUCTION_END_PRICE) { _creditOwners.add(msg.sender); credits[msg.sender] += totalCost; creditCount[msg.sender] += quantity; _totalCredits += totalCost; _totalCreditCount += quantity; } NFTContract.Mint(msg.sender, quantity); refundIfOver(totalCost); } /** * Tries to mint NFTs during the whitelist phase * Any extra funds will be transferred back to the sender's address */ function whitelistMint(uint256 quantity) external payable callerIsUser { require(whitelistPrice != 0, "Whitelist sale has not begun yet"); require(whitelist[msg.sender] > 0, "Not eligible for whitelist mint"); require(whitelist[msg.sender] >= quantity, "Can not mint this many"); require(totalSupply() + quantity <= TOTAL_PLANETS, "Reached max supply"); whitelist[msg.sender] -= quantity; NFTContract.Mint(msg.sender, quantity); refundIfOver(whitelistPrice * quantity); } /** * Tries to mint NFTs during the public sale * Any extra funds will be transferred back to the sender's address */ function publicSaleMint(uint256 quantity, uint256 key) external payable callerIsUser { require(publicSaleKey == key, "Called with incorrect public sale key"); require(isPublicSaleOn(), "Public sale has not begun yet"); require(totalSupply() + quantity <= TOTAL_PLANETS, "Reached max supply"); require(numberMinted(msg.sender) + quantity <= MAX_MINT_PER_ADDRESS, "Can not mint this many"); NFTContract.Mint(msg.sender, quantity); refundIfOver(publicSalePrice * quantity); } /** * Tries to transfer back the extra funds, if the paying amount is more than the cost */ function refundIfOver(uint256 price) private { require(msg.value >= price, "Insufficient funds"); if (msg.value > price) { payable(msg.sender).transfer(msg.value - price); } } /** * Checks if the public sale is active */ function isPublicSaleOn() public view returns (bool) { return publicSalePrice != 0 && block.timestamp >= publicSaleStartTime && publicSaleStartTime != 0; } /** * Calculates the auction price */ function getAuctionPrice() public view returns (uint256) { if (block.timestamp < auctionSaleStartTime) { return AUCTION_START_PRICE; } if (block.timestamp - auctionSaleStartTime >= AUCTION_PRICE_CURVE_LENGTH) { return AUCTION_END_PRICE; } else { uint256 steps = (block.timestamp - auctionSaleStartTime) / AUCTION_DROP_INTERVAL; return AUCTION_START_PRICE - (steps * AUCTION_DROP_PER_STEP); } } /** * Sets the auction start time */ function setAuctionSaleStartTime(uint256 timestamp) external onlyOwner { auctionSaleStartTime = timestamp; } /** * Sets the price for the whitlist phase * Whitelist sale will be active if the price is not 0 */ function setWhitelistPrice(uint256 price) external onlyOwner { whitelistPrice = price; } /** * Sets the price for the public phase */ function setPublicSalePrice(uint256 price) external onlyOwner { publicSalePrice = price; } /** * Sets the public phase start time */ function setPublicSaleStartTime(uint256 timestamp) external onlyOwner { publicSaleStartTime = timestamp; } /** * Sets the key for accessing the public phase */ function setPublicSaleKey(uint256 key) external onlyOwner { publicSaleKey = key; } /** * Adds or updates new whitelisted wallets */ function addWhitelist(address[] memory addresses, uint256 limit) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { whitelist[addresses[i]] = limit; } } /** * Mints reserved planets, which will be used for promotions, marketing, strategic partnerships, giveaways, airdrops and also for Troverse team allocation */ function reserveMint(uint256 quantity) external onlyOwner { require(totalSupply() + quantity <= RESERVED_PLANETS, "Too many already minted before dev mint"); NFTContract.Mint(msg.sender, quantity); } /** * Checks if the auction refund price is determined */ function isAuctionPriceFinalized() public view returns(bool) { return totalSupply() >= RESERVED_OR_AUCTION_PLANETS || lastAuctionSalePrice == AUCTION_END_PRICE; } /** * Gets the remaining credits to refund after the auction phase */ function getRemainingCredits(address owner) external view returns(uint256) { if (credits[owner] > 0) { return credits[owner] - lastAuctionSalePrice * creditCount[owner]; } return 0; } /** * Gets total remaining credits to refund after the auction phase */ function getTotalRemainingCredits() public view returns(uint256) { return _totalCredits - lastAuctionSalePrice * _totalCreditCount; } /** * Gets the maximum possible credits to refund after the auction phase */ function getMaxPossibleCredits() public view returns(uint256) { if (isAuctionPriceFinalized()) { return getTotalRemainingCredits(); } return _totalCredits - AUCTION_END_PRICE * _totalCreditCount; } /** * @notice Refunds the remaining credits after the auction phase */ function refundRemainingCredits() external nonReentrant { require(isAuctionPriceFinalized(), "Auction price is not finalized yet!"); require(_creditOwners.contains(msg.sender), "Not a credit owner!"); uint256 remainingCredits = credits[msg.sender]; uint256 remainingCreditCount = creditCount[msg.sender]; uint256 toSendCredits = remainingCredits - lastAuctionSalePrice * remainingCreditCount; require(toSendCredits > 0, "No credits to refund!"); delete credits[msg.sender]; delete creditCount[msg.sender]; _creditOwners.remove(msg.sender); _totalCredits -= remainingCredits; _totalCreditCount -= remainingCreditCount; emit CreditRefunded(msg.sender, toSendCredits); require(payable(msg.sender).send(toSendCredits)); } /** * Refunds the remaining credits for not yet refunded addresses */ function refundAllRemainingCreditsByCount(uint256 count) external onlyOwner { require(isAuctionPriceFinalized(), "Auction price is not finalized yet!"); address toSendWallet; uint256 toSendCredits; uint256 remainingCredits; uint256 remainingCreditCount; uint256 j = 0; while (_creditOwners.length() > 0 && j < count) { toSendWallet = _creditOwners.at(0); remainingCredits = credits[toSendWallet]; remainingCreditCount = creditCount[toSendWallet]; toSendCredits = remainingCredits - lastAuctionSalePrice * remainingCreditCount; delete credits[toSendWallet]; delete creditCount[toSendWallet]; _creditOwners.remove(toSendWallet); if (toSendCredits > 0) { require(payable(toSendWallet).send(toSendCredits)); emit CreditRefunded(toSendWallet, toSendCredits); _totalCredits -= toSendCredits; _totalCreditCount -= remainingCreditCount; } j++; } } /** * Withdraws the collected funds excluding the remaining credits */ function withdrawAll(address to) external onlyOwner { uint256 maxPossibleCredits = getMaxPossibleCredits(); require(address(this).balance > maxPossibleCredits, "No funds to withdraw"); uint256 toWithdrawFunds = address(this).balance - maxPossibleCredits; require(payable(to).send(toWithdrawFunds), "Transfer failed"); } /** * Gets the total mints by an address */ function numberMinted(address owner) public view returns (uint256) { return NFTContract.numberMinted(owner); } /** * Gets the total supply from the NFT contract */ function totalSupply() public view returns (uint256) { return NFTContract.totalSupplyExternal(); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * 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 Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_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 { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/structs/EnumerableSet.sol) pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; assembly { result := store } return result; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "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
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"CreditRefunded","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"},{"inputs":[],"name":"AUCTION_DROP_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AUCTION_DROP_PER_STEP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AUCTION_END_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AUCTION_PRICE_CURVE_LENGTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AUCTION_START_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_PER_ADDRESS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFTContract","outputs":[{"internalType":"contract INFTContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVED_OR_AUCTION_PLANETS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVED_PLANETS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_PLANETS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"addWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"auctionMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"auctionSaleStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"creditCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"credits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuctionPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxPossibleCredits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getRemainingCredits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalRemainingCredits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAuctionPriceFinalized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicSaleOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastAuctionSalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","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":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"key","type":"uint256"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"refundAllRemainingCreditsByCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refundRemainingCredits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"reserveMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"setAuctionSaleStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_NFTContract","type":"address"}],"name":"setNFTContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"key","type":"uint256"}],"name":"setPublicSaleKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPublicSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"setPublicSaleStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setWhitelistPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052670de0b6b3a76400006009553480156200001d57600080fd5b506200003e620000326200004b60201b60201c565b6200005360201b60201c565b6001808190555062000117565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61392b80620001276000396000f3fe60806040526004361061025c5760003560e01c806373f78fd911610144578063cb91d8b3116100b6578063f8a987d81161007a578063f8a987d814610865578063f9a214f614610890578063fa09e630146108cd578063fab2bf58146108f6578063fc1a1c3614610921578063fe5ff4681461094c5761025c565b8063cb91d8b31461078f578063dc33e681146107ab578063e4854803146107e8578063e866c346146107ff578063f2fde38b1461083c5761025c565b80638ad8733d116101085780638ad8733d1461067d5780638da5cb5b146106a85780639b19251a146106d35780639b6860c814610710578063a7ccabdf1461073b578063caf8a6d1146107645761025c565b806373f78fd9146105b7578063791a2519146105e25780637a1c4a561461060b578063868ff4a21461063657806387fa6dc1146106525761025c565b80634d3554c3116101dd578063678d73f6116101a1578063678d73f6146104cf5780636bb7b1d9146104f85780636d5d40c614610523578063715018a61461054c578063717d57d31461056357806372cd33621461058c5761025c565b80634d3554c31461040957806359f369fe146104255780635cae01d3146104505780635e95d3d61461047b578063645b6701146104a65761025c565b806331c2273b1161022457806331c2273b14610334578063387b62c71461035f5780633acd6cb2146103885780633f5e4741146103b35780634bd25c6f146103de5761025c565b80630d70f5c4146102615780631342ff4c1461028c57806318160ddd146102b55780631d01f892146102e05780632a09f2f21461030b575b600080fd5b34801561026d57600080fd5b50610276610989565b6040516102839190613150565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190612b07565b6109ad565b005b3480156102c157600080fd5b506102ca610b12565b6040516102d79190613150565b60405180910390f35b3480156102ec57600080fd5b506102f5610bb9565b6040516103029190613150565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d9190612b07565b610bbf565b005b34801561034057600080fd5b50610349610c45565b6040516103569190612ed5565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190612b07565b610c6b565b005b34801561039457600080fd5b5061039d610cf1565b6040516103aa9190613150565b60405180910390f35b3480156103bf57600080fd5b506103c8610cf6565b6040516103d59190612eba565b60405180910390f35b3480156103ea57600080fd5b506103f3610d20565b6040516104009190613150565b60405180910390f35b610423600480360381019061041e9190612b07565b610daf565b005b34801561043157600080fd5b5061043a6110e1565b6040516104479190613150565b60405180910390f35b34801561045c57600080fd5b506104656110ed565b6040516104729190613150565b60405180910390f35b34801561048757600080fd5b506104906110f3565b60405161049d9190613150565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190612aab565b61113a565b005b3480156104db57600080fd5b506104f660048036038101906104f19190612b07565b611238565b005b34801561050457600080fd5b5061050d611555565b60405161051a9190613150565b60405180910390f35b34801561052f57600080fd5b5061054a60048036038101906105459190612b07565b61155b565b005b34801561055857600080fd5b506105616115e1565b005b34801561056f57600080fd5b5061058a60048036038101906105859190612b07565b611669565b005b34801561059857600080fd5b506105a16116ef565b6040516105ae9190613150565b60405180910390f35b3480156105c357600080fd5b506105cc6116f5565b6040516105d99190613150565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190612b07565b6116fb565b005b34801561061757600080fd5b50610620611781565b60405161062d9190613150565b60405180910390f35b610650600480360381019061064b9190612b07565b61178d565b005b34801561065e57600080fd5b50610667611a9a565b6040516106749190612eba565b60405180910390f35b34801561068957600080fd5b50610692611ac2565b60405161069f9190613150565b60405180910390f35b3480156106b457600080fd5b506106bd611ac8565b6040516106ca9190612e76565b60405180910390f35b3480156106df57600080fd5b506106fa60048036038101906106f59190612a7e565b611af1565b6040516107079190613150565b60405180910390f35b34801561071c57600080fd5b50610725611b09565b6040516107329190613150565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190612a7e565b611b0f565b005b34801561077057600080fd5b50610779611bcf565b6040516107869190613150565b60405180910390f35b6107a960048036038101906107a49190612b61565b611bdb565b005b3480156107b757600080fd5b506107d260048036038101906107cd9190612a7e565b611e2b565b6040516107df9190613150565b60405180910390f35b3480156107f457600080fd5b506107fd611edf565b005b34801561080b57600080fd5b5061082660048036038101906108219190612a7e565b612214565b6040516108339190613150565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190612a7e565b612305565b005b34801561087157600080fd5b5061087a6123fd565b6040516108879190613150565b60405180910390f35b34801561089c57600080fd5b506108b760048036038101906108b29190612a7e565b612403565b6040516108c49190613150565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef9190612a7e565b61241b565b005b34801561090257600080fd5b5061090b61256e565b6040516109189190613150565b60405180910390f35b34801561092d57600080fd5b50610936612574565b6040516109439190613150565b60405180910390f35b34801561095857600080fd5b50610973600480360381019061096e9190612a7e565b61257a565b6040516109809190613150565b60405180910390f35b6000600f5460095461099b9190613254565b600e546109a891906132ae565b905090565b6109b5612592565b73ffffffffffffffffffffffffffffffffffffffff166109d3611ac8565b73ffffffffffffffffffffffffffffffffffffffff1614610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2090613090565b60405180910390fd5b61012c81610a35610b12565b610a3f91906131cd565b1115610a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a77906130d0565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f6798a533836040518363ffffffff1660e01b8152600401610add929190612e91565b600060405180830381600087803b158015610af757600080fd5b505af1158015610b0b573d6000803e3d6000fd5b5050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ead61b6a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b7c57600080fd5b505afa158015610b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb49190612b34565b905090565b60095481565b610bc7612592565b73ffffffffffffffffffffffffffffffffffffffff16610be5611ac8565b73ffffffffffffffffffffffffffffffffffffffff1614610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3290613090565b60405180910390fd5b8060078190555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c73612592565b73ffffffffffffffffffffffffffffffffffffffff16610c91611ac8565b73ffffffffffffffffffffffffffffffffffffffff1614610ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cde90613090565b60405180910390fd5b8060038190555050565b600581565b60008060065414158015610d0c57506004544210155b8015610d1b5750600060045414155b905090565b6000600354421015610d3c57670de0b6b3a76400009050610dac565b612a3060035442610d4d91906132ae565b10610d625767016345785d8a00009050610dac565b60006104b060035442610d7591906132ae565b610d7f9190613223565b905067016345785d8a000081610d959190613254565b670de0b6b3a7640000610da891906132ae565b9150505b90565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490613010565b60405180910390fd5b600060035414158015610e3257506003544210155b610e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6890612ef0565b60405180910390fd5b611c8481610e7d610b12565b610e8791906131cd565b1115610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90613070565b60405180910390fd5b600581610ed433611e2b565b610ede91906131cd565b1115610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1690613050565b60405180910390fd5b610f27610d20565b600981905550600081600954610f3d9190613254565b905067016345785d8a0000600954111561104557610f6533600c61259a90919063ffffffff16565b5080600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fb591906131cd565b9250508190555081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461100b91906131cd565b9250508190555080600e600082825461102491906131cd565b9250508190555081600f600082825461103d91906131cd565b925050819055505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f6798a533846040518363ffffffff1660e01b81526004016110a2929190612e91565b600060405180830381600087803b1580156110bc57600080fd5b505af11580156110d0573d6000803e3d6000fd5b505050506110dd816125ca565b5050565b67016345785d8a000081565b6104b081565b60006110fd611a9a565b156111115761110a610989565b9050611137565b600f5467016345785d8a00006111279190613254565b600e5461113491906132ae565b90505b90565b611142612592565b73ffffffffffffffffffffffffffffffffffffffff16611160611ac8565b73ffffffffffffffffffffffffffffffffffffffff16146111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad90613090565b60405180910390fd5b60005b82518110156112335781600860008584815181106111da576111d9613455565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061122b9061337f565b9150506111b9565b505050565b611240612592565b73ffffffffffffffffffffffffffffffffffffffff1661125e611ac8565b73ffffffffffffffffffffffffffffffffffffffff16146112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90613090565b60405180910390fd5b6112bc611a9a565b6112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f290612ff0565b60405180910390fd5b60008060008060005b6000611310600c61266b565b11801561131c57508581105b1561154d576113366000600c61268090919063ffffffff16565b9450600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549250600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150816009546113ca9190613254565b836113d591906132ae565b9350600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905561147185600c61269a90919063ffffffff16565b50600084111561153a578473ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050506114b957600080fd5b8473ffffffffffffffffffffffffffffffffffffffff167f1be1960ef8dc4eb08b938725fd1051e764839952e03c0aa66fe78822653a22a0856040516114ff9190613150565b60405180910390a283600e600082825461151991906132ae565b9250508190555081600f600082825461153291906132ae565b925050819055505b80806115459061337f565b915050611304565b505050505050565b60045481565b611563612592565b73ffffffffffffffffffffffffffffffffffffffff16611581611ac8565b73ffffffffffffffffffffffffffffffffffffffff16146115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce90613090565b60405180910390fd5b8060048190555050565b6115e9612592565b73ffffffffffffffffffffffffffffffffffffffff16611607611ac8565b73ffffffffffffffffffffffffffffffffffffffff161461165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490613090565b60405180910390fd5b61166760006126ca565b565b611671612592565b73ffffffffffffffffffffffffffffffffffffffff1661168f611ac8565b73ffffffffffffffffffffffffffffffffffffffff16146116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc90613090565b60405180910390fd5b8060058190555050565b61012c81565b61271081565b611703612592565b73ffffffffffffffffffffffffffffffffffffffff16611721611ac8565b73ffffffffffffffffffffffffffffffffffffffff1614611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90613090565b60405180910390fd5b8060068190555050565b670de0b6b3a764000081565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146117fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f290613010565b60405180910390fd5b60006005541415611841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611838906130f0565b60405180910390fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba90612f10565b60405180910390fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c90613050565b60405180910390fd5b61271081611951610b12565b61195b91906131cd565b111561199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390612f90565b60405180910390fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119eb91906132ae565b92505081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f6798a533836040518363ffffffff1660e01b8152600401611a4f929190612e91565b600060405180830381600087803b158015611a6957600080fd5b505af1158015611a7d573d6000803e3d6000fd5b50505050611a9781600554611a929190613254565b6125ca565b50565b6000611c84611aa7610b12565b101580611abd575067016345785d8a0000600954145b905090565b611c8481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528060005260406000206000915090505481565b60065481565b611b17612592565b73ffffffffffffffffffffffffffffffffffffffff16611b35611ac8565b73ffffffffffffffffffffffffffffffffffffffff1614611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8290613090565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b67016345785d8a000081565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4090613010565b60405180910390fd5b8060075414611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490613030565b60405180910390fd5b611c95610cf6565b611cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccb90612f30565b60405180910390fd5b61271082611ce0610b12565b611cea91906131cd565b1115611d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2290612f90565b60405180910390fd5b600582611d3733611e2b565b611d4191906131cd565b1115611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7990613050565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f6798a533846040518363ffffffff1660e01b8152600401611ddf929190612e91565b600060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b50505050611e2782600654611e229190613254565b6125ca565b5050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc33e681836040518263ffffffff1660e01b8152600401611e889190612e76565b60206040518083038186803b158015611ea057600080fd5b505afa158015611eb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed89190612b34565b9050919050565b60026001541415611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c90613130565b60405180910390fd5b6002600181905550611f35611a9a565b611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b90612ff0565b60405180910390fd5b611f8833600c61278e90919063ffffffff16565b611fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbe90613110565b60405180910390fd5b6000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008160095461205f9190613254565b8361206a91906132ae565b9050600081116120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a6906130b0565b60405180910390fd5b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905561214933600c61269a90919063ffffffff16565b5082600e600082825461215c91906132ae565b9250508190555081600f600082825461217591906132ae565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f1be1960ef8dc4eb08b938725fd1051e764839952e03c0aa66fe78822653a22a0826040516121c29190613150565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061220857600080fd5b50505060018081905550565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156122fb57600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546009546122aa9190613254565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122f491906132ae565b9050612300565b600090505b919050565b61230d612592565b73ffffffffffffffffffffffffffffffffffffffff1661232b611ac8565b73ffffffffffffffffffffffffffffffffffffffff1614612381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237890613090565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e890612f50565b60405180910390fd5b6123fa816126ca565b50565b612a3081565b600b6020528060005260406000206000915090505481565b612423612592565b73ffffffffffffffffffffffffffffffffffffffff16612441611ac8565b73ffffffffffffffffffffffffffffffffffffffff1614612497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248e90613090565b60405180910390fd5b60006124a16110f3565b90508047116124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90612fb0565b60405180910390fd5b600081476124f391906132ae565b90508273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050612569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256090612f70565b60405180910390fd5b505050565b60035481565b60055481565b600a6020528060005260406000206000915090505481565b600033905090565b60006125c2836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6127be565b905092915050565b8034101561260d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260490612fd0565b60405180910390fd5b80341115612668573373ffffffffffffffffffffffffffffffffffffffff166108fc823461263b91906132ae565b9081150290604051600060405180830381858888f19350505050158015612666573d6000803e3d6000fd5b505b50565b60006126798260000161282e565b9050919050565b600061268f836000018361283f565b60001c905092915050565b60006126c2836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61286a565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006127b6836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61297e565b905092915050565b60006127ca838361297e565b612823578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612828565b600090505b92915050565b600081600001805490509050919050565b600082600001828154811061285757612856613455565b5b9060005260206000200154905092915050565b6000808360010160008481526020019081526020016000205490506000811461297257600060018261289c91906132ae565b90506000600186600001805490506128b491906132ae565b90508181146129235760008660000182815481106128d5576128d4613455565b5b90600052602060002001549050808760000184815481106128f9576128f8613455565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061293757612936613426565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050612978565b60009150505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60006129b46129af84613190565b61316b565b905080838252602082019050828560208602820111156129d7576129d66134b8565b5b60005b85811015612a0757816129ed8882612a11565b8452602084019350602083019250506001810190506129da565b5050509392505050565b600081359050612a20816138c7565b92915050565b600082601f830112612a3b57612a3a6134b3565b5b8135612a4b8482602086016129a1565b91505092915050565b600081359050612a63816138de565b92915050565b600081519050612a78816138de565b92915050565b600060208284031215612a9457612a936134c2565b5b6000612aa284828501612a11565b91505092915050565b60008060408385031215612ac257612ac16134c2565b5b600083013567ffffffffffffffff811115612ae057612adf6134bd565b5b612aec85828601612a26565b9250506020612afd85828601612a54565b9150509250929050565b600060208284031215612b1d57612b1c6134c2565b5b6000612b2b84828501612a54565b91505092915050565b600060208284031215612b4a57612b496134c2565b5b6000612b5884828501612a69565b91505092915050565b60008060408385031215612b7857612b776134c2565b5b6000612b8685828601612a54565b9250506020612b9785828601612a54565b9150509250929050565b612baa816132e2565b82525050565b612bb9816132f4565b82525050565b612bc88161332a565b82525050565b6000612bdb6018836131bc565b9150612be6826134d8565b602082019050919050565b6000612bfe601f836131bc565b9150612c0982613501565b602082019050919050565b6000612c21601d836131bc565b9150612c2c8261352a565b602082019050919050565b6000612c446026836131bc565b9150612c4f82613553565b604082019050919050565b6000612c67600f836131bc565b9150612c72826135a2565b602082019050919050565b6000612c8a6012836131bc565b9150612c95826135cb565b602082019050919050565b6000612cad6014836131bc565b9150612cb8826135f4565b602082019050919050565b6000612cd06012836131bc565b9150612cdb8261361d565b602082019050919050565b6000612cf36023836131bc565b9150612cfe82613646565b604082019050919050565b6000612d16601e836131bc565b9150612d2182613695565b602082019050919050565b6000612d396025836131bc565b9150612d44826136be565b604082019050919050565b6000612d5c6016836131bc565b9150612d678261370d565b602082019050919050565b6000612d7f6048836131bc565b9150612d8a82613736565b606082019050919050565b6000612da26020836131bc565b9150612dad826137ab565b602082019050919050565b6000612dc56015836131bc565b9150612dd0826137d4565b602082019050919050565b6000612de86027836131bc565b9150612df3826137fd565b604082019050919050565b6000612e0b6020836131bc565b9150612e168261384c565b602082019050919050565b6000612e2e6013836131bc565b9150612e3982613875565b602082019050919050565b6000612e51601f836131bc565b9150612e5c8261389e565b602082019050919050565b612e7081613320565b82525050565b6000602082019050612e8b6000830184612ba1565b92915050565b6000604082019050612ea66000830185612ba1565b612eb36020830184612e67565b9392505050565b6000602082019050612ecf6000830184612bb0565b92915050565b6000602082019050612eea6000830184612bbf565b92915050565b60006020820190508181036000830152612f0981612bce565b9050919050565b60006020820190508181036000830152612f2981612bf1565b9050919050565b60006020820190508181036000830152612f4981612c14565b9050919050565b60006020820190508181036000830152612f6981612c37565b9050919050565b60006020820190508181036000830152612f8981612c5a565b9050919050565b60006020820190508181036000830152612fa981612c7d565b9050919050565b60006020820190508181036000830152612fc981612ca0565b9050919050565b60006020820190508181036000830152612fe981612cc3565b9050919050565b6000602082019050818103600083015261300981612ce6565b9050919050565b6000602082019050818103600083015261302981612d09565b9050919050565b6000602082019050818103600083015261304981612d2c565b9050919050565b6000602082019050818103600083015261306981612d4f565b9050919050565b6000602082019050818103600083015261308981612d72565b9050919050565b600060208201905081810360008301526130a981612d95565b9050919050565b600060208201905081810360008301526130c981612db8565b9050919050565b600060208201905081810360008301526130e981612ddb565b9050919050565b6000602082019050818103600083015261310981612dfe565b9050919050565b6000602082019050818103600083015261312981612e21565b9050919050565b6000602082019050818103600083015261314981612e44565b9050919050565b60006020820190506131656000830184612e67565b92915050565b6000613175613186565b9050613181828261334e565b919050565b6000604051905090565b600067ffffffffffffffff8211156131ab576131aa613484565b5b602082029050602081019050919050565b600082825260208201905092915050565b60006131d882613320565b91506131e383613320565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613218576132176133c8565b5b828201905092915050565b600061322e82613320565b915061323983613320565b925082613249576132486133f7565b5b828204905092915050565b600061325f82613320565b915061326a83613320565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156132a3576132a26133c8565b5b828202905092915050565b60006132b982613320565b91506132c483613320565b9250828210156132d7576132d66133c8565b5b828203905092915050565b60006132ed82613300565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006133358261333c565b9050919050565b600061334782613300565b9050919050565b613357826134c7565b810181811067ffffffffffffffff8211171561337657613375613484565b5b80604052505050565b600061338a82613320565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133bd576133bc6133c8565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c6520686173206e6f742073746172746564207965740000000000000000600082015250565b7f4e6f7420656c696769626c6520666f722077686974656c697374206d696e7400600082015250565b7f5075626c69632073616c6520686173206e6f7420626567756e20796574000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b7f52656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f4e6f2066756e647320746f207769746864726177000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f41756374696f6e207072696365206973206e6f742066696e616c697a6564207960008201527f6574210000000000000000000000000000000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f43616c6c6564207769746820696e636f7272656374207075626c69632073616c60008201527f65206b6579000000000000000000000000000000000000000000000000000000602082015250565b7f43616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f4e6f7420656e6f7567682072656d61696e696e6720726573657276656420666f60008201527f722061756374696f6e20746f20737570706f72742064657369726564206d696e60208201527f7420616d6f756e74000000000000000000000000000000000000000000000000604082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f206372656469747320746f20726566756e64210000000000000000000000600082015250565b7f546f6f206d616e7920616c7265616479206d696e746564206265666f7265206460008201527f6576206d696e7400000000000000000000000000000000000000000000000000602082015250565b7f57686974656c6973742073616c6520686173206e6f7420626567756e20796574600082015250565b7f4e6f74206120637265646974206f776e65722100000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6138d0816132e2565b81146138db57600080fd5b50565b6138e781613320565b81146138f257600080fd5b5056fea264697066735822122089df095110882c394d46fa545b9301023b769d845b83f0a6bebb652f511d124164736f6c63430008060033
Deployed Bytecode
0x60806040526004361061025c5760003560e01c806373f78fd911610144578063cb91d8b3116100b6578063f8a987d81161007a578063f8a987d814610865578063f9a214f614610890578063fa09e630146108cd578063fab2bf58146108f6578063fc1a1c3614610921578063fe5ff4681461094c5761025c565b8063cb91d8b31461078f578063dc33e681146107ab578063e4854803146107e8578063e866c346146107ff578063f2fde38b1461083c5761025c565b80638ad8733d116101085780638ad8733d1461067d5780638da5cb5b146106a85780639b19251a146106d35780639b6860c814610710578063a7ccabdf1461073b578063caf8a6d1146107645761025c565b806373f78fd9146105b7578063791a2519146105e25780637a1c4a561461060b578063868ff4a21461063657806387fa6dc1146106525761025c565b80634d3554c3116101dd578063678d73f6116101a1578063678d73f6146104cf5780636bb7b1d9146104f85780636d5d40c614610523578063715018a61461054c578063717d57d31461056357806372cd33621461058c5761025c565b80634d3554c31461040957806359f369fe146104255780635cae01d3146104505780635e95d3d61461047b578063645b6701146104a65761025c565b806331c2273b1161022457806331c2273b14610334578063387b62c71461035f5780633acd6cb2146103885780633f5e4741146103b35780634bd25c6f146103de5761025c565b80630d70f5c4146102615780631342ff4c1461028c57806318160ddd146102b55780631d01f892146102e05780632a09f2f21461030b575b600080fd5b34801561026d57600080fd5b50610276610989565b6040516102839190613150565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190612b07565b6109ad565b005b3480156102c157600080fd5b506102ca610b12565b6040516102d79190613150565b60405180910390f35b3480156102ec57600080fd5b506102f5610bb9565b6040516103029190613150565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d9190612b07565b610bbf565b005b34801561034057600080fd5b50610349610c45565b6040516103569190612ed5565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190612b07565b610c6b565b005b34801561039457600080fd5b5061039d610cf1565b6040516103aa9190613150565b60405180910390f35b3480156103bf57600080fd5b506103c8610cf6565b6040516103d59190612eba565b60405180910390f35b3480156103ea57600080fd5b506103f3610d20565b6040516104009190613150565b60405180910390f35b610423600480360381019061041e9190612b07565b610daf565b005b34801561043157600080fd5b5061043a6110e1565b6040516104479190613150565b60405180910390f35b34801561045c57600080fd5b506104656110ed565b6040516104729190613150565b60405180910390f35b34801561048757600080fd5b506104906110f3565b60405161049d9190613150565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190612aab565b61113a565b005b3480156104db57600080fd5b506104f660048036038101906104f19190612b07565b611238565b005b34801561050457600080fd5b5061050d611555565b60405161051a9190613150565b60405180910390f35b34801561052f57600080fd5b5061054a60048036038101906105459190612b07565b61155b565b005b34801561055857600080fd5b506105616115e1565b005b34801561056f57600080fd5b5061058a60048036038101906105859190612b07565b611669565b005b34801561059857600080fd5b506105a16116ef565b6040516105ae9190613150565b60405180910390f35b3480156105c357600080fd5b506105cc6116f5565b6040516105d99190613150565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190612b07565b6116fb565b005b34801561061757600080fd5b50610620611781565b60405161062d9190613150565b60405180910390f35b610650600480360381019061064b9190612b07565b61178d565b005b34801561065e57600080fd5b50610667611a9a565b6040516106749190612eba565b60405180910390f35b34801561068957600080fd5b50610692611ac2565b60405161069f9190613150565b60405180910390f35b3480156106b457600080fd5b506106bd611ac8565b6040516106ca9190612e76565b60405180910390f35b3480156106df57600080fd5b506106fa60048036038101906106f59190612a7e565b611af1565b6040516107079190613150565b60405180910390f35b34801561071c57600080fd5b50610725611b09565b6040516107329190613150565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190612a7e565b611b0f565b005b34801561077057600080fd5b50610779611bcf565b6040516107869190613150565b60405180910390f35b6107a960048036038101906107a49190612b61565b611bdb565b005b3480156107b757600080fd5b506107d260048036038101906107cd9190612a7e565b611e2b565b6040516107df9190613150565b60405180910390f35b3480156107f457600080fd5b506107fd611edf565b005b34801561080b57600080fd5b5061082660048036038101906108219190612a7e565b612214565b6040516108339190613150565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190612a7e565b612305565b005b34801561087157600080fd5b5061087a6123fd565b6040516108879190613150565b60405180910390f35b34801561089c57600080fd5b506108b760048036038101906108b29190612a7e565b612403565b6040516108c49190613150565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef9190612a7e565b61241b565b005b34801561090257600080fd5b5061090b61256e565b6040516109189190613150565b60405180910390f35b34801561092d57600080fd5b50610936612574565b6040516109439190613150565b60405180910390f35b34801561095857600080fd5b50610973600480360381019061096e9190612a7e565b61257a565b6040516109809190613150565b60405180910390f35b6000600f5460095461099b9190613254565b600e546109a891906132ae565b905090565b6109b5612592565b73ffffffffffffffffffffffffffffffffffffffff166109d3611ac8565b73ffffffffffffffffffffffffffffffffffffffff1614610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2090613090565b60405180910390fd5b61012c81610a35610b12565b610a3f91906131cd565b1115610a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a77906130d0565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f6798a533836040518363ffffffff1660e01b8152600401610add929190612e91565b600060405180830381600087803b158015610af757600080fd5b505af1158015610b0b573d6000803e3d6000fd5b5050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ead61b6a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b7c57600080fd5b505afa158015610b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb49190612b34565b905090565b60095481565b610bc7612592565b73ffffffffffffffffffffffffffffffffffffffff16610be5611ac8565b73ffffffffffffffffffffffffffffffffffffffff1614610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3290613090565b60405180910390fd5b8060078190555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c73612592565b73ffffffffffffffffffffffffffffffffffffffff16610c91611ac8565b73ffffffffffffffffffffffffffffffffffffffff1614610ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cde90613090565b60405180910390fd5b8060038190555050565b600581565b60008060065414158015610d0c57506004544210155b8015610d1b5750600060045414155b905090565b6000600354421015610d3c57670de0b6b3a76400009050610dac565b612a3060035442610d4d91906132ae565b10610d625767016345785d8a00009050610dac565b60006104b060035442610d7591906132ae565b610d7f9190613223565b905067016345785d8a000081610d959190613254565b670de0b6b3a7640000610da891906132ae565b9150505b90565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490613010565b60405180910390fd5b600060035414158015610e3257506003544210155b610e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6890612ef0565b60405180910390fd5b611c8481610e7d610b12565b610e8791906131cd565b1115610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90613070565b60405180910390fd5b600581610ed433611e2b565b610ede91906131cd565b1115610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1690613050565b60405180910390fd5b610f27610d20565b600981905550600081600954610f3d9190613254565b905067016345785d8a0000600954111561104557610f6533600c61259a90919063ffffffff16565b5080600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fb591906131cd565b9250508190555081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461100b91906131cd565b9250508190555080600e600082825461102491906131cd565b9250508190555081600f600082825461103d91906131cd565b925050819055505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f6798a533846040518363ffffffff1660e01b81526004016110a2929190612e91565b600060405180830381600087803b1580156110bc57600080fd5b505af11580156110d0573d6000803e3d6000fd5b505050506110dd816125ca565b5050565b67016345785d8a000081565b6104b081565b60006110fd611a9a565b156111115761110a610989565b9050611137565b600f5467016345785d8a00006111279190613254565b600e5461113491906132ae565b90505b90565b611142612592565b73ffffffffffffffffffffffffffffffffffffffff16611160611ac8565b73ffffffffffffffffffffffffffffffffffffffff16146111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad90613090565b60405180910390fd5b60005b82518110156112335781600860008584815181106111da576111d9613455565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061122b9061337f565b9150506111b9565b505050565b611240612592565b73ffffffffffffffffffffffffffffffffffffffff1661125e611ac8565b73ffffffffffffffffffffffffffffffffffffffff16146112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90613090565b60405180910390fd5b6112bc611a9a565b6112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f290612ff0565b60405180910390fd5b60008060008060005b6000611310600c61266b565b11801561131c57508581105b1561154d576113366000600c61268090919063ffffffff16565b9450600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549250600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150816009546113ca9190613254565b836113d591906132ae565b9350600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905561147185600c61269a90919063ffffffff16565b50600084111561153a578473ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050506114b957600080fd5b8473ffffffffffffffffffffffffffffffffffffffff167f1be1960ef8dc4eb08b938725fd1051e764839952e03c0aa66fe78822653a22a0856040516114ff9190613150565b60405180910390a283600e600082825461151991906132ae565b9250508190555081600f600082825461153291906132ae565b925050819055505b80806115459061337f565b915050611304565b505050505050565b60045481565b611563612592565b73ffffffffffffffffffffffffffffffffffffffff16611581611ac8565b73ffffffffffffffffffffffffffffffffffffffff16146115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce90613090565b60405180910390fd5b8060048190555050565b6115e9612592565b73ffffffffffffffffffffffffffffffffffffffff16611607611ac8565b73ffffffffffffffffffffffffffffffffffffffff161461165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490613090565b60405180910390fd5b61166760006126ca565b565b611671612592565b73ffffffffffffffffffffffffffffffffffffffff1661168f611ac8565b73ffffffffffffffffffffffffffffffffffffffff16146116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc90613090565b60405180910390fd5b8060058190555050565b61012c81565b61271081565b611703612592565b73ffffffffffffffffffffffffffffffffffffffff16611721611ac8565b73ffffffffffffffffffffffffffffffffffffffff1614611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90613090565b60405180910390fd5b8060068190555050565b670de0b6b3a764000081565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146117fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f290613010565b60405180910390fd5b60006005541415611841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611838906130f0565b60405180910390fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba90612f10565b60405180910390fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c90613050565b60405180910390fd5b61271081611951610b12565b61195b91906131cd565b111561199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390612f90565b60405180910390fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119eb91906132ae565b92505081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f6798a533836040518363ffffffff1660e01b8152600401611a4f929190612e91565b600060405180830381600087803b158015611a6957600080fd5b505af1158015611a7d573d6000803e3d6000fd5b50505050611a9781600554611a929190613254565b6125ca565b50565b6000611c84611aa7610b12565b101580611abd575067016345785d8a0000600954145b905090565b611c8481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528060005260406000206000915090505481565b60065481565b611b17612592565b73ffffffffffffffffffffffffffffffffffffffff16611b35611ac8565b73ffffffffffffffffffffffffffffffffffffffff1614611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8290613090565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b67016345785d8a000081565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4090613010565b60405180910390fd5b8060075414611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490613030565b60405180910390fd5b611c95610cf6565b611cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccb90612f30565b60405180910390fd5b61271082611ce0610b12565b611cea91906131cd565b1115611d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2290612f90565b60405180910390fd5b600582611d3733611e2b565b611d4191906131cd565b1115611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7990613050565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f6798a533846040518363ffffffff1660e01b8152600401611ddf929190612e91565b600060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b50505050611e2782600654611e229190613254565b6125ca565b5050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc33e681836040518263ffffffff1660e01b8152600401611e889190612e76565b60206040518083038186803b158015611ea057600080fd5b505afa158015611eb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed89190612b34565b9050919050565b60026001541415611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c90613130565b60405180910390fd5b6002600181905550611f35611a9a565b611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b90612ff0565b60405180910390fd5b611f8833600c61278e90919063ffffffff16565b611fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbe90613110565b60405180910390fd5b6000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008160095461205f9190613254565b8361206a91906132ae565b9050600081116120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a6906130b0565b60405180910390fd5b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905561214933600c61269a90919063ffffffff16565b5082600e600082825461215c91906132ae565b9250508190555081600f600082825461217591906132ae565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f1be1960ef8dc4eb08b938725fd1051e764839952e03c0aa66fe78822653a22a0826040516121c29190613150565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061220857600080fd5b50505060018081905550565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156122fb57600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546009546122aa9190613254565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122f491906132ae565b9050612300565b600090505b919050565b61230d612592565b73ffffffffffffffffffffffffffffffffffffffff1661232b611ac8565b73ffffffffffffffffffffffffffffffffffffffff1614612381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237890613090565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e890612f50565b60405180910390fd5b6123fa816126ca565b50565b612a3081565b600b6020528060005260406000206000915090505481565b612423612592565b73ffffffffffffffffffffffffffffffffffffffff16612441611ac8565b73ffffffffffffffffffffffffffffffffffffffff1614612497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248e90613090565b60405180910390fd5b60006124a16110f3565b90508047116124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90612fb0565b60405180910390fd5b600081476124f391906132ae565b90508273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050612569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256090612f70565b60405180910390fd5b505050565b60035481565b60055481565b600a6020528060005260406000206000915090505481565b600033905090565b60006125c2836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6127be565b905092915050565b8034101561260d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260490612fd0565b60405180910390fd5b80341115612668573373ffffffffffffffffffffffffffffffffffffffff166108fc823461263b91906132ae565b9081150290604051600060405180830381858888f19350505050158015612666573d6000803e3d6000fd5b505b50565b60006126798260000161282e565b9050919050565b600061268f836000018361283f565b60001c905092915050565b60006126c2836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61286a565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006127b6836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61297e565b905092915050565b60006127ca838361297e565b612823578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612828565b600090505b92915050565b600081600001805490509050919050565b600082600001828154811061285757612856613455565b5b9060005260206000200154905092915050565b6000808360010160008481526020019081526020016000205490506000811461297257600060018261289c91906132ae565b90506000600186600001805490506128b491906132ae565b90508181146129235760008660000182815481106128d5576128d4613455565b5b90600052602060002001549050808760000184815481106128f9576128f8613455565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061293757612936613426565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050612978565b60009150505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60006129b46129af84613190565b61316b565b905080838252602082019050828560208602820111156129d7576129d66134b8565b5b60005b85811015612a0757816129ed8882612a11565b8452602084019350602083019250506001810190506129da565b5050509392505050565b600081359050612a20816138c7565b92915050565b600082601f830112612a3b57612a3a6134b3565b5b8135612a4b8482602086016129a1565b91505092915050565b600081359050612a63816138de565b92915050565b600081519050612a78816138de565b92915050565b600060208284031215612a9457612a936134c2565b5b6000612aa284828501612a11565b91505092915050565b60008060408385031215612ac257612ac16134c2565b5b600083013567ffffffffffffffff811115612ae057612adf6134bd565b5b612aec85828601612a26565b9250506020612afd85828601612a54565b9150509250929050565b600060208284031215612b1d57612b1c6134c2565b5b6000612b2b84828501612a54565b91505092915050565b600060208284031215612b4a57612b496134c2565b5b6000612b5884828501612a69565b91505092915050565b60008060408385031215612b7857612b776134c2565b5b6000612b8685828601612a54565b9250506020612b9785828601612a54565b9150509250929050565b612baa816132e2565b82525050565b612bb9816132f4565b82525050565b612bc88161332a565b82525050565b6000612bdb6018836131bc565b9150612be6826134d8565b602082019050919050565b6000612bfe601f836131bc565b9150612c0982613501565b602082019050919050565b6000612c21601d836131bc565b9150612c2c8261352a565b602082019050919050565b6000612c446026836131bc565b9150612c4f82613553565b604082019050919050565b6000612c67600f836131bc565b9150612c72826135a2565b602082019050919050565b6000612c8a6012836131bc565b9150612c95826135cb565b602082019050919050565b6000612cad6014836131bc565b9150612cb8826135f4565b602082019050919050565b6000612cd06012836131bc565b9150612cdb8261361d565b602082019050919050565b6000612cf36023836131bc565b9150612cfe82613646565b604082019050919050565b6000612d16601e836131bc565b9150612d2182613695565b602082019050919050565b6000612d396025836131bc565b9150612d44826136be565b604082019050919050565b6000612d5c6016836131bc565b9150612d678261370d565b602082019050919050565b6000612d7f6048836131bc565b9150612d8a82613736565b606082019050919050565b6000612da26020836131bc565b9150612dad826137ab565b602082019050919050565b6000612dc56015836131bc565b9150612dd0826137d4565b602082019050919050565b6000612de86027836131bc565b9150612df3826137fd565b604082019050919050565b6000612e0b6020836131bc565b9150612e168261384c565b602082019050919050565b6000612e2e6013836131bc565b9150612e3982613875565b602082019050919050565b6000612e51601f836131bc565b9150612e5c8261389e565b602082019050919050565b612e7081613320565b82525050565b6000602082019050612e8b6000830184612ba1565b92915050565b6000604082019050612ea66000830185612ba1565b612eb36020830184612e67565b9392505050565b6000602082019050612ecf6000830184612bb0565b92915050565b6000602082019050612eea6000830184612bbf565b92915050565b60006020820190508181036000830152612f0981612bce565b9050919050565b60006020820190508181036000830152612f2981612bf1565b9050919050565b60006020820190508181036000830152612f4981612c14565b9050919050565b60006020820190508181036000830152612f6981612c37565b9050919050565b60006020820190508181036000830152612f8981612c5a565b9050919050565b60006020820190508181036000830152612fa981612c7d565b9050919050565b60006020820190508181036000830152612fc981612ca0565b9050919050565b60006020820190508181036000830152612fe981612cc3565b9050919050565b6000602082019050818103600083015261300981612ce6565b9050919050565b6000602082019050818103600083015261302981612d09565b9050919050565b6000602082019050818103600083015261304981612d2c565b9050919050565b6000602082019050818103600083015261306981612d4f565b9050919050565b6000602082019050818103600083015261308981612d72565b9050919050565b600060208201905081810360008301526130a981612d95565b9050919050565b600060208201905081810360008301526130c981612db8565b9050919050565b600060208201905081810360008301526130e981612ddb565b9050919050565b6000602082019050818103600083015261310981612dfe565b9050919050565b6000602082019050818103600083015261312981612e21565b9050919050565b6000602082019050818103600083015261314981612e44565b9050919050565b60006020820190506131656000830184612e67565b92915050565b6000613175613186565b9050613181828261334e565b919050565b6000604051905090565b600067ffffffffffffffff8211156131ab576131aa613484565b5b602082029050602081019050919050565b600082825260208201905092915050565b60006131d882613320565b91506131e383613320565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613218576132176133c8565b5b828201905092915050565b600061322e82613320565b915061323983613320565b925082613249576132486133f7565b5b828204905092915050565b600061325f82613320565b915061326a83613320565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156132a3576132a26133c8565b5b828202905092915050565b60006132b982613320565b91506132c483613320565b9250828210156132d7576132d66133c8565b5b828203905092915050565b60006132ed82613300565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006133358261333c565b9050919050565b600061334782613300565b9050919050565b613357826134c7565b810181811067ffffffffffffffff8211171561337657613375613484565b5b80604052505050565b600061338a82613320565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133bd576133bc6133c8565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c6520686173206e6f742073746172746564207965740000000000000000600082015250565b7f4e6f7420656c696769626c6520666f722077686974656c697374206d696e7400600082015250565b7f5075626c69632073616c6520686173206e6f7420626567756e20796574000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b7f52656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f4e6f2066756e647320746f207769746864726177000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f41756374696f6e207072696365206973206e6f742066696e616c697a6564207960008201527f6574210000000000000000000000000000000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f43616c6c6564207769746820696e636f7272656374207075626c69632073616c60008201527f65206b6579000000000000000000000000000000000000000000000000000000602082015250565b7f43616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f4e6f7420656e6f7567682072656d61696e696e6720726573657276656420666f60008201527f722061756374696f6e20746f20737570706f72742064657369726564206d696e60208201527f7420616d6f756e74000000000000000000000000000000000000000000000000604082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f206372656469747320746f20726566756e64210000000000000000000000600082015250565b7f546f6f206d616e7920616c7265616479206d696e746564206265666f7265206460008201527f6576206d696e7400000000000000000000000000000000000000000000000000602082015250565b7f57686974656c6973742073616c6520686173206e6f7420626567756e20796574600082015250565b7f4e6f74206120637265646974206f776e65722100000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6138d0816132e2565b81146138db57600080fd5b50565b6138e781613320565b81146138f257600080fd5b5056fea264697066735822122089df095110882c394d46fa545b9301023b769d845b83f0a6bebb652f511d124164736f6c63430008060033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.