Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 21 from a total of 21 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 15906904 | 1241 days ago | IN | 0 ETH | 0.00054829 | ||||
| Set Approval For... | 15793315 | 1257 days ago | IN | 0 ETH | 0.00097393 | ||||
| Set Approval For... | 15669954 | 1274 days ago | IN | 0 ETH | 0.00080936 | ||||
| Withdraw | 15478281 | 1303 days ago | IN | 0 ETH | 0.00036581 | ||||
| Mint | 15474706 | 1303 days ago | IN | 0.05 ETH | 0.00113122 | ||||
| Dev Mint | 15472396 | 1304 days ago | IN | 0 ETH | 0.00217764 | ||||
| Transfer From | 15467396 | 1304 days ago | IN | 0 ETH | 0.00114659 | ||||
| Mint | 15467325 | 1305 days ago | IN | 0.05 ETH | 0.00125189 | ||||
| Mint | 15466736 | 1305 days ago | IN | 0.05 ETH | 0.00096777 | ||||
| Mint | 15461529 | 1305 days ago | IN | 0.05 ETH | 0.00148047 | ||||
| Mint | 15460308 | 1306 days ago | IN | 0.05 ETH | 0.00377112 | ||||
| Mint | 15460262 | 1306 days ago | IN | 0.05 ETH | 0.00460152 | ||||
| Mint | 15460254 | 1306 days ago | IN | 0.05 ETH | 0.00367892 | ||||
| Set Public Mint ... | 15460252 | 1306 days ago | IN | 0 ETH | 0.00053648 | ||||
| Mint | 15456527 | 1306 days ago | IN | 0.05 ETH | 0.0031012 | ||||
| Safe Transfer Fr... | 15455811 | 1306 days ago | IN | 0 ETH | 0.0011037 | ||||
| Mint | 15454074 | 1307 days ago | IN | 0.05 ETH | 0.00587443 | ||||
| Mint | 15453947 | 1307 days ago | IN | 0.05 ETH | 0.00722772 | ||||
| Dev Mint | 15453941 | 1307 days ago | IN | 0 ETH | 0.00229889 | ||||
| Set Is Pre Mint ... | 15453926 | 1307 days ago | IN | 0 ETH | 0.00059399 | ||||
| Set Base URI | 15453914 | 1307 days ago | IN | 0 ETH | 0.00242076 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 15478281 | 1303 days ago | 0.5 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Flash2
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-08-31
*/
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
/**
* @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
*/
function toHexString(address addr) internal pure returns (string memory) {
return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// 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;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @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 Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
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);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: address zero is not a valid owner");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: invalid token ID");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
_requireMinted(tokenId);
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overridden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not token owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
_requireMinted(tokenId);
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
_safeTransfer(from, to, tokenId, data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
_afterTokenTransfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
_afterTokenTransfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
_afterTokenTransfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits an {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits an {ApprovalForAll} event.
*/
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Reverts if the `tokenId` has not been minted yet.
*/
function _requireMinted(uint256 tokenId) internal view virtual {
require(_exists(tokenId), "ERC721: invalid token ID");
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
/// @solidity memory-safe-assembly
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol)
pragma solidity ^0.8.0;
/**
* @dev This implements an optional extension of {ERC721} defined in the EIP that adds
* enumerability of all the token ids in the contract as well as all token ids owned by each
* account.
*/
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
// Mapping from owner to list of owned token IDs
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
// Mapping from token ID to index of the owner tokens list
mapping(uint256 => uint256) private _ownedTokensIndex;
// Array with all token ids, used for enumeration
uint256[] private _allTokens;
// Mapping from token id to position in the allTokens array
mapping(uint256 => uint256) private _allTokensIndex;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
return _ownedTokens[owner][index];
}
/**
* @dev See {IERC721Enumerable-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _allTokens.length;
}
/**
* @dev See {IERC721Enumerable-tokenByIndex}.
*/
function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
return _allTokens[index];
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual override {
super._beforeTokenTransfer(from, to, tokenId);
if (from == address(0)) {
_addTokenToAllTokensEnumeration(tokenId);
} else if (from != to) {
_removeTokenFromOwnerEnumeration(from, tokenId);
}
if (to == address(0)) {
_removeTokenFromAllTokensEnumeration(tokenId);
} else if (to != from) {
_addTokenToOwnerEnumeration(to, tokenId);
}
}
/**
* @dev Private function to add a token to this extension's ownership-tracking data structures.
* @param to address representing the new owner of the given token ID
* @param tokenId uint256 ID of the token to be added to the tokens list of the given address
*/
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
uint256 length = ERC721.balanceOf(to);
_ownedTokens[to][length] = tokenId;
_ownedTokensIndex[tokenId] = length;
}
/**
* @dev Private function to add a token to this extension's token tracking data structures.
* @param tokenId uint256 ID of the token to be added to the tokens list
*/
function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
/**
* @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
* while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
* gas optimizations e.g. when performing a transfer operation (avoiding double writes).
* This has O(1) time complexity, but alters the order of the _ownedTokens array.
* @param from address representing the previous owner of the given token ID
* @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
*/
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
// To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
uint256 tokenIndex = _ownedTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
}
// This also deletes the contents at the last position of the array
delete _ownedTokensIndex[tokenId];
delete _ownedTokens[from][lastTokenIndex];
}
/**
* @dev Private function to remove a token from this extension's token tracking data structures.
* This has O(1) time complexity, but alters the order of the _allTokens array.
* @param tokenId uint256 ID of the token to be removed from the tokens list
*/
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
// To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = _allTokens.length - 1;
uint256 tokenIndex = _allTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
// rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
// an 'if' statement (like in _removeTokenFromOwnerEnumeration)
uint256 lastTokenId = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
// This also deletes the contents at the last position of the array
delete _allTokensIndex[tokenId];
_allTokens.pop();
}
}
// File: contracts/FLASH2.sol
pragma solidity ^0.8.9;
interface IFlash1 {
function balanceOf(address account, uint256 id)
external
view
returns (uint256);
}
contract Flash2 is ERC721, ERC721Enumerable, Ownable {
bool public saleIsActive = false;
string private _baseURIextended;
bool public isPreMintActive = false;
uint256 public constant MAX_SUPPLY = 12;
uint256 public constant PRICE_PER_TOKEN = 0.05 ether;
address public flash1Contract = 0x495f947276749Ce646f68AC8c248420045cb7b5e;
uint256[] public flash1IDs = [83386709029789256073946644846079118916129674477148433689383143301187415048193,
83386709029789256073946644846079118916129674477148433689383143305585461559297,
83386709029789256073946644846079118916129674477148433689383143302286926675969,
83386709029789256073946644846079118916129674477148433689383143303386438303745,
83386709029789256073946644846079118916129674477148433689383143304485949931521,
83386709029789256073946644846079118916129674477148433689383143313282042953729,
83386709029789256073946644846079118916129674477148433689383143306684973187073,
83386709029789256073946644846079118916129674477148433689383143307784484814849,
83386709029789256073946644846079118916129674477148433689383143308883996442625,
83386709029789256073946644846079118916129674477148433689383143309983508070401,
83386709029789256073946644846079118916129674477148433689383143311083019698177];
mapping(uint256 => bool) private UsedFlash1ID;
constructor() ERC721("The FLASH II Collection by E1even_xi", "FLASH2") {
for (uint256 i = 0; i < 11; i++) {
UsedFlash1ID[flash1IDs[i]] = false;
}
}
function setIsPreMintActive(bool _isPreMintActive) external onlyOwner {
isPreMintActive = _isPreMintActive;
}
function setFlash1Contract(address _flash1Contract) public onlyOwner {
flash1Contract = _flash1Contract;
}
function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) {
super._beforeTokenTransfer(from, to, tokenId);
}
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC721Enumerable) returns (bool) {
return super.supportsInterface(interfaceId);
}
function setBaseURI(string memory baseURI_) external onlyOwner() {
_baseURIextended = baseURI_;
}
function _baseURI() internal view virtual override returns (string memory) {
return _baseURIextended;
}
function setPublicMintActive(bool newState) public onlyOwner {
saleIsActive = newState;
}
function preMint(uint tokenNumber) public payable {
bool hasFlash1 = false;
for (uint256 i = 0; i < 11; i++) {
if (IFlash1(flash1Contract).balanceOf(msg.sender,flash1IDs[i]) > 0) {
if (!hasFlash1 && !UsedFlash1ID[flash1IDs[i]]) {
hasFlash1 = true;
UsedFlash1ID[flash1IDs[i]] = true;
}
}
}
require(hasFlash1, "You need an unused Flash 1 to pre mint.");
uint256 ts = totalSupply();
require(isPreMintActive, "Pre-mint is not active");
require(ts + 1 <= MAX_SUPPLY, "Purchase would exceed max tokens");
require(tokenNumber > 0, "Token number must be positive");
require(tokenNumber <= MAX_SUPPLY, "Token number too high");
require(PRICE_PER_TOKEN <= msg.value, "Ether value sent is not correct");
_safeMint(msg.sender, tokenNumber);
}
function mint(uint tokenNumber) public payable {
if (!saleIsActive) {
preMint(tokenNumber);
}
else {
require(saleIsActive, "Sale must be active to mint tokens");
uint256 ts = totalSupply();
require(ts + 1 <= MAX_SUPPLY, "Purchase would exceed max tokens");
require(tokenNumber > 0, "Token number must be positive");
require(tokenNumber <= MAX_SUPPLY, "Token number too high");
require(PRICE_PER_TOKEN <= msg.value, "Ether value sent is not correct");
_safeMint(msg.sender, tokenNumber);
}
}
function devMint(address mintAddress, uint256 tokenNumber) external onlyOwner {
uint256 ts = totalSupply();
require(ts + 1 <= MAX_SUPPLY, "Purchase would exceed max tokens");
require(tokenNumber >= 0, "Token number cannot be negative");
require(tokenNumber <= MAX_SUPPLY, "Token number too high");
_safeMint(mintAddress, tokenNumber);
}
function withdraw() public onlyOwner {
uint balance = address(this).balance;
payable(msg.sender).transfer(balance);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PER_TOKEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"mintAddress","type":"address"},{"internalType":"uint256","name":"tokenNumber","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flash1Contract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"flash1IDs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPreMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenNumber","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenNumber","type":"uint256"}],"name":"preMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_flash1Contract","type":"address"}],"name":"setFlash1Contract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isPreMintActive","type":"bool"}],"name":"setIsPreMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newState","type":"bool"}],"name":"setPublicMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
600a805460ff60a01b19169055600c80546001600160a81b03191674495f947276749ce646f68ac8c248420045cb7b5e001790556101e06040527fb85b346c305300291af065f8337e8ad6a6659ee300000000000004000000000160809081527fb85b346c305300291af065f8337e8ad6a6659ee300000000000008000000000160a0527fb85b346c305300291af065f8337e8ad6a6659ee300000000000005000000000160c0527fb85b346c305300291af065f8337e8ad6a6659ee300000000000006000000000160e0527fb85b346c305300291af065f8337e8ad6a6659ee3000000000000070000000001610100527fb85b346c305300291af065f8337e8ad6a6659ee30000000000000f0000000001610120527fb85b346c305300291af065f8337e8ad6a6659ee3000000000000090000000001610140527fb85b346c305300291af065f8337e8ad6a6659ee30000000000000a0000000001610160527fb85b346c305300291af065f8337e8ad6a6659ee30000000000000b0000000001610180527fb85b346c305300291af065f8337e8ad6a6659ee30000000000000c00000000016101a0527fb85b346c305300291af065f8337e8ad6a6659ee30000000000000d00000000016101c052620001de90600d90600b6200032a565b50348015620001ec57600080fd5b506040518060600160405280602481526020016200290360249139604080518082019091526006815265232620a9a41960d11b6020820152600062000232838262000436565b50600162000241828262000436565b5050506200025e62000258620002d460201b60201c565b620002d8565b60005b600b811015620002cd576000600e6000600d848154811062000287576200028762000502565b9060005260206000200154815260200190815260200160002060006101000a81548160ff0219169083151502179055508080620002c49062000518565b91505062000261565b5062000540565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805482825590600052602060002090810192821562000368579160200282015b82811115620003685782518255916020019190600101906200034b565b50620003769291506200037a565b5090565b5b808211156200037657600081556001016200037b565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620003bc57607f821691505b602082108103620003dd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200043157600081815260208120601f850160051c810160208610156200040c5750805b601f850160051c820191505b818110156200042d5782815560010162000418565b5050505b505050565b81516001600160401b0381111562000452576200045262000391565b6200046a81620004638454620003a7565b84620003e3565b602080601f831160018114620004a25760008415620004895750858301515b600019600386901b1c1916600185901b1785556200042d565b600085815260208120601f198616915b82811015620004d357888601518255948401946001909101908401620004b2565b5085821015620004f25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b6000600182016200053957634e487b7160e01b600052601160045260246000fd5b5060010190565b6123b380620005506000396000f3fe6080604052600436106101ee5760003560e01c806370a082311161010d578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd14610555578063e985e9c514610575578063eb8d2444146105be578063f2fde38b146105df578063fe2c974c146105ff57600080fd5b8063a22cb465146104d5578063b2b9bd58146104f5578063b88d4fde14610515578063bd740bec1461053557600080fd5b80638ad433ac116100dc5780638ad433ac1461047c5780638da5cb5b1461048f57806395d89b41146104ad578063a0712d68146104c257600080fd5b806370a0823114610412578063715018a6146104325780637f5ab77a14610447578063833b94991461046157600080fd5b806332cb6b0c1161018557806355f804b31161015457806355f804b31461038d578063627804af146103ad5780636352211e146103cd57806369ab3c53146103ed57600080fd5b806332cb6b0c146103235780633ccfd60b1461033857806342842e0e1461034d5780634f6ccce71461036d57600080fd5b806318160ddd116101c157806318160ddd146102a457806323b872dd146102c35780632b707c71146102e35780632f745c591461030357600080fd5b806301ffc9a7146101f357806306fdde0314610228578063081812fc1461024a578063095ea7b314610282575b600080fd5b3480156101ff57600080fd5b5061021361020e366004611cc1565b61061f565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b5061023d610630565b60405161021f9190611d2e565b34801561025657600080fd5b5061026a610265366004611d41565b6106c2565b6040516001600160a01b03909116815260200161021f565b34801561028e57600080fd5b506102a261029d366004611d76565b6106e9565b005b3480156102b057600080fd5b506008545b60405190815260200161021f565b3480156102cf57600080fd5b506102a26102de366004611da0565b610803565b3480156102ef57600080fd5b506102a26102fe366004611dec565b610834565b34801561030f57600080fd5b506102b561031e366004611d76565b61085a565b34801561032f57600080fd5b506102b5600c81565b34801561034457600080fd5b506102a26108f0565b34801561035957600080fd5b506102a2610368366004611da0565b61092b565b34801561037957600080fd5b506102b5610388366004611d41565b610946565b34801561039957600080fd5b506102a26103a8366004611e93565b6109d9565b3480156103b957600080fd5b506102a26103c8366004611d76565b6109ed565b3480156103d957600080fd5b5061026a6103e8366004611d41565b610a58565b3480156103f957600080fd5b50600c5461026a9061010090046001600160a01b031681565b34801561041e57600080fd5b506102b561042d366004611edc565b610ab8565b34801561043e57600080fd5b506102a2610b3e565b34801561045357600080fd5b50600c546102139060ff1681565b34801561046d57600080fd5b506102b566b1a2bc2ec5000081565b6102a261048a366004611d41565b610b52565b34801561049b57600080fd5b50600a546001600160a01b031661026a565b3480156104b957600080fd5b5061023d610e71565b6102a26104d0366004611d41565b610e80565b3480156104e157600080fd5b506102a26104f0366004611ef7565b61100b565b34801561050157600080fd5b506102b5610510366004611d41565b611016565b34801561052157600080fd5b506102a2610530366004611f2a565b611037565b34801561054157600080fd5b506102a2610550366004611edc565b61106f565b34801561056157600080fd5b5061023d610570366004611d41565b61109f565b34801561058157600080fd5b50610213610590366004611fa6565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156105ca57600080fd5b50600a5461021390600160a01b900460ff1681565b3480156105eb57600080fd5b506102a26105fa366004611edc565b611106565b34801561060b57600080fd5b506102a261061a366004611dec565b61117c565b600061062a82611197565b92915050565b60606000805461063f90611fd0565b80601f016020809104026020016040519081016040528092919081815260200182805461066b90611fd0565b80156106b85780601f1061068d576101008083540402835291602001916106b8565b820191906000526020600020905b81548152906001019060200180831161069b57829003601f168201915b5050505050905090565b60006106cd826111bc565b506000908152600460205260409020546001600160a01b031690565b60006106f482610a58565b9050806001600160a01b0316836001600160a01b0316036107665760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061078257506107828133610590565b6107f45760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000606482015260840161075d565b6107fe838361121b565b505050565b61080d3382611289565b6108295760405162461bcd60e51b815260040161075d9061200a565b6107fe838383611308565b61083c6114af565b600a8054911515600160a01b0260ff60a01b19909216919091179055565b600061086583610ab8565b82106108c75760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161075d565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6108f86114af565b6040514790339082156108fc029083906000818181858888f19350505050158015610927573d6000803e3d6000fd5b5050565b6107fe83838360405180602001604052806000815250611037565b600061095160085490565b82106109b45760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161075d565b600882815481106109c7576109c7612058565b90600052602060002001549050919050565b6109e16114af565b600b61092782826120bc565b6109f56114af565b6000610a0060085490565b9050600c610a0f826001612192565b1115610a2d5760405162461bcd60e51b815260040161075d906121a5565b600c821115610a4e5760405162461bcd60e51b815260040161075d906121da565b6107fe8383611509565b6000818152600260205260408120546001600160a01b03168061062a5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161075d565b60006001600160a01b038216610b225760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161075d565b506001600160a01b031660009081526003602052604090205490565b610b466114af565b610b506000611523565b565b6000805b600b811015610cbd576000600c60019054906101000a90046001600160a01b03166001600160a01b031662fdd58e33600d8581548110610b9857610b98612058565b6000918252602090912001546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610bed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c119190612209565b1115610cab5781158015610c585750600e6000600d8381548110610c3757610c37612058565b6000918252602080832090910154835282019290925260400190205460ff16155b15610cab57600191506001600e6000600d8481548110610c7a57610c7a612058565b9060005260206000200154815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80610cb581612222565b915050610b56565b5080610d1b5760405162461bcd60e51b815260206004820152602760248201527f596f75206e65656420616e20756e7573656420466c617368203120746f207072604482015266329036b4b73a1760c91b606482015260840161075d565b6000610d2660085490565b600c5490915060ff16610d745760405162461bcd60e51b81526020600482015260166024820152755072652d6d696e74206973206e6f742061637469766560501b604482015260640161075d565b600c610d81826001612192565b1115610d9f5760405162461bcd60e51b815260040161075d906121a5565b60008311610def5760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e206e756d626572206d75737420626520706f736974697665000000604482015260640161075d565b600c831115610e105760405162461bcd60e51b815260040161075d906121da565b3466b1a2bc2ec500001115610e675760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f727265637400604482015260640161075d565b6107fe3384611509565b60606001805461063f90611fd0565b600a54600160a01b900460ff16610e9d57610e9a81610b52565b50565b600a54600160a01b900460ff16610f015760405162461bcd60e51b815260206004820152602260248201527f53616c65206d7573742062652061637469766520746f206d696e7420746f6b656044820152616e7360f01b606482015260840161075d565b6000610f0c60085490565b9050600c610f1b826001612192565b1115610f395760405162461bcd60e51b815260040161075d906121a5565b60008211610f895760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e206e756d626572206d75737420626520706f736974697665000000604482015260640161075d565b600c821115610faa5760405162461bcd60e51b815260040161075d906121da565b3466b1a2bc2ec5000011156110015760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f727265637400604482015260640161075d565b6109273383611509565b610927338383611575565b600d818154811061102657600080fd5b600091825260209091200154905081565b6110413383611289565b61105d5760405162461bcd60e51b815260040161075d9061200a565b61106984848484611643565b50505050565b6110776114af565b600c80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60606110aa826111bc565b60006110b4611676565b905060008151116110d457604051806020016040528060008152506110ff565b806110de84611685565b6040516020016110ef92919061223b565b6040516020818303038152906040525b9392505050565b61110e6114af565b6001600160a01b0381166111735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161075d565b610e9a81611523565b6111846114af565b600c805460ff1916911515919091179055565b60006001600160e01b0319821663780e9d6360e01b148061062a575061062a82611786565b6000818152600260205260409020546001600160a01b0316610e9a5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161075d565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061125082610a58565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061129583610a58565b9050806001600160a01b0316846001600160a01b031614806112dc57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806113005750836001600160a01b03166112f5846106c2565b6001600160a01b0316145b949350505050565b826001600160a01b031661131b82610a58565b6001600160a01b03161461137f5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161075d565b6001600160a01b0382166113e15760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161075d565b6113ec8383836117d6565b6113f760008261121b565b6001600160a01b038316600090815260036020526040812080546001929061142090849061226a565b90915550506001600160a01b038216600090815260036020526040812080546001929061144e908490612192565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a546001600160a01b03163314610b505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161075d565b6109278282604051806020016040528060008152506117e1565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036115d65760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161075d565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61164e848484611308565b61165a84848484611814565b6110695760405162461bcd60e51b815260040161075d9061227d565b6060600b805461063f90611fd0565b6060816000036116ac5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156116d657806116c081612222565b91506116cf9050600a836122e5565b91506116b0565b60008167ffffffffffffffff8111156116f1576116f1611e07565b6040519080825280601f01601f19166020018201604052801561171b576020820181803683370190505b5090505b84156113005761173060018361226a565b915061173d600a866122f9565b611748906030612192565b60f81b81838151811061175d5761175d612058565b60200101906001600160f81b031916908160001a90535061177f600a866122e5565b945061171f565b60006001600160e01b031982166380ac58cd60e01b14806117b757506001600160e01b03198216635b5e139f60e01b145b8061062a57506301ffc9a760e01b6001600160e01b031983161461062a565b6107fe838383611915565b6117eb83836119cd565b6117f86000848484611814565b6107fe5760405162461bcd60e51b815260040161075d9061227d565b60006001600160a01b0384163b1561190a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061185890339089908890889060040161230d565b6020604051808303816000875af1925050508015611893575060408051601f3d908101601f191682019092526118909181019061234a565b60015b6118f0573d8080156118c1576040519150601f19603f3d011682016040523d82523d6000602084013e6118c6565b606091505b5080516000036118e85760405162461bcd60e51b815260040161075d9061227d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611300565b506001949350505050565b6001600160a01b0383166119705761196b81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611993565b816001600160a01b0316836001600160a01b031614611993576119938382611b1b565b6001600160a01b0382166119aa576107fe81611bb8565b826001600160a01b0316826001600160a01b0316146107fe576107fe8282611c67565b6001600160a01b038216611a235760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161075d565b6000818152600260205260409020546001600160a01b031615611a885760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161075d565b611a94600083836117d6565b6001600160a01b0382166000908152600360205260408120805460019290611abd908490612192565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001611b2884610ab8565b611b32919061226a565b600083815260076020526040902054909150808214611b85576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611bca9060019061226a565b60008381526009602052604081205460088054939450909284908110611bf257611bf2612058565b906000526020600020015490508060088381548110611c1357611c13612058565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611c4b57611c4b612367565b6001900381819060005260206000200160009055905550505050565b6000611c7283610ab8565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160e01b031981168114610e9a57600080fd5b600060208284031215611cd357600080fd5b81356110ff81611cab565b60005b83811015611cf9578181015183820152602001611ce1565b50506000910152565b60008151808452611d1a816020860160208601611cde565b601f01601f19169290920160200192915050565b6020815260006110ff6020830184611d02565b600060208284031215611d5357600080fd5b5035919050565b80356001600160a01b0381168114611d7157600080fd5b919050565b60008060408385031215611d8957600080fd5b611d9283611d5a565b946020939093013593505050565b600080600060608486031215611db557600080fd5b611dbe84611d5a565b9250611dcc60208501611d5a565b9150604084013590509250925092565b80358015158114611d7157600080fd5b600060208284031215611dfe57600080fd5b6110ff82611ddc565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611e3857611e38611e07565b604051601f8501601f19908116603f01168101908282118183101715611e6057611e60611e07565b81604052809350858152868686011115611e7957600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611ea557600080fd5b813567ffffffffffffffff811115611ebc57600080fd5b8201601f81018413611ecd57600080fd5b61130084823560208401611e1d565b600060208284031215611eee57600080fd5b6110ff82611d5a565b60008060408385031215611f0a57600080fd5b611f1383611d5a565b9150611f2160208401611ddc565b90509250929050565b60008060008060808587031215611f4057600080fd5b611f4985611d5a565b9350611f5760208601611d5a565b925060408501359150606085013567ffffffffffffffff811115611f7a57600080fd5b8501601f81018713611f8b57600080fd5b611f9a87823560208401611e1d565b91505092959194509250565b60008060408385031215611fb957600080fd5b611fc283611d5a565b9150611f2160208401611d5a565b600181811c90821680611fe457607f821691505b60208210810361200457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b601f8211156107fe57600081815260208120601f850160051c810160208610156120955750805b601f850160051c820191505b818110156120b4578281556001016120a1565b505050505050565b815167ffffffffffffffff8111156120d6576120d6611e07565b6120ea816120e48454611fd0565b8461206e565b602080601f83116001811461211f57600084156121075750858301515b600019600386901b1c1916600185901b1785556120b4565b600085815260208120601f198616915b8281101561214e5788860151825594840194600190910190840161212f565b508582101561216c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082018082111561062a5761062a61217c565b6020808252818101527f507572636861736520776f756c6420657863656564206d617820746f6b656e73604082015260600190565b6020808252601590820152740a8ded6cadc40dceadac4cae440e8dede40d0d2ced605b1b604082015260600190565b60006020828403121561221b57600080fd5b5051919050565b6000600182016122345761223461217c565b5060010190565b6000835161224d818460208801611cde565b835190830190612261818360208801611cde565b01949350505050565b8181038181111561062a5761062a61217c565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826122f4576122f46122cf565b500490565b600082612308576123086122cf565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061234090830184611d02565b9695505050505050565b60006020828403121561235c57600080fd5b81516110ff81611cab565b634e487b7160e01b600052603160045260246000fdfea26469706673582212203230919fc9209c7e8bc75c0a15f0b1f2395f69810f5eff17350238ac0a6da1aa64736f6c6343000810003354686520464c41534820494920436f6c6c656374696f6e2062792045316576656e5f7869
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c806370a082311161010d578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd14610555578063e985e9c514610575578063eb8d2444146105be578063f2fde38b146105df578063fe2c974c146105ff57600080fd5b8063a22cb465146104d5578063b2b9bd58146104f5578063b88d4fde14610515578063bd740bec1461053557600080fd5b80638ad433ac116100dc5780638ad433ac1461047c5780638da5cb5b1461048f57806395d89b41146104ad578063a0712d68146104c257600080fd5b806370a0823114610412578063715018a6146104325780637f5ab77a14610447578063833b94991461046157600080fd5b806332cb6b0c1161018557806355f804b31161015457806355f804b31461038d578063627804af146103ad5780636352211e146103cd57806369ab3c53146103ed57600080fd5b806332cb6b0c146103235780633ccfd60b1461033857806342842e0e1461034d5780634f6ccce71461036d57600080fd5b806318160ddd116101c157806318160ddd146102a457806323b872dd146102c35780632b707c71146102e35780632f745c591461030357600080fd5b806301ffc9a7146101f357806306fdde0314610228578063081812fc1461024a578063095ea7b314610282575b600080fd5b3480156101ff57600080fd5b5061021361020e366004611cc1565b61061f565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b5061023d610630565b60405161021f9190611d2e565b34801561025657600080fd5b5061026a610265366004611d41565b6106c2565b6040516001600160a01b03909116815260200161021f565b34801561028e57600080fd5b506102a261029d366004611d76565b6106e9565b005b3480156102b057600080fd5b506008545b60405190815260200161021f565b3480156102cf57600080fd5b506102a26102de366004611da0565b610803565b3480156102ef57600080fd5b506102a26102fe366004611dec565b610834565b34801561030f57600080fd5b506102b561031e366004611d76565b61085a565b34801561032f57600080fd5b506102b5600c81565b34801561034457600080fd5b506102a26108f0565b34801561035957600080fd5b506102a2610368366004611da0565b61092b565b34801561037957600080fd5b506102b5610388366004611d41565b610946565b34801561039957600080fd5b506102a26103a8366004611e93565b6109d9565b3480156103b957600080fd5b506102a26103c8366004611d76565b6109ed565b3480156103d957600080fd5b5061026a6103e8366004611d41565b610a58565b3480156103f957600080fd5b50600c5461026a9061010090046001600160a01b031681565b34801561041e57600080fd5b506102b561042d366004611edc565b610ab8565b34801561043e57600080fd5b506102a2610b3e565b34801561045357600080fd5b50600c546102139060ff1681565b34801561046d57600080fd5b506102b566b1a2bc2ec5000081565b6102a261048a366004611d41565b610b52565b34801561049b57600080fd5b50600a546001600160a01b031661026a565b3480156104b957600080fd5b5061023d610e71565b6102a26104d0366004611d41565b610e80565b3480156104e157600080fd5b506102a26104f0366004611ef7565b61100b565b34801561050157600080fd5b506102b5610510366004611d41565b611016565b34801561052157600080fd5b506102a2610530366004611f2a565b611037565b34801561054157600080fd5b506102a2610550366004611edc565b61106f565b34801561056157600080fd5b5061023d610570366004611d41565b61109f565b34801561058157600080fd5b50610213610590366004611fa6565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156105ca57600080fd5b50600a5461021390600160a01b900460ff1681565b3480156105eb57600080fd5b506102a26105fa366004611edc565b611106565b34801561060b57600080fd5b506102a261061a366004611dec565b61117c565b600061062a82611197565b92915050565b60606000805461063f90611fd0565b80601f016020809104026020016040519081016040528092919081815260200182805461066b90611fd0565b80156106b85780601f1061068d576101008083540402835291602001916106b8565b820191906000526020600020905b81548152906001019060200180831161069b57829003601f168201915b5050505050905090565b60006106cd826111bc565b506000908152600460205260409020546001600160a01b031690565b60006106f482610a58565b9050806001600160a01b0316836001600160a01b0316036107665760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061078257506107828133610590565b6107f45760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000606482015260840161075d565b6107fe838361121b565b505050565b61080d3382611289565b6108295760405162461bcd60e51b815260040161075d9061200a565b6107fe838383611308565b61083c6114af565b600a8054911515600160a01b0260ff60a01b19909216919091179055565b600061086583610ab8565b82106108c75760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161075d565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6108f86114af565b6040514790339082156108fc029083906000818181858888f19350505050158015610927573d6000803e3d6000fd5b5050565b6107fe83838360405180602001604052806000815250611037565b600061095160085490565b82106109b45760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161075d565b600882815481106109c7576109c7612058565b90600052602060002001549050919050565b6109e16114af565b600b61092782826120bc565b6109f56114af565b6000610a0060085490565b9050600c610a0f826001612192565b1115610a2d5760405162461bcd60e51b815260040161075d906121a5565b600c821115610a4e5760405162461bcd60e51b815260040161075d906121da565b6107fe8383611509565b6000818152600260205260408120546001600160a01b03168061062a5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161075d565b60006001600160a01b038216610b225760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161075d565b506001600160a01b031660009081526003602052604090205490565b610b466114af565b610b506000611523565b565b6000805b600b811015610cbd576000600c60019054906101000a90046001600160a01b03166001600160a01b031662fdd58e33600d8581548110610b9857610b98612058565b6000918252602090912001546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610bed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c119190612209565b1115610cab5781158015610c585750600e6000600d8381548110610c3757610c37612058565b6000918252602080832090910154835282019290925260400190205460ff16155b15610cab57600191506001600e6000600d8481548110610c7a57610c7a612058565b9060005260206000200154815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80610cb581612222565b915050610b56565b5080610d1b5760405162461bcd60e51b815260206004820152602760248201527f596f75206e65656420616e20756e7573656420466c617368203120746f207072604482015266329036b4b73a1760c91b606482015260840161075d565b6000610d2660085490565b600c5490915060ff16610d745760405162461bcd60e51b81526020600482015260166024820152755072652d6d696e74206973206e6f742061637469766560501b604482015260640161075d565b600c610d81826001612192565b1115610d9f5760405162461bcd60e51b815260040161075d906121a5565b60008311610def5760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e206e756d626572206d75737420626520706f736974697665000000604482015260640161075d565b600c831115610e105760405162461bcd60e51b815260040161075d906121da565b3466b1a2bc2ec500001115610e675760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f727265637400604482015260640161075d565b6107fe3384611509565b60606001805461063f90611fd0565b600a54600160a01b900460ff16610e9d57610e9a81610b52565b50565b600a54600160a01b900460ff16610f015760405162461bcd60e51b815260206004820152602260248201527f53616c65206d7573742062652061637469766520746f206d696e7420746f6b656044820152616e7360f01b606482015260840161075d565b6000610f0c60085490565b9050600c610f1b826001612192565b1115610f395760405162461bcd60e51b815260040161075d906121a5565b60008211610f895760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e206e756d626572206d75737420626520706f736974697665000000604482015260640161075d565b600c821115610faa5760405162461bcd60e51b815260040161075d906121da565b3466b1a2bc2ec5000011156110015760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f727265637400604482015260640161075d565b6109273383611509565b610927338383611575565b600d818154811061102657600080fd5b600091825260209091200154905081565b6110413383611289565b61105d5760405162461bcd60e51b815260040161075d9061200a565b61106984848484611643565b50505050565b6110776114af565b600c80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60606110aa826111bc565b60006110b4611676565b905060008151116110d457604051806020016040528060008152506110ff565b806110de84611685565b6040516020016110ef92919061223b565b6040516020818303038152906040525b9392505050565b61110e6114af565b6001600160a01b0381166111735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161075d565b610e9a81611523565b6111846114af565b600c805460ff1916911515919091179055565b60006001600160e01b0319821663780e9d6360e01b148061062a575061062a82611786565b6000818152600260205260409020546001600160a01b0316610e9a5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161075d565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061125082610a58565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061129583610a58565b9050806001600160a01b0316846001600160a01b031614806112dc57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806113005750836001600160a01b03166112f5846106c2565b6001600160a01b0316145b949350505050565b826001600160a01b031661131b82610a58565b6001600160a01b03161461137f5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161075d565b6001600160a01b0382166113e15760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161075d565b6113ec8383836117d6565b6113f760008261121b565b6001600160a01b038316600090815260036020526040812080546001929061142090849061226a565b90915550506001600160a01b038216600090815260036020526040812080546001929061144e908490612192565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a546001600160a01b03163314610b505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161075d565b6109278282604051806020016040528060008152506117e1565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036115d65760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161075d565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61164e848484611308565b61165a84848484611814565b6110695760405162461bcd60e51b815260040161075d9061227d565b6060600b805461063f90611fd0565b6060816000036116ac5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156116d657806116c081612222565b91506116cf9050600a836122e5565b91506116b0565b60008167ffffffffffffffff8111156116f1576116f1611e07565b6040519080825280601f01601f19166020018201604052801561171b576020820181803683370190505b5090505b84156113005761173060018361226a565b915061173d600a866122f9565b611748906030612192565b60f81b81838151811061175d5761175d612058565b60200101906001600160f81b031916908160001a90535061177f600a866122e5565b945061171f565b60006001600160e01b031982166380ac58cd60e01b14806117b757506001600160e01b03198216635b5e139f60e01b145b8061062a57506301ffc9a760e01b6001600160e01b031983161461062a565b6107fe838383611915565b6117eb83836119cd565b6117f86000848484611814565b6107fe5760405162461bcd60e51b815260040161075d9061227d565b60006001600160a01b0384163b1561190a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061185890339089908890889060040161230d565b6020604051808303816000875af1925050508015611893575060408051601f3d908101601f191682019092526118909181019061234a565b60015b6118f0573d8080156118c1576040519150601f19603f3d011682016040523d82523d6000602084013e6118c6565b606091505b5080516000036118e85760405162461bcd60e51b815260040161075d9061227d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611300565b506001949350505050565b6001600160a01b0383166119705761196b81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611993565b816001600160a01b0316836001600160a01b031614611993576119938382611b1b565b6001600160a01b0382166119aa576107fe81611bb8565b826001600160a01b0316826001600160a01b0316146107fe576107fe8282611c67565b6001600160a01b038216611a235760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161075d565b6000818152600260205260409020546001600160a01b031615611a885760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161075d565b611a94600083836117d6565b6001600160a01b0382166000908152600360205260408120805460019290611abd908490612192565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001611b2884610ab8565b611b32919061226a565b600083815260076020526040902054909150808214611b85576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611bca9060019061226a565b60008381526009602052604081205460088054939450909284908110611bf257611bf2612058565b906000526020600020015490508060088381548110611c1357611c13612058565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611c4b57611c4b612367565b6001900381819060005260206000200160009055905550505050565b6000611c7283610ab8565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160e01b031981168114610e9a57600080fd5b600060208284031215611cd357600080fd5b81356110ff81611cab565b60005b83811015611cf9578181015183820152602001611ce1565b50506000910152565b60008151808452611d1a816020860160208601611cde565b601f01601f19169290920160200192915050565b6020815260006110ff6020830184611d02565b600060208284031215611d5357600080fd5b5035919050565b80356001600160a01b0381168114611d7157600080fd5b919050565b60008060408385031215611d8957600080fd5b611d9283611d5a565b946020939093013593505050565b600080600060608486031215611db557600080fd5b611dbe84611d5a565b9250611dcc60208501611d5a565b9150604084013590509250925092565b80358015158114611d7157600080fd5b600060208284031215611dfe57600080fd5b6110ff82611ddc565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611e3857611e38611e07565b604051601f8501601f19908116603f01168101908282118183101715611e6057611e60611e07565b81604052809350858152868686011115611e7957600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611ea557600080fd5b813567ffffffffffffffff811115611ebc57600080fd5b8201601f81018413611ecd57600080fd5b61130084823560208401611e1d565b600060208284031215611eee57600080fd5b6110ff82611d5a565b60008060408385031215611f0a57600080fd5b611f1383611d5a565b9150611f2160208401611ddc565b90509250929050565b60008060008060808587031215611f4057600080fd5b611f4985611d5a565b9350611f5760208601611d5a565b925060408501359150606085013567ffffffffffffffff811115611f7a57600080fd5b8501601f81018713611f8b57600080fd5b611f9a87823560208401611e1d565b91505092959194509250565b60008060408385031215611fb957600080fd5b611fc283611d5a565b9150611f2160208401611d5a565b600181811c90821680611fe457607f821691505b60208210810361200457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b601f8211156107fe57600081815260208120601f850160051c810160208610156120955750805b601f850160051c820191505b818110156120b4578281556001016120a1565b505050505050565b815167ffffffffffffffff8111156120d6576120d6611e07565b6120ea816120e48454611fd0565b8461206e565b602080601f83116001811461211f57600084156121075750858301515b600019600386901b1c1916600185901b1785556120b4565b600085815260208120601f198616915b8281101561214e5788860151825594840194600190910190840161212f565b508582101561216c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082018082111561062a5761062a61217c565b6020808252818101527f507572636861736520776f756c6420657863656564206d617820746f6b656e73604082015260600190565b6020808252601590820152740a8ded6cadc40dceadac4cae440e8dede40d0d2ced605b1b604082015260600190565b60006020828403121561221b57600080fd5b5051919050565b6000600182016122345761223461217c565b5060010190565b6000835161224d818460208801611cde565b835190830190612261818360208801611cde565b01949350505050565b8181038181111561062a5761062a61217c565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826122f4576122f46122cf565b500490565b600082612308576123086122cf565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061234090830184611d02565b9695505050505050565b60006020828403121561235c57600080fd5b81516110ff81611cab565b634e487b7160e01b600052603160045260246000fdfea26469706673582212203230919fc9209c7e8bc75c0a15f0b1f2395f69810f5eff17350238ac0a6da1aa64736f6c63430008100033
Deployed Bytecode Sourcemap
46369:4993:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48686:179;;;;;;;;;;-1:-1:-1;48686:179:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;48686:179:0;;;;;;;;26744:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28257:171::-;;;;;;;;;;-1:-1:-1;28257:171:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;28257:171:0;1533:203:1;27774:417:0;;;;;;;;;;-1:-1:-1;27774:417:0;;;;;:::i;:::-;;:::i;:::-;;40650:113;;;;;;;;;;-1:-1:-1;40738:10:0;:17;40650:113;;;2324:25:1;;;2312:2;2297:18;40650:113:0;2178:177:1;28957:336:0;;;;;;;;;;-1:-1:-1;28957:336:0;;;;;:::i;:::-;;:::i;49117:103::-;;;;;;;;;;-1:-1:-1;49117:103:0;;;;;:::i;:::-;;:::i;40318:256::-;;;;;;;;;;-1:-1:-1;40318:256:0;;;;;:::i;:::-;;:::i;46550:39::-;;;;;;;;;;;;46587:2;46550:39;;51219:140;;;;;;;;;;;;;:::i;29364:185::-;;;;;;;;;;-1:-1:-1;29364:185:0;;;;;:::i;:::-;;:::i;40840:233::-;;;;;;;;;;-1:-1:-1;40840:233:0;;;;;:::i;:::-;;:::i;48873:111::-;;;;;;;;;;-1:-1:-1;48873:111:0;;;;;:::i;:::-;;:::i;50825:386::-;;;;;;;;;;-1:-1:-1;50825:386:0;;;;;:::i;:::-;;:::i;26455:222::-;;;;;;;;;;-1:-1:-1;26455:222:0;;;;;:::i;:::-;;:::i;46655:74::-;;;;;;;;;;-1:-1:-1;46655:74:0;;;;;;;-1:-1:-1;;;;;46655:74:0;;;26186:207;;;;;;;;;;-1:-1:-1;26186:207:0;;;;;:::i;:::-;;:::i;5273:103::-;;;;;;;;;;;;;:::i;46508:35::-;;;;;;;;;;-1:-1:-1;46508:35:0;;;;;;;;46596:52;;;;;;;;;;;;46638:10;46596:52;;49228:944;;;;;;:::i;:::-;;:::i;4625:87::-;;;;;;;;;;-1:-1:-1;4698:6:0;;-1:-1:-1;;;;;4698:6:0;4625:87;;26913:104;;;;;;;;;;;;;:::i;50180:637::-;;;;;;:::i;:::-;;:::i;28500:155::-;;;;;;;;;;-1:-1:-1;28500:155:0;;;;;:::i;:::-;;:::i;46736:1248::-;;;;;;;;;;-1:-1:-1;46736:1248:0;;;;;:::i;:::-;;:::i;29620:323::-;;;;;;;;;;-1:-1:-1;29620:323:0;;;;;:::i;:::-;;:::i;48369:120::-;;;;;;;;;;-1:-1:-1;48369:120:0;;;;;:::i;:::-;;:::i;27088:281::-;;;;;;;;;;-1:-1:-1;27088:281:0;;;;;:::i;:::-;;:::i;28726:164::-;;;;;;;;;;-1:-1:-1;28726:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;28847:25:0;;;28823:4;28847:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;28726:164;46429:32;;;;;;;;;;-1:-1:-1;46429:32:0;;;;-1:-1:-1;;;46429:32:0;;;;;;5531:201;;;;;;;;;;-1:-1:-1;5531:201:0;;;;;:::i;:::-;;:::i;48238:123::-;;;;;;;;;;-1:-1:-1;48238:123:0;;;;;:::i;:::-;;:::i;48686:179::-;48797:4;48821:36;48845:11;48821:23;:36::i;:::-;48814:43;48686:179;-1:-1:-1;;48686:179:0:o;26744:100::-;26798:13;26831:5;26824:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26744:100;:::o;28257:171::-;28333:7;28353:23;28368:7;28353:14;:23::i;:::-;-1:-1:-1;28396:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;28396:24:0;;28257:171::o;27774:417::-;27855:13;27871:23;27886:7;27871:14;:23::i;:::-;27855:39;;27919:5;-1:-1:-1;;;;;27913:11:0;:2;-1:-1:-1;;;;;27913:11:0;;27905:57;;;;-1:-1:-1;;;27905:57:0;;6242:2:1;27905:57:0;;;6224:21:1;6281:2;6261:18;;;6254:30;6320:34;6300:18;;;6293:62;-1:-1:-1;;;6371:18:1;;;6364:31;6412:19;;27905:57:0;;;;;;;;;3256:10;-1:-1:-1;;;;;27997:21:0;;;;:62;;-1:-1:-1;28022:37:0;28039:5;3256:10;28726:164;:::i;28022:37::-;27975:174;;;;-1:-1:-1;;;27975:174:0;;6644:2:1;27975:174:0;;;6626:21:1;6683:2;6663:18;;;6656:30;6722:34;6702:18;;;6695:62;6793:32;6773:18;;;6766:60;6843:19;;27975:174:0;6442:426:1;27975:174:0;28162:21;28171:2;28175:7;28162:8;:21::i;:::-;27844:347;27774:417;;:::o;28957:336::-;29152:41;3256:10;29185:7;29152:18;:41::i;:::-;29144:100;;;;-1:-1:-1;;;29144:100:0;;;;;;;:::i;:::-;29257:28;29267:4;29273:2;29277:7;29257:9;:28::i;49117:103::-;4511:13;:11;:13::i;:::-;49189:12:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;49189:23:0::1;-1:-1:-1::0;;;;49189:23:0;;::::1;::::0;;;::::1;::::0;;49117:103::o;40318:256::-;40415:7;40451:23;40468:5;40451:16;:23::i;:::-;40443:5;:31;40435:87;;;;-1:-1:-1;;;40435:87:0;;7490:2:1;40435:87:0;;;7472:21:1;7529:2;7509:18;;;7502:30;7568:34;7548:18;;;7541:62;-1:-1:-1;;;7619:18:1;;;7612:41;7670:19;;40435:87:0;7288:407:1;40435:87:0;-1:-1:-1;;;;;;40540:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;40318:256::o;51219:140::-;4511:13;:11;:13::i;:::-;51314:37:::1;::::0;51282:21:::1;::::0;51322:10:::1;::::0;51314:37;::::1;;;::::0;51282:21;;51267:12:::1;51314:37:::0;51267:12;51314:37;51282:21;51322:10;51314:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;51256:103;51219:140::o:0;29364:185::-;29502:39;29519:4;29525:2;29529:7;29502:39;;;;;;;;;;;;:16;:39::i;40840:233::-;40915:7;40951:30;40738:10;:17;;40650:113;40951:30;40943:5;:38;40935:95;;;;-1:-1:-1;;;40935:95:0;;7902:2:1;40935:95:0;;;7884:21:1;7941:2;7921:18;;;7914:30;7980:34;7960:18;;;7953:62;-1:-1:-1;;;8031:18:1;;;8024:42;8083:19;;40935:95:0;7700:408:1;40935:95:0;41048:10;41059:5;41048:17;;;;;;;;:::i;:::-;;;;;;;;;41041:24;;40840:233;;;:::o;48873:111::-;4511:13;:11;:13::i;:::-;48949:16:::1;:27;48968:8:::0;48949:16;:27:::1;:::i;50825:386::-:0;4511:13;:11;:13::i;:::-;50914:10:::1;50927:13;40738:10:::0;:17;;40650:113;50927:13:::1;50914:26:::0;-1:-1:-1;46587:2:0::1;50959:6;50914:26:::0;50964:1:::1;50959:6;:::i;:::-;:20;;50951:65;;;;-1:-1:-1::0;;;50951:65:0::1;;;;;;;:::i;:::-;46587:2;51106:11;:25;;51098:59;;;;-1:-1:-1::0;;;51098:59:0::1;;;;;;;:::i;:::-;51168:35;51178:11;51191;51168:9;:35::i;26455:222::-:0;26527:7;26563:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26563:16:0;;26590:56;;;;-1:-1:-1;;;26590:56:0;;11984:2:1;26590:56:0;;;11966:21:1;12023:2;12003:18;;;11996:30;-1:-1:-1;;;12042:18:1;;;12035:54;12106:18;;26590:56:0;11782:348:1;26186:207:0;26258:7;-1:-1:-1;;;;;26286:19:0;;26278:73;;;;-1:-1:-1;;;26278:73:0;;12337:2:1;26278:73:0;;;12319:21:1;12376:2;12356:18;;;12349:30;12415:34;12395:18;;;12388:62;-1:-1:-1;;;12466:18:1;;;12459:39;12515:19;;26278:73:0;12135:405:1;26278:73:0;-1:-1:-1;;;;;;26369:16:0;;;;;:9;:16;;;;;;;26186:207::o;5273:103::-;4511:13;:11;:13::i;:::-;5338:30:::1;5365:1;5338:18;:30::i;:::-;5273:103::o:0;49228:944::-;49289:14;49327:9;49322:323;49346:2;49342:1;:6;49322:323;;;49435:1;49382:14;;;;;;;;;-1:-1:-1;;;;;49382:14:0;-1:-1:-1;;;;;49374:33:0;;49408:10;49419:9;49429:1;49419:12;;;;;;;;:::i;:::-;;;;;;;;;;;49374:58;;-1:-1:-1;;;;;;49374:58:0;;;;;;;-1:-1:-1;;;;;12737:32:1;;;49374:58:0;;;12719:51:1;12786:18;;;12779:34;12692:18;;49374:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;49370:264;;;49462:9;49461:10;:41;;;;;49476:12;:26;49489:9;49499:1;49489:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;49476:26;;;;;;;;;;;;;;;49475:27;49461:41;49457:162;;;49539:4;49527:16;;49595:4;49566:12;:26;49579:9;49589:1;49579:12;;;;;;;;:::i;:::-;;;;;;;;;49566:26;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;49457:162;49350:3;;;;:::i;:::-;;;;49322:323;;;;49665:9;49657:61;;;;-1:-1:-1;;;49657:61:0;;13355:2:1;49657:61:0;;;13337:21:1;13394:2;13374:18;;;13367:30;13433:34;13413:18;;;13406:62;-1:-1:-1;;;13484:18:1;;;13477:37;13531:19;;49657:61:0;13153:403:1;49657:61:0;49731:10;49744:13;40738:10;:17;;40650:113;49744:13;49776:15;;49731:26;;-1:-1:-1;49776:15:0;;49768:50;;;;-1:-1:-1;;;49768:50:0;;13763:2:1;49768:50:0;;;13745:21:1;13802:2;13782:18;;;13775:30;-1:-1:-1;;;13821:18:1;;;13814:52;13883:18;;49768:50:0;13561:346:1;49768:50:0;46587:2;49837:6;:2;49842:1;49837:6;:::i;:::-;:20;;49829:65;;;;-1:-1:-1;;;49829:65:0;;;;;;;:::i;:::-;49927:1;49913:11;:15;49905:57;;;;-1:-1:-1;;;49905:57:0;;14114:2:1;49905:57:0;;;14096:21:1;14153:2;14133:18;;;14126:30;14192:31;14172:18;;;14165:59;14241:18;;49905:57:0;13912:353:1;49905:57:0;46587:2;49981:11;:25;;49973:59;;;;-1:-1:-1;;;49973:59:0;;;;;;;:::i;:::-;50070:9;46638:10;50051:28;;50043:72;;;;-1:-1:-1;;;50043:72:0;;14472:2:1;50043:72:0;;;14454:21:1;14511:2;14491:18;;;14484:30;14550:33;14530:18;;;14523:61;14601:18;;50043:72:0;14270:355:1;50043:72:0;50128:34;50138:10;50150:11;50128:9;:34::i;26913:104::-;26969:13;27002:7;26995:14;;;;;:::i;50180:637::-;50243:12;;-1:-1:-1;;;50243:12:0;;;;50238:572;;50272:20;50280:11;50272:7;:20::i;:::-;50180:637;:::o;50238:572::-;50342:12;;-1:-1:-1;;;50342:12:0;;;;50334:59;;;;-1:-1:-1;;;50334:59:0;;14832:2:1;50334:59:0;;;14814:21:1;14871:2;14851:18;;;14844:30;14910:34;14890:18;;;14883:62;-1:-1:-1;;;14961:18:1;;;14954:32;15003:19;;50334:59:0;14630:398:1;50334:59:0;50408:10;50421:13;40738:10;:17;;40650:113;50421:13;50408:26;-1:-1:-1;46587:2:0;50457:6;50408:26;50462:1;50457:6;:::i;:::-;:20;;50449:65;;;;-1:-1:-1;;;50449:65:0;;;;;;;:::i;:::-;50551:1;50537:11;:15;50529:57;;;;-1:-1:-1;;;50529:57:0;;14114:2:1;50529:57:0;;;14096:21:1;14153:2;14133:18;;;14126:30;14192:31;14172:18;;;14165:59;14241:18;;50529:57:0;13912:353:1;50529:57:0;46587:2;50609:11;:25;;50601:59;;;;-1:-1:-1;;;50601:59:0;;;;;;;:::i;:::-;50702:9;46638:10;50683:28;;50675:72;;;;-1:-1:-1;;;50675:72:0;;14472:2:1;50675:72:0;;;14454:21:1;14511:2;14491:18;;;14484:30;14550:33;14530:18;;;14523:61;14601:18;;50675:72:0;14270:355:1;50675:72:0;50764:34;50774:10;50786:11;50764:9;:34::i;28500:155::-;28595:52;3256:10;28628:8;28638;28595:18;:52::i;46736:1248::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46736:1248:0;:::o;29620:323::-;29794:41;3256:10;29827:7;29794:18;:41::i;:::-;29786:100;;;;-1:-1:-1;;;29786:100:0;;;;;;;:::i;:::-;29897:38;29911:4;29917:2;29921:7;29930:4;29897:13;:38::i;:::-;29620:323;;;;:::o;48369:120::-;4511:13;:11;:13::i;:::-;48449:14:::1;:32:::0;;-1:-1:-1;;;;;48449:32:0;;::::1;;;-1:-1:-1::0;;;;;;48449:32:0;;::::1;::::0;;;::::1;::::0;;48369:120::o;27088:281::-;27161:13;27187:23;27202:7;27187:14;:23::i;:::-;27223:21;27247:10;:8;:10::i;:::-;27223:34;;27299:1;27281:7;27275:21;:25;:86;;;;;;;;;;;;;;;;;27327:7;27336:18;:7;:16;:18::i;:::-;27310:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27275:86;27268:93;27088:281;-1:-1:-1;;;27088:281:0:o;5531:201::-;4511:13;:11;:13::i;:::-;-1:-1:-1;;;;;5620:22:0;::::1;5612:73;;;::::0;-1:-1:-1;;;5612:73:0;;15736:2:1;5612:73:0::1;::::0;::::1;15718:21:1::0;15775:2;15755:18;;;15748:30;15814:34;15794:18;;;15787:62;-1:-1:-1;;;15865:18:1;;;15858:36;15911:19;;5612:73:0::1;15534:402:1::0;5612:73:0::1;5696:28;5715:8;5696:18;:28::i;48238:123::-:0;4511:13;:11;:13::i;:::-;48319:15:::1;:34:::0;;-1:-1:-1;;48319:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48238:123::o;40010:224::-;40112:4;-1:-1:-1;;;;;;40136:50:0;;-1:-1:-1;;;40136:50:0;;:90;;;40190:36;40214:11;40190:23;:36::i;36232:135::-;31515:4;31539:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31539:16:0;36306:53;;;;-1:-1:-1;;;36306:53:0;;11984:2:1;36306:53:0;;;11966:21:1;12023:2;12003:18;;;11996:30;-1:-1:-1;;;12042:18:1;;;12035:54;12106:18;;36306:53:0;11782:348:1;35511:174:0;35586:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;35586:29:0;-1:-1:-1;;;;;35586:29:0;;;;;;;;:24;;35640:23;35586:24;35640:14;:23::i;:::-;-1:-1:-1;;;;;35631:46:0;;;;;;;;;;;35511:174;;:::o;31744:264::-;31837:4;31854:13;31870:23;31885:7;31870:14;:23::i;:::-;31854:39;;31923:5;-1:-1:-1;;;;;31912:16:0;:7;-1:-1:-1;;;;;31912:16:0;;:52;;;-1:-1:-1;;;;;;28847:25:0;;;28823:4;28847:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;31932:32;31912:87;;;;31992:7;-1:-1:-1;;;;;31968:31:0;:20;31980:7;31968:11;:20::i;:::-;-1:-1:-1;;;;;31968:31:0;;31912:87;31904:96;31744:264;-1:-1:-1;;;;31744:264:0:o;34767:625::-;34926:4;-1:-1:-1;;;;;34899:31:0;:23;34914:7;34899:14;:23::i;:::-;-1:-1:-1;;;;;34899:31:0;;34891:81;;;;-1:-1:-1;;;34891:81:0;;16143:2:1;34891:81:0;;;16125:21:1;16182:2;16162:18;;;16155:30;16221:34;16201:18;;;16194:62;-1:-1:-1;;;16272:18:1;;;16265:35;16317:19;;34891:81:0;15941:401:1;34891:81:0;-1:-1:-1;;;;;34991:16:0;;34983:65;;;;-1:-1:-1;;;34983:65:0;;16549:2:1;34983:65:0;;;16531:21:1;16588:2;16568:18;;;16561:30;16627:34;16607:18;;;16600:62;-1:-1:-1;;;16678:18:1;;;16671:34;16722:19;;34983:65:0;16347:400:1;34983:65:0;35061:39;35082:4;35088:2;35092:7;35061:20;:39::i;:::-;35165:29;35182:1;35186:7;35165:8;:29::i;:::-;-1:-1:-1;;;;;35207:15:0;;;;;;:9;:15;;;;;:20;;35226:1;;35207:15;:20;;35226:1;;35207:20;:::i;:::-;;;;-1:-1:-1;;;;;;;35238:13:0;;;;;;:9;:13;;;;;:18;;35255:1;;35238:13;:18;;35255:1;;35238:18;:::i;:::-;;;;-1:-1:-1;;35267:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;35267:21:0;-1:-1:-1;;;;;35267:21:0;;;;;;;;;35306:27;;35267:16;;35306:27;;;;;;;27844:347;27774:417;;:::o;4790:132::-;4698:6;;-1:-1:-1;;;;;4698:6:0;3256:10;4854:23;4846:68;;;;-1:-1:-1;;;4846:68:0;;17087:2:1;4846:68:0;;;17069:21:1;;;17106:18;;;17099:30;17165:34;17145:18;;;17138:62;17217:18;;4846:68:0;16885:356:1;32350:110:0;32426:26;32436:2;32440:7;32426:26;;;;;;;;;;;;:9;:26::i;5892:191::-;5985:6;;;-1:-1:-1;;;;;6002:17:0;;;-1:-1:-1;;;;;;6002:17:0;;;;;;;6035:40;;5985:6;;;6002:17;5985:6;;6035:40;;5966:16;;6035:40;5955:128;5892:191;:::o;35828:315::-;35983:8;-1:-1:-1;;;;;35974:17:0;:5;-1:-1:-1;;;;;35974:17:0;;35966:55;;;;-1:-1:-1;;;35966:55:0;;17448:2:1;35966:55:0;;;17430:21:1;17487:2;17467:18;;;17460:30;17526:27;17506:18;;;17499:55;17571:18;;35966:55:0;17246:349:1;35966:55:0;-1:-1:-1;;;;;36032:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;36032:46:0;;;;;;;;;;36094:41;;540::1;;;36094::0;;513:18:1;36094:41:0;;;;;;;35828:315;;;:::o;30824:313::-;30980:28;30990:4;30996:2;31000:7;30980:9;:28::i;:::-;31027:47;31050:4;31056:2;31060:7;31069:4;31027:22;:47::i;:::-;31019:110;;;;-1:-1:-1;;;31019:110:0;;;;;;;:::i;48992:117::-;49052:13;49085:16;49078:23;;;;;:::i;430:723::-;486:13;707:5;716:1;707:10;703:53;;-1:-1:-1;;734:10:0;;;;;;;;;;;;-1:-1:-1;;;734:10:0;;;;;430:723::o;703:53::-;781:5;766:12;822:78;829:9;;822:78;;855:8;;;;:::i;:::-;;-1:-1:-1;878:10:0;;-1:-1:-1;886:2:0;878:10;;:::i;:::-;;;822:78;;;910:19;942:6;932:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;932:17:0;;910:39;;960:154;967:10;;960:154;;994:11;1004:1;994:11;;:::i;:::-;;-1:-1:-1;1063:10:0;1071:2;1063:5;:10;:::i;:::-;1050:24;;:2;:24;:::i;:::-;1037:39;;1020:6;1027;1020:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;1020:56:0;;;;;;;;-1:-1:-1;1091:11:0;1100:2;1091:11;;:::i;:::-;;;960:154;;25817:305;25919:4;-1:-1:-1;;;;;;25956:40:0;;-1:-1:-1;;;25956:40:0;;:105;;-1:-1:-1;;;;;;;26013:48:0;;-1:-1:-1;;;26013:48:0;25956:105;:158;;;-1:-1:-1;;;;;;;;;;17588:40:0;;;26078:36;17479:157;48497:181;48625:45;48652:4;48658:2;48662:7;48625:26;:45::i;32687:319::-;32816:18;32822:2;32826:7;32816:5;:18::i;:::-;32867:53;32898:1;32902:2;32906:7;32915:4;32867:22;:53::i;:::-;32845:153;;;;-1:-1:-1;;;32845:153:0;;;;;;;:::i;36931:853::-;37085:4;-1:-1:-1;;;;;37106:13:0;;7618:19;:23;37102:675;;37142:71;;-1:-1:-1;;;37142:71:0;;-1:-1:-1;;;;;37142:36:0;;;;;:71;;3256:10;;37193:4;;37199:7;;37208:4;;37142:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37142:71:0;;;;;;;;-1:-1:-1;;37142:71:0;;;;;;;;;;;;:::i;:::-;;;37138:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37383:6;:13;37400:1;37383:18;37379:328;;37426:60;;-1:-1:-1;;;37426:60:0;;;;;;;:::i;37379:328::-;37657:6;37651:13;37642:6;37638:2;37634:15;37627:38;37138:584;-1:-1:-1;;;;;;37264:51:0;-1:-1:-1;;;37264:51:0;;-1:-1:-1;37257:58:0;;37102:675;-1:-1:-1;37761:4:0;36931:853;;;;;;:::o;41686:589::-;-1:-1:-1;;;;;41892:18:0;;41888:187;;41927:40;41959:7;43102:10;:17;;43075:24;;;;:15;:24;;;;;:44;;;43130:24;;;;;;;;;;;;42998:164;41927:40;41888:187;;;41997:2;-1:-1:-1;;;;;41989:10:0;:4;-1:-1:-1;;;;;41989:10:0;;41985:90;;42016:47;42049:4;42055:7;42016:32;:47::i;:::-;-1:-1:-1;;;;;42089:16:0;;42085:183;;42122:45;42159:7;42122:36;:45::i;42085:183::-;42195:4;-1:-1:-1;;;;;42189:10:0;:2;-1:-1:-1;;;;;42189:10:0;;42185:83;;42216:40;42244:2;42248:7;42216:27;:40::i;33342:439::-;-1:-1:-1;;;;;33422:16:0;;33414:61;;;;-1:-1:-1;;;33414:61:0;;19343:2:1;33414:61:0;;;19325:21:1;;;19362:18;;;19355:30;19421:34;19401:18;;;19394:62;19473:18;;33414:61:0;19141:356:1;33414:61:0;31515:4;31539:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31539:16:0;:30;33486:58;;;;-1:-1:-1;;;33486:58:0;;19704:2:1;33486:58:0;;;19686:21:1;19743:2;19723:18;;;19716:30;19782;19762:18;;;19755:58;19830:18;;33486:58:0;19502:352:1;33486:58:0;33557:45;33586:1;33590:2;33594:7;33557:20;:45::i;:::-;-1:-1:-1;;;;;33615:13:0;;;;;;:9;:13;;;;;:18;;33632:1;;33615:13;:18;;33632:1;;33615:18;:::i;:::-;;;;-1:-1:-1;;33644:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33644:21:0;-1:-1:-1;;;;;33644:21:0;;;;;;;;33683:33;;33644:16;;;33683:33;;33644:16;;33683:33;51314:37:::1;51256:103;51219:140::o:0;43789:988::-;44055:22;44105:1;44080:22;44097:4;44080:16;:22::i;:::-;:26;;;;:::i;:::-;44117:18;44138:26;;;:17;:26;;;;;;44055:51;;-1:-1:-1;44271:28:0;;;44267:328;;-1:-1:-1;;;;;44338:18:0;;44316:19;44338:18;;;:12;:18;;;;;;;;:34;;;;;;;;;44389:30;;;;;;:44;;;44506:30;;:17;:30;;;;;:43;;;44267:328;-1:-1:-1;44691:26:0;;;;:17;:26;;;;;;;;44684:33;;;-1:-1:-1;;;;;44735:18:0;;;;;:12;:18;;;;;:34;;;;;;;44728:41;43789:988::o;45072:1079::-;45350:10;:17;45325:22;;45350:21;;45370:1;;45350:21;:::i;:::-;45382:18;45403:24;;;:15;:24;;;;;;45776:10;:26;;45325:46;;-1:-1:-1;45403:24:0;;45325:46;;45776:26;;;;;;:::i;:::-;;;;;;;;;45754:48;;45840:11;45815:10;45826;45815:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;45920:28;;;:15;:28;;;;;;;:41;;;46092:24;;;;;46085:31;46127:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;45143:1008;;;45072:1079;:::o;42576:221::-;42661:14;42678:20;42695:2;42678:16;:20::i;:::-;-1:-1:-1;;;;;42709:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;42754:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;42576:221:0:o;14:131:1:-;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:1;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:1;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:1:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:1;;1348:180;-1:-1:-1;1348:180:1:o;1741:173::-;1809:20;;-1:-1:-1;;;;;1858:31:1;;1848:42;;1838:70;;1904:1;1901;1894:12;1838:70;1741:173;;;:::o;1919:254::-;1987:6;1995;2048:2;2036:9;2027:7;2023:23;2019:32;2016:52;;;2064:1;2061;2054:12;2016:52;2087:29;2106:9;2087:29;:::i;:::-;2077:39;2163:2;2148:18;;;;2135:32;;-1:-1:-1;;;1919:254:1:o;2360:328::-;2437:6;2445;2453;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;2545:29;2564:9;2545:29;:::i;:::-;2535:39;;2593:38;2627:2;2616:9;2612:18;2593:38;:::i;:::-;2583:48;;2678:2;2667:9;2663:18;2650:32;2640:42;;2360:328;;;;;:::o;2693:160::-;2758:20;;2814:13;;2807:21;2797:32;;2787:60;;2843:1;2840;2833:12;2858:180;2914:6;2967:2;2955:9;2946:7;2942:23;2938:32;2935:52;;;2983:1;2980;2973:12;2935:52;3006:26;3022:9;3006:26;:::i;3043:127::-;3104:10;3099:3;3095:20;3092:1;3085:31;3135:4;3132:1;3125:15;3159:4;3156:1;3149:15;3175:632;3240:5;3270:18;3311:2;3303:6;3300:14;3297:40;;;3317:18;;:::i;:::-;3392:2;3386:9;3360:2;3446:15;;-1:-1:-1;;3442:24:1;;;3468:2;3438:33;3434:42;3422:55;;;3492:18;;;3512:22;;;3489:46;3486:72;;;3538:18;;:::i;:::-;3578:10;3574:2;3567:22;3607:6;3598:15;;3637:6;3629;3622:22;3677:3;3668:6;3663:3;3659:16;3656:25;3653:45;;;3694:1;3691;3684:12;3653:45;3744:6;3739:3;3732:4;3724:6;3720:17;3707:44;3799:1;3792:4;3783:6;3775;3771:19;3767:30;3760:41;;;;3175:632;;;;;:::o;3812:451::-;3881:6;3934:2;3922:9;3913:7;3909:23;3905:32;3902:52;;;3950:1;3947;3940:12;3902:52;3990:9;3977:23;4023:18;4015:6;4012:30;4009:50;;;4055:1;4052;4045:12;4009:50;4078:22;;4131:4;4123:13;;4119:27;-1:-1:-1;4109:55:1;;4160:1;4157;4150:12;4109:55;4183:74;4249:7;4244:2;4231:16;4226:2;4222;4218:11;4183:74;:::i;4268:186::-;4327:6;4380:2;4368:9;4359:7;4355:23;4351:32;4348:52;;;4396:1;4393;4386:12;4348:52;4419:29;4438:9;4419:29;:::i;4459:254::-;4524:6;4532;4585:2;4573:9;4564:7;4560:23;4556:32;4553:52;;;4601:1;4598;4591:12;4553:52;4624:29;4643:9;4624:29;:::i;:::-;4614:39;;4672:35;4703:2;4692:9;4688:18;4672:35;:::i;:::-;4662:45;;4459:254;;;;;:::o;4718:667::-;4813:6;4821;4829;4837;4890:3;4878:9;4869:7;4865:23;4861:33;4858:53;;;4907:1;4904;4897:12;4858:53;4930:29;4949:9;4930:29;:::i;:::-;4920:39;;4978:38;5012:2;5001:9;4997:18;4978:38;:::i;:::-;4968:48;;5063:2;5052:9;5048:18;5035:32;5025:42;;5118:2;5107:9;5103:18;5090:32;5145:18;5137:6;5134:30;5131:50;;;5177:1;5174;5167:12;5131:50;5200:22;;5253:4;5245:13;;5241:27;-1:-1:-1;5231:55:1;;5282:1;5279;5272:12;5231:55;5305:74;5371:7;5366:2;5353:16;5348:2;5344;5340:11;5305:74;:::i;:::-;5295:84;;;4718:667;;;;;;;:::o;5390:260::-;5458:6;5466;5519:2;5507:9;5498:7;5494:23;5490:32;5487:52;;;5535:1;5532;5525:12;5487:52;5558:29;5577:9;5558:29;:::i;:::-;5548:39;;5606:38;5640:2;5629:9;5625:18;5606:38;:::i;5655:380::-;5734:1;5730:12;;;;5777;;;5798:61;;5852:4;5844:6;5840:17;5830:27;;5798:61;5905:2;5897:6;5894:14;5874:18;5871:38;5868:161;;5951:10;5946:3;5942:20;5939:1;5932:31;5986:4;5983:1;5976:15;6014:4;6011:1;6004:15;5868:161;;5655:380;;;:::o;6873:410::-;7075:2;7057:21;;;7114:2;7094:18;;;7087:30;7153:34;7148:2;7133:18;;7126:62;-1:-1:-1;;;7219:2:1;7204:18;;7197:44;7273:3;7258:19;;6873:410::o;8113:127::-;8174:10;8169:3;8165:20;8162:1;8155:31;8205:4;8202:1;8195:15;8229:4;8226:1;8219:15;8371:545;8473:2;8468:3;8465:11;8462:448;;;8509:1;8534:5;8530:2;8523:17;8579:4;8575:2;8565:19;8649:2;8637:10;8633:19;8630:1;8626:27;8620:4;8616:38;8685:4;8673:10;8670:20;8667:47;;;-1:-1:-1;8708:4:1;8667:47;8763:2;8758:3;8754:12;8751:1;8747:20;8741:4;8737:31;8727:41;;8818:82;8836:2;8829:5;8826:13;8818:82;;;8881:17;;;8862:1;8851:13;8818:82;;;8822:3;;;8371:545;;;:::o;9092:1352::-;9218:3;9212:10;9245:18;9237:6;9234:30;9231:56;;;9267:18;;:::i;:::-;9296:97;9386:6;9346:38;9378:4;9372:11;9346:38;:::i;:::-;9340:4;9296:97;:::i;:::-;9448:4;;9512:2;9501:14;;9529:1;9524:663;;;;10231:1;10248:6;10245:89;;;-1:-1:-1;10300:19:1;;;10294:26;10245:89;-1:-1:-1;;9049:1:1;9045:11;;;9041:24;9037:29;9027:40;9073:1;9069:11;;;9024:57;10347:81;;9494:944;;9524:663;8318:1;8311:14;;;8355:4;8342:18;;-1:-1:-1;;9560:20:1;;;9678:236;9692:7;9689:1;9686:14;9678:236;;;9781:19;;;9775:26;9760:42;;9873:27;;;;9841:1;9829:14;;;;9708:19;;9678:236;;;9682:3;9942:6;9933:7;9930:19;9927:201;;;10003:19;;;9997:26;-1:-1:-1;;10086:1:1;10082:14;;;10098:3;10078:24;10074:37;10070:42;10055:58;10040:74;;9927:201;-1:-1:-1;;;;;10174:1:1;10158:14;;;10154:22;10141:36;;-1:-1:-1;9092:1352:1:o;10449:127::-;10510:10;10505:3;10501:20;10498:1;10491:31;10541:4;10538:1;10531:15;10565:4;10562:1;10555:15;10581:125;10646:9;;;10667:10;;;10664:36;;;10680:18;;:::i;10711:356::-;10913:2;10895:21;;;10932:18;;;10925:30;10991:34;10986:2;10971:18;;10964:62;11058:2;11043:18;;10711:356::o;11432:345::-;11634:2;11616:21;;;11673:2;11653:18;;;11646:30;-1:-1:-1;;;11707:2:1;11692:18;;11685:51;11768:2;11753:18;;11432:345::o;12824:184::-;12894:6;12947:2;12935:9;12926:7;12922:23;12918:32;12915:52;;;12963:1;12960;12953:12;12915:52;-1:-1:-1;12986:16:1;;12824:184;-1:-1:-1;12824:184:1:o;13013:135::-;13052:3;13073:17;;;13070:43;;13093:18;;:::i;:::-;-1:-1:-1;13140:1:1;13129:13;;13013:135::o;15033:496::-;15212:3;15250:6;15244:13;15266:66;15325:6;15320:3;15313:4;15305:6;15301:17;15266:66;:::i;:::-;15395:13;;15354:16;;;;15417:70;15395:13;15354:16;15464:4;15452:17;;15417:70;:::i;:::-;15503:20;;15033:496;-1:-1:-1;;;;15033:496:1:o;16752:128::-;16819:9;;;16840:11;;;16837:37;;;16854:18;;:::i;17600:414::-;17802:2;17784:21;;;17841:2;17821:18;;;17814:30;17880:34;17875:2;17860:18;;17853:62;-1:-1:-1;;;17946:2:1;17931:18;;17924:48;18004:3;17989:19;;17600:414::o;18019:127::-;18080:10;18075:3;18071:20;18068:1;18061:31;18111:4;18108:1;18101:15;18135:4;18132:1;18125:15;18151:120;18191:1;18217;18207:35;;18222:18;;:::i;:::-;-1:-1:-1;18256:9:1;;18151:120::o;18276:112::-;18308:1;18334;18324:35;;18339:18;;:::i;:::-;-1:-1:-1;18373:9:1;;18276:112::o;18393:489::-;-1:-1:-1;;;;;18662:15:1;;;18644:34;;18714:15;;18709:2;18694:18;;18687:43;18761:2;18746:18;;18739:34;;;18809:3;18804:2;18789:18;;18782:31;;;18587:4;;18830:46;;18856:19;;18848:6;18830:46;:::i;:::-;18822:54;18393:489;-1:-1:-1;;;;;;18393:489:1:o;18887:249::-;18956:6;19009:2;18997:9;18988:7;18984:23;18980:32;18977:52;;;19025:1;19022;19015:12;18977:52;19057:9;19051:16;19076:30;19100:5;19076:30;:::i;19859:127::-;19920:10;19915:3;19911:20;19908:1;19901:31;19951:4;19948:1;19941:15;19975:4;19972:1;19965:15
Swarm Source
ipfs://3230919fc9209c7e8bc75c0a15f0b1f2395f69810f5eff17350238ac0a6da1aa
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.