ERC-721
Overview
Max Total Supply
10 TB
Holders
9
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 TBLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DikDiks
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-28 */ // File: @openzeppelin/contracts/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/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`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/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 tokenId); /** * @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/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/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @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); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/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/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 `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/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/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: balance query for the zero address"); 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: owner query for nonexistent token"); 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) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); 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 overriden 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 owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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: transfer caller is not 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: transfer caller is not 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) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, 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); } /** * @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); } /** * @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 of token that is not own"); 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); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @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 { 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 {} } // File: @openzeppelin/contracts/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: @openzeppelin/contracts/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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity >=0.7.0 <0.9.0; contract DikDiks is ERC721Enumerable, Ownable { using Strings for uint256; string baseURI; string public baseExtension = ".json"; uint256 public cost = 0.1 ether; uint256 public maxSupply = 220; uint256 public maxMintAmount = 10; bool public paused = false; bool public revealed = true; string public notRevealedUri; bool public locked; event Play2Earn(uint256 nftID, uint256 value, uint256 actionID, string payload); constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); if(msg.sender != owner()) { require(msg.value >= cost * _mintAmount); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } // admin can mint them for giveaways, airdrops etc function adminMint(uint256 qty, address to) public onlyOwner { require(qty > 0, "minimum 1 token"); require(totalSupply() + qty <= maxSupply, "out of stock"); for (uint256 i = 0; i < qty; i++) { _safeMint(to, totalSupply() + 1); } } //Play2Earn Support function customThing( uint256 nftID, uint256 id, string memory what ) external payable { require(ownerOf(nftID) == msg.sender, "NFT ownership required"); emit Play2Earn(nftID, msg.value, id, what); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function reveal() public onlyOwner() { revealed = true; } function setCost(uint256 _newCost) public onlyOwner() { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner() { maxMintAmount = _newmaxMintAmount; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { require(!locked, "locked functions"); notRevealedUri = _notRevealedURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { require(!locked, "locked functions"); baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { require(!locked, "locked functions"); baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success); } function decreaseMaxSupply(uint256 newMaxSupply) external onlyOwner { require(newMaxSupply < maxSupply, "you can only decrease it"); maxSupply = newMaxSupply; } // and for the eternity.... function lockMetadata() external onlyOwner { locked = true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"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":false,"internalType":"uint256","name":"nftID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"actionID","type":"uint256"},{"indexed":false,"internalType":"string","name":"payload","type":"string"}],"name":"Play2Earn","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":[{"internalType":"uint256","name":"qty","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","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":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftID","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"what","type":"string"}],"name":"customThing","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"decreaseMaxSupply","outputs":[],"stateMutability":"nonpayable","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":"lockMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","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":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60c06040526005608081905264173539b7b760d91b60a09081526200002891600c919062000293565b5067016345785d8a0000600d5560dc600e55600a600f556010805461ffff19166101001790553480156200005b57600080fd5b5060405162002d5638038062002d568339810160408190526200007e91620003f0565b8351849084906200009790600090602085019062000293565b508051620000ad90600190602084019062000293565b505050620000ca620000c4620000ea60201b60201c565b620000ee565b620000d58262000140565b620000e081620001f0565b50505050620004fc565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b031633146200018f5760405162461bcd60e51b8152602060048201819052602482015260008051602062002d3683398151915260448201526064015b60405180910390fd5b60125460ff1615620001d75760405162461bcd60e51b815260206004820152601060248201526f6c6f636b65642066756e6374696f6e7360801b604482015260640162000186565b8051620001ec90600b90602084019062000293565b5050565b600a546001600160a01b031633146200023b5760405162461bcd60e51b8152602060048201819052602482015260008051602062002d36833981519152604482015260640162000186565b60125460ff1615620002835760405162461bcd60e51b815260206004820152601060248201526f6c6f636b65642066756e6374696f6e7360801b604482015260640162000186565b8051620001ec9060119060208401905b828054620002a190620004a9565b90600052602060002090601f016020900481019282620002c5576000855562000310565b82601f10620002e057805160ff191683800117855562000310565b8280016001018555821562000310579182015b8281111562000310578251825591602001919060010190620002f3565b506200031e92915062000322565b5090565b5b808211156200031e576000815560010162000323565b600082601f8301126200034b57600080fd5b81516001600160401b0380821115620003685762000368620004e6565b604051601f8301601f19908116603f01168101908282118183101715620003935762000393620004e6565b81604052838152602092508683858801011115620003b057600080fd5b600091505b83821015620003d45785820183015181830184015290820190620003b5565b83821115620003e65760008385830101525b9695505050505050565b600080600080608085870312156200040757600080fd5b84516001600160401b03808211156200041f57600080fd5b6200042d8883890162000339565b955060208701519150808211156200044457600080fd5b620004528883890162000339565b945060408701519150808211156200046957600080fd5b620004778883890162000339565b935060608701519150808211156200048e57600080fd5b506200049d8782880162000339565b91505092959194509250565b600181811c90821680620004be57607f821691505b60208210811415620004e057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61282a806200050c6000396000f3fe6080604052600436106102465760003560e01c80635c975abb11610139578063a22cb465116100b6578063cf3090121161007a578063cf3090121461065b578063d5abeb0114610675578063da3ef23f1461068b578063e985e9c5146106ab578063f2c4ce1e146106f4578063f2fde38b1461071457600080fd5b8063a22cb465146105d1578063a475b5dd146105f1578063b88d4fde14610606578063c668286214610626578063c87b56dd1461063b57600080fd5b80638da5cb5b116100fd5780638da5cb5b1461055657806391ff4a731461057457806395d89b4114610594578063989bdbb6146105a9578063a0712d68146105be57600080fd5b80635c975abb146104c75780636352211e146104e157806370a0823114610501578063715018a6146105215780637f00c7a61461053657600080fd5b806323b872dd116101c7578063438b63001161018b578063438b63001461041b57806344a0d68a146104485780634f6ccce714610468578063518302271461048857806355f804b3146104a757600080fd5b806323b872dd146103a05780632ec8e10f146103c05780632f745c59146103d35780633ccfd60b146103f357806342842e0e146103fb57600080fd5b8063095ea7b31161020e578063095ea7b3146103115780630dc28efe1461033157806313faede61461035157806318160ddd14610375578063239c70ae1461038a57600080fd5b806301ffc9a71461024b57806302329a291461028057806306fdde03146102a2578063081812fc146102c4578063081c8c44146102fc575b600080fd5b34801561025757600080fd5b5061026b6102663660046122d2565b610734565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b3660046122b7565b61075f565b005b3480156102ae57600080fd5b506102b76107a5565b604051610277919061253e565b3480156102d057600080fd5b506102e46102df366004612341565b610837565b6040516001600160a01b039091168152602001610277565b34801561030857600080fd5b506102b76108cc565b34801561031d57600080fd5b506102a061032c36600461228d565b61095a565b34801561033d57600080fd5b506102a061034c36600461235a565b610a70565b34801561035d57600080fd5b50610367600d5481565b604051908152602001610277565b34801561038157600080fd5b50600854610367565b34801561039657600080fd5b50610367600f5481565b3480156103ac57600080fd5b506102a06103bb3660046121ab565b610b6a565b6102a06103ce36600461237d565b610b9b565b3480156103df57600080fd5b506103676103ee36600461228d565b610c36565b6102a0610ccc565b34801561040757600080fd5b506102a06104163660046121ab565b610d4e565b34801561042757600080fd5b5061043b61043636600461215d565b610d69565b60405161027791906124fa565b34801561045457600080fd5b506102a0610463366004612341565b610e0b565b34801561047457600080fd5b50610367610483366004612341565b610e3a565b34801561049457600080fd5b5060105461026b90610100900460ff1681565b3480156104b357600080fd5b506102a06104c236600461230c565b610ecd565b3480156104d357600080fd5b5060105461026b9060ff1681565b3480156104ed57600080fd5b506102e46104fc366004612341565b610f31565b34801561050d57600080fd5b5061036761051c36600461215d565b610fa8565b34801561052d57600080fd5b506102a061102f565b34801561054257600080fd5b506102a0610551366004612341565b611065565b34801561056257600080fd5b50600a546001600160a01b03166102e4565b34801561058057600080fd5b506102a061058f366004612341565b611094565b3480156105a057600080fd5b506102b7611114565b3480156105b557600080fd5b506102a0611123565b6102a06105cc366004612341565b61115c565b3480156105dd57600080fd5b506102a06105ec366004612263565b611204565b3480156105fd57600080fd5b506102a06112c9565b34801561061257600080fd5b506102a06106213660046121e7565b611304565b34801561063257600080fd5b506102b761133c565b34801561064757600080fd5b506102b7610656366004612341565b611349565b34801561066757600080fd5b5060125461026b9060ff1681565b34801561068157600080fd5b50610367600e5481565b34801561069757600080fd5b506102a06106a636600461230c565b6114c8565b3480156106b757600080fd5b5061026b6106c6366004612178565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561070057600080fd5b506102a061070f36600461230c565b611528565b34801561072057600080fd5b506102a061072f36600461215d565b611588565b60006001600160e01b0319821663780e9d6360e01b1480610759575061075982611620565b92915050565b600a546001600160a01b031633146107925760405162461bcd60e51b8152600401610789906125cd565b60405180910390fd5b6010805460ff1916911515919091179055565b6060600080546107b490612706565b80601f01602080910402602001604051908101604052809291908181526020018280546107e090612706565b801561082d5780601f106108025761010080835404028352916020019161082d565b820191906000526020600020905b81548152906001019060200180831161081057829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108b05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610789565b506000908152600460205260409020546001600160a01b031690565b601180546108d990612706565b80601f016020809104026020016040519081016040528092919081815260200182805461090590612706565b80156109525780601f1061092757610100808354040283529160200191610952565b820191906000526020600020905b81548152906001019060200180831161093557829003601f168201915b505050505081565b600061096582610f31565b9050806001600160a01b0316836001600160a01b031614156109d35760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610789565b336001600160a01b03821614806109ef57506109ef81336106c6565b610a615760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610789565b610a6b8383611670565b505050565b600a546001600160a01b03163314610a9a5760405162461bcd60e51b8152600401610789906125cd565b60008211610adc5760405162461bcd60e51b815260206004820152600f60248201526e36b4b734b6bab69018903a37b5b2b760891b6044820152606401610789565b600e5482610ae960085490565b610af39190612678565b1115610b305760405162461bcd60e51b815260206004820152600c60248201526b6f7574206f662073746f636b60a01b6044820152606401610789565b60005b82811015610a6b57610b5882610b4860085490565b610b53906001612678565b6116de565b80610b6281612741565b915050610b33565b610b7433826116f8565b610b905760405162461bcd60e51b815260040161078990612602565b610a6b8383836117ef565b33610ba584610f31565b6001600160a01b031614610bf45760405162461bcd60e51b8152602060048201526016602482015275139195081bdddb995c9cda1a5c081c995c5d5a5c995960521b6044820152606401610789565b7f6404fb3ba7d046d89b101ede9f805170a147ffc560a0af7c51515ac0a25c00ed83348484604051610c299493929190612653565b60405180910390a1505050565b6000610c4183610fa8565b8210610ca35760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610789565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610cf65760405162461bcd60e51b8152600401610789906125cd565b604051600090339047908381818185875af1925050503d8060008114610d38576040519150601f19603f3d011682016040523d82523d6000602084013e610d3d565b606091505b5050905080610d4b57600080fd5b50565b610a6b83838360405180602001604052806000815250611304565b60606000610d7683610fa8565b905060008167ffffffffffffffff811115610d9357610d936127c8565b604051908082528060200260200182016040528015610dbc578160200160208202803683370190505b50905060005b82811015610e0357610dd48582610c36565b828281518110610de657610de66127b2565b602090810291909101015280610dfb81612741565b915050610dc2565b509392505050565b600a546001600160a01b03163314610e355760405162461bcd60e51b8152600401610789906125cd565b600d55565b6000610e4560085490565b8210610ea85760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610789565b60088281548110610ebb57610ebb6127b2565b90600052602060002001549050919050565b600a546001600160a01b03163314610ef75760405162461bcd60e51b8152600401610789906125cd565b60125460ff1615610f1a5760405162461bcd60e51b8152600401610789906125a3565b8051610f2d90600b906020840190612002565b5050565b6000818152600260205260408120546001600160a01b0316806107595760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610789565b60006001600160a01b0382166110135760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610789565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146110595760405162461bcd60e51b8152600401610789906125cd565b611063600061199a565b565b600a546001600160a01b0316331461108f5760405162461bcd60e51b8152600401610789906125cd565b600f55565b600a546001600160a01b031633146110be5760405162461bcd60e51b8152600401610789906125cd565b600e54811061110f5760405162461bcd60e51b815260206004820152601860248201527f796f752063616e206f6e6c7920646563726561736520697400000000000000006044820152606401610789565b600e55565b6060600180546107b490612706565b600a546001600160a01b0316331461114d5760405162461bcd60e51b8152600401610789906125cd565b6012805460ff19166001179055565b600061116760085490565b60105490915060ff161561117a57600080fd5b6000821161118757600080fd5b600f5482111561119657600080fd5b600e546111a38383612678565b11156111ae57600080fd5b600a546001600160a01b031633146111da5781600d546111ce91906126a4565b3410156111da57600080fd5b60015b828111610a6b576111f233610b538385612678565b806111fc81612741565b9150506111dd565b6001600160a01b03821633141561125d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610789565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146112f35760405162461bcd60e51b8152600401610789906125cd565b6010805461ff001916610100179055565b61130e33836116f8565b61132a5760405162461bcd60e51b815260040161078990612602565b611336848484846119ec565b50505050565b600c80546108d990612706565b6000818152600260205260409020546060906001600160a01b03166113c85760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610789565b601054610100900460ff1661146957601180546113e490612706565b80601f016020809104026020016040519081016040528092919081815260200182805461141090612706565b801561145d5780601f106114325761010080835404028352916020019161145d565b820191906000526020600020905b81548152906001019060200180831161144057829003601f168201915b50505050509050919050565b6000611473611a1f565b9050600081511161149357604051806020016040528060008152506114c1565b8061149d84611a2e565b600c6040516020016114b1939291906123f9565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146114f25760405162461bcd60e51b8152600401610789906125cd565b60125460ff16156115155760405162461bcd60e51b8152600401610789906125a3565b8051610f2d90600c906020840190612002565b600a546001600160a01b031633146115525760405162461bcd60e51b8152600401610789906125cd565b60125460ff16156115755760405162461bcd60e51b8152600401610789906125a3565b8051610f2d906011906020840190612002565b600a546001600160a01b031633146115b25760405162461bcd60e51b8152600401610789906125cd565b6001600160a01b0381166116175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610789565b610d4b8161199a565b60006001600160e01b031982166380ac58cd60e01b148061165157506001600160e01b03198216635b5e139f60e01b145b8061075957506301ffc9a760e01b6001600160e01b0319831614610759565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906116a582610f31565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610f2d828260405180602001604052806000815250611b2c565b6000818152600260205260408120546001600160a01b03166117715760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610789565b600061177c83610f31565b9050806001600160a01b0316846001600160a01b031614806117b75750836001600160a01b03166117ac84610837565b6001600160a01b0316145b806117e757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661180282610f31565b6001600160a01b03161461186a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610789565b6001600160a01b0382166118cc5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610789565b6118d7838383611b5f565b6118e2600082611670565b6001600160a01b038316600090815260036020526040812080546001929061190b9084906126c3565b90915550506001600160a01b0382166000908152600360205260408120805460019290611939908490612678565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6119f78484846117ef565b611a0384848484611c17565b6113365760405162461bcd60e51b815260040161078990612551565b6060600b80546107b490612706565b606081611a525750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611a7c5780611a6681612741565b9150611a759050600a83612690565b9150611a56565b60008167ffffffffffffffff811115611a9757611a976127c8565b6040519080825280601f01601f191660200182016040528015611ac1576020820181803683370190505b5090505b84156117e757611ad66001836126c3565b9150611ae3600a8661275c565b611aee906030612678565b60f81b818381518110611b0357611b036127b2565b60200101906001600160f81b031916908160001a905350611b25600a86612690565b9450611ac5565b611b368383611d24565b611b436000848484611c17565b610a6b5760405162461bcd60e51b815260040161078990612551565b6001600160a01b038316611bba57611bb581600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611bdd565b816001600160a01b0316836001600160a01b031614611bdd57611bdd8382611e72565b6001600160a01b038216611bf457610a6b81611f0f565b826001600160a01b0316826001600160a01b031614610a6b57610a6b8282611fbe565b60006001600160a01b0384163b15611d1957604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611c5b9033908990889088906004016124bd565b602060405180830381600087803b158015611c7557600080fd5b505af1925050508015611ca5575060408051601f3d908101601f19168201909252611ca2918101906122ef565b60015b611cff573d808015611cd3576040519150601f19603f3d011682016040523d82523d6000602084013e611cd8565b606091505b508051611cf75760405162461bcd60e51b815260040161078990612551565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117e7565b506001949350505050565b6001600160a01b038216611d7a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610789565b6000818152600260205260409020546001600160a01b031615611ddf5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610789565b611deb60008383611b5f565b6001600160a01b0382166000908152600360205260408120805460019290611e14908490612678565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001611e7f84610fa8565b611e8991906126c3565b600083815260076020526040902054909150808214611edc576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611f21906001906126c3565b60008381526009602052604081205460088054939450909284908110611f4957611f496127b2565b906000526020600020015490508060088381548110611f6a57611f6a6127b2565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611fa257611fa261279c565b6001900381819060005260206000200160009055905550505050565b6000611fc983610fa8565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b82805461200e90612706565b90600052602060002090601f0160209004810192826120305760008555612076565b82601f1061204957805160ff1916838001178555612076565b82800160010185558215612076579182015b8281111561207657825182559160200191906001019061205b565b50612082929150612086565b5090565b5b808211156120825760008155600101612087565b600067ffffffffffffffff808411156120b6576120b66127c8565b604051601f8501601f19908116603f011681019082821181831017156120de576120de6127c8565b816040528093508581528686860111156120f757600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461212857600080fd5b919050565b8035801515811461212857600080fd5b600082601f83011261214e57600080fd5b6114c18383356020850161209b565b60006020828403121561216f57600080fd5b6114c182612111565b6000806040838503121561218b57600080fd5b61219483612111565b91506121a260208401612111565b90509250929050565b6000806000606084860312156121c057600080fd5b6121c984612111565b92506121d760208501612111565b9150604084013590509250925092565b600080600080608085870312156121fd57600080fd5b61220685612111565b935061221460208601612111565b925060408501359150606085013567ffffffffffffffff81111561223757600080fd5b8501601f8101871361224857600080fd5b6122578782356020840161209b565b91505092959194509250565b6000806040838503121561227657600080fd5b61227f83612111565b91506121a26020840161212d565b600080604083850312156122a057600080fd5b6122a983612111565b946020939093013593505050565b6000602082840312156122c957600080fd5b6114c18261212d565b6000602082840312156122e457600080fd5b81356114c1816127de565b60006020828403121561230157600080fd5b81516114c1816127de565b60006020828403121561231e57600080fd5b813567ffffffffffffffff81111561233557600080fd5b6117e78482850161213d565b60006020828403121561235357600080fd5b5035919050565b6000806040838503121561236d57600080fd5b823591506121a260208401612111565b60008060006060848603121561239257600080fd5b8335925060208401359150604084013567ffffffffffffffff8111156123b757600080fd5b6123c38682870161213d565b9150509250925092565b600081518084526123e58160208601602086016126da565b601f01601f19169290920160200192915050565b60008451602061240c8285838a016126da565b85519184019161241f8184848a016126da565b8554920191600090600181811c908083168061243c57607f831692505b85831081141561245a57634e487b7160e01b85526022600452602485fd5b80801561246e576001811461247f576124ac565b60ff198516885283880195506124ac565b60008b81526020902060005b858110156124a45781548a82015290840190880161248b565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124f0908301846123cd565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561253257835183529284019291840191600101612516565b50909695505050505050565b6020815260006114c160208301846123cd565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526010908201526f6c6f636b65642066756e6374696f6e7360801b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b8481528360208201528260408201526080606082015260006124f060808301846123cd565b6000821982111561268b5761268b612770565b500190565b60008261269f5761269f612786565b500490565b60008160001904831182151516156126be576126be612770565b500290565b6000828210156126d5576126d5612770565b500390565b60005b838110156126f55781810151838201526020016126dd565b838111156113365750506000910152565b600181811c9082168061271a57607f821691505b6020821081141561273b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561275557612755612770565b5060010190565b60008261276b5761276b612786565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610d4b57600080fdfea264697066735822122015c9682291e4b437958764bd5188e982b7ac2c2dabc6e15d730276fa67be943a64736f6c634300080700334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000844696b2d44696b73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000254420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6248534341554c4d366566724a78413846766365645974324b64373136395734616d7439696e7a6772614e702f000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102465760003560e01c80635c975abb11610139578063a22cb465116100b6578063cf3090121161007a578063cf3090121461065b578063d5abeb0114610675578063da3ef23f1461068b578063e985e9c5146106ab578063f2c4ce1e146106f4578063f2fde38b1461071457600080fd5b8063a22cb465146105d1578063a475b5dd146105f1578063b88d4fde14610606578063c668286214610626578063c87b56dd1461063b57600080fd5b80638da5cb5b116100fd5780638da5cb5b1461055657806391ff4a731461057457806395d89b4114610594578063989bdbb6146105a9578063a0712d68146105be57600080fd5b80635c975abb146104c75780636352211e146104e157806370a0823114610501578063715018a6146105215780637f00c7a61461053657600080fd5b806323b872dd116101c7578063438b63001161018b578063438b63001461041b57806344a0d68a146104485780634f6ccce714610468578063518302271461048857806355f804b3146104a757600080fd5b806323b872dd146103a05780632ec8e10f146103c05780632f745c59146103d35780633ccfd60b146103f357806342842e0e146103fb57600080fd5b8063095ea7b31161020e578063095ea7b3146103115780630dc28efe1461033157806313faede61461035157806318160ddd14610375578063239c70ae1461038a57600080fd5b806301ffc9a71461024b57806302329a291461028057806306fdde03146102a2578063081812fc146102c4578063081c8c44146102fc575b600080fd5b34801561025757600080fd5b5061026b6102663660046122d2565b610734565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b3660046122b7565b61075f565b005b3480156102ae57600080fd5b506102b76107a5565b604051610277919061253e565b3480156102d057600080fd5b506102e46102df366004612341565b610837565b6040516001600160a01b039091168152602001610277565b34801561030857600080fd5b506102b76108cc565b34801561031d57600080fd5b506102a061032c36600461228d565b61095a565b34801561033d57600080fd5b506102a061034c36600461235a565b610a70565b34801561035d57600080fd5b50610367600d5481565b604051908152602001610277565b34801561038157600080fd5b50600854610367565b34801561039657600080fd5b50610367600f5481565b3480156103ac57600080fd5b506102a06103bb3660046121ab565b610b6a565b6102a06103ce36600461237d565b610b9b565b3480156103df57600080fd5b506103676103ee36600461228d565b610c36565b6102a0610ccc565b34801561040757600080fd5b506102a06104163660046121ab565b610d4e565b34801561042757600080fd5b5061043b61043636600461215d565b610d69565b60405161027791906124fa565b34801561045457600080fd5b506102a0610463366004612341565b610e0b565b34801561047457600080fd5b50610367610483366004612341565b610e3a565b34801561049457600080fd5b5060105461026b90610100900460ff1681565b3480156104b357600080fd5b506102a06104c236600461230c565b610ecd565b3480156104d357600080fd5b5060105461026b9060ff1681565b3480156104ed57600080fd5b506102e46104fc366004612341565b610f31565b34801561050d57600080fd5b5061036761051c36600461215d565b610fa8565b34801561052d57600080fd5b506102a061102f565b34801561054257600080fd5b506102a0610551366004612341565b611065565b34801561056257600080fd5b50600a546001600160a01b03166102e4565b34801561058057600080fd5b506102a061058f366004612341565b611094565b3480156105a057600080fd5b506102b7611114565b3480156105b557600080fd5b506102a0611123565b6102a06105cc366004612341565b61115c565b3480156105dd57600080fd5b506102a06105ec366004612263565b611204565b3480156105fd57600080fd5b506102a06112c9565b34801561061257600080fd5b506102a06106213660046121e7565b611304565b34801561063257600080fd5b506102b761133c565b34801561064757600080fd5b506102b7610656366004612341565b611349565b34801561066757600080fd5b5060125461026b9060ff1681565b34801561068157600080fd5b50610367600e5481565b34801561069757600080fd5b506102a06106a636600461230c565b6114c8565b3480156106b757600080fd5b5061026b6106c6366004612178565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561070057600080fd5b506102a061070f36600461230c565b611528565b34801561072057600080fd5b506102a061072f36600461215d565b611588565b60006001600160e01b0319821663780e9d6360e01b1480610759575061075982611620565b92915050565b600a546001600160a01b031633146107925760405162461bcd60e51b8152600401610789906125cd565b60405180910390fd5b6010805460ff1916911515919091179055565b6060600080546107b490612706565b80601f01602080910402602001604051908101604052809291908181526020018280546107e090612706565b801561082d5780601f106108025761010080835404028352916020019161082d565b820191906000526020600020905b81548152906001019060200180831161081057829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108b05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610789565b506000908152600460205260409020546001600160a01b031690565b601180546108d990612706565b80601f016020809104026020016040519081016040528092919081815260200182805461090590612706565b80156109525780601f1061092757610100808354040283529160200191610952565b820191906000526020600020905b81548152906001019060200180831161093557829003601f168201915b505050505081565b600061096582610f31565b9050806001600160a01b0316836001600160a01b031614156109d35760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610789565b336001600160a01b03821614806109ef57506109ef81336106c6565b610a615760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610789565b610a6b8383611670565b505050565b600a546001600160a01b03163314610a9a5760405162461bcd60e51b8152600401610789906125cd565b60008211610adc5760405162461bcd60e51b815260206004820152600f60248201526e36b4b734b6bab69018903a37b5b2b760891b6044820152606401610789565b600e5482610ae960085490565b610af39190612678565b1115610b305760405162461bcd60e51b815260206004820152600c60248201526b6f7574206f662073746f636b60a01b6044820152606401610789565b60005b82811015610a6b57610b5882610b4860085490565b610b53906001612678565b6116de565b80610b6281612741565b915050610b33565b610b7433826116f8565b610b905760405162461bcd60e51b815260040161078990612602565b610a6b8383836117ef565b33610ba584610f31565b6001600160a01b031614610bf45760405162461bcd60e51b8152602060048201526016602482015275139195081bdddb995c9cda1a5c081c995c5d5a5c995960521b6044820152606401610789565b7f6404fb3ba7d046d89b101ede9f805170a147ffc560a0af7c51515ac0a25c00ed83348484604051610c299493929190612653565b60405180910390a1505050565b6000610c4183610fa8565b8210610ca35760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610789565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610cf65760405162461bcd60e51b8152600401610789906125cd565b604051600090339047908381818185875af1925050503d8060008114610d38576040519150601f19603f3d011682016040523d82523d6000602084013e610d3d565b606091505b5050905080610d4b57600080fd5b50565b610a6b83838360405180602001604052806000815250611304565b60606000610d7683610fa8565b905060008167ffffffffffffffff811115610d9357610d936127c8565b604051908082528060200260200182016040528015610dbc578160200160208202803683370190505b50905060005b82811015610e0357610dd48582610c36565b828281518110610de657610de66127b2565b602090810291909101015280610dfb81612741565b915050610dc2565b509392505050565b600a546001600160a01b03163314610e355760405162461bcd60e51b8152600401610789906125cd565b600d55565b6000610e4560085490565b8210610ea85760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610789565b60088281548110610ebb57610ebb6127b2565b90600052602060002001549050919050565b600a546001600160a01b03163314610ef75760405162461bcd60e51b8152600401610789906125cd565b60125460ff1615610f1a5760405162461bcd60e51b8152600401610789906125a3565b8051610f2d90600b906020840190612002565b5050565b6000818152600260205260408120546001600160a01b0316806107595760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610789565b60006001600160a01b0382166110135760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610789565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146110595760405162461bcd60e51b8152600401610789906125cd565b611063600061199a565b565b600a546001600160a01b0316331461108f5760405162461bcd60e51b8152600401610789906125cd565b600f55565b600a546001600160a01b031633146110be5760405162461bcd60e51b8152600401610789906125cd565b600e54811061110f5760405162461bcd60e51b815260206004820152601860248201527f796f752063616e206f6e6c7920646563726561736520697400000000000000006044820152606401610789565b600e55565b6060600180546107b490612706565b600a546001600160a01b0316331461114d5760405162461bcd60e51b8152600401610789906125cd565b6012805460ff19166001179055565b600061116760085490565b60105490915060ff161561117a57600080fd5b6000821161118757600080fd5b600f5482111561119657600080fd5b600e546111a38383612678565b11156111ae57600080fd5b600a546001600160a01b031633146111da5781600d546111ce91906126a4565b3410156111da57600080fd5b60015b828111610a6b576111f233610b538385612678565b806111fc81612741565b9150506111dd565b6001600160a01b03821633141561125d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610789565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146112f35760405162461bcd60e51b8152600401610789906125cd565b6010805461ff001916610100179055565b61130e33836116f8565b61132a5760405162461bcd60e51b815260040161078990612602565b611336848484846119ec565b50505050565b600c80546108d990612706565b6000818152600260205260409020546060906001600160a01b03166113c85760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610789565b601054610100900460ff1661146957601180546113e490612706565b80601f016020809104026020016040519081016040528092919081815260200182805461141090612706565b801561145d5780601f106114325761010080835404028352916020019161145d565b820191906000526020600020905b81548152906001019060200180831161144057829003601f168201915b50505050509050919050565b6000611473611a1f565b9050600081511161149357604051806020016040528060008152506114c1565b8061149d84611a2e565b600c6040516020016114b1939291906123f9565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146114f25760405162461bcd60e51b8152600401610789906125cd565b60125460ff16156115155760405162461bcd60e51b8152600401610789906125a3565b8051610f2d90600c906020840190612002565b600a546001600160a01b031633146115525760405162461bcd60e51b8152600401610789906125cd565b60125460ff16156115755760405162461bcd60e51b8152600401610789906125a3565b8051610f2d906011906020840190612002565b600a546001600160a01b031633146115b25760405162461bcd60e51b8152600401610789906125cd565b6001600160a01b0381166116175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610789565b610d4b8161199a565b60006001600160e01b031982166380ac58cd60e01b148061165157506001600160e01b03198216635b5e139f60e01b145b8061075957506301ffc9a760e01b6001600160e01b0319831614610759565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906116a582610f31565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610f2d828260405180602001604052806000815250611b2c565b6000818152600260205260408120546001600160a01b03166117715760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610789565b600061177c83610f31565b9050806001600160a01b0316846001600160a01b031614806117b75750836001600160a01b03166117ac84610837565b6001600160a01b0316145b806117e757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661180282610f31565b6001600160a01b03161461186a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610789565b6001600160a01b0382166118cc5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610789565b6118d7838383611b5f565b6118e2600082611670565b6001600160a01b038316600090815260036020526040812080546001929061190b9084906126c3565b90915550506001600160a01b0382166000908152600360205260408120805460019290611939908490612678565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6119f78484846117ef565b611a0384848484611c17565b6113365760405162461bcd60e51b815260040161078990612551565b6060600b80546107b490612706565b606081611a525750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611a7c5780611a6681612741565b9150611a759050600a83612690565b9150611a56565b60008167ffffffffffffffff811115611a9757611a976127c8565b6040519080825280601f01601f191660200182016040528015611ac1576020820181803683370190505b5090505b84156117e757611ad66001836126c3565b9150611ae3600a8661275c565b611aee906030612678565b60f81b818381518110611b0357611b036127b2565b60200101906001600160f81b031916908160001a905350611b25600a86612690565b9450611ac5565b611b368383611d24565b611b436000848484611c17565b610a6b5760405162461bcd60e51b815260040161078990612551565b6001600160a01b038316611bba57611bb581600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611bdd565b816001600160a01b0316836001600160a01b031614611bdd57611bdd8382611e72565b6001600160a01b038216611bf457610a6b81611f0f565b826001600160a01b0316826001600160a01b031614610a6b57610a6b8282611fbe565b60006001600160a01b0384163b15611d1957604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611c5b9033908990889088906004016124bd565b602060405180830381600087803b158015611c7557600080fd5b505af1925050508015611ca5575060408051601f3d908101601f19168201909252611ca2918101906122ef565b60015b611cff573d808015611cd3576040519150601f19603f3d011682016040523d82523d6000602084013e611cd8565b606091505b508051611cf75760405162461bcd60e51b815260040161078990612551565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117e7565b506001949350505050565b6001600160a01b038216611d7a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610789565b6000818152600260205260409020546001600160a01b031615611ddf5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610789565b611deb60008383611b5f565b6001600160a01b0382166000908152600360205260408120805460019290611e14908490612678565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001611e7f84610fa8565b611e8991906126c3565b600083815260076020526040902054909150808214611edc576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611f21906001906126c3565b60008381526009602052604081205460088054939450909284908110611f4957611f496127b2565b906000526020600020015490508060088381548110611f6a57611f6a6127b2565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611fa257611fa261279c565b6001900381819060005260206000200160009055905550505050565b6000611fc983610fa8565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b82805461200e90612706565b90600052602060002090601f0160209004810192826120305760008555612076565b82601f1061204957805160ff1916838001178555612076565b82800160010185558215612076579182015b8281111561207657825182559160200191906001019061205b565b50612082929150612086565b5090565b5b808211156120825760008155600101612087565b600067ffffffffffffffff808411156120b6576120b66127c8565b604051601f8501601f19908116603f011681019082821181831017156120de576120de6127c8565b816040528093508581528686860111156120f757600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461212857600080fd5b919050565b8035801515811461212857600080fd5b600082601f83011261214e57600080fd5b6114c18383356020850161209b565b60006020828403121561216f57600080fd5b6114c182612111565b6000806040838503121561218b57600080fd5b61219483612111565b91506121a260208401612111565b90509250929050565b6000806000606084860312156121c057600080fd5b6121c984612111565b92506121d760208501612111565b9150604084013590509250925092565b600080600080608085870312156121fd57600080fd5b61220685612111565b935061221460208601612111565b925060408501359150606085013567ffffffffffffffff81111561223757600080fd5b8501601f8101871361224857600080fd5b6122578782356020840161209b565b91505092959194509250565b6000806040838503121561227657600080fd5b61227f83612111565b91506121a26020840161212d565b600080604083850312156122a057600080fd5b6122a983612111565b946020939093013593505050565b6000602082840312156122c957600080fd5b6114c18261212d565b6000602082840312156122e457600080fd5b81356114c1816127de565b60006020828403121561230157600080fd5b81516114c1816127de565b60006020828403121561231e57600080fd5b813567ffffffffffffffff81111561233557600080fd5b6117e78482850161213d565b60006020828403121561235357600080fd5b5035919050565b6000806040838503121561236d57600080fd5b823591506121a260208401612111565b60008060006060848603121561239257600080fd5b8335925060208401359150604084013567ffffffffffffffff8111156123b757600080fd5b6123c38682870161213d565b9150509250925092565b600081518084526123e58160208601602086016126da565b601f01601f19169290920160200192915050565b60008451602061240c8285838a016126da565b85519184019161241f8184848a016126da565b8554920191600090600181811c908083168061243c57607f831692505b85831081141561245a57634e487b7160e01b85526022600452602485fd5b80801561246e576001811461247f576124ac565b60ff198516885283880195506124ac565b60008b81526020902060005b858110156124a45781548a82015290840190880161248b565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124f0908301846123cd565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561253257835183529284019291840191600101612516565b50909695505050505050565b6020815260006114c160208301846123cd565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526010908201526f6c6f636b65642066756e6374696f6e7360801b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b8481528360208201528260408201526080606082015260006124f060808301846123cd565b6000821982111561268b5761268b612770565b500190565b60008261269f5761269f612786565b500490565b60008160001904831182151516156126be576126be612770565b500290565b6000828210156126d5576126d5612770565b500390565b60005b838110156126f55781810151838201526020016126dd565b838111156113365750506000910152565b600181811c9082168061271a57607f821691505b6020821081141561273b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561275557612755612770565b5060010190565b60008261276b5761276b612786565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610d4b57600080fdfea264697066735822122015c9682291e4b437958764bd5188e982b7ac2c2dabc6e15d730276fa67be943a64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000844696b2d44696b73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000254420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6248534341554c4d366566724a78413846766365645974324b64373136395734616d7439696e7a6772614e702f000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Dik-Diks
Arg [1] : _symbol (string): TB
Arg [2] : _initBaseURI (string): ipfs://QmbHSCAULM6efrJxA8FvcedYt2Kd7169W4amt9inzgraNp/
Arg [3] : _initNotRevealedUri (string):
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [5] : 44696b2d44696b73000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 5442000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d6248534341554c4d366566724a78413846766365645974
Arg [10] : 324b64373136395734616d7439696e7a6772614e702f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
42786:4093:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34389:224;;;;;;;;;;-1:-1:-1;34389:224:0;;;;;:::i;:::-;;:::i;:::-;;;8627:14:1;;8620:22;8602:41;;8590:2;8575:18;34389:224:0;;;;;;;;46337:73;;;;;;;;;;-1:-1:-1;46337:73:0;;;;;:::i;:::-;;:::i;:::-;;22375:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23918:219::-;;;;;;;;;;-1:-1:-1;23918:219:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7288:32:1;;;7270:51;;7258:2;7243:18;23918:219:0;7124:203:1;43100:28:0;;;;;;;;;;;;;:::i;23447:407::-;;;;;;;;;;-1:-1:-1;23447:407:0;;;;;:::i;:::-;;:::i;44123:286::-;;;;;;;;;;-1:-1:-1;44123:286:0;;;;;:::i;:::-;;:::i;42928:31::-;;;;;;;;;;;;;;;;;;;17965:25:1;;;17953:2;17938:18;42928:31:0;17819:177:1;35025:113:0;;;;;;;;;;-1:-1:-1;35113:10:0;:17;35025:113;;42999:33;;;;;;;;;;;;;;;;24798:337;;;;;;;;;;-1:-1:-1;24798:337:0;;;;;:::i;:::-;;:::i;44440:254::-;;;;;;:::i;:::-;;:::i;34695:256::-;;;;;;;;;;-1:-1:-1;34695:256:0;;;;;:::i;:::-;;:::i;46417:158::-;;;:::i;25204:185::-;;;;;;;;;;-1:-1:-1;25204:185:0;;;;;:::i;:::-;;:::i;44702:348::-;;;;;;;;;;-1:-1:-1;44702:348:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;45644:82::-;;;;;;;;;;-1:-1:-1;45644:82:0;;;;;:::i;:::-;;:::i;35213:233::-;;;;;;;;;;-1:-1:-1;35213:233:0;;;;;:::i;:::-;;:::i;43068:27::-;;;;;;;;;;-1:-1:-1;43068:27:0;;;;;;;;;;;46023:141;;;;;;;;;;-1:-1:-1;46023:141:0;;;;;:::i;:::-;;:::i;43037:26::-;;;;;;;;;;-1:-1:-1;43037:26:0;;;;;;;;22071:239;;;;;;;;;;-1:-1:-1;22071:239:0;;;;;:::i;:::-;;:::i;21803:208::-;;;;;;;;;;-1:-1:-1;21803:208:0;;;;;:::i;:::-;;:::i;42130:94::-;;;;;;;;;;;;;:::i;45730:118::-;;;;;;;;;;-1:-1:-1;45730:118:0;;;;;:::i;:::-;;:::i;41483:87::-;;;;;;;;;;-1:-1:-1;41556:6:0;;-1:-1:-1;;;;;41556:6:0;41483:87;;46579:183;;;;;;;;;;-1:-1:-1;46579:183:0;;;;;:::i;:::-;;:::i;22542:104::-;;;;;;;;;;;;;:::i;46801:75::-;;;;;;;;;;;;;:::i;43635:428::-;;;;;;:::i;:::-;;:::i;24207:293::-;;;;;;;;;;-1:-1:-1;24207:293:0;;;;;:::i;:::-;;:::i;45569:67::-;;;;;;;;;;;;;:::i;25458:328::-;;;;;;;;;;-1:-1:-1;25458:328:0;;;;;:::i;:::-;;:::i;42886:37::-;;;;;;;;;;;;;:::i;45054:495::-;;;;;;;;;;-1:-1:-1;45054:495:0;;;;;:::i;:::-;;:::i;43133:18::-;;;;;;;;;;-1:-1:-1;43133:18:0;;;;;;;;42964:30;;;;;;;;;;;;;;;;46168:165;;;;;;;;;;-1:-1:-1;46168:165:0;;;;;:::i;:::-;;:::i;24569:164::-;;;;;;;;;;-1:-1:-1;24569:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;24690:25:0;;;24666:4;24690:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;24569:164;45856:163;;;;;;;;;;-1:-1:-1;45856:163:0;;;;;:::i;:::-;;:::i;42377:192::-;;;;;;;;;;-1:-1:-1;42377:192:0;;;;;:::i;:::-;;:::i;34389:224::-;34491:4;-1:-1:-1;;;;;;34515:50:0;;-1:-1:-1;;;34515:50:0;;:90;;;34569:36;34593:11;34569:23;:36::i;:::-;34508:97;34389:224;-1:-1:-1;;34389:224:0:o;46337:73::-;41556:6;;-1:-1:-1;;;;;41556:6:0;20012:10;41701:23;41693:68;;;;-1:-1:-1;;;41693:68:0;;;;;;;:::i;:::-;;;;;;;;;46389:6:::1;:15:::0;;-1:-1:-1;;46389:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46337:73::o;22375:100::-;22429:13;22462:5;22455:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22375:100;:::o;23918:219::-;23994:7;27381:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27381:16:0;24014:73;;;;-1:-1:-1;;;24014:73:0;;14494:2:1;24014:73:0;;;14476:21:1;14533:2;14513:18;;;14506:30;14572:34;14552:18;;;14545:62;-1:-1:-1;;;14623:18:1;;;14616:42;14675:19;;24014:73:0;14292:408:1;24014:73:0;-1:-1:-1;24105:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;24105:24:0;;23918:219::o;43100:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23447:407::-;23528:13;23544:23;23559:7;23544:14;:23::i;:::-;23528:39;;23592:5;-1:-1:-1;;;;;23586:11:0;:2;-1:-1:-1;;;;;23586:11:0;;;23578:57;;;;-1:-1:-1;;;23578:57:0;;16094:2:1;23578:57:0;;;16076:21:1;16133:2;16113:18;;;16106:30;16172:34;16152:18;;;16145:62;-1:-1:-1;;;16223:18:1;;;16216:31;16264:19;;23578:57:0;15892:397:1;23578:57:0;20012:10;-1:-1:-1;;;;;23668:21:0;;;;:62;;-1:-1:-1;23693:37:0;23710:5;20012:10;24569:164;:::i;23693:37::-;23646:168;;;;-1:-1:-1;;;23646:168:0;;12887:2:1;23646:168:0;;;12869:21:1;12926:2;12906:18;;;12899:30;12965:34;12945:18;;;12938:62;13036:26;13016:18;;;13009:54;13080:19;;23646:168:0;12685:420:1;23646:168:0;23825:21;23834:2;23838:7;23825:8;:21::i;:::-;23517:337;23447:407;;:::o;44123:286::-;41556:6;;-1:-1:-1;;;;;41556:6:0;20012:10;41701:23;41693:68;;;;-1:-1:-1;;;41693:68:0;;;;;;;:::i;:::-;44209:1:::1;44203:3;:7;44195:35;;;::::0;-1:-1:-1;;;44195:35:0;;11026:2:1;44195:35:0::1;::::0;::::1;11008:21:1::0;11065:2;11045:18;;;11038:30;-1:-1:-1;;;11084:18:1;;;11077:45;11139:18;;44195:35:0::1;10824:339:1::0;44195:35:0::1;44272:9;;44265:3;44249:13;35113:10:::0;:17;;35025:113;44249:13:::1;:19;;;;:::i;:::-;:32;;44241:57;;;::::0;-1:-1:-1;;;44241:57:0;;17680:2:1;44241:57:0::1;::::0;::::1;17662:21:1::0;17719:2;17699:18;;;17692:30;-1:-1:-1;;;17738:18:1;;;17731:42;17790:18;;44241:57:0::1;17478:336:1::0;44241:57:0::1;44314:9;44309:93;44333:3;44329:1;:7;44309:93;;;44358:32;44368:2;44372:13;35113:10:::0;:17;;35025:113;44372:13:::1;:17;::::0;44388:1:::1;44372:17;:::i;:::-;44358:9;:32::i;:::-;44338:3:::0;::::1;::::0;::::1;:::i;:::-;;;;44309:93;;24798:337:::0;24993:41;20012:10;25026:7;24993:18;:41::i;:::-;24985:103;;;;-1:-1:-1;;;24985:103:0;;;;;;;:::i;:::-;25099:28;25109:4;25115:2;25119:7;25099:9;:28::i;44440:254::-;44596:10;44578:14;44586:5;44578:7;:14::i;:::-;-1:-1:-1;;;;;44578:28:0;;44570:63;;;;-1:-1:-1;;;44570:63:0;;9080:2:1;44570:63:0;;;9062:21:1;9119:2;9099:18;;;9092:30;-1:-1:-1;;;9138:18:1;;;9131:52;9200:18;;44570:63:0;8878:346:1;44570:63:0;44649:37;44659:5;44666:9;44677:2;44681:4;44649:37;;;;;;;;;:::i;:::-;;;;;;;;44440:254;;;:::o;34695:256::-;34792:7;34828:23;34845:5;34828:16;:23::i;:::-;34820:5;:31;34812:87;;;;-1:-1:-1;;;34812:87:0;;9431:2:1;34812:87:0;;;9413:21:1;9470:2;9450:18;;;9443:30;9509:34;9489:18;;;9482:62;-1:-1:-1;;;9560:18:1;;;9553:41;9611:19;;34812:87:0;9229:407:1;34812:87:0;-1:-1:-1;;;;;;34917:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;34695:256::o;46417:158::-;41556:6;;-1:-1:-1;;;;;41556:6:0;20012:10;41701:23;41693:68;;;;-1:-1:-1;;;41693:68:0;;;;;;;:::i;:::-;46488:58:::1;::::0;46470:12:::1;::::0;46496:10:::1;::::0;46520:21:::1;::::0;46470:12;46488:58;46470:12;46488:58;46520:21;46496:10;46488:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46469:77;;;46561:7;46553:16;;;::::0;::::1;;46462:113;46417:158::o:0;25204:185::-;25342:39;25359:4;25365:2;25369:7;25342:39;;;;;;;;;;;;:16;:39::i;44702:348::-;44777:16;44805:23;44831:17;44841:6;44831:9;:17::i;:::-;44805:43;;44855:25;44897:15;44883:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44883:30:0;;44855:58;;44925:9;44920:103;44940:15;44936:1;:19;44920:103;;;44985:30;45005:6;45013:1;44985:19;:30::i;:::-;44971:8;44980:1;44971:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;44957:3;;;;:::i;:::-;;;;44920:103;;;-1:-1:-1;45036:8:0;44702:348;-1:-1:-1;;;44702:348:0:o;45644:82::-;41556:6;;-1:-1:-1;;;;;41556:6:0;20012:10;41701:23;41693:68;;;;-1:-1:-1;;;41693:68:0;;;;;;;:::i;:::-;45705:4:::1;:15:::0;45644:82::o;35213:233::-;35288:7;35324:30;35113:10;:17;;35025:113;35324:30;35316:5;:38;35308:95;;;;-1:-1:-1;;;35308:95:0;;17267:2:1;35308:95:0;;;17249:21:1;17306:2;17286:18;;;17279:30;17345:34;17325:18;;;17318:62;-1:-1:-1;;;17396:18:1;;;17389:42;17448:19;;35308:95:0;17065:408:1;35308:95:0;35421:10;35432:5;35421:17;;;;;;;;:::i;:::-;;;;;;;;;35414:24;;35213:233;;;:::o;46023:141::-;41556:6;;-1:-1:-1;;;;;41556:6:0;20012:10;41701:23;41693:68;;;;-1:-1:-1;;;41693:68:0;;;;;;;:::i;:::-;46103:6:::1;::::0;::::1;;46102:7;46094:36;;;;-1:-1:-1::0;;;46094:36:0::1;;;;;;;:::i;:::-;46137:21:::0;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;46023:141:::0;:::o;22071:239::-;22143:7;22179:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22179:16:0;22214:19;22206:73;;;;-1:-1:-1;;;22206:73:0;;13723:2:1;22206:73:0;;;13705:21:1;13762:2;13742:18;;;13735:30;13801:34;13781:18;;;13774:62;-1:-1:-1;;;13852:18:1;;;13845:39;13901:19;;22206:73:0;13521:405:1;21803:208:0;21875:7;-1:-1:-1;;;;;21903:19:0;;21895:74;;;;-1:-1:-1;;;21895:74:0;;13312:2:1;21895:74:0;;;13294:21:1;13351:2;13331:18;;;13324:30;13390:34;13370:18;;;13363:62;-1:-1:-1;;;13441:18:1;;;13434:40;13491:19;;21895:74:0;13110:406:1;21895:74:0;-1:-1:-1;;;;;;21987:16:0;;;;;:9;:16;;;;;;;21803:208::o;42130:94::-;41556:6;;-1:-1:-1;;;;;41556:6:0;20012:10;41701:23;41693:68;;;;-1:-1:-1;;;41693:68:0;;;;;;;:::i;:::-;42195:21:::1;42213:1;42195:9;:21::i;:::-;42130:94::o:0;45730:118::-;41556:6;;-1:-1:-1;;;;;41556:6:0;20012:10;41701:23;41693:68;;;;-1:-1:-1;;;41693:68:0;;;;;;;:::i;:::-;45809:13:::1;:33:::0;45730:118::o;46579:183::-;41556:6;;-1:-1:-1;;;;;41556:6:0;20012:10;41701:23;41693:68;;;;-1:-1:-1;;;41693:68:0;;;;;;;:::i;:::-;46681:9:::1;;46666:12;:24;46658:61;;;::::0;-1:-1:-1;;;46658:61:0;;16496:2:1;46658:61:0::1;::::0;::::1;16478:21:1::0;16535:2;16515:18;;;16508:30;16574:26;16554:18;;;16547:54;16618:18;;46658:61:0::1;16294:348:1::0;46658:61:0::1;46730:9;:24:::0;46579:183::o;22542:104::-;22598:13;22631:7;22624:14;;;;;:::i;46801:75::-;41556:6;;-1:-1:-1;;;;;41556:6:0;20012:10;41701:23;41693:68;;;;-1:-1:-1;;;41693:68:0;;;;;;;:::i;:::-;46855:6:::1;:13:::0;;-1:-1:-1;;46855:13:0::1;46864:4;46855:13;::::0;;46801:75::o;43635:428::-;43692:14;43709:13;35113:10;:17;;35025:113;43709:13;43738:6;;43692:30;;-1:-1:-1;43738:6:0;;43737:7;43729:16;;;;;;43774:1;43760:11;:15;43752:24;;;;;;43806:13;;43791:11;:28;;43783:37;;;;;;43859:9;;43835:20;43844:11;43835:6;:20;:::i;:::-;:33;;43827:42;;;;;;41556:6;;-1:-1:-1;;;;;41556:6:0;43879:10;:21;43876:83;;43939:11;43932:4;;:18;;;;:::i;:::-;43919:9;:31;;43911:40;;;;;;43982:1;43965:93;43990:11;43985:1;:16;43965:93;;44017:33;44027:10;44039;44048:1;44039:6;:10;:::i;44017:33::-;44003:3;;;;:::i;:::-;;;;43965:93;;24207:293;-1:-1:-1;;;;;24310:24:0;;20012:10;24310:24;;24302:62;;;;-1:-1:-1;;;24302:62:0;;11775:2:1;24302:62:0;;;11757:21:1;11814:2;11794:18;;;11787:30;11853:27;11833:18;;;11826:55;11898:18;;24302:62:0;11573:349:1;24302:62:0;20012:10;24375:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;24375:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;24375:53:0;;;;;;;;;;24444:48;;8602:41:1;;;24375:42:0;;20012:10;24444:48;;8575:18:1;24444:48:0;;;;;;;24207:293;;:::o;45569:67::-;41556:6;;-1:-1:-1;;;;;41556:6:0;20012:10;41701:23;41693:68;;;;-1:-1:-1;;;41693:68:0;;;;;;;:::i;:::-;45615:8:::1;:15:::0;;-1:-1:-1;;45615:15:0::1;;;::::0;;45569:67::o;25458:328::-;25633:41;20012:10;25666:7;25633:18;:41::i;:::-;25625:103;;;;-1:-1:-1;;;25625:103:0;;;;;;;:::i;:::-;25739:39;25753:4;25759:2;25763:7;25772:5;25739:13;:39::i;:::-;25458:328;;;;:::o;42886:37::-;;;;;;;:::i;45054:495::-;27357:4;27381:16;;;:7;:16;;;;;;45152:13;;-1:-1:-1;;;;;27381:16:0;45177:97;;;;-1:-1:-1;;;45177:97:0;;15678:2:1;45177:97:0;;;15660:21:1;15717:2;15697:18;;;15690:30;15756:34;15736:18;;;15729:62;-1:-1:-1;;;15807:18:1;;;15800:45;15862:19;;45177:97:0;15476:411:1;45177:97:0;45290:8;;;;;;;45287:62;;45327:14;45320:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45054:495;;;:::o;45287:62::-;45355:28;45386:10;:8;:10::i;:::-;45355:41;;45441:1;45416:14;45410:28;:32;:133;;;;;;;;;;;;;;;;;45478:14;45494:18;:7;:16;:18::i;:::-;45514:13;45461:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45410:133;45403:140;45054:495;-1:-1:-1;;;45054:495:0:o;46168:165::-;41556:6;;-1:-1:-1;;;;;41556:6:0;20012:10;41701:23;41693:68;;;;-1:-1:-1;;;41693:68:0;;;;;;;:::i;:::-;46260:6:::1;::::0;::::1;;46259:7;46251:36;;;;-1:-1:-1::0;;;46251:36:0::1;;;;;;;:::i;:::-;46294:33:::0;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;45856:163::-:0;41556:6;;-1:-1:-1;;;;;41556:6:0;20012:10;41701:23;41693:68;;;;-1:-1:-1;;;41693:68:0;;;;;;;:::i;:::-;45947:6:::1;::::0;::::1;;45946:7;45938:36;;;;-1:-1:-1::0;;;45938:36:0::1;;;;;;;:::i;:::-;45981:32:::0;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;42377:192::-:0;41556:6;;-1:-1:-1;;;;;41556:6:0;20012:10;41701:23;41693:68;;;;-1:-1:-1;;;41693:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42466:22:0;::::1;42458:73;;;::::0;-1:-1:-1;;;42458:73:0;;10262:2:1;42458:73:0::1;::::0;::::1;10244:21:1::0;10301:2;10281:18;;;10274:30;10340:34;10320:18;;;10313:62;-1:-1:-1;;;10391:18:1;;;10384:36;10437:19;;42458:73:0::1;10060:402:1::0;42458:73:0::1;42542:19;42552:8;42542:9;:19::i;21436:305::-:0;21538:4;-1:-1:-1;;;;;;21575:40:0;;-1:-1:-1;;;21575:40:0;;:105;;-1:-1:-1;;;;;;;21632:48:0;;-1:-1:-1;;;21632:48:0;21575:105;:158;;;-1:-1:-1;;;;;;;;;;7478:40:0;;;21697:36;7369:157;31238:174;31313:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;31313:29:0;-1:-1:-1;;;;;31313:29:0;;;;;;;;:24;;31367:23;31313:24;31367:14;:23::i;:::-;-1:-1:-1;;;;;31358:46:0;;;;;;;;;;;31238:174;;:::o;28272:110::-;28348:26;28358:2;28362:7;28348:26;;;;;;;;;;;;:9;:26::i;27584:348::-;27677:4;27381:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27381:16:0;27694:73;;;;-1:-1:-1;;;27694:73:0;;12129:2:1;27694:73:0;;;12111:21:1;12168:2;12148:18;;;12141:30;12207:34;12187:18;;;12180:62;-1:-1:-1;;;12258:18:1;;;12251:42;12310:19;;27694:73:0;11927:408:1;27694:73:0;27778:13;27794:23;27809:7;27794:14;:23::i;:::-;27778:39;;27847:5;-1:-1:-1;;;;;27836:16:0;:7;-1:-1:-1;;;;;27836:16:0;;:51;;;;27880:7;-1:-1:-1;;;;;27856:31:0;:20;27868:7;27856:11;:20::i;:::-;-1:-1:-1;;;;;27856:31:0;;27836:51;:87;;;-1:-1:-1;;;;;;24690:25:0;;;24666:4;24690:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;27891:32;27828:96;27584:348;-1:-1:-1;;;;27584:348:0:o;30552:570::-;30711:4;-1:-1:-1;;;;;30684:31:0;:23;30699:7;30684:14;:23::i;:::-;-1:-1:-1;;;;;30684:31:0;;30676:85;;;;-1:-1:-1;;;30676:85:0;;15268:2:1;30676:85:0;;;15250:21:1;15307:2;15287:18;;;15280:30;15346:34;15326:18;;;15319:62;-1:-1:-1;;;15397:18:1;;;15390:39;15446:19;;30676:85:0;15066:405:1;30676:85:0;-1:-1:-1;;;;;30780:16:0;;30772:65;;;;-1:-1:-1;;;30772:65:0;;11370:2:1;30772:65:0;;;11352:21:1;11409:2;11389:18;;;11382:30;11448:34;11428:18;;;11421:62;-1:-1:-1;;;11499:18:1;;;11492:34;11543:19;;30772:65:0;11168:400:1;30772:65:0;30848:39;30869:4;30875:2;30879:7;30848:20;:39::i;:::-;30950:29;30967:1;30971:7;30950:8;:29::i;:::-;-1:-1:-1;;;;;30990:15:0;;;;;;:9;:15;;;;;:20;;31009:1;;30990:15;:20;;31009:1;;30990:20;:::i;:::-;;;;-1:-1:-1;;;;;;;31021:13:0;;;;;;:9;:13;;;;;:18;;31038:1;;31021:13;:18;;31038:1;;31021:18;:::i;:::-;;;;-1:-1:-1;;31050:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31050:21:0;-1:-1:-1;;;;;31050:21:0;;;;;;;;;31087:27;;31050:16;;31087:27;;;;;;;30552:570;;;:::o;42575:173::-;42650:6;;;-1:-1:-1;;;;;42667:17:0;;;-1:-1:-1;;;;;;42667:17:0;;;;;;;42700:40;;42650:6;;;42667:17;42650:6;;42700:40;;42631:16;;42700:40;42620:128;42575:173;:::o;26666:315::-;26823:28;26833:4;26839:2;26843:7;26823:9;:28::i;:::-;26870:48;26893:4;26899:2;26903:7;26912:5;26870:22;:48::i;:::-;26862:111;;;;-1:-1:-1;;;26862:111:0;;;;;;;:::i;43516:102::-;43576:13;43605:7;43598:14;;;;;:::i;7834:721::-;7890:13;8109:10;8105:53;;-1:-1:-1;;8136:10:0;;;;;;;;;;;;-1:-1:-1;;;8136:10:0;;;;;7834:721::o;8105:53::-;8183:5;8168:12;8224:78;8231:9;;8224:78;;8257:8;;;;:::i;:::-;;-1:-1:-1;8280:10:0;;-1:-1:-1;8288:2:0;8280:10;;:::i;:::-;;;8224:78;;;8312:19;8344:6;8334:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8334:17:0;;8312:39;;8362:154;8369:10;;8362:154;;8396:11;8406:1;8396:11;;:::i;:::-;;-1:-1:-1;8465:10:0;8473:2;8465:5;:10;:::i;:::-;8452:24;;:2;:24;:::i;:::-;8439:39;;8422:6;8429;8422:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8422:56:0;;;;;;;;-1:-1:-1;8493:11:0;8502:2;8493:11;;:::i;:::-;;;8362:154;;28607:321;28737:18;28743:2;28747:7;28737:5;:18::i;:::-;28788:54;28819:1;28823:2;28827:7;28836:5;28788:22;:54::i;:::-;28766:154;;;;-1:-1:-1;;;28766:154:0;;;;;;;:::i;36057:587::-;-1:-1:-1;;;;;36261:18:0;;36257:187;;36296:40;36328:7;37467:10;:17;;37440:24;;;;:15;:24;;;;;:44;;;37495:24;;;;;;;;;;;;37363:164;36296:40;36257:187;;;36366:2;-1:-1:-1;;;;;36358:10:0;:4;-1:-1:-1;;;;;36358:10:0;;36354:90;;36385:47;36418:4;36424:7;36385:32;:47::i;:::-;-1:-1:-1;;;;;36458:16:0;;36454:183;;36491:45;36528:7;36491:36;:45::i;36454:183::-;36564:4;-1:-1:-1;;;;;36558:10:0;:2;-1:-1:-1;;;;;36558:10:0;;36554:83;;36585:40;36613:2;36617:7;36585:27;:40::i;31975:799::-;32130:4;-1:-1:-1;;;;;32151:13:0;;10666:20;10714:8;32147:620;;32187:72;;-1:-1:-1;;;32187:72:0;;-1:-1:-1;;;;;32187:36:0;;;;;:72;;20012:10;;32238:4;;32244:7;;32253:5;;32187:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32187:72:0;;;;;;;;-1:-1:-1;;32187:72:0;;;;;;;;;;;;:::i;:::-;;;32183:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32429:13:0;;32425:272;;32472:60;;-1:-1:-1;;;32472:60:0;;;;;;;:::i;32425:272::-;32647:6;32641:13;32632:6;32628:2;32624:15;32617:38;32183:529;-1:-1:-1;;;;;;32310:51:0;-1:-1:-1;;;32310:51:0;;-1:-1:-1;32303:58:0;;32147:620;-1:-1:-1;32751:4:0;31975:799;;;;;;:::o;29262:376::-;-1:-1:-1;;;;;29342:16:0;;29334:61;;;;-1:-1:-1;;;29334:61:0;;14133:2:1;29334:61:0;;;14115:21:1;;;14152:18;;;14145:30;14211:34;14191:18;;;14184:62;14263:18;;29334:61:0;13931:356:1;29334:61:0;27357:4;27381:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27381:16:0;:30;29406:58;;;;-1:-1:-1;;;29406:58:0;;10669:2:1;29406:58:0;;;10651:21:1;10708:2;10688:18;;;10681:30;10747;10727:18;;;10720:58;10795:18;;29406:58:0;10467:352:1;29406:58:0;29475:45;29504:1;29508:2;29512:7;29475:20;:45::i;:::-;-1:-1:-1;;;;;29531:13:0;;;;;;:9;:13;;;;;:18;;29548:1;;29531:13;:18;;29548:1;;29531:18;:::i;:::-;;;;-1:-1:-1;;29560:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29560:21:0;-1:-1:-1;;;;;29560:21:0;;;;;;;;29597:33;;29560:16;;;29597:33;;29560:16;;29597:33;29262:376;;:::o;38152:980::-;38416:22;38466:1;38441:22;38458:4;38441:16;:22::i;:::-;:26;;;;:::i;:::-;38478:18;38499:26;;;:17;:26;;;;;;38416:51;;-1:-1:-1;38630:28:0;;;38626:326;;-1:-1:-1;;;;;38697:18:0;;38675:19;38697:18;;;:12;:18;;;;;;;;:34;;;;;;;;;38746:30;;;;;;:44;;;38863:30;;:17;:30;;;;;:43;;;38626:326;-1:-1:-1;39046:26:0;;;;:17;:26;;;;;;;;39039:33;;;-1:-1:-1;;;;;39090:18:0;;;;;:12;:18;;;;;:34;;;;;;;39083:41;38152:980::o;39425:1071::-;39701:10;:17;39676:22;;39701:21;;39721:1;;39701:21;:::i;:::-;39733:18;39754:24;;;:15;:24;;;;;;40125:10;:26;;39676:46;;-1:-1:-1;39754:24:0;;39676:46;;40125:26;;;;;;:::i;:::-;;;;;;;;;40103:48;;40187:11;40162:10;40173;40162:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;40267:28;;;:15;:28;;;;;;;:41;;;40437:24;;;;;40430:31;40472:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;39496:1000;;;39425:1071;:::o;36943:221::-;37028:14;37045:20;37062:2;37045:16;:20::i;:::-;-1:-1:-1;;;;;37076:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;37121:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;36943:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:60;;978:1;975;968:12;993:221;1036:5;1089:3;1082:4;1074:6;1070:17;1066:27;1056:55;;1107:1;1104;1097:12;1056:55;1129:79;1204:3;1195:6;1182:20;1175:4;1167:6;1163:17;1129:79;:::i;1219:186::-;1278:6;1331:2;1319:9;1310:7;1306:23;1302:32;1299:52;;;1347:1;1344;1337:12;1299:52;1370:29;1389:9;1370:29;:::i;1410:260::-;1478:6;1486;1539:2;1527:9;1518:7;1514:23;1510:32;1507:52;;;1555:1;1552;1545:12;1507:52;1578:29;1597:9;1578:29;:::i;:::-;1568:39;;1626:38;1660:2;1649:9;1645:18;1626:38;:::i;:::-;1616:48;;1410:260;;;;;:::o;1675:328::-;1752:6;1760;1768;1821:2;1809:9;1800:7;1796:23;1792:32;1789:52;;;1837:1;1834;1827:12;1789:52;1860:29;1879:9;1860:29;:::i;:::-;1850:39;;1908:38;1942:2;1931:9;1927:18;1908:38;:::i;:::-;1898:48;;1993:2;1982:9;1978:18;1965:32;1955:42;;1675:328;;;;;:::o;2008:666::-;2103:6;2111;2119;2127;2180:3;2168:9;2159:7;2155:23;2151:33;2148:53;;;2197:1;2194;2187:12;2148:53;2220:29;2239:9;2220:29;:::i;:::-;2210:39;;2268:38;2302:2;2291:9;2287:18;2268:38;:::i;:::-;2258:48;;2353:2;2342:9;2338:18;2325:32;2315:42;;2408:2;2397:9;2393:18;2380:32;2435:18;2427:6;2424:30;2421:50;;;2467:1;2464;2457:12;2421:50;2490:22;;2543:4;2535:13;;2531:27;-1:-1:-1;2521:55:1;;2572:1;2569;2562:12;2521:55;2595:73;2660:7;2655:2;2642:16;2637:2;2633;2629:11;2595:73;:::i;:::-;2585:83;;;2008:666;;;;;;;:::o;2679:254::-;2744:6;2752;2805:2;2793:9;2784:7;2780:23;2776:32;2773:52;;;2821:1;2818;2811:12;2773:52;2844:29;2863:9;2844:29;:::i;:::-;2834:39;;2892:35;2923:2;2912:9;2908:18;2892:35;:::i;2938:254::-;3006:6;3014;3067:2;3055:9;3046:7;3042:23;3038:32;3035:52;;;3083:1;3080;3073:12;3035:52;3106:29;3125:9;3106:29;:::i;:::-;3096:39;3182:2;3167:18;;;;3154:32;;-1:-1:-1;;;2938:254:1:o;3197:180::-;3253:6;3306:2;3294:9;3285:7;3281:23;3277:32;3274:52;;;3322:1;3319;3312:12;3274:52;3345:26;3361:9;3345:26;:::i;3382:245::-;3440:6;3493:2;3481:9;3472:7;3468:23;3464:32;3461:52;;;3509:1;3506;3499:12;3461:52;3548:9;3535:23;3567:30;3591:5;3567:30;:::i;3632:249::-;3701:6;3754:2;3742:9;3733:7;3729:23;3725:32;3722:52;;;3770:1;3767;3760:12;3722:52;3802:9;3796:16;3821:30;3845:5;3821:30;:::i;3886:322::-;3955:6;4008:2;3996:9;3987:7;3983:23;3979:32;3976:52;;;4024:1;4021;4014:12;3976:52;4064:9;4051:23;4097:18;4089:6;4086:30;4083:50;;;4129:1;4126;4119:12;4083:50;4152;4194:7;4185:6;4174:9;4170:22;4152:50;:::i;4213:180::-;4272:6;4325:2;4313:9;4304:7;4300:23;4296:32;4293:52;;;4341:1;4338;4331:12;4293:52;-1:-1:-1;4364:23:1;;4213:180;-1:-1:-1;4213:180:1:o;4398:254::-;4466:6;4474;4527:2;4515:9;4506:7;4502:23;4498:32;4495:52;;;4543:1;4540;4533:12;4495:52;4579:9;4566:23;4556:33;;4608:38;4642:2;4631:9;4627:18;4608:38;:::i;4657:458::-;4744:6;4752;4760;4813:2;4801:9;4792:7;4788:23;4784:32;4781:52;;;4829:1;4826;4819:12;4781:52;4865:9;4852:23;4842:33;;4922:2;4911:9;4907:18;4894:32;4884:42;;4977:2;4966:9;4962:18;4949:32;5004:18;4996:6;4993:30;4990:50;;;5036:1;5033;5026:12;4990:50;5059;5101:7;5092:6;5081:9;5077:22;5059:50;:::i;:::-;5049:60;;;4657:458;;;;;:::o;5120:257::-;5161:3;5199:5;5193:12;5226:6;5221:3;5214:19;5242:63;5298:6;5291:4;5286:3;5282:14;5275:4;5268:5;5264:16;5242:63;:::i;:::-;5359:2;5338:15;-1:-1:-1;;5334:29:1;5325:39;;;;5366:4;5321:50;;5120:257;-1:-1:-1;;5120:257:1:o;5382:1527::-;5606:3;5644:6;5638:13;5670:4;5683:51;5727:6;5722:3;5717:2;5709:6;5705:15;5683:51;:::i;:::-;5797:13;;5756:16;;;;5819:55;5797:13;5756:16;5841:15;;;5819:55;:::i;:::-;5963:13;;5896:20;;;5936:1;;6023;6045:18;;;;6098;;;;6125:93;;6203:4;6193:8;6189:19;6177:31;;6125:93;6266:2;6256:8;6253:16;6233:18;6230:40;6227:167;;;-1:-1:-1;;;6293:33:1;;6349:4;6346:1;6339:15;6379:4;6300:3;6367:17;6227:167;6410:18;6437:110;;;;6561:1;6556:328;;;;6403:481;;6437:110;-1:-1:-1;;6472:24:1;;6458:39;;6517:20;;;;-1:-1:-1;6437:110:1;;6556:328;18513:1;18506:14;;;18550:4;18537:18;;6651:1;6665:169;6679:8;6676:1;6673:15;6665:169;;;6761:14;;6746:13;;;6739:37;6804:16;;;;6696:10;;6665:169;;;6669:3;;6865:8;6858:5;6854:20;6847:27;;6403:481;-1:-1:-1;6900:3:1;;5382:1527;-1:-1:-1;;;;;;;;;;;5382:1527:1:o;7332:488::-;-1:-1:-1;;;;;7601:15:1;;;7583:34;;7653:15;;7648:2;7633:18;;7626:43;7700:2;7685:18;;7678:34;;;7748:3;7743:2;7728:18;;7721:31;;;7526:4;;7769:45;;7794:19;;7786:6;7769:45;:::i;:::-;7761:53;7332:488;-1:-1:-1;;;;;;7332:488:1:o;7825:632::-;7996:2;8048:21;;;8118:13;;8021:18;;;8140:22;;;7967:4;;7996:2;8219:15;;;;8193:2;8178:18;;;7967:4;8262:169;8276:6;8273:1;8270:13;8262:169;;;8337:13;;8325:26;;8406:15;;;;8371:12;;;;8298:1;8291:9;8262:169;;;-1:-1:-1;8448:3:1;;7825:632;-1:-1:-1;;;;;;7825:632:1:o;8654:219::-;8803:2;8792:9;8785:21;8766:4;8823:44;8863:2;8852:9;8848:18;8840:6;8823:44;:::i;9641:414::-;9843:2;9825:21;;;9882:2;9862:18;;;9855:30;9921:34;9916:2;9901:18;;9894:62;-1:-1:-1;;;9987:2:1;9972:18;;9965:48;10045:3;10030:19;;9641:414::o;12340:340::-;12542:2;12524:21;;;12581:2;12561:18;;;12554:30;-1:-1:-1;;;12615:2:1;12600:18;;12593:46;12671:2;12656:18;;12340:340::o;14705:356::-;14907:2;14889:21;;;14926:18;;;14919:30;14985:34;14980:2;14965:18;;14958:62;15052:2;15037:18;;14705:356::o;16647:413::-;16849:2;16831:21;;;16888:2;16868:18;;;16861:30;16927:34;16922:2;16907:18;;16900:62;-1:-1:-1;;;16993:2:1;16978:18;;16971:47;17050:3;17035:19;;16647:413::o;18001:434::-;18234:6;18223:9;18216:25;18277:6;18272:2;18261:9;18257:18;18250:34;18320:6;18315:2;18304:9;18300:18;18293:34;18363:3;18358:2;18347:9;18343:18;18336:31;18197:4;18384:45;18424:3;18413:9;18409:19;18401:6;18384:45;:::i;18566:128::-;18606:3;18637:1;18633:6;18630:1;18627:13;18624:39;;;18643:18;;:::i;:::-;-1:-1:-1;18679:9:1;;18566:128::o;18699:120::-;18739:1;18765;18755:35;;18770:18;;:::i;:::-;-1:-1:-1;18804:9:1;;18699:120::o;18824:168::-;18864:7;18930:1;18926;18922:6;18918:14;18915:1;18912:21;18907:1;18900:9;18893:17;18889:45;18886:71;;;18937:18;;:::i;:::-;-1:-1:-1;18977:9:1;;18824:168::o;18997:125::-;19037:4;19065:1;19062;19059:8;19056:34;;;19070:18;;:::i;:::-;-1:-1:-1;19107:9:1;;18997:125::o;19127:258::-;19199:1;19209:113;19223:6;19220:1;19217:13;19209:113;;;19299:11;;;19293:18;19280:11;;;19273:39;19245:2;19238:10;19209:113;;;19340:6;19337:1;19334:13;19331:48;;;-1:-1:-1;;19375:1:1;19357:16;;19350:27;19127:258::o;19390:380::-;19469:1;19465:12;;;;19512;;;19533:61;;19587:4;19579:6;19575:17;19565:27;;19533:61;19640:2;19632:6;19629:14;19609:18;19606:38;19603:161;;;19686:10;19681:3;19677:20;19674:1;19667:31;19721:4;19718:1;19711:15;19749:4;19746:1;19739:15;19603:161;;19390:380;;;:::o;19775:135::-;19814:3;-1:-1:-1;;19835:17:1;;19832:43;;;19855:18;;:::i;:::-;-1:-1:-1;19902:1:1;19891:13;;19775:135::o;19915:112::-;19947:1;19973;19963:35;;19978:18;;:::i;:::-;-1:-1:-1;20012:9:1;;19915:112::o;20032:127::-;20093:10;20088:3;20084:20;20081:1;20074:31;20124:4;20121:1;20114:15;20148:4;20145:1;20138:15;20164:127;20225:10;20220:3;20216:20;20213:1;20206:31;20256:4;20253:1;20246:15;20280:4;20277:1;20270:15;20296:127;20357:10;20352:3;20348:20;20345:1;20338:31;20388:4;20385:1;20378:15;20412:4;20409:1;20402:15;20428:127;20489:10;20484:3;20480:20;20477:1;20470:31;20520:4;20517:1;20510:15;20544:4;20541:1;20534:15;20560:127;20621:10;20616:3;20612:20;20609:1;20602:31;20652:4;20649:1;20642:15;20676:4;20673:1;20666:15;20692:131;-1:-1:-1;;;;;;20766:32:1;;20756:43;;20746:71;;20813:1;20810;20803:12
Swarm Source
ipfs://15c9682291e4b437958764bd5188e982b7ac2c2dabc6e15d730276fa67be943a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.