Token Slime Shady
Overview ERC721
Total Supply:
6,671 SLIME
Holders:
234 addresses
Transfers:
-
Contract:
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NFT
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-18 */ // Sources flattened with hardhat v2.7.0 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.0 (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/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, 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/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.0 (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/utils/[email protected] // OpenZeppelin Contracts v4.4.0 (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/utils/[email protected] // OpenZeppelin Contracts v4.4.0 (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/utils/[email protected] // OpenZeppelin Contracts v4.4.0 (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/introspection/[email protected] // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: 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 { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: 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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev 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/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 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/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.0 (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/[email protected] // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/libraries/SafeMath.sol // OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File contracts/IERC2981.sol pragma solidity >=0.7.0 <0.9.0; /// @title IERC2981 /// @dev Interface for the ERC2981 - Token Royalty standard interface IERC2981 { /// @notice Called with the sale price to determine how much royalty // is owed and to whom. /// @param _tokenId - the NFT asset queried for royalty information /// @param _value - the sale price of the NFT asset specified by _tokenId /// @return _receiver - address of who should be sent the royalty payment /// @return _royaltyAmount - the royalty payment amount for value sale price function royaltyInfo(uint256 _tokenId, uint256 _value) external view returns (address _receiver, uint256 _royaltyAmount); } // File contracts/ERC2981.sol pragma solidity >=0.7.0 <0.9.0; /// @dev This is a contract used to add ERC2981 support to ERC721 and 1155 abstract contract ERC2981 is ERC165, IERC2981 { bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a; /// @inheritdoc ERC165 function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == _INTERFACE_ID_ERC2981 || super.supportsInterface(interfaceId); } } // File contracts/NFT.sol //SPDX-License-Identifier: Unlicense pragma solidity >=0.7.0 <0.9.0; interface INFT_Minter { function claimReward(uint256 tokenId) external; } contract NFT is ERC721Enumerable, Ownable, ERC2981 { using Strings for uint256; using SafeMath for uint256; string public baseURI; /** * Royalties fee percent. */ uint256 public royaltiesFees = 4; // 4% /** * Royalties address. */ address public royaltiesAddress; /** * Staking address. */ address public stakingAddress; /** * Address of the minting contract for the main collection. */ INFT_Minter public mainMinter; /** * @dev Mapping of addresses that are authorized to add mint new tokens. */ mapping(address => bool) public authorizedAddresses; /** * @dev Staking weight; */ mapping(uint256 => uint16) tokenWeight; /** * @dev Input stuct */ struct WeightInput { uint256 nftId; uint16 weight; } uint16 baseWeight; /** * @dev Only authorized addresses can call a function with this modifier. */ modifier onlyAuthorized() { require( authorizedAddresses[msg.sender] || owner() == msg.sender, "Not authorized" ); _; } /** * @dev Sets or revokes authorized address. * @param addr Address we are setting. * @param isAuthorized True is setting, false if we are revoking. */ function setAuthorizedAddress(address addr, bool isAuthorized) external onlyOwner { authorizedAddresses[addr] = isAuthorized; } /** * @dev Sets or revokes authorized address. * @param _mainMinterAddress Address we are setting. */ function setMainMinterAddress(address _mainMinterAddress) external onlyOwner { require( address(mainMinter) == address(0), "Main minter address already set" ); mainMinter = INFT_Minter(_mainMinterAddress); authorizedAddresses[_mainMinterAddress] = true; } constructor( string memory _name, string memory _symbol, string memory _initBaseURI, address _royaltiesAddress, uint16 _baseWeight ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); royaltiesAddress = _royaltiesAddress; baseWeight = _baseWeight; // 15% of mint price goes to previous minters // rewardPerMint = cost.mul(15).div(100); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721Enumerable, ERC2981) returns (bool) { return super.supportsInterface(interfaceId); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(address _to, uint256 _id) public onlyAuthorized { _safeMint(_to, _id); } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { if (address(mainMinter) != address(0) && address(from) != address(0)) { mainMinter.claimReward(tokenId); } super._beforeTokenTransfer(from, to, tokenId); } 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" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString())) : ""; } /** * Pre approve staking contract */ function isApprovedForAll(address _owner, address _operator) public view override returns (bool) { if (_operator == stakingAddress) { return true; } return super.isApprovedForAll(_owner, _operator); } function setStakingAddress(address _stakingAddress) external onlyOwner { require(stakingAddress == address(0), "Staking address already set"); stakingAddress = _stakingAddress; } function getWeight(uint256 nftId) public view returns (uint16) { require( _exists(nftId), "ERC721Metadata: URI query for nonexistent token" ); if (tokenWeight[nftId] == 0) { return baseWeight; } return tokenWeight[nftId]; } function setWeight(WeightInput[] calldata weights) public onlyAuthorized { for (uint256 i = 0; i < weights.length; i++) { tokenWeight[weights[i].nftId] = weights[i].weight; } } /** * Set royalties fees. */ function setRoyaltiesFees(uint256 _royaltiesFees) public onlyOwner { royaltiesFees = _royaltiesFees; } /** * Set royalties address. */ function setRoyaltiesAddress(address _royaltiesAddress) public onlyOwner { royaltiesAddress = _royaltiesAddress; } /** * Get royalties information. */ function royaltyInfo(uint256 tokenId, uint256 value) external view override returns (address receiver, uint256 royaltyAmount) { receiver = royaltiesAddress; royaltyAmount = (value * royaltiesFees) / 100; } }
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":"address","name":"_royaltiesAddress","type":"address"},{"internalType":"uint16","name":"_baseWeight","type":"uint16"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"getWeight","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":"mainMinter","outputs":[{"internalType":"contract INFT_Minter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royaltiesAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltiesFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":"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":"address","name":"addr","type":"address"},{"internalType":"bool","name":"isAuthorized","type":"bool"}],"name":"setAuthorizedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mainMinterAddress","type":"address"}],"name":"setMainMinterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_royaltiesAddress","type":"address"}],"name":"setRoyaltiesAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_royaltiesFees","type":"uint256"}],"name":"setRoyaltiesFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingAddress","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint16","name":"weight","type":"uint16"}],"internalType":"struct NFT.WeightInput[]","name":"weights","type":"tuple[]"}],"name":"setWeight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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"}]
Contract Creation Code
60806040526004600c553480156200001657600080fd5b5060405162004f7538038062004f7583398181016040528101906200003c9190620003ff565b8484816000908051906020019062000056929190620002af565b5080600190805190602001906200006f929190620002af565b50505062000092620000866200010c60201b60201c565b6200011460201b60201c565b620000a383620001da60201b60201c565b81600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548161ffff021916908361ffff1602179055505050505050620006e8565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001ea6200010c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002106200028560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000260906200050e565b60405180910390fd5b80600b908051906020019062000281929190620002af565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002bd9062000620565b90600052602060002090601f016020900481019282620002e157600085556200032d565b82601f10620002fc57805160ff19168380011785556200032d565b828001600101855582156200032d579182015b828111156200032c5782518255916020019190600101906200030f565b5b5090506200033c919062000340565b5090565b5b808211156200035b57600081600090555060010162000341565b5090565b600062000376620003708462000564565b62000530565b9050828152602081018484840111156200038f57600080fd5b6200039c848285620005ea565b509392505050565b600081519050620003b581620006b4565b92915050565b600082601f830112620003cd57600080fd5b8151620003df8482602086016200035f565b91505092915050565b600081519050620003f981620006ce565b92915050565b600080600080600060a086880312156200041857600080fd5b600086015167ffffffffffffffff8111156200043357600080fd5b6200044188828901620003bb565b955050602086015167ffffffffffffffff8111156200045f57600080fd5b6200046d88828901620003bb565b945050604086015167ffffffffffffffff8111156200048b57600080fd5b6200049988828901620003bb565b9350506060620004ac88828901620003a4565b9250506080620004bf88828901620003e8565b9150509295509295909350565b6000620004db60208362000597565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600060208201905081810360008301526200052981620004cc565b9050919050565b6000604051905081810181811067ffffffffffffffff821117156200055a576200055962000685565b5b8060405250919050565b600067ffffffffffffffff82111562000582576200058162000685565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b6000620005b582620005ca565b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200060a578082015181840152602081019050620005ed565b838111156200061a576000848401525b50505050565b600060028204905060018216806200063957607f821691505b6020821081141562000650576200064f62000656565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620006bf81620005a8565b8114620006cb57600080fd5b50565b620006d981620005bc565b8114620006e557600080fd5b50565b61487d80620006f86000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806370a0823111610125578063d7b4be24116100ad578063e985e9c51161007c578063e985e9c51461064e578063f19e207e1461067e578063f2fde38b146106ae578063f4e0d9ac146106ca578063fd4af82c146106e65761021c565b8063d7b4be24146105c8578063d851fdfd146105e6578063dc95c4a714610616578063e4455d5d146106325761021c565b806395d89b41116100f457806395d89b4114610524578063a22cb46514610542578063b88d4fde1461055e578063bf2fa22b1461057a578063c87b56dd146105985761021c565b806370a08231146104ae578063715018a6146104de57806380c644f1146104e85780638da5cb5b146105065761021c565b80632f745c59116101a8578063438b630011610177578063438b6300146103e45780634f6ccce71461041457806355f804b3146104445780636352211e146104605780636c0360eb146104905761021c565b80632f745c591461035e578063328825351461038e57806340c10f19146103ac57806342842e0e146103c85761021c565b8063097f0e3c116101ef578063097f0e3c146102bb5780631351cf51146102d757806318160ddd146102f357806323b872dd146103115780632a55205a1461032d5761021c565b806301ffc9a71461022157806306fdde0314610251578063081812fc1461026f578063095ea7b31461029f575b600080fd5b61023b60048036038101906102369190613565565b610702565b6040516102489190614023565b60405180910390f35b610259610714565b6040516102669190614059565b60405180910390f35b61028960048036038101906102849190613621565b6107a6565b6040516102969190613f71565b60405180910390f35b6102b960048036038101906102b491906134e4565b61082b565b005b6102d560048036038101906102d09190613621565b610943565b005b6102f160048036038101906102ec91906134a8565b6109c9565b005b6102fb610aa0565b6040516103089190614336565b60405180910390f35b61032b600480360381019061032691906133de565b610aad565b005b6103476004803603810190610342919061364a565b610b0d565b604051610355929190613fd8565b60405180910390f35b610378600480360381019061037391906134e4565b610b58565b6040516103859190614336565b60405180910390f35b610396610bfd565b6040516103a39190613f71565b60405180910390f35b6103c660048036038101906103c191906134e4565b610c23565b005b6103e260048036038101906103dd91906133de565b610cfa565b005b6103fe60048036038101906103f99190613379565b610d1a565b60405161040b9190614001565b60405180910390f35b61042e60048036038101906104299190613621565b610e14565b60405161043b9190614336565b60405180910390f35b61045e600480360381019061045991906135b7565b610eab565b005b61047a60048036038101906104759190613621565b610f41565b6040516104879190613f71565b60405180910390f35b610498610ff3565b6040516104a59190614059565b60405180910390f35b6104c860048036038101906104c39190613379565b611081565b6040516104d59190614336565b60405180910390f35b6104e6611139565b005b6104f06111c1565b6040516104fd9190614336565b60405180910390f35b61050e6111c7565b60405161051b9190613f71565b60405180910390f35b61052c6111f1565b6040516105399190614059565b60405180910390f35b61055c600480360381019061055791906134a8565b611283565b005b6105786004803603810190610573919061342d565b611299565b005b6105826112fb565b60405161058f919061403e565b60405180910390f35b6105b260048036038101906105ad9190613621565b611321565b6040516105bf9190614059565b60405180910390f35b6105d06113c8565b6040516105dd9190613f71565b60405180910390f35b61060060048036038101906105fb9190613621565b6113ee565b60405161060d919061431b565b60405180910390f35b610630600480360381019061062b9190613379565b6114a8565b005b61064c60048036038101906106479190613520565b611568565b005b610668600480360381019061066391906133a2565b611717565b6040516106759190614023565b60405180910390f35b61069860048036038101906106939190613379565b61178b565b6040516106a59190614023565b60405180910390f35b6106c860048036038101906106c39190613379565b6117ab565b005b6106e460048036038101906106df9190613379565b6118a3565b005b61070060048036038101906106fb9190613379565b6119f4565b005b600061070d82611b9d565b9050919050565b6060600080546107239061465b565b80601f016020809104026020016040519081016040528092919081815260200182805461074f9061465b565b801561079c5780601f106107715761010080835404028352916020019161079c565b820191906000526020600020905b81548152906001019060200180831161077f57829003601f168201915b5050505050905090565b60006107b182611bfe565b6107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e7906141db565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061083682610f41565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089e9061429b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108c6611c6a565b73ffffffffffffffffffffffffffffffffffffffff1614806108f557506108f4816108ef611c6a565b611717565b5b610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092b9061415b565b60405180910390fd5b61093e8383611c72565b505050565b61094b611c6a565b73ffffffffffffffffffffffffffffffffffffffff166109696111c7565b73ffffffffffffffffffffffffffffffffffffffff16146109bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b6906141fb565b60405180910390fd5b80600c8190555050565b6109d1611c6a565b73ffffffffffffffffffffffffffffffffffffffff166109ef6111c7565b73ffffffffffffffffffffffffffffffffffffffff1614610a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3c906141fb565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600880549050905090565b610abe610ab8611c6a565b82611d2b565b610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af4906142bb565b60405180910390fd5b610b08838383611e09565b505050565b600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506064600c5484610b4591906144e5565b610b4f91906144b4565b90509250929050565b6000610b6383611081565b8210610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b9061407b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610cad57503373ffffffffffffffffffffffffffffffffffffffff16610c956111c7565b73ffffffffffffffffffffffffffffffffffffffff16145b610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce3906142fb565b60405180910390fd5b610cf68282612065565b5050565b610d1583838360405180602001604052806000815250611299565b505050565b60606000610d2783611081565b905060008167ffffffffffffffff811115610d6b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610d995781602001602082028036833780820191505090505b50905060005b82811015610e0957610db18582610b58565b828281518110610dea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610e019061468d565b915050610d9f565b508092505050919050565b6000610e1e610aa0565b8210610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e56906142db565b60405180910390fd5b60088281548110610e99577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610eb3611c6a565b73ffffffffffffffffffffffffffffffffffffffff16610ed16111c7565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e906141fb565b60405180910390fd5b80600b9080519060200190610f3d92919061313e565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe19061419b565b60405180910390fd5b80915050919050565b600b80546110009061465b565b80601f016020809104026020016040519081016040528092919081815260200182805461102c9061465b565b80156110795780601f1061104e57610100808354040283529160200191611079565b820191906000526020600020905b81548152906001019060200180831161105c57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e99061417b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611141611c6a565b73ffffffffffffffffffffffffffffffffffffffff1661115f6111c7565b73ffffffffffffffffffffffffffffffffffffffff16146111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ac906141fb565b60405180910390fd5b6111bf6000612083565b565b600c5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546112009061465b565b80601f016020809104026020016040519081016040528092919081815260200182805461122c9061465b565b80156112795780601f1061124e57610100808354040283529160200191611279565b820191906000526020600020905b81548152906001019060200180831161125c57829003601f168201915b5050505050905090565b61129561128e611c6a565b8383612149565b5050565b6112aa6112a4611c6a565b83611d2b565b6112e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e0906142bb565b60405180910390fd5b6112f5848484846122b6565b50505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606061132c82611bfe565b61136b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113629061423b565b60405180910390fd5b6000611375612312565b9050600081511161139557604051806020016040528060008152506113c0565b8061139f846123a4565b6040516020016113b0929190613f4d565b6040516020818303038152906040525b915050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006113f982611bfe565b611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f9061423b565b60405180910390fd5b60006011600084815260200190815260200160002060009054906101000a900461ffff1661ffff16141561147e57601260009054906101000a900461ffff1690506114a3565b6011600083815260200190815260200160002060009054906101000a900461ffff1690505b919050565b6114b0611c6a565b73ffffffffffffffffffffffffffffffffffffffff166114ce6111c7565b73ffffffffffffffffffffffffffffffffffffffff1614611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b906141fb565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806115f257503373ffffffffffffffffffffffffffffffffffffffff166115da6111c7565b73ffffffffffffffffffffffffffffffffffffffff16145b611631576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611628906142fb565b60405180910390fd5b60005b8282905081101561171257828282818110611678577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060400201602001602081019061169091906135f8565b601160008585858181106116cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506040020160000135815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550808061170a9061468d565b915050611634565b505050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117785760019050611785565b6117828383612551565b90505b92915050565b60106020528060005260406000206000915054906101000a900460ff1681565b6117b3611c6a565b73ffffffffffffffffffffffffffffffffffffffff166117d16111c7565b73ffffffffffffffffffffffffffffffffffffffff1614611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181e906141fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188e906140bb565b60405180910390fd5b6118a081612083565b50565b6118ab611c6a565b73ffffffffffffffffffffffffffffffffffffffff166118c96111c7565b73ffffffffffffffffffffffffffffffffffffffff161461191f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611916906141fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a79061425b565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6119fc611c6a565b73ffffffffffffffffffffffffffffffffffffffff16611a1a6111c7565b73ffffffffffffffffffffffffffffffffffffffff1614611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a67906141fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af89061427b565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000632a55205a60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611bf75750611bf6826125e5565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ce583610f41565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d3682611bfe565b611d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6c9061413b565b60405180910390fd5b6000611d8083610f41565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611def57508373ffffffffffffffffffffffffffffffffffffffff16611dd7846107a6565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e005750611dff8185611717565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e2982610f41565b73ffffffffffffffffffffffffffffffffffffffff1614611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e769061421b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee6906140fb565b60405180910390fd5b611efa83838361265f565b611f05600082611c72565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f55919061453f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fac919061445e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61207f82826040518060200160405280600081525061278e565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121af9061411b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122a99190614023565b60405180910390a3505050565b6122c1848484611e09565b6122cd848484846127e9565b61230c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123039061409b565b60405180910390fd5b50505050565b6060600b80546123219061465b565b80601f016020809104026020016040519081016040528092919081815260200182805461234d9061465b565b801561239a5780601f1061236f5761010080835404028352916020019161239a565b820191906000526020600020905b81548152906001019060200180831161237d57829003601f168201915b5050505050905090565b606060008214156123ec576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061254c565b600082905060005b6000821461241e5780806124079061468d565b915050600a8261241791906144b4565b91506123f4565b60008167ffffffffffffffff811115612460577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124925781602001600182028036833780820191505090505b5090505b60008514612545576001826124ab919061453f565b9150600a856124ba91906146d6565b60306124c6919061445e565b60f81b818381518110612502577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561253e91906144b4565b9450612496565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612658575061265782612980565b5b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156126eb5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561277e57600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae169a50826040518263ffffffff1660e01b815260040161274b9190614336565b600060405180830381600087803b15801561276557600080fd5b505af1158015612779573d6000803e3d6000fd5b505050505b612789838383612a62565b505050565b6127988383612b76565b6127a560008484846127e9565b6127e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127db9061409b565b60405180910390fd5b505050565b600061280a8473ffffffffffffffffffffffffffffffffffffffff16612d44565b15612973578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612833611c6a565b8786866040518563ffffffff1660e01b81526004016128559493929190613f8c565b602060405180830381600087803b15801561286f57600080fd5b505af19250505080156128a057506040513d601f19601f8201168201806040525081019061289d919061358e565b60015b612923573d80600081146128d0576040519150601f19603f3d011682016040523d82523d6000602084013e6128d5565b606091505b5060008151141561291b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129129061409b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612978565b600190505b949350505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612a4b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612a5b5750612a5a82612d57565b5b9050919050565b612a6d838383612dc1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ab057612aab81612dc6565b612aef565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612aee57612aed8382612e0f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b3257612b2d81612f7c565b612b71565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b7057612b6f82826130bf565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdd906141bb565b60405180910390fd5b612bef81611bfe565b15612c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c26906140db565b60405180910390fd5b612c3b6000838361265f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c8b919061445e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e1c84611081565b612e26919061453f565b9050600060076000848152602001908152602001600020549050818114612f0b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f90919061453f565b9050600060096000848152602001908152602001600020549050600060088381548110612fe6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061302e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006130ca83611081565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461314a9061465b565b90600052602060002090601f01602090048101928261316c57600085556131b3565b82601f1061318557805160ff19168380011785556131b3565b828001600101855582156131b3579182015b828111156131b2578251825591602001919060010190613197565b5b5090506131c091906131c4565b5090565b5b808211156131dd5760008160009055506001016131c5565b5090565b60006131f46131ef84614382565b614351565b90508281526020810184848401111561320c57600080fd5b613217848285614619565b509392505050565b600061323261322d846143b2565b614351565b90508281526020810184848401111561324a57600080fd5b613255848285614619565b509392505050565b60008135905061326c816147d4565b92915050565b60008083601f84011261328457600080fd5b8235905067ffffffffffffffff81111561329d57600080fd5b6020830191508360408202830111156132b557600080fd5b9250929050565b6000813590506132cb816147eb565b92915050565b6000813590506132e081614802565b92915050565b6000815190506132f581614802565b92915050565b600082601f83011261330c57600080fd5b813561331c8482602086016131e1565b91505092915050565b600082601f83011261333657600080fd5b813561334684826020860161321f565b91505092915050565b60008135905061335e81614819565b92915050565b60008135905061337381614830565b92915050565b60006020828403121561338b57600080fd5b60006133998482850161325d565b91505092915050565b600080604083850312156133b557600080fd5b60006133c38582860161325d565b92505060206133d48582860161325d565b9150509250929050565b6000806000606084860312156133f357600080fd5b60006134018682870161325d565b93505060206134128682870161325d565b925050604061342386828701613364565b9150509250925092565b6000806000806080858703121561344357600080fd5b60006134518782880161325d565b94505060206134628782880161325d565b935050604061347387828801613364565b925050606085013567ffffffffffffffff81111561349057600080fd5b61349c878288016132fb565b91505092959194509250565b600080604083850312156134bb57600080fd5b60006134c98582860161325d565b92505060206134da858286016132bc565b9150509250929050565b600080604083850312156134f757600080fd5b60006135058582860161325d565b925050602061351685828601613364565b9150509250929050565b6000806020838503121561353357600080fd5b600083013567ffffffffffffffff81111561354d57600080fd5b61355985828601613272565b92509250509250929050565b60006020828403121561357757600080fd5b6000613585848285016132d1565b91505092915050565b6000602082840312156135a057600080fd5b60006135ae848285016132e6565b91505092915050565b6000602082840312156135c957600080fd5b600082013567ffffffffffffffff8111156135e357600080fd5b6135ef84828501613325565b91505092915050565b60006020828403121561360a57600080fd5b60006136188482850161334f565b91505092915050565b60006020828403121561363357600080fd5b600061364184828501613364565b91505092915050565b6000806040838503121561365d57600080fd5b600061366b85828601613364565b925050602061367c85828601613364565b9150509250929050565b60006136928383613f2f565b60208301905092915050565b6136a781614573565b82525050565b60006136b8826143f2565b6136c28185614420565b93506136cd836143e2565b8060005b838110156136fe5781516136e58882613686565b97506136f083614413565b9250506001810190506136d1565b5085935050505092915050565b61371481614585565b82525050565b6000613725826143fd565b61372f8185614431565b935061373f818560208601614628565b613748816147c3565b840191505092915050565b61375c816145f5565b82525050565b600061376d82614408565b6137778185614442565b9350613787818560208601614628565b613790816147c3565b840191505092915050565b60006137a682614408565b6137b08185614453565b93506137c0818560208601614628565b80840191505092915050565b60006137d9602b83614442565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b600061383f603283614442565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006138a5602683614442565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061390b601c83614442565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061394b602483614442565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139b1601983614442565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006139f1602c83614442565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613a57603883614442565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613abd602a83614442565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b23602983614442565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b89602083614442565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613bc9602c83614442565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613c2f602083614442565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613c6f602983614442565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613cd5602f83614442565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613d3b601b83614442565b91507f5374616b696e67206164647265737320616c72656164792073657400000000006000830152602082019050919050565b6000613d7b601f83614442565b91507f4d61696e206d696e746572206164647265737320616c726561647920736574006000830152602082019050919050565b6000613dbb602183614442565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e21603183614442565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613e87602c83614442565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613eed600e83614442565b91507f4e6f7420617574686f72697a65640000000000000000000000000000000000006000830152602082019050919050565b613f29816145bd565b82525050565b613f38816145eb565b82525050565b613f47816145eb565b82525050565b6000613f59828561379b565b9150613f65828461379b565b91508190509392505050565b6000602082019050613f86600083018461369e565b92915050565b6000608082019050613fa1600083018761369e565b613fae602083018661369e565b613fbb6040830185613f3e565b8181036060830152613fcd818461371a565b905095945050505050565b6000604082019050613fed600083018561369e565b613ffa6020830184613f3e565b9392505050565b6000602082019050818103600083015261401b81846136ad565b905092915050565b6000602082019050614038600083018461370b565b92915050565b60006020820190506140536000830184613753565b92915050565b600060208201905081810360008301526140738184613762565b905092915050565b60006020820190508181036000830152614094816137cc565b9050919050565b600060208201905081810360008301526140b481613832565b9050919050565b600060208201905081810360008301526140d481613898565b9050919050565b600060208201905081810360008301526140f4816138fe565b9050919050565b600060208201905081810360008301526141148161393e565b9050919050565b60006020820190508181036000830152614134816139a4565b9050919050565b60006020820190508181036000830152614154816139e4565b9050919050565b6000602082019050818103600083015261417481613a4a565b9050919050565b6000602082019050818103600083015261419481613ab0565b9050919050565b600060208201905081810360008301526141b481613b16565b9050919050565b600060208201905081810360008301526141d481613b7c565b9050919050565b600060208201905081810360008301526141f481613bbc565b9050919050565b6000602082019050818103600083015261421481613c22565b9050919050565b6000602082019050818103600083015261423481613c62565b9050919050565b6000602082019050818103600083015261425481613cc8565b9050919050565b6000602082019050818103600083015261427481613d2e565b9050919050565b6000602082019050818103600083015261429481613d6e565b9050919050565b600060208201905081810360008301526142b481613dae565b9050919050565b600060208201905081810360008301526142d481613e14565b9050919050565b600060208201905081810360008301526142f481613e7a565b9050919050565b6000602082019050818103600083015261431481613ee0565b9050919050565b60006020820190506143306000830184613f20565b92915050565b600060208201905061434b6000830184613f3e565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561437857614377614794565b5b8060405250919050565b600067ffffffffffffffff82111561439d5761439c614794565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156143cd576143cc614794565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614469826145eb565b9150614474836145eb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144a9576144a8614707565b5b828201905092915050565b60006144bf826145eb565b91506144ca836145eb565b9250826144da576144d9614736565b5b828204905092915050565b60006144f0826145eb565b91506144fb836145eb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561453457614533614707565b5b828202905092915050565b600061454a826145eb565b9150614555836145eb565b92508282101561456857614567614707565b5b828203905092915050565b600061457e826145cb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061460082614607565b9050919050565b6000614612826145cb565b9050919050565b82818337600083830152505050565b60005b8381101561464657808201518184015260208101905061462b565b83811115614655576000848401525b50505050565b6000600282049050600182168061467357607f821691505b6020821081141561468757614686614765565b5b50919050565b6000614698826145eb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146cb576146ca614707565b5b600182019050919050565b60006146e1826145eb565b91506146ec836145eb565b9250826146fc576146fb614736565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6147dd81614573565b81146147e857600080fd5b50565b6147f481614585565b81146147ff57600080fd5b50565b61480b81614591565b811461481657600080fd5b50565b614822816145bd565b811461482d57600080fd5b50565b614839816145eb565b811461484457600080fd5b5056fea2646970667358221220dc3be7b941f0532728e71829191b4d328d4d6acd4f8bfd75c4ea7e93fd368a9164736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000abe85619bb4748f24b7dd717ea17a4185ee08a70000000000000000000000000000000000000000000000000000000000000cb2000000000000000000000000000000000000000000000000000000000000000b536c696d652053686164790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005534c494d45000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002668747470733a2f2f736c696d65736861646965732e636f6d2f6170692d6d657461646174612f0000000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000abe85619bb4748f24b7dd717ea17a4185ee08a70000000000000000000000000000000000000000000000000000000000000cb2000000000000000000000000000000000000000000000000000000000000000b536c696d652053686164790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005534c494d45000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002668747470733a2f2f736c696d65736861646965732e636f6d2f6170692d6d657461646174612f0000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Slime Shady
Arg [1] : _symbol (string): SLIME
Arg [2] : _initBaseURI (string): https://slimeshadies.com/api-metadata/
Arg [3] : _royaltiesAddress (address): 0x0abe85619bb4748f24b7dd717ea17a4185ee08a7
Arg [4] : _baseWeight (uint16): 3250
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 0000000000000000000000000abe85619bb4748f24b7dd717ea17a4185ee08a7
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000cb2
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [6] : 536c696d65205368616479000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [8] : 534c494d45000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000026
Arg [10] : 68747470733a2f2f736c696d65736861646965732e636f6d2f6170692d6d6574
Arg [11] : 61646174612f0000000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
53089:6123:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55588:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22283:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23842:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23365:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58578:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54493:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36514:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24592:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58940:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;36182:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53385:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55974:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25002:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56537:390;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36704:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56082:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21977:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53214:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21707:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43741:103;;;:::i;:::-;;53293:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43090:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22452:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24135:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25258:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53589:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56935:489;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53468:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57992:312;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58751:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58312:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57487:288;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53723:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43999:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57783;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54790:345;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55588:230;55745:4;55774:36;55798:11;55774:23;:36::i;:::-;55767:43;;55588:230;;;:::o;22283:100::-;22337:13;22370:5;22363:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22283:100;:::o;23842:221::-;23918:7;23946:16;23954:7;23946;:16::i;:::-;23938:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24031:15;:24;24047:7;24031:24;;;;;;;;;;;;;;;;;;;;;24024:31;;23842:221;;;:::o;23365:411::-;23446:13;23462:23;23477:7;23462:14;:23::i;:::-;23446:39;;23510:5;23504:11;;:2;:11;;;;23496:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23604:5;23588:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23613:37;23630:5;23637:12;:10;:12::i;:::-;23613:16;:37::i;:::-;23588:62;23566:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23747:21;23756:2;23760:7;23747:8;:21::i;:::-;23365:411;;;:::o;58578:116::-;43321:12;:10;:12::i;:::-;43310:23;;:7;:5;:7::i;:::-;:23;;;43302:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58672:14:::1;58656:13;:30;;;;58578:116:::0;:::o;54493:164::-;43321:12;:10;:12::i;:::-;43310:23;;:7;:5;:7::i;:::-;:23;;;43302:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54637:12:::1;54609:19;:25;54629:4;54609:25;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;54493:164:::0;;:::o;36514:113::-;36575:7;36602:10;:17;;;;36595:24;;36514:113;:::o;24592:339::-;24787:41;24806:12;:10;:12::i;:::-;24820:7;24787:18;:41::i;:::-;24779:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24895:28;24905:4;24911:2;24915:7;24895:9;:28::i;:::-;24592:339;;;:::o;58940:269::-;59061:16;59079:21;59129:16;;;;;;;;;;;59118:27;;59198:3;59181:13;;59173:5;:21;;;;:::i;:::-;59172:29;;;;:::i;:::-;59156:45;;58940:269;;;;;:::o;36182:256::-;36279:7;36315:23;36332:5;36315:16;:23::i;:::-;36307:5;:31;36299:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36404:12;:19;36417:5;36404:19;;;;;;;;;;;;;;;:26;36424:5;36404:26;;;;;;;;;;;;36397:33;;36182:256;;;;:::o;53385:31::-;;;;;;;;;;;;;:::o;55974:100::-;54185:19;:31;54205:10;54185:31;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;54231:10;54220:21;;:7;:5;:7::i;:::-;:21;;;54185:56;54163:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;56047:19:::1;56057:3;56062;56047:9;:19::i;:::-;55974:100:::0;;:::o;25002:185::-;25140:39;25157:4;25163:2;25167:7;25140:39;;;;;;;;;;;;:16;:39::i;:::-;25002:185;;;:::o;56537:390::-;56624:16;56658:23;56684:17;56694:6;56684:9;:17::i;:::-;56658:43;;56712:25;56754:15;56740:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56712:58;;56786:9;56781:113;56801:15;56797:1;:19;56781:113;;;56852:30;56872:6;56880:1;56852:19;:30::i;:::-;56838:8;56847:1;56838:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;56818:3;;;;;:::i;:::-;;;;56781:113;;;;56911:8;56904:15;;;;56537:390;;;:::o;36704:233::-;36779:7;36815:30;:28;:30::i;:::-;36807:5;:38;36799:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36912:10;36923:5;36912:17;;;;;;;;;;;;;;;;;;;;;;;;36905:24;;36704:233;;;:::o;56082:104::-;43321:12;:10;:12::i;:::-;43310:23;;:7;:5;:7::i;:::-;:23;;;43302:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56167:11:::1;56157:7;:21;;;;;;;;;;;;:::i;:::-;;56082:104:::0;:::o;21977:239::-;22049:7;22069:13;22085:7;:16;22093:7;22085:16;;;;;;;;;;;;;;;;;;;;;22069:32;;22137:1;22120:19;;:5;:19;;;;22112:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22203:5;22196:12;;;21977:239;;;:::o;53214:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21707:208::-;21779:7;21824:1;21807:19;;:5;:19;;;;21799:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21891:9;:16;21901:5;21891:16;;;;;;;;;;;;;;;;21884:23;;21707:208;;;:::o;43741:103::-;43321:12;:10;:12::i;:::-;43310:23;;:7;:5;:7::i;:::-;:23;;;43302:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43806:30:::1;43833:1;43806:18;:30::i;:::-;43741:103::o:0;53293:32::-;;;;:::o;43090:87::-;43136:7;43163:6;;;;;;;;;;;43156:13;;43090:87;:::o;22452:104::-;22508:13;22541:7;22534:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22452:104;:::o;24135:155::-;24230:52;24249:12;:10;:12::i;:::-;24263:8;24273;24230:18;:52::i;:::-;24135:155;;:::o;25258:328::-;25433:41;25452:12;:10;:12::i;:::-;25466:7;25433:18;:41::i;:::-;25425:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25539:39;25553:4;25559:2;25563:7;25572:5;25539:13;:39::i;:::-;25258:328;;;;:::o;53589:29::-;;;;;;;;;;;;;:::o;56935:489::-;57053:13;57106:16;57114:7;57106;:16::i;:::-;57084:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;57210:28;57241:10;:8;:10::i;:::-;57210:41;;57313:1;57288:14;57282:28;:32;:134;;;;;;;;;;;;;;;;;57358:14;57374:18;:7;:16;:18::i;:::-;57341:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57282:134;57262:154;;;56935:489;;;:::o;53468:29::-;;;;;;;;;;;;;:::o;57992:312::-;58047:6;58088:14;58096:5;58088:7;:14::i;:::-;58066:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;58214:1;58192:11;:18;58204:5;58192:18;;;;;;;;;;;;;;;;;;;;;:23;;;58188:73;;;58239:10;;;;;;;;;;;58232:17;;;;58188:73;58278:11;:18;58290:5;58278:18;;;;;;;;;;;;;;;;;;;;;58271:25;;57992:312;;;;:::o;58751:128::-;43321:12;:10;:12::i;:::-;43310:23;;:7;:5;:7::i;:::-;:23;;;43302:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58854:17:::1;58835:16;;:36;;;;;;;;;;;;;;;;;;58751:128:::0;:::o;58312:212::-;54185:19;:31;54205:10;54185:31;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;54231:10;54220:21;;:7;:5;:7::i;:::-;:21;;;54185:56;54163:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;58401:9:::1;58396:121;58420:7;;:14;;58416:1;:18;58396:121;;;58488:7;;58496:1;58488:10;;;;;;;;;;;;;;;;;;;;:17;;;;;;;;;;:::i;:::-;58456:11;:29;58468:7;;58476:1;58468:10;;;;;;;;;;;;;;;;;;;;:16;;;58456:29;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;58436:3;;;;;:::i;:::-;;;;58396:121;;;;58312:212:::0;;:::o;57487:288::-;57614:4;57653:14;;;;;;;;;;;57640:27;;:9;:27;;;57636:71;;;57691:4;57684:11;;;;57636:71;57726:41;57749:6;57757:9;57726:22;:41::i;:::-;57719:48;;57487:288;;;;;:::o;53723:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;43999:201::-;43321:12;:10;:12::i;:::-;43310:23;;:7;:5;:7::i;:::-;:23;;;43302:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44108:1:::1;44088:22;;:8;:22;;;;44080:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44164:28;44183:8;44164:18;:28::i;:::-;43999:201:::0;:::o;57783:::-;43321:12;:10;:12::i;:::-;43310:23;;:7;:5;:7::i;:::-;:23;;;43302:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57899:1:::1;57873:28;;:14;;;;;;;;;;;:28;;;57865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57961:15;57944:14;;:32;;;;;;;;;;;;;;;;;;57783:201:::0;:::o;54790:345::-;43321:12;:10;:12::i;:::-;43310:23;;:7;:5;:7::i;:::-;:23;;;43302:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54954:1:::1;54923:33;;54931:10;;;;;;;;;;;54923:33;;;54901:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;55051:18;55026:10;;:44;;;;;;;;;;;;;;;;;;55123:4;55081:19;:39;55101:18;55081:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;54790:345:::0;:::o;52626:269::-;52756:4;52579:10;52813:21;;52798:36;;;:11;:36;;;;:89;;;;52851:36;52875:11;52851:23;:36::i;:::-;52798:89;52778:109;;52626:269;;;:::o;27096:127::-;27161:4;27213:1;27185:30;;:7;:16;27193:7;27185:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27178:37;;27096:127;;;:::o;16559:98::-;16612:7;16639:10;16632:17;;16559:98;:::o;31078:174::-;31180:2;31153:15;:24;31169:7;31153:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31236:7;31232:2;31198:46;;31207:23;31222:7;31207:14;:23::i;:::-;31198:46;;;;;;;;;;;;31078:174;;:::o;27390:348::-;27483:4;27508:16;27516:7;27508;:16::i;:::-;27500:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27584:13;27600:23;27615:7;27600:14;:23::i;:::-;27584:39;;27653:5;27642:16;;:7;:16;;;:51;;;;27686:7;27662:31;;:20;27674:7;27662:11;:20::i;:::-;:31;;;27642:51;:87;;;;27697:32;27714:5;27721:7;27697:16;:32::i;:::-;27642:87;27634:96;;;27390:348;;;;:::o;30382:578::-;30541:4;30514:31;;:23;30529:7;30514:14;:23::i;:::-;:31;;;30506:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30624:1;30610:16;;:2;:16;;;;30602:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30680:39;30701:4;30707:2;30711:7;30680:20;:39::i;:::-;30784:29;30801:1;30805:7;30784:8;:29::i;:::-;30845:1;30826:9;:15;30836:4;30826:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30874:1;30857:9;:13;30867:2;30857:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30905:2;30886:7;:16;30894:7;30886:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30944:7;30940:2;30925:27;;30934:4;30925:27;;;;;;;;;;;;30382:578;;;:::o;28080:110::-;28156:26;28166:2;28170:7;28156:26;;;;;;;;;;;;:9;:26::i;:::-;28080:110;;:::o;44360:191::-;44434:16;44453:6;;;;;;;;;;;44434:25;;44479:8;44470:6;;:17;;;;;;;;;;;;;;;;;;44534:8;44503:40;;44524:8;44503:40;;;;;;;;;;;;44360:191;;:::o;31394:315::-;31549:8;31540:17;;:5;:17;;;;31532:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31636:8;31598:18;:25;31617:5;31598:25;;;;;;;;;;;;;;;:35;31624:8;31598:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31682:8;31660:41;;31675:5;31660:41;;;31692:8;31660:41;;;;;;:::i;:::-;;;;;;;;31394:315;;;:::o;26468:::-;26625:28;26635:4;26641:2;26645:7;26625:9;:28::i;:::-;26672:48;26695:4;26701:2;26705:7;26714:5;26672:22;:48::i;:::-;26664:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26468:315;;;;:::o;55843:108::-;55903:13;55936:7;55929:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55843:108;:::o;17146:723::-;17202:13;17432:1;17423:5;:10;17419:53;;;17450:10;;;;;;;;;;;;;;;;;;;;;17419:53;17482:12;17497:5;17482:20;;17513:14;17538:78;17553:1;17545:4;:9;17538:78;;17571:8;;;;;:::i;:::-;;;;17602:2;17594:10;;;;;:::i;:::-;;;17538:78;;;17626:19;17658:6;17648:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17626:39;;17676:154;17692:1;17683:5;:10;17676:154;;17720:1;17710:11;;;;;:::i;:::-;;;17787:2;17779:5;:10;;;;:::i;:::-;17766:2;:24;;;;:::i;:::-;17753:39;;17736:6;17743;17736:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17816:2;17807:11;;;;;:::i;:::-;;;17676:154;;;17854:6;17840:21;;;;;17146:723;;;;:::o;24361:164::-;24458:4;24482:18;:25;24501:5;24482:25;;;;;;;;;;;;;;;:35;24508:8;24482:35;;;;;;;;;;;;;;;;;;;;;;;;;24475:42;;24361:164;;;;:::o;35874:224::-;35976:4;36015:35;36000:50;;;:11;:50;;;;:90;;;;36054:36;36078:11;36054:23;:36::i;:::-;36000:90;35993:97;;35874:224;;;:::o;56194:335::-;56373:1;56342:33;;56350:10;;;;;;;;;;;56342:33;;;;:64;;;;;56404:1;56379:27;;56387:4;56379:27;;;;56342:64;56338:128;;;56423:10;;;;;;;;;;;:22;;;56446:7;56423:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56338:128;56476:45;56503:4;56509:2;56513:7;56476:26;:45::i;:::-;56194:335;;;:::o;28417:321::-;28547:18;28553:2;28557:7;28547:5;:18::i;:::-;28598:54;28629:1;28633:2;28637:7;28646:5;28598:22;:54::i;:::-;28576:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28417:321;;;:::o;32274:799::-;32429:4;32450:15;:2;:13;;;:15::i;:::-;32446:620;;;32502:2;32486:36;;;32523:12;:10;:12::i;:::-;32537:4;32543:7;32552:5;32486:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32482:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32745:1;32728:6;:13;:18;32724:272;;;32771:60;;;;;;;;;;:::i;:::-;;;;;;;;32724:272;32946:6;32940:13;32931:6;32927:2;32923:15;32916:38;32482:529;32619:41;;;32609:51;;;:6;:51;;;;32602:58;;;;;32446:620;33050:4;33043:11;;32274:799;;;;;;;:::o;21338:305::-;21440:4;21492:25;21477:40;;;:11;:40;;;;:105;;;;21549:33;21534:48;;;:11;:48;;;;21477:105;:158;;;;21599:36;21623:11;21599:23;:36::i;:::-;21477:158;21457:178;;21338:305;;;:::o;37550:589::-;37694:45;37721:4;37727:2;37731:7;37694:26;:45::i;:::-;37772:1;37756:18;;:4;:18;;;37752:187;;;37791:40;37823:7;37791:31;:40::i;:::-;37752:187;;;37861:2;37853:10;;:4;:10;;;37849:90;;37880:47;37913:4;37919:7;37880:32;:47::i;:::-;37849:90;37752:187;37967:1;37953:16;;:2;:16;;;37949:183;;;37986:45;38023:7;37986:36;:45::i;:::-;37949:183;;;38059:4;38053:10;;:2;:10;;;38049:83;;38080:40;38108:2;38112:7;38080:27;:40::i;:::-;38049:83;37949:183;37550:589;;;:::o;29074:382::-;29168:1;29154:16;;:2;:16;;;;29146:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29227:16;29235:7;29227;:16::i;:::-;29226:17;29218:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29289:45;29318:1;29322:2;29326:7;29289:20;:45::i;:::-;29364:1;29347:9;:13;29357:2;29347:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29395:2;29376:7;:16;29384:7;29376:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29440:7;29436:2;29415:33;;29432:1;29415:33;;;;;;;;;;;;29074:382;;:::o;8541:387::-;8601:4;8809:12;8876:7;8864:20;8856:28;;8919:1;8912:4;:8;8905:15;;;8541:387;;;:::o;19776:157::-;19861:4;19900:25;19885:40;;;:11;:40;;;;19878:47;;19776:157;;;:::o;33645:126::-;;;;:::o;38862:164::-;38966:10;:17;;;;38939:15;:24;38955:7;38939:24;;;;;;;;;;;:44;;;;38994:10;39010:7;38994:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38862:164;:::o;39653:988::-;39919:22;39969:1;39944:22;39961:4;39944:16;:22::i;:::-;:26;;;;:::i;:::-;39919:51;;39981:18;40002:17;:26;40020:7;40002:26;;;;;;;;;;;;39981:47;;40149:14;40135:10;:28;40131:328;;40180:19;40202:12;:18;40215:4;40202:18;;;;;;;;;;;;;;;:34;40221:14;40202:34;;;;;;;;;;;;40180:56;;40286:11;40253:12;:18;40266:4;40253:18;;;;;;;;;;;;;;;:30;40272:10;40253:30;;;;;;;;;;;:44;;;;40403:10;40370:17;:30;40388:11;40370:30;;;;;;;;;;;:43;;;;40131:328;;40555:17;:26;40573:7;40555:26;;;;;;;;;;;40548:33;;;40599:12;:18;40612:4;40599:18;;;;;;;;;;;;;;;:34;40618:14;40599:34;;;;;;;;;;;40592:41;;;39653:988;;;;:::o;40936:1079::-;41189:22;41234:1;41214:10;:17;;;;:21;;;;:::i;:::-;41189:46;;41246:18;41267:15;:24;41283:7;41267:24;;;;;;;;;;;;41246:45;;41618:19;41640:10;41651:14;41640:26;;;;;;;;;;;;;;;;;;;;;;;;41618:48;;41704:11;41679:10;41690;41679:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;41815:10;41784:15;:28;41800:11;41784:28;;;;;;;;;;;:41;;;;41956:15;:24;41972:7;41956:24;;;;;;;;;;;41949:31;;;41991:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40936:1079;;;;:::o;38440:221::-;38525:14;38542:20;38559:2;38542:16;:20::i;:::-;38525:37;;38600:7;38573:12;:16;38586:2;38573:16;;;;;;;;;;;;;;;:24;38590:6;38573:24;;;;;;;;;;;:34;;;;38647:6;38618:17;:26;38636:7;38618:26;;;;;;;;;;;:35;;;;38440:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;882:398::-;;;1046:3;1039:4;1031:6;1027:17;1023:27;1013:2;;1064:1;1061;1054:12;1013:2;1100:6;1087:20;1077:30;;1130:18;1122:6;1119:30;1116:2;;;1162:1;1159;1152:12;1116:2;1199:4;1191:6;1187:17;1175:29;;1253:3;1245:4;1237:6;1233:17;1223:8;1219:32;1216:41;1213:2;;;1270:1;1267;1260:12;1213:2;1003:277;;;;;:::o;1286:133::-;;1367:6;1354:20;1345:29;;1383:30;1407:5;1383:30;:::i;:::-;1335:84;;;;:::o;1425:137::-;;1508:6;1495:20;1486:29;;1524:32;1550:5;1524:32;:::i;:::-;1476:86;;;;:::o;1568:141::-;;1655:6;1649:13;1640:22;;1671:32;1697:5;1671:32;:::i;:::-;1630:79;;;;:::o;1728:271::-;;1832:3;1825:4;1817:6;1813:17;1809:27;1799:2;;1850:1;1847;1840:12;1799:2;1890:6;1877:20;1915:78;1989:3;1981:6;1974:4;1966:6;1962:17;1915:78;:::i;:::-;1906:87;;1789:210;;;;;:::o;2019:273::-;;2124:3;2117:4;2109:6;2105:17;2101:27;2091:2;;2142:1;2139;2132:12;2091:2;2182:6;2169:20;2207:79;2282:3;2274:6;2267:4;2259:6;2255:17;2207:79;:::i;:::-;2198:88;;2081:211;;;;;:::o;2298:137::-;;2381:6;2368:20;2359:29;;2397:32;2423:5;2397:32;:::i;:::-;2349:86;;;;:::o;2441:139::-;;2525:6;2512:20;2503:29;;2541:33;2568:5;2541:33;:::i;:::-;2493:87;;;;:::o;2586:262::-;;2694:2;2682:9;2673:7;2669:23;2665:32;2662:2;;;2710:1;2707;2700:12;2662:2;2753:1;2778:53;2823:7;2814:6;2803:9;2799:22;2778:53;:::i;:::-;2768:63;;2724:117;2652:196;;;;:::o;2854:407::-;;;2979:2;2967:9;2958:7;2954:23;2950:32;2947:2;;;2995:1;2992;2985:12;2947:2;3038:1;3063:53;3108:7;3099:6;3088:9;3084:22;3063:53;:::i;:::-;3053:63;;3009:117;3165:2;3191:53;3236:7;3227:6;3216:9;3212:22;3191:53;:::i;:::-;3181:63;;3136:118;2937:324;;;;;:::o;3267:552::-;;;;3409:2;3397:9;3388:7;3384:23;3380:32;3377:2;;;3425:1;3422;3415:12;3377:2;3468:1;3493:53;3538:7;3529:6;3518:9;3514:22;3493:53;:::i;:::-;3483:63;;3439:117;3595:2;3621:53;3666:7;3657:6;3646:9;3642:22;3621:53;:::i;:::-;3611:63;;3566:118;3723:2;3749:53;3794:7;3785:6;3774:9;3770:22;3749:53;:::i;:::-;3739:63;;3694:118;3367:452;;;;;:::o;3825:809::-;;;;;3993:3;3981:9;3972:7;3968:23;3964:33;3961:2;;;4010:1;4007;4000:12;3961:2;4053:1;4078:53;4123:7;4114:6;4103:9;4099:22;4078:53;:::i;:::-;4068:63;;4024:117;4180:2;4206:53;4251:7;4242:6;4231:9;4227:22;4206:53;:::i;:::-;4196:63;;4151:118;4308:2;4334:53;4379:7;4370:6;4359:9;4355:22;4334:53;:::i;:::-;4324:63;;4279:118;4464:2;4453:9;4449:18;4436:32;4495:18;4487:6;4484:30;4481:2;;;4527:1;4524;4517:12;4481:2;4555:62;4609:7;4600:6;4589:9;4585:22;4555:62;:::i;:::-;4545:72;;4407:220;3951:683;;;;;;;:::o;4640:401::-;;;4762:2;4750:9;4741:7;4737:23;4733:32;4730:2;;;4778:1;4775;4768:12;4730:2;4821:1;4846:53;4891:7;4882:6;4871:9;4867:22;4846:53;:::i;:::-;4836:63;;4792:117;4948:2;4974:50;5016:7;5007:6;4996:9;4992:22;4974:50;:::i;:::-;4964:60;;4919:115;4720:321;;;;;:::o;5047:407::-;;;5172:2;5160:9;5151:7;5147:23;5143:32;5140:2;;;5188:1;5185;5178:12;5140:2;5231:1;5256:53;5301:7;5292:6;5281:9;5277:22;5256:53;:::i;:::-;5246:63;;5202:117;5358:2;5384:53;5429:7;5420:6;5409:9;5405:22;5384:53;:::i;:::-;5374:63;;5329:118;5130:324;;;;;:::o;5460:487::-;;;5634:2;5622:9;5613:7;5609:23;5605:32;5602:2;;;5650:1;5647;5640:12;5602:2;5721:1;5710:9;5706:17;5693:31;5751:18;5743:6;5740:30;5737:2;;;5783:1;5780;5773:12;5737:2;5819:111;5922:7;5913:6;5902:9;5898:22;5819:111;:::i;:::-;5801:129;;;;5664:276;5592:355;;;;;:::o;5953:260::-;;6060:2;6048:9;6039:7;6035:23;6031:32;6028:2;;;6076:1;6073;6066:12;6028:2;6119:1;6144:52;6188:7;6179:6;6168:9;6164:22;6144:52;:::i;:::-;6134:62;;6090:116;6018:195;;;;:::o;6219:282::-;;6337:2;6325:9;6316:7;6312:23;6308:32;6305:2;;;6353:1;6350;6343:12;6305:2;6396:1;6421:63;6476:7;6467:6;6456:9;6452:22;6421:63;:::i;:::-;6411:73;;6367:127;6295:206;;;;:::o;6507:375::-;;6625:2;6613:9;6604:7;6600:23;6596:32;6593:2;;;6641:1;6638;6631:12;6593:2;6712:1;6701:9;6697:17;6684:31;6742:18;6734:6;6731:30;6728:2;;;6774:1;6771;6764:12;6728:2;6802:63;6857:7;6848:6;6837:9;6833:22;6802:63;:::i;:::-;6792:73;;6655:220;6583:299;;;;:::o;6888:260::-;;6995:2;6983:9;6974:7;6970:23;6966:32;6963:2;;;7011:1;7008;7001:12;6963:2;7054:1;7079:52;7123:7;7114:6;7103:9;7099:22;7079:52;:::i;:::-;7069:62;;7025:116;6953:195;;;;:::o;7154:262::-;;7262:2;7250:9;7241:7;7237:23;7233:32;7230:2;;;7278:1;7275;7268:12;7230:2;7321:1;7346:53;7391:7;7382:6;7371:9;7367:22;7346:53;:::i;:::-;7336:63;;7292:117;7220:196;;;;:::o;7422:407::-;;;7547:2;7535:9;7526:7;7522:23;7518:32;7515:2;;;7563:1;7560;7553:12;7515:2;7606:1;7631:53;7676:7;7667:6;7656:9;7652:22;7631:53;:::i;:::-;7621:63;;7577:117;7733:2;7759:53;7804:7;7795:6;7784:9;7780:22;7759:53;:::i;:::-;7749:63;;7704:118;7505:324;;;;;:::o;7835:179::-;;7925:46;7967:3;7959:6;7925:46;:::i;:::-;8003:4;7998:3;7994:14;7980:28;;7915:99;;;;:::o;8020:118::-;8107:24;8125:5;8107:24;:::i;:::-;8102:3;8095:37;8085:53;;:::o;8174:732::-;;8322:54;8370:5;8322:54;:::i;:::-;8392:86;8471:6;8466:3;8392:86;:::i;:::-;8385:93;;8502:56;8552:5;8502:56;:::i;:::-;8581:7;8612:1;8597:284;8622:6;8619:1;8616:13;8597:284;;;8698:6;8692:13;8725:63;8784:3;8769:13;8725:63;:::i;:::-;8718:70;;8811:60;8864:6;8811:60;:::i;:::-;8801:70;;8657:224;8644:1;8641;8637:9;8632:14;;8597:284;;;8601:14;8897:3;8890:10;;8298:608;;;;;;;:::o;8912:109::-;8993:21;9008:5;8993:21;:::i;:::-;8988:3;8981:34;8971:50;;:::o;9027:360::-;;9141:38;9173:5;9141:38;:::i;:::-;9195:70;9258:6;9253:3;9195:70;:::i;:::-;9188:77;;9274:52;9319:6;9314:3;9307:4;9300:5;9296:16;9274:52;:::i;:::-;9351:29;9373:6;9351:29;:::i;:::-;9346:3;9342:39;9335:46;;9117:270;;;;;:::o;9393:171::-;9500:57;9551:5;9500:57;:::i;:::-;9495:3;9488:70;9478:86;;:::o;9570:364::-;;9686:39;9719:5;9686:39;:::i;:::-;9741:71;9805:6;9800:3;9741:71;:::i;:::-;9734:78;;9821:52;9866:6;9861:3;9854:4;9847:5;9843:16;9821:52;:::i;:::-;9898:29;9920:6;9898:29;:::i;:::-;9893:3;9889:39;9882:46;;9662:272;;;;;:::o;9940:377::-;;10074:39;10107:5;10074:39;:::i;:::-;10129:89;10211:6;10206:3;10129:89;:::i;:::-;10122:96;;10227:52;10272:6;10267:3;10260:4;10253:5;10249:16;10227:52;:::i;:::-;10304:6;10299:3;10295:16;10288:23;;10050:267;;;;;:::o;10323:375::-;;10486:67;10550:2;10545:3;10486:67;:::i;:::-;10479:74;;10583:34;10579:1;10574:3;10570:11;10563:55;10649:13;10644:2;10639:3;10635:12;10628:35;10689:2;10684:3;10680:12;10673:19;;10469:229;;;:::o;10704:382::-;;10867:67;10931:2;10926:3;10867:67;:::i;:::-;10860:74;;10964:34;10960:1;10955:3;10951:11;10944:55;11030:20;11025:2;11020:3;11016:12;11009:42;11077:2;11072:3;11068:12;11061:19;;10850:236;;;:::o;11092:370::-;;11255:67;11319:2;11314:3;11255:67;:::i;:::-;11248:74;;11352:34;11348:1;11343:3;11339:11;11332:55;11418:8;11413:2;11408:3;11404:12;11397:30;11453:2;11448:3;11444:12;11437:19;;11238:224;;;:::o;11468:326::-;;11631:67;11695:2;11690:3;11631:67;:::i;:::-;11624:74;;11728:30;11724:1;11719:3;11715:11;11708:51;11785:2;11780:3;11776:12;11769:19;;11614:180;;;:::o;11800:368::-;;11963:67;12027:2;12022:3;11963:67;:::i;:::-;11956:74;;12060:34;12056:1;12051:3;12047:11;12040:55;12126:6;12121:2;12116:3;12112:12;12105:28;12159:2;12154:3;12150:12;12143:19;;11946:222;;;:::o;12174:323::-;;12337:67;12401:2;12396:3;12337:67;:::i;:::-;12330:74;;12434:27;12430:1;12425:3;12421:11;12414:48;12488:2;12483:3;12479:12;12472:19;;12320:177;;;:::o;12503:376::-;;12666:67;12730:2;12725:3;12666:67;:::i;:::-;12659:74;;12763:34;12759:1;12754:3;12750:11;12743:55;12829:14;12824:2;12819:3;12815:12;12808:36;12870:2;12865:3;12861:12;12854:19;;12649:230;;;:::o;12885:388::-;;13048:67;13112:2;13107:3;13048:67;:::i;:::-;13041:74;;13145:34;13141:1;13136:3;13132:11;13125:55;13211:26;13206:2;13201:3;13197:12;13190:48;13264:2;13259:3;13255:12;13248:19;;13031:242;;;:::o;13279:374::-;;13442:67;13506:2;13501:3;13442:67;:::i;:::-;13435:74;;13539:34;13535:1;13530:3;13526:11;13519:55;13605:12;13600:2;13595:3;13591:12;13584:34;13644:2;13639:3;13635:12;13628:19;;13425:228;;;:::o;13659:373::-;;13822:67;13886:2;13881:3;13822:67;:::i;:::-;13815:74;;13919:34;13915:1;13910:3;13906:11;13899:55;13985:11;13980:2;13975:3;13971:12;13964:33;14023:2;14018:3;14014:12;14007:19;;13805:227;;;:::o;14038:330::-;;14201:67;14265:2;14260:3;14201:67;:::i;:::-;14194:74;;14298:34;14294:1;14289:3;14285:11;14278:55;14359:2;14354:3;14350:12;14343:19;;14184:184;;;:::o;14374:376::-;;14537:67;14601:2;14596:3;14537:67;:::i;:::-;14530:74;;14634:34;14630:1;14625:3;14621:11;14614:55;14700:14;14695:2;14690:3;14686:12;14679:36;14741:2;14736:3;14732:12;14725:19;;14520:230;;;:::o;14756:330::-;;14919:67;14983:2;14978:3;14919:67;:::i;:::-;14912:74;;15016:34;15012:1;15007:3;15003:11;14996:55;15077:2;15072:3;15068:12;15061:19;;14902:184;;;:::o;15092:373::-;;15255:67;15319:2;15314:3;15255:67;:::i;:::-;15248:74;;15352:34;15348:1;15343:3;15339:11;15332:55;15418:11;15413:2;15408:3;15404:12;15397:33;15456:2;15451:3;15447:12;15440:19;;15238:227;;;:::o;15471:379::-;;15634:67;15698:2;15693:3;15634:67;:::i;:::-;15627:74;;15731:34;15727:1;15722:3;15718:11;15711:55;15797:17;15792:2;15787:3;15783:12;15776:39;15841:2;15836:3;15832:12;15825:19;;15617:233;;;:::o;15856:325::-;;16019:67;16083:2;16078:3;16019:67;:::i;:::-;16012:74;;16116:29;16112:1;16107:3;16103:11;16096:50;16172:2;16167:3;16163:12;16156:19;;16002:179;;;:::o;16187:329::-;;16350:67;16414:2;16409:3;16350:67;:::i;:::-;16343:74;;16447:33;16443:1;16438:3;16434:11;16427:54;16507:2;16502:3;16498:12;16491:19;;16333:183;;;:::o;16522:365::-;;16685:67;16749:2;16744:3;16685:67;:::i;:::-;16678:74;;16782:34;16778:1;16773:3;16769:11;16762:55;16848:3;16843:2;16838:3;16834:12;16827:25;16878:2;16873:3;16869:12;16862:19;;16668:219;;;:::o;16893:381::-;;17056:67;17120:2;17115:3;17056:67;:::i;:::-;17049:74;;17153:34;17149:1;17144:3;17140:11;17133:55;17219:19;17214:2;17209:3;17205:12;17198:41;17265:2;17260:3;17256:12;17249:19;;17039:235;;;:::o;17280:376::-;;17443:67;17507:2;17502:3;17443:67;:::i;:::-;17436:74;;17540:34;17536:1;17531:3;17527:11;17520:55;17606:14;17601:2;17596:3;17592:12;17585:36;17647:2;17642:3;17638:12;17631:19;;17426:230;;;:::o;17662:312::-;;17825:67;17889:2;17884:3;17825:67;:::i;:::-;17818:74;;17922:16;17918:1;17913:3;17909:11;17902:37;17965:2;17960:3;17956:12;17949:19;;17808:166;;;:::o;17980:115::-;18065:23;18082:5;18065:23;:::i;:::-;18060:3;18053:36;18043:52;;:::o;18101:108::-;18178:24;18196:5;18178:24;:::i;:::-;18173:3;18166:37;18156:53;;:::o;18215:118::-;18302:24;18320:5;18302:24;:::i;:::-;18297:3;18290:37;18280:53;;:::o;18339:435::-;;18541:95;18632:3;18623:6;18541:95;:::i;:::-;18534:102;;18653:95;18744:3;18735:6;18653:95;:::i;:::-;18646:102;;18765:3;18758:10;;18523:251;;;;;:::o;18780:222::-;;18911:2;18900:9;18896:18;18888:26;;18924:71;18992:1;18981:9;18977:17;18968:6;18924:71;:::i;:::-;18878:124;;;;:::o;19008:640::-;;19241:3;19230:9;19226:19;19218:27;;19255:71;19323:1;19312:9;19308:17;19299:6;19255:71;:::i;:::-;19336:72;19404:2;19393:9;19389:18;19380:6;19336:72;:::i;:::-;19418;19486:2;19475:9;19471:18;19462:6;19418:72;:::i;:::-;19537:9;19531:4;19527:20;19522:2;19511:9;19507:18;19500:48;19565:76;19636:4;19627:6;19565:76;:::i;:::-;19557:84;;19208:440;;;;;;;:::o;19654:332::-;;19813:2;19802:9;19798:18;19790:26;;19826:71;19894:1;19883:9;19879:17;19870:6;19826:71;:::i;:::-;19907:72;19975:2;19964:9;19960:18;19951:6;19907:72;:::i;:::-;19780:206;;;;;:::o;19992:373::-;;20173:2;20162:9;20158:18;20150:26;;20222:9;20216:4;20212:20;20208:1;20197:9;20193:17;20186:47;20250:108;20353:4;20344:6;20250:108;:::i;:::-;20242:116;;20140:225;;;;:::o;20371:210::-;;20496:2;20485:9;20481:18;20473:26;;20509:65;20571:1;20560:9;20556:17;20547:6;20509:65;:::i;:::-;20463:118;;;;:::o;20587:262::-;;20738:2;20727:9;20723:18;20715:26;;20751:91;20839:1;20828:9;20824:17;20815:6;20751:91;:::i;:::-;20705:144;;;;:::o;20855:313::-;;21006:2;20995:9;20991:18;20983:26;;21055:9;21049:4;21045:20;21041:1;21030:9;21026:17;21019:47;21083:78;21156:4;21147:6;21083:78;:::i;:::-;21075:86;;20973:195;;;;:::o;21174:419::-;;21378:2;21367:9;21363:18;21355:26;;21427:9;21421:4;21417:20;21413:1;21402:9;21398:17;21391:47;21455:131;21581:4;21455:131;:::i;:::-;21447:139;;21345:248;;;:::o;21599:419::-;;21803:2;21792:9;21788:18;21780:26;;21852:9;21846:4;21842:20;21838:1;21827:9;21823:17;21816:47;21880:131;22006:4;21880:131;:::i;:::-;21872:139;;21770:248;;;:::o;22024:419::-;;22228:2;22217:9;22213:18;22205:26;;22277:9;22271:4;22267:20;22263:1;22252:9;22248:17;22241:47;22305:131;22431:4;22305:131;:::i;:::-;22297:139;;22195:248;;;:::o;22449:419::-;;22653:2;22642:9;22638:18;22630:26;;22702:9;22696:4;22692:20;22688:1;22677:9;22673:17;22666:47;22730:131;22856:4;22730:131;:::i;:::-;22722:139;;22620:248;;;:::o;22874:419::-;;23078:2;23067:9;23063:18;23055:26;;23127:9;23121:4;23117:20;23113:1;23102:9;23098:17;23091:47;23155:131;23281:4;23155:131;:::i;:::-;23147:139;;23045:248;;;:::o;23299:419::-;;23503:2;23492:9;23488:18;23480:26;;23552:9;23546:4;23542:20;23538:1;23527:9;23523:17;23516:47;23580:131;23706:4;23580:131;:::i;:::-;23572:139;;23470:248;;;:::o;23724:419::-;;23928:2;23917:9;23913:18;23905:26;;23977:9;23971:4;23967:20;23963:1;23952:9;23948:17;23941:47;24005:131;24131:4;24005:131;:::i;:::-;23997:139;;23895:248;;;:::o;24149:419::-;;24353:2;24342:9;24338:18;24330:26;;24402:9;24396:4;24392:20;24388:1;24377:9;24373:17;24366:47;24430:131;24556:4;24430:131;:::i;:::-;24422:139;;24320:248;;;:::o;24574:419::-;;24778:2;24767:9;24763:18;24755:26;;24827:9;24821:4;24817:20;24813:1;24802:9;24798:17;24791:47;24855:131;24981:4;24855:131;:::i;:::-;24847:139;;24745:248;;;:::o;24999:419::-;;25203:2;25192:9;25188:18;25180:26;;25252:9;25246:4;25242:20;25238:1;25227:9;25223:17;25216:47;25280:131;25406:4;25280:131;:::i;:::-;25272:139;;25170:248;;;:::o;25424:419::-;;25628:2;25617:9;25613:18;25605:26;;25677:9;25671:4;25667:20;25663:1;25652:9;25648:17;25641:47;25705:131;25831:4;25705:131;:::i;:::-;25697:139;;25595:248;;;:::o;25849:419::-;;26053:2;26042:9;26038:18;26030:26;;26102:9;26096:4;26092:20;26088:1;26077:9;26073:17;26066:47;26130:131;26256:4;26130:131;:::i;:::-;26122:139;;26020:248;;;:::o;26274:419::-;;26478:2;26467:9;26463:18;26455:26;;26527:9;26521:4;26517:20;26513:1;26502:9;26498:17;26491:47;26555:131;26681:4;26555:131;:::i;:::-;26547:139;;26445:248;;;:::o;26699:419::-;;26903:2;26892:9;26888:18;26880:26;;26952:9;26946:4;26942:20;26938:1;26927:9;26923:17;26916:47;26980:131;27106:4;26980:131;:::i;:::-;26972:139;;26870:248;;;:::o;27124:419::-;;27328:2;27317:9;27313:18;27305:26;;27377:9;27371:4;27367:20;27363:1;27352:9;27348:17;27341:47;27405:131;27531:4;27405:131;:::i;:::-;27397:139;;27295:248;;;:::o;27549:419::-;;27753:2;27742:9;27738:18;27730:26;;27802:9;27796:4;27792:20;27788:1;27777:9;27773:17;27766:47;27830:131;27956:4;27830:131;:::i;:::-;27822:139;;27720:248;;;:::o;27974:419::-;;28178:2;28167:9;28163:18;28155:26;;28227:9;28221:4;28217:20;28213:1;28202:9;28198:17;28191:47;28255:131;28381:4;28255:131;:::i;:::-;28247:139;;28145:248;;;:::o;28399:419::-;;28603:2;28592:9;28588:18;28580:26;;28652:9;28646:4;28642:20;28638:1;28627:9;28623:17;28616:47;28680:131;28806:4;28680:131;:::i;:::-;28672:139;;28570:248;;;:::o;28824:419::-;;29028:2;29017:9;29013:18;29005:26;;29077:9;29071:4;29067:20;29063:1;29052:9;29048:17;29041:47;29105:131;29231:4;29105:131;:::i;:::-;29097:139;;28995:248;;;:::o;29249:419::-;;29453:2;29442:9;29438:18;29430:26;;29502:9;29496:4;29492:20;29488:1;29477:9;29473:17;29466:47;29530:131;29656:4;29530:131;:::i;:::-;29522:139;;29420:248;;;:::o;29674:419::-;;29878:2;29867:9;29863:18;29855:26;;29927:9;29921:4;29917:20;29913:1;29902:9;29898:17;29891:47;29955:131;30081:4;29955:131;:::i;:::-;29947:139;;29845:248;;;:::o;30099:218::-;;30228:2;30217:9;30213:18;30205:26;;30241:69;30307:1;30296:9;30292:17;30283:6;30241:69;:::i;:::-;30195:122;;;;:::o;30323:222::-;;30454:2;30443:9;30439:18;30431:26;;30467:71;30535:1;30524:9;30520:17;30511:6;30467:71;:::i;:::-;30421:124;;;;:::o;30551:283::-;;30617:2;30611:9;30601:19;;30659:4;30651:6;30647:17;30766:6;30754:10;30751:22;30730:18;30718:10;30715:34;30712:62;30709:2;;;30777:18;;:::i;:::-;30709:2;30817:10;30813:2;30806:22;30591:243;;;;:::o;30840:331::-;;30991:18;30983:6;30980:30;30977:2;;;31013:18;;:::i;:::-;30977:2;31098:4;31094:9;31087:4;31079:6;31075:17;31071:33;31063:41;;31159:4;31153;31149:15;31141:23;;30906:265;;;:::o;31177:332::-;;31329:18;31321:6;31318:30;31315:2;;;31351:18;;:::i;:::-;31315:2;31436:4;31432:9;31425:4;31417:6;31413:17;31409:33;31401:41;;31497:4;31491;31487:15;31479:23;;31244:265;;;:::o;31515:132::-;;31605:3;31597:11;;31635:4;31630:3;31626:14;31618:22;;31587:60;;;:::o;31653:114::-;;31754:5;31748:12;31738:22;;31727:40;;;:::o;31773:98::-;;31858:5;31852:12;31842:22;;31831:40;;;:::o;31877:99::-;;31963:5;31957:12;31947:22;;31936:40;;;:::o;31982:113::-;;32084:4;32079:3;32075:14;32067:22;;32057:38;;;:::o;32101:184::-;;32234:6;32229:3;32222:19;32274:4;32269:3;32265:14;32250:29;;32212:73;;;;:::o;32291:168::-;;32408:6;32403:3;32396:19;32448:4;32443:3;32439:14;32424:29;;32386:73;;;;:::o;32465:169::-;;32583:6;32578:3;32571:19;32623:4;32618:3;32614:14;32599:29;;32561:73;;;;:::o;32640:148::-;;32779:3;32764:18;;32754:34;;;;:::o;32794:305::-;;32853:20;32871:1;32853:20;:::i;:::-;32848:25;;32887:20;32905:1;32887:20;:::i;:::-;32882:25;;33041:1;32973:66;32969:74;32966:1;32963:81;32960:2;;;33047:18;;:::i;:::-;32960:2;33091:1;33088;33084:9;33077:16;;32838:261;;;;:::o;33105:185::-;;33162:20;33180:1;33162:20;:::i;:::-;33157:25;;33196:20;33214:1;33196:20;:::i;:::-;33191:25;;33235:1;33225:2;;33240:18;;:::i;:::-;33225:2;33282:1;33279;33275:9;33270:14;;33147:143;;;;:::o;33296:348::-;;33359:20;33377:1;33359:20;:::i;:::-;33354:25;;33393:20;33411:1;33393:20;:::i;:::-;33388:25;;33581:1;33513:66;33509:74;33506:1;33503:81;33498:1;33491:9;33484:17;33480:105;33477:2;;;33588:18;;:::i;:::-;33477:2;33636:1;33633;33629:9;33618:20;;33344:300;;;;:::o;33650:191::-;;33710:20;33728:1;33710:20;:::i;:::-;33705:25;;33744:20;33762:1;33744:20;:::i;:::-;33739:25;;33783:1;33780;33777:8;33774:2;;;33788:18;;:::i;:::-;33774:2;33833:1;33830;33826:9;33818:17;;33695:146;;;;:::o;33847:96::-;;33913:24;33931:5;33913:24;:::i;:::-;33902:35;;33892:51;;;:::o;33949:90::-;;34026:5;34019:13;34012:21;34001:32;;33991:48;;;:::o;34045:149::-;;34121:66;34114:5;34110:78;34099:89;;34089:105;;;:::o;34200:89::-;;34276:6;34269:5;34265:18;34254:29;;34244:45;;;:::o;34295:126::-;;34372:42;34365:5;34361:54;34350:65;;34340:81;;;:::o;34427:77::-;;34493:5;34482:16;;34472:32;;;:::o;34510:166::-;;34613:57;34664:5;34613:57;:::i;:::-;34600:70;;34590:86;;;:::o;34682:133::-;;34785:24;34803:5;34785:24;:::i;:::-;34772:37;;34762:53;;;:::o;34821:154::-;34905:6;34900:3;34895;34882:30;34967:1;34958:6;34953:3;34949:16;34942:27;34872:103;;;:::o;34981:307::-;35049:1;35059:113;35073:6;35070:1;35067:13;35059:113;;;35158:1;35153:3;35149:11;35143:18;35139:1;35134:3;35130:11;35123:39;35095:2;35092:1;35088:10;35083:15;;35059:113;;;35190:6;35187:1;35184:13;35181:2;;;35270:1;35261:6;35256:3;35252:16;35245:27;35181:2;35030:258;;;;:::o;35294:320::-;;35375:1;35369:4;35365:12;35355:22;;35422:1;35416:4;35412:12;35443:18;35433:2;;35499:4;35491:6;35487:17;35477:27;;35433:2;35561;35553:6;35550:14;35530:18;35527:38;35524:2;;;35580:18;;:::i;:::-;35524:2;35345:269;;;;:::o;35620:233::-;;35682:24;35700:5;35682:24;:::i;:::-;35673:33;;35728:66;35721:5;35718:77;35715:2;;;35798:18;;:::i;:::-;35715:2;35845:1;35838:5;35834:13;35827:20;;35663:190;;;:::o;35859:176::-;;35908:20;35926:1;35908:20;:::i;:::-;35903:25;;35942:20;35960:1;35942:20;:::i;:::-;35937:25;;35981:1;35971:2;;35986:18;;:::i;:::-;35971:2;36027:1;36024;36020:9;36015:14;;35893:142;;;;:::o;36041:180::-;36089:77;36086:1;36079:88;36186:4;36183:1;36176:15;36210:4;36207:1;36200:15;36227:180;36275:77;36272:1;36265:88;36372:4;36369:1;36362:15;36396:4;36393:1;36386:15;36413:180;36461:77;36458:1;36451:88;36558:4;36555:1;36548:15;36582:4;36579:1;36572:15;36599:180;36647:77;36644:1;36637:88;36744:4;36741:1;36734:15;36768:4;36765:1;36758:15;36785:102;;36877:2;36873:7;36868:2;36861:5;36857:14;36853:28;36843:38;;36833:54;;;:::o;36893:122::-;36966:24;36984:5;36966:24;:::i;:::-;36959:5;36956:35;36946:2;;37005:1;37002;36995:12;36946:2;36936:79;:::o;37021:116::-;37091:21;37106:5;37091:21;:::i;:::-;37084:5;37081:32;37071:2;;37127:1;37124;37117:12;37071:2;37061:76;:::o;37143:120::-;37215:23;37232:5;37215:23;:::i;:::-;37208:5;37205:34;37195:2;;37253:1;37250;37243:12;37195:2;37185:78;:::o;37269:120::-;37341:23;37358:5;37341:23;:::i;:::-;37334:5;37331:34;37321:2;;37379:1;37376;37369:12;37321:2;37311:78;:::o;37395:122::-;37468:24;37486:5;37468:24;:::i;:::-;37461:5;37458:35;37448:2;;37507:1;37504;37497:12;37448:2;37438:79;:::o
Swarm Source
ipfs://dc3be7b941f0532728e71829191b4d328d4d6acd4f8bfd75c4ea7e93fd368a91