ERC-1155
Overview
Max Total Supply
0 ROSE
Holders
842
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
RoseCollection
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2023-05-26 */ // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: contracts/digi-sport/interfaces/IERC1155Tradable.sol pragma solidity ^0.8.14; interface IERC1155Tradable is IERC1155 { function mint( address _to, uint256 _id, uint256 _quantity, bytes memory _data ) external; // function safeTransferFrom( // address from, // address to, // uint256 id, // uint256 amount, // bytes calldata data // ) external; // function safeBatchTransferFrom( // address from, // address to, // uint256[] calldata ids, // uint256[] calldata amounts, // bytes calldata data // ) external; function burn( address account, uint256 id, uint256 value ) external; function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) external; function tokenSupply(uint tokenId) external view returns(uint); function tokenMaxSupply(uint tokenId) external view returns(uint); } // File: contracts/digi-sport/interfaces/IRoseCollection.sol pragma solidity ^0.8.14; interface IRoseCollection is IERC1155Tradable { function createAndMint(uint id, address to, string memory uri, bytes memory data) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: contracts/digi-sport/MinterRole.sol pragma solidity ^0.8.14; /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev Give an account access to this role. */ function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } /** * @dev Check if an account has this role. * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } } contract MinterRole is Context { using Roles for Roles.Role; event MinterAdded(address indexed account); event MinterRemoved(address indexed account); Roles.Role private _minters; constructor() { _addMinter(_msgSender()); } modifier onlyMinter() { require(isMinter(_msgSender()), "MinterRole: caller does not have the Minter role"); _; } function isMinter(address account) public view returns (bool) { return _minters.has(account); } function addMinter(address account) public onlyMinter { _addMinter(account); } function renounceMinter() public { _removeMinter(_msgSender()); } function _addMinter(address account) internal { _minters.add(account); emit MinterAdded(account); } function _removeMinter(address account) internal { _minters.remove(account); emit MinterRemoved(account); } } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: address zero is not a valid owner"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `ids` and `amounts` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _burnBatch(account, ids, values); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/digi-sport/ERC1155Tradable.sol pragma solidity ^0.8.14; /** * @title WhitelistAdminRole * @dev WhitelistAdmins are responsible for assigning and removing Whitelisted accounts. */ contract WhitelistAdminRole is Context { using Roles for Roles.Role; event WhitelistAdminAdded(address indexed account); event WhitelistAdminRemoved(address indexed account); Roles.Role private _whitelistAdmins; constructor() { _addWhitelistAdmin(_msgSender()); } modifier onlyWhitelistAdmin() { require(isWhitelistAdmin(_msgSender()), "WhitelistAdminRole: caller does not have the WhitelistAdmin role"); _; } function isWhitelistAdmin(address account) public view returns (bool) { return _whitelistAdmins.has(account); } function addWhitelistAdmin(address account) public onlyWhitelistAdmin { _addWhitelistAdmin(account); } function renounceWhitelistAdmin() public { _removeWhitelistAdmin(_msgSender()); } function _addWhitelistAdmin(address account) internal { _whitelistAdmins.add(account); emit WhitelistAdminAdded(account); } function _removeWhitelistAdmin(address account) internal { _whitelistAdmins.remove(account); emit WhitelistAdminRemoved(account); } } /** * @title ERC1155Tradable * ERC1155Tradable - ERC1155 contract that whitelists an operator address, * has create and mint functionality, and supports useful standards from OpenZeppelin, like _exists(), name(), symbol(), and totalSupply() */ abstract contract ERC1155Tradable is IERC1155Tradable, ERC1155Burnable, Ownable, MinterRole, WhitelistAdminRole { using Strings for string; // address proxyRegistryAddress; uint256 private _currentTokenID = 0; mapping(uint256 => address) public creators; mapping(uint256 => uint256) public tokenSupply; mapping(uint256 => uint256) public tokenMaxSupply; // Contract name string public name; // Contract symbol string public symbol; constructor( string memory _name, string memory _symbol ) { name = _name; symbol = _symbol; } function removeWhitelistAdmin(address account) public onlyOwner { _removeWhitelistAdmin(account); } function removeMinter(address account) public onlyOwner { _removeMinter(account); } // function uri(uint256 _id) override public view returns (string memory) { // require(_exists(_id), "ERC721Tradable#uri: NONEXISTENT_TOKEN"); // // return Strings.strConcat(baseMetadataURI, Strings.uint2str(_id)); // } /** * @dev Returns the total quantity for a token ID * @param _id uint256 ID of the token to query * @return amount of token in existence */ function totalSupply(uint256 _id) public view returns (uint256) { return tokenSupply[_id]; } /** * @dev Returns the max quantity for a token ID * @param _id uint256 ID of the token to query * @return amount of token in existence */ function maxSupply(uint256 _id) public view returns (uint256) { return tokenMaxSupply[_id]; } /** * @dev Will update the base URL of token's URI * @param _newBaseMetadataURI New base URL of token's URI */ // function setBaseMetadataURI(string memory _newBaseMetadataURI) public onlyWhitelistAdmin { // _setBaseMetadataURI(_newBaseMetadataURI); // } /** * @dev Creates a new token type and assigns _initialSupply to an address * @param _maxSupply max supply allowed * @param _initialSupply Optional amount to supply the first owner * @param _uri Optional URI for this token type * @param _data Optional data to pass if receiver is contract * @return tokenId The newly created token ID */ function create( uint256 _maxSupply, uint256 _initialSupply, string memory _uri, bytes memory _data ) public onlyWhitelistAdmin returns (uint256 tokenId) { return _create(0, _maxSupply, _initialSupply, _uri, _data); } function createById( uint _id, uint256 _maxSupply, uint256 _initialSupply, string memory _uri, bytes memory _data ) public onlyWhitelistAdmin returns (uint256 tokenId) { return _create(_id, _maxSupply, _initialSupply, _uri, _data); } function _create( uint256 _id, uint256 _maxSupply, uint256 _initialSupply, string memory _uri, bytes memory _data ) internal returns (uint256 tokenId) { require(_initialSupply <= _maxSupply, "Initial supply cannot be more than max supply"); if(_id == 0) { _id = _getNextTokenID(); _incrementTokenTypeId(); creators[_id] = msg.sender; } if (bytes(_uri).length > 0) { emit URI(_uri, _id); } if (_initialSupply != 0) _mint(owner(), _id, _initialSupply, _data); tokenSupply[_id] = _initialSupply; tokenMaxSupply[_id] = _maxSupply; return _id; } /** * @dev Mints some amount of tokens to an address * @param _to Address of the future owner of the token * @param _id Token ID to mint * @param _quantity Amount of tokens to mint * @param _data Data to pass if receiver is contract */ function mint( address _to, uint256 _id, uint256 _quantity, bytes memory _data ) public virtual onlyMinter { require(tokenSupply[_id] < tokenMaxSupply[_id], "Max supply reached"); _mint(_to, _id, _quantity, _data); tokenSupply[_id] = tokenSupply[_id] + _quantity; } function burn( address account, uint256 id, uint256 value ) public override(ERC1155Burnable, IERC1155Tradable) { tokenSupply[id]-= value; ERC1155Burnable.burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public override(ERC1155Burnable, IERC1155Tradable) { for(uint i = 0; i < ids.length; i++) { tokenSupply[ids[i]]-= values[i]; } ERC1155Burnable.burnBatch(account, ids, values); } /** * @dev Returns whether the specified token exists by checking to see if it has a creator * @param _id uint256 ID of the token to query the existence of * @return bool whether the token exists */ function _exists(uint256 _id) internal view returns (bool) { return creators[_id] != address(0); } /** * @dev calculates the next token ID based on value of _currentTokenID * @return uint256 for the next token ID */ function _getNextTokenID() internal view returns (uint256) { return _currentTokenID + 1; } /** * @dev increments the value of _currentTokenID */ function _incrementTokenTypeId() internal { _currentTokenID++; } } // File: contracts/digi-sport/RoseCollection.sol // 0.8.18 YES pragma solidity ^0.8.14; contract RoseCollection is ERC1155Tradable { using Strings for uint; mapping(address => bool) public operators; mapping(uint => bool) public transferLocked; event Locked(uint256 tokenId); event Unlocked(uint256 tokenId); constructor( string memory _name, string memory _symbol, string memory _url ) ERC1155Tradable(_name, _symbol) ERC1155(_url) { uint[] memory toLock = new uint[](4); for(uint i = 0; i < toLock.length; i++) { toLock[i] = i+1; } _setLockTransfer(toLock, true); operators[msg.sender] = true; operators[address(0)] = true; // Boxes // 1: Bronze create(type(uint).max, 0, "", "0x"); // 2: Silver create(type(uint).max, 0, "", "0x"); // 3: Gold create(type(uint).max, 0, "", "0x"); // 4: Diamond create(type(uint).max, 0, "", "0x"); // Athlete stickers //Beginner // 5: Torse create(type(uint).max, 0, "", "0x"); // 6: Head create(type(uint).max, 0, "", "0x"); //Intermediate // 7: Torse create(type(uint).max, 0, "", "0x"); // 8: Head create(type(uint).max, 0, "", "0x"); // 9: Hands create(type(uint).max, 0, "", "0x"); //Advanced // 10: Torse create(type(uint).max, 0, "", "0x"); // 11: Head create(type(uint).max, 0, "", "0x"); // 12: Hands create(type(uint).max, 0, "", "0x"); // 13: Legs create(type(uint).max, 0, "", "0x"); //Elite // 14: Torse create(type(uint).max, 0, "", "0x"); // 15: Head create(type(uint).max, 0, "", "0x"); // 16: Hands create(type(uint).max, 0, "", "0x"); // 17: Legs create(type(uint).max, 0, "", "0x"); // 18: Belt create(type(uint).max, 0, "", "0x"); /// Item stickers limit depends on sold boxes and will be set later /// // 19 // 75 Hoodie // create(type(uint).max, 0, "", "0x"); // // 20 // // 125 Cap // create(type(uint).max, 0, "", "0x"); // // 21 // // 150 T-shirt // create(type(uint).max, 0, "", "0x"); // // 22 // // 7 Individual call // create(type(uint).max, 0, "", "0x"); // // 23 // // 5 Cameo // create(type(uint).max, 0, "", "0x"); // // 24 // // 80 Merch signed // create(type(uint).max, 0, "", "0x"); // Certificates (ERC-721) starts from 100 - 1e18 // Athletes // Beginners - 1e18+1 - 2e18 // Intermediate - 2e18+1 - 3e18 // Advanced - 3e18+1 - 4e18 // Elite - 5e18+1 - 6e18 // Legendary - 6e18+1 - 7e18 } function mint( address _to, uint256 _id, uint256 _quantity, bytes memory _data ) public override onlyMinter { if(tokenSupply[_id] == 0 && transferLocked[_id]) { uint[] memory toLock = new uint[](1); toLock[0] = _id; _setLockTransfer(toLock, true); } require(tokenSupply[_id] + _quantity <= tokenMaxSupply[_id], "Max supply reached"); _mint(_to, _id, _quantity, _data); tokenSupply[_id] = tokenSupply[_id] + _quantity; } /** * @dev Mints some amount of tokens to an address * @param _to Address of the future owner of the token * @param _id Token ID to mint * @param _quantity Amount of tokens to mint * @param _data Data to pass if receiver is contract */ function mintOwnable( address _to, uint256 _id, uint256 _quantity, bytes memory _data ) public onlyOwner { _mint(_to, _id, _quantity, _data); } // function _create( // uint256 _id, // uint256 _maxSupply, // uint256 _initialSupply, // string memory _uri, // bytes memory _data // ) function createAndMint(uint id, address to, string memory _uri, bytes memory data) public onlyMinter { _create(id, 1, 0, _uri, "0x"); mint(to, id, 1, data); } function setOperator(address operator, bool status) public onlyOwner { operators[operator] = status; } function setLockTransfer(uint[] memory ids, bool status) public onlyOwner { _setLockTransfer(ids, status); } function _setLockTransfer(uint[] memory ids, bool status) private { for(uint i = 0; i < ids.length; i++) { transferLocked[ids[i]] = status; if(status) { emit Locked(ids[i]); } else { emit Unlocked(ids[i]); } } } function _beforeTokenTransfer( address /*operator*/, address from, address /*to*/, uint256[] memory ids, uint256[] memory /*amounts*/, bytes memory /*data*/ ) internal view override { for(uint i = 0; i < ids.length; i++) { if(transferLocked[ids[i]]) { require(operators[from], "transfer locked"); } } } function setURI(string memory _newURI, uint _tokenId) public onlyOwner { _setURI(_newURI); emit URI(_newURI, _tokenId); } function uri(uint256 tokenId) public view override returns (string memory) { return bytes(super.uri(tokenId)).length > 0 ? string(abi.encodePacked(super.uri(tokenId), tokenId.toString())) : ""; } }
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":"_url","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Locked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterRemoved","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Unlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAdminRemoved","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addWhitelistAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"create","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"createAndMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"createById","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"creators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelistAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"mintOwnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"operators","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeWhitelistAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceWhitelistAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setLockTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newURI","type":"string"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260006006553480156200001657600080fd5b506040516200429338038062004293833981016040819052620000399162001043565b8282826200004781620005e9565b506200005333620005fb565b6200005e336200064d565b62000069336200069f565b600a6200007783826200115a565b50600b6200008682826200115a565b505060408051600480825260a0820190925260009250906020820160808036833701905050905060005b8151811015620000fc57620000c78160016200123c565b828281518110620000dc57620000dc62001252565b602090810291909101015280620000f38162001268565b915050620000b0565b506200010a816001620006f1565b336000908152600c602090815260408083208054600160ff1991821681179092558480527f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116e8805490911690911790558051808301825283815281518083019092526002825261060f60f31b928201929092526200018d9260001992909162000819565b50620001ce60001960006040518060200160405280600081525060405180604001604052806002815260200161060f60f31b8152506200081960201b60201c565b506200020f60001960006040518060200160405280600081525060405180604001604052806002815260200161060f60f31b8152506200081960201b60201c565b506200025060001960006040518060200160405280600081525060405180604001604052806002815260200161060f60f31b8152506200081960201b60201c565b506200029160001960006040518060200160405280600081525060405180604001604052806002815260200161060f60f31b8152506200081960201b60201c565b50620002d260001960006040518060200160405280600081525060405180604001604052806002815260200161060f60f31b8152506200081960201b60201c565b506200031360001960006040518060200160405280600081525060405180604001604052806002815260200161060f60f31b8152506200081960201b60201c565b506200035460001960006040518060200160405280600081525060405180604001604052806002815260200161060f60f31b8152506200081960201b60201c565b506200039560001960006040518060200160405280600081525060405180604001604052806002815260200161060f60f31b8152506200081960201b60201c565b50620003d660001960006040518060200160405280600081525060405180604001604052806002815260200161060f60f31b8152506200081960201b60201c565b506200041760001960006040518060200160405280600081525060405180604001604052806002815260200161060f60f31b8152506200081960201b60201c565b506200045860001960006040518060200160405280600081525060405180604001604052806002815260200161060f60f31b8152506200081960201b60201c565b506200049960001960006040518060200160405280600081525060405180604001604052806002815260200161060f60f31b8152506200081960201b60201c565b50620004da60001960006040518060200160405280600081525060405180604001604052806002815260200161060f60f31b8152506200081960201b60201c565b506200051b60001960006040518060200160405280600081525060405180604001604052806002815260200161060f60f31b8152506200081960201b60201c565b506200055c60001960006040518060200160405280600081525060405180604001604052806002815260200161060f60f31b8152506200081960201b60201c565b506200059d60001960006040518060200160405280600081525060405180604001604052806002815260200161060f60f31b8152506200081960201b60201c565b50620005de60001960006040518060200160405280600081525060405180604001604052806002815260200161060f60f31b8152506200081960201b60201c565b5050505050620013ed565b6002620005f782826200115a565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000668816004620008b960201b62000e1f1790919060201c565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b620006ba816005620008b960201b62000e1f1790919060201c565b6040516001600160a01b038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b60005b8251811015620008145781600d600085848151811062000718576200071862001252565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508115620007a8577f032bc66be43dbccb7487781d168eb7bda224628a3b2c3388bdf69b532a3a161183828151811062000782576200078262001252565b60200260200101516040516200079a91815260200190565b60405180910390a1620007ff565b7ff27b6ce5b2f5e68ddb2fd95a8a909d4ecf1daaac270935fff052feacb24f1842838281518110620007de57620007de62001252565b6020026020010151604051620007f691815260200190565b60405180910390a15b806200080b8162001268565b915050620006f4565b505050565b6000620008263362000939565b620008a0576040805162461bcd60e51b81526020600482015260248101919091527f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060448201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c6560648201526084015b60405180910390fd5b620008b06000868686866200095c565b95945050505050565b620008c5828262000a8f565b15620009145760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015260640162000897565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006200095682600562000a8f60201b62000e9b1790919060201c565b92915050565b600084841115620009c65760405162461bcd60e51b815260206004820152602d60248201527f496e697469616c20737570706c792063616e6e6f74206265206d6f726520746860448201526c616e206d617820737570706c7960981b606482015260840162000897565b8560000362000a0457620009d962000b14565b9550620009e562000b2c565b600086815260076020526040902080546001600160a01b031916331790555b82511562000a4757857f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8460405162000a3e9190620012b2565b60405180910390a25b831562000a6e5762000a6e62000a656003546001600160a01b031690565b87868562000b45565b50505060008381526008602090815260408083209390935560099052205590565b60006001600160a01b03821662000af45760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b606482015260840162000897565b506001600160a01b03166000908152602091909152604090205460ff1690565b6000600654600162000b2791906200123c565b905090565b6006805490600062000b3e8362001268565b9190505550565b6001600160a01b03841662000ba75760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840162000897565b33600062000bb58562000c74565b9050600062000bc48562000c74565b905062000bd78360008985858962000cc2565b6000868152602081815260408083206001600160a01b038b1684529091528120805487929062000c099084906200123c565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a462000c6b8360008989898962000d85565b50505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811062000cb15762000cb162001252565b602090810291909101015292915050565b60005b835181101562000c6b57600d600085838151811062000ce85762000ce862001252565b60209081029190910181015182528101919091526040016000205460ff161562000d68576001600160a01b0386166000908152600c602052604090205460ff1662000d685760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c881b1bd8dad959608a1b604482015260640162000897565b8062000d748162001268565b91505062000cc5565b505050505050565b62000da4846001600160a01b031662000f5160201b62000f1e1760201c565b1562000d7d5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619062000de09089908990889088908890600401620012ce565b6020604051808303816000875af192505050801562000e1e575060408051601f3d908101601f1916820190925262000e1b9181019062001315565b60015b62000ede5762000e2d62001341565b806308c379a00362000e6d575062000e446200135e565b8062000e51575062000e6f565b8060405162461bcd60e51b8152600401620008979190620012b2565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e746572000000000000000000000000606482015260840162000897565b6001600160e01b0319811663f23a6e6160e01b1462000c6b5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b606482015260840162000897565b6001600160a01b03163b151590565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b038111828210171562000f9e5762000f9e62000f60565b6040525050565b60005b8381101562000fc257818101518382015260200162000fa8565b50506000910152565b600082601f83011262000fdd57600080fd5b81516001600160401b0381111562000ff95762000ff962000f60565b60405162001012601f8301601f19166020018262000f76565b8181528460208386010111156200102857600080fd5b6200103b82602083016020870162000fa5565b949350505050565b6000806000606084860312156200105957600080fd5b83516001600160401b03808211156200107157600080fd5b6200107f8783880162000fcb565b945060208601519150808211156200109657600080fd5b620010a48783880162000fcb565b93506040860151915080821115620010bb57600080fd5b50620010ca8682870162000fcb565b9150509250925092565b600181811c90821680620010e957607f821691505b6020821081036200110a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200081457600081815260208120601f850160051c81016020861015620011395750805b601f850160051c820191505b8181101562000d7d5782815560010162001145565b81516001600160401b0381111562001176576200117662000f60565b6200118e81620011878454620010d4565b8462001110565b602080601f831160018114620011c65760008415620011ad5750858301515b600019600386901b1c1916600185901b17855562000d7d565b600085815260208120601f198616915b82811015620011f757888601518255948401946001909101908401620011d6565b5085821015620012165787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000956576200095662001226565b634e487b7160e01b600052603260045260246000fd5b6000600182016200127d576200127d62001226565b5060010190565b600081518084526200129e81602086016020860162000fa5565b601f01601f19169290920160200192915050565b602081526000620012c7602083018462001284565b9392505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906200130a9083018462001284565b979650505050505050565b6000602082840312156200132857600080fd5b81516001600160e01b031981168114620012c757600080fd5b600060033d11156200135b5760046000803e5060005160e01c5b90565b600060443d10156200136d5790565b6040516003193d81016004833e81513d6001600160401b0380831160248401831017156200139d57505050505090565b8285019150815181811115620013b65750505050505090565b843d8701016020828501011115620013d15750505050505090565b620013e26020828601018762000f76565b509095945050505050565b612e9680620013fd6000396000f3fe608060405234801561001057600080fd5b50600436106102305760003560e01c8063869f759411610130578063b09ddf7b116100b8578063e00a4d221161007c578063e00a4d221461051c578063e985e9c51461053f578063f242432a1461057b578063f2fde38b1461058e578063f5298aca146105a157600080fd5b8063b09ddf7b1461049a578063bb5f747b146104ad578063bd85b039146104c0578063c342b673146104e0578063cd53d08e146104f357600080fd5b806398650275116100ff57806398650275146104465780639ad100541461044e578063a22cb46514610461578063a7529d0214610474578063aa271e1a1461048757600080fd5b8063869f7594146103e65780638da5cb5b1461040657806395d89b411461042b578063983b2d561461043357600080fd5b80634c5a628c116101be5780636897e974116101825780636897e974146103925780636b20c454146103a5578063715018a6146103b8578063731133e9146103c05780637362d9c8146103d357600080fd5b80634c5a628c146103315780634e1273f414610339578063558a72971461035957806361d741d91461036c57806367db3b8f1461037f57600080fd5b80630e89341c116102055780630e89341c146102b357806313e7c9d8146102c65780632693ebf2146102e95780632eb2c2d6146103095780633092afd51461031e57600080fd5b80624221f014610235578062fdd58e1461026857806301ffc9a71461027b57806306fdde031461029e575b600080fd5b6102556102433660046120a0565b60096020526000908152604090205481565b6040519081526020015b60405180910390f35b6102556102763660046120d5565b6105b4565b61028e610289366004612115565b61064d565b604051901515815260200161025f565b6102a661069d565b60405161025f9190612189565b6102a66102c13660046120a0565b61072b565b61028e6102d436600461219c565b600c6020526000908152604090205460ff1681565b6102556102f73660046120a0565b60086020526000908152604090205481565b61031c610317366004612300565b61078b565b005b61031c61032c36600461219c565b6107d7565b61031c6107eb565b61034c6103473660046123a9565b6107f6565b60405161025f91906124ae565b61031c6103673660046124d1565b61091f565b61031c61037a366004612504565b610952565b61031c61038d366004612548565b610968565b61031c6103a036600461219c565b6109b5565b61031c6103b336600461258c565b6109c6565b61031c610a50565b61031c6103ce3660046125ff565b610a62565b61031c6103e136600461219c565b610bac565b6102556103f43660046120a0565b60009081526009602052604090205490565b6003546001600160a01b03165b6040516001600160a01b03909116815260200161025f565b6102a6610bda565b61031c61044136600461219c565b610be7565b61031c610c15565b61025561045c36600461265f565b610c1e565b61031c61046f3660046124d1565b610c5c565b61031c6104823660046126af565b610c67565b61028e61049536600461219c565b610cc9565b6102556104a8366004612720565b610cd6565b61028e6104bb36600461219c565b610d14565b6102556104ce3660046120a0565b60009081526008602052604090205490565b61031c6104ee3660046125ff565b610d21565b6104136105013660046120a0565b6007602052600090815260409020546001600160a01b031681565b61028e61052a3660046120a0565b600d6020526000908152604090205460ff1681565b61028e61054d36600461275b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61031c610589366004612785565b610d35565b61031c61059c36600461219c565b610d7a565b61031c6105af3660046127e9565b610df0565b60006001600160a01b0383166106245760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061067e57506001600160e01b031982166303a24d0760e21b145b8061064757506301ffc9a760e01b6001600160e01b0319831614610647565b600a80546106aa9061281c565b80601f01602080910402602001604051908101604052809291908181526020018280546106d69061281c565b80156107235780601f106106f857610100808354040283529160200191610723565b820191906000526020600020905b81548152906001019060200180831161070657829003601f168201915b505050505081565b6060600061073883610f2d565b51116107535760405180602001604052806000815250610647565b61075c82610f2d565b61076583610fc1565b604051602001610776929190612856565b60405160208183030381529060405292915050565b6001600160a01b0385163314806107a757506107a7853361054d565b6107c35760405162461bcd60e51b815260040161061b90612885565b6107d085858585856110c9565b5050505050565b6107df611273565b6107e8816112cd565b50565b6107f43361130f565b565b6060815183511461085b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161061b565b600083516001600160401b03811115610876576108766121b7565b60405190808252806020026020018201604052801561089f578160200160208202803683370190505b50905060005b8451811015610917576108ea8582815181106108c3576108c36128d4565b60200260200101518583815181106108dd576108dd6128d4565b60200260200101516105b4565b8282815181106108fc576108fc6128d4565b602090810291909101015261091081612900565b90506108a5565b509392505050565b610927611273565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b61095a611273565b6109648282611351565b5050565b610970611273565b61097982611463565b807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b836040516109a99190612189565b60405180910390a25050565b6109bd611273565b6107e88161130f565b60005b8251811015610a3f578181815181106109e4576109e46128d4565b602002602001015160086000858481518110610a0257610a026128d4565b602002602001015181526020019081526020016000206000828254610a279190612919565b90915550819050610a3781612900565b9150506109c9565b50610a4b83838361146f565b505050565b610a58611273565b6107f460006114b2565b610a6b33610cc9565b610a875760405162461bcd60e51b815260040161061b9061292c565b600083815260086020526040902054158015610ab157506000838152600d602052604090205460ff165b15610b0557604080516001808252818301909252600091602080830190803683370190505090508381600081518110610aec57610aec6128d4565b602002602001018181525050610b03816001611351565b505b600083815260096020908152604080832054600890925290912054610b2b90849061297c565b1115610b6e5760405162461bcd60e51b815260206004820152601260248201527113585e081cdd5c1c1b1e481c995858da195960721b604482015260640161061b565b610b7a84848484611504565b600083815260086020526040902054610b9490839061297c565b60009384526008602052604090932092909255505050565b610bb533610d14565b610bd15760405162461bcd60e51b815260040161061b9061298f565b6107e881611627565b600b80546106aa9061281c565b610bf033610cc9565b610c0c5760405162461bcd60e51b815260040161061b9061292c565b6107e881611669565b6107f4336112cd565b6000610c2933610d14565b610c455760405162461bcd60e51b815260040161061b9061298f565b610c5286868686866116ab565b9695505050505050565b6109643383836117d0565b610c7033610cc9565b610c8c5760405162461bcd60e51b815260040161061b9061292c565b610cb584600160008560405180604001604052806002815260200161060f60f31b8152506116ab565b50610cc38385600184610a62565b50505050565b6000610647600483610e9b565b6000610ce133610d14565b610cfd5760405162461bcd60e51b815260040161061b9061298f565b610d0b6000868686866116ab565b95945050505050565b6000610647600583610e9b565b610d29611273565b610cc384848484611504565b6001600160a01b038516331480610d515750610d51853361054d565b610d6d5760405162461bcd60e51b815260040161061b90612885565b6107d085858585856118b0565b610d82611273565b6001600160a01b038116610de75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161061b565b6107e8816114b2565b60008281526008602052604081208054839290610e0e908490612919565b90915550610a4b90508383836119e8565b610e298282610e9b565b15610e765760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015260640161061b565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b038216610efe5760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b606482015260840161061b565b506001600160a01b03166000908152602091909152604090205460ff1690565b6001600160a01b03163b151590565b606060028054610f3c9061281c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f689061281c565b8015610fb55780601f10610f8a57610100808354040283529160200191610fb5565b820191906000526020600020905b815481529060010190602001808311610f9857829003601f168201915b50505050509050919050565b606081600003610fe85750506040805180820190915260018152600360fc1b602082015290565b8160005b81156110125780610ffc81612900565b915061100b9050600a83612a03565b9150610fec565b6000816001600160401b0381111561102c5761102c6121b7565b6040519080825280601f01601f191660200182016040528015611056576020820181803683370190505b5090505b84156110c15761106b600183612919565b9150611078600a86612a17565b61108390603061297c565b60f81b818381518110611098576110986128d4565b60200101906001600160f81b031916908160001a9053506110ba600a86612a03565b945061105a565b949350505050565b81518351146110ea5760405162461bcd60e51b815260040161061b90612a2b565b6001600160a01b0384166111105760405162461bcd60e51b815260040161061b90612a73565b3361111f818787878787611a2b565b60005b845181101561120557600085828151811061113f5761113f6128d4565b60200260200101519050600085838151811061115d5761115d6128d4565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156111ad5760405162461bcd60e51b815260040161061b90612ab8565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906111ea90849061297c565b92505081905550505050806111fe90612900565b9050611122565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611255929190612b02565b60405180910390a461126b818787878787611adc565b505050505050565b6003546001600160a01b031633146107f45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b6112d8600482611c37565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b61131a600582611c37565b6040516001600160a01b038216907f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16590600090a250565b60005b8251811015610a4b5781600d6000858481518110611374576113746128d4565b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555081156113fe577f032bc66be43dbccb7487781d168eb7bda224628a3b2c3388bdf69b532a3a16118382815181106113da576113da6128d4565b60200260200101516040516113f191815260200190565b60405180910390a1611451565b7ff27b6ce5b2f5e68ddb2fd95a8a909d4ecf1daaac270935fff052feacb24f1842838281518110611431576114316128d4565b602002602001015160405161144891815260200190565b60405180910390a15b8061145b81612900565b915050611354565b60026109648282612b6d565b6001600160a01b03831633148061148b575061148b833361054d565b6114a75760405162461bcd60e51b815260040161061b90612885565b610a4b838383611cb9565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0384166115645760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161061b565b33600061157085611e55565b9050600061157d85611e55565b905061158e83600089858589611a2b565b6000868152602081815260408083206001600160a01b038b168452909152812080548792906115be90849061297c565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461161e83600089898989611ea0565b50505050505050565b611632600582610e1f565b6040516001600160a01b038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b611674600482610e1f565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6000848411156117135760405162461bcd60e51b815260206004820152602d60248201527f496e697469616c20737570706c792063616e6e6f74206265206d6f726520746860448201526c616e206d617820737570706c7960981b606482015260840161061b565b8560000361174c57611723611f5b565b955061172d611f71565b600086815260076020526040902080546001600160a01b031916331790555b82511561178c57857f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b846040516117839190612189565b60405180910390a25b83156117af576117af6117a76003546001600160a01b031690565b878685611504565b50505060008381526008602090815260408083209390935560099052205590565b816001600160a01b0316836001600160a01b0316036118435760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161061b565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166118d65760405162461bcd60e51b815260040161061b90612a73565b3360006118e285611e55565b905060006118ef85611e55565b90506118ff838989858589611a2b565b6000868152602081815260408083206001600160a01b038c168452909152902054858110156119405760405162461bcd60e51b815260040161061b90612ab8565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061197d90849061297c565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46119dd848a8a8a8a8a611ea0565b505050505050505050565b6001600160a01b038316331480611a045750611a04833361054d565b611a205760405162461bcd60e51b815260040161061b90612885565b610a4b838383611f88565b60005b835181101561161e57600d6000858381518110611a4d57611a4d6128d4565b60209081029190910181015182528101919091526040016000205460ff1615611aca576001600160a01b0386166000908152600c602052604090205460ff16611aca5760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c881b1bd8dad959608a1b604482015260640161061b565b80611ad481612900565b915050611a2e565b6001600160a01b0384163b1561126b5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611b209089908990889088908890600401612c2c565b6020604051808303816000875af1925050508015611b5b575060408051601f3d908101601f19168201909252611b5891810190612c8a565b60015b611c0757611b67612ca7565b806308c379a003611ba05750611b7b612cc3565b80611b865750611ba2565b8060405162461bcd60e51b815260040161061b9190612189565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161061b565b6001600160e01b0319811663bc197c8160e01b1461161e5760405162461bcd60e51b815260040161061b90612d4c565b611c418282610e9b565b611c975760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b606482015260840161061b565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b038316611cdf5760405162461bcd60e51b815260040161061b90612d94565b8051825114611d005760405162461bcd60e51b815260040161061b90612a2b565b6000339050611d2381856000868660405180602001604052806000815250611a2b565b60005b8351811015611de8576000848281518110611d4357611d436128d4565b602002602001015190506000848381518110611d6157611d616128d4565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015611db15760405162461bcd60e51b815260040161061b90612dd7565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580611de081612900565b915050611d26565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611e39929190612b02565b60405180910390a4604080516020810190915260009052610cc3565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611e8f57611e8f6128d4565b602090810291909101015292915050565b6001600160a01b0384163b1561126b5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611ee49089908990889088908890600401612e1b565b6020604051808303816000875af1925050508015611f1f575060408051601f3d908101601f19168201909252611f1c91810190612c8a565b60015b611f2b57611b67612ca7565b6001600160e01b0319811663f23a6e6160e01b1461161e5760405162461bcd60e51b815260040161061b90612d4c565b60006006546001611f6c919061297c565b905090565b60068054906000611f8183612900565b9190505550565b6001600160a01b038316611fae5760405162461bcd60e51b815260040161061b90612d94565b336000611fba84611e55565b90506000611fc784611e55565b9050611fe783876000858560405180602001604052806000815250611a2b565b6000858152602081815260408083206001600160a01b038a168452909152902054848110156120285760405162461bcd60e51b815260040161061b90612dd7565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460408051602081019091526000905261161e565b6000602082840312156120b257600080fd5b5035919050565b80356001600160a01b03811681146120d057600080fd5b919050565b600080604083850312156120e857600080fd5b6120f1836120b9565b946020939093013593505050565b6001600160e01b0319811681146107e857600080fd5b60006020828403121561212757600080fd5b8135612132816120ff565b9392505050565b60005b8381101561215457818101518382015260200161213c565b50506000910152565b60008151808452612175816020860160208601612139565b601f01601f19169290920160200192915050565b602081526000612132602083018461215d565b6000602082840312156121ae57600080fd5b612132826120b9565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b03811182821017156121f2576121f26121b7565b6040525050565b60006001600160401b03821115612212576122126121b7565b5060051b60200190565b600082601f83011261222d57600080fd5b8135602061223a826121f9565b60405161224782826121cd565b83815260059390931b850182019282810191508684111561226757600080fd5b8286015b84811015612282578035835291830191830161226b565b509695505050505050565b600082601f83011261229e57600080fd5b81356001600160401b038111156122b7576122b76121b7565b6040516122ce601f8301601f1916602001826121cd565b8181528460208386010111156122e357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561231857600080fd5b612321866120b9565b945061232f602087016120b9565b935060408601356001600160401b038082111561234b57600080fd5b61235789838a0161221c565b9450606088013591508082111561236d57600080fd5b61237989838a0161221c565b9350608088013591508082111561238f57600080fd5b5061239c8882890161228d565b9150509295509295909350565b600080604083850312156123bc57600080fd5b82356001600160401b03808211156123d357600080fd5b818501915085601f8301126123e757600080fd5b813560206123f4826121f9565b60405161240182826121cd565b83815260059390931b850182019282810191508984111561242157600080fd5b948201945b8386101561244657612437866120b9565b82529482019490820190612426565b9650508601359250508082111561245c57600080fd5b506124698582860161221c565b9150509250929050565b600081518084526020808501945080840160005b838110156124a357815187529582019590820190600101612487565b509495945050505050565b6020815260006121326020830184612473565b803580151581146120d057600080fd5b600080604083850312156124e457600080fd5b6124ed836120b9565b91506124fb602084016124c1565b90509250929050565b6000806040838503121561251757600080fd5b82356001600160401b0381111561252d57600080fd5b6125398582860161221c565b9250506124fb602084016124c1565b6000806040838503121561255b57600080fd5b82356001600160401b0381111561257157600080fd5b61257d8582860161228d565b95602094909401359450505050565b6000806000606084860312156125a157600080fd5b6125aa846120b9565b925060208401356001600160401b03808211156125c657600080fd5b6125d28783880161221c565b935060408601359150808211156125e857600080fd5b506125f58682870161221c565b9150509250925092565b6000806000806080858703121561261557600080fd5b61261e856120b9565b9350602085013592506040850135915060608501356001600160401b0381111561264757600080fd5b6126538782880161228d565b91505092959194509250565b600080600080600060a0868803121561267757600080fd5b85359450602086013593506040860135925060608601356001600160401b03808211156126a357600080fd5b61237989838a0161228d565b600080600080608085870312156126c557600080fd5b843593506126d5602086016120b9565b925060408501356001600160401b03808211156126f157600080fd5b6126fd8883890161228d565b9350606087013591508082111561271357600080fd5b506126538782880161228d565b6000806000806080858703121561273657600080fd5b843593506020850135925060408501356001600160401b03808211156126f157600080fd5b6000806040838503121561276e57600080fd5b612777836120b9565b91506124fb602084016120b9565b600080600080600060a0868803121561279d57600080fd5b6127a6866120b9565b94506127b4602087016120b9565b9350604086013592506060860135915060808601356001600160401b038111156127dd57600080fd5b61239c8882890161228d565b6000806000606084860312156127fe57600080fd5b612807846120b9565b95602085013595506040909401359392505050565b600181811c9082168061283057607f821691505b60208210810361285057634e487b7160e01b600052602260045260246000fd5b50919050565b60008351612868818460208801612139565b83519083019061287c818360208801612139565b01949350505050565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612912576129126128ea565b5060010190565b81810381811115610647576106476128ea565b60208082526030908201527f4d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766560408201526f20746865204d696e74657220726f6c6560801b606082015260800190565b80820180821115610647576106476128ea565b602080825260409082018190527f57686974656c69737441646d696e526f6c653a2063616c6c657220646f657320908201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612a1257612a126129ed565b500490565b600082612a2657612a266129ed565b500690565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000612b156040830185612473565b8281036020840152610d0b8185612473565b601f821115610a4b57600081815260208120601f850160051c81016020861015612b4e5750805b601f850160051c820191505b8181101561126b57828155600101612b5a565b81516001600160401b03811115612b8657612b866121b7565b612b9a81612b94845461281c565b84612b27565b602080601f831160018114612bcf5760008415612bb75750858301515b600019600386901b1c1916600185901b17855561126b565b600085815260208120601f198616915b82811015612bfe57888601518255948401946001909101908401612bdf565b5085821015612c1c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0386811682528516602082015260a060408201819052600090612c5890830186612473565b8281036060840152612c6a8186612473565b90508281036080840152612c7e818561215d565b98975050505050505050565b600060208284031215612c9c57600080fd5b8151612132816120ff565b600060033d1115612cc05760046000803e5060005160e01c5b90565b600060443d1015612cd15790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715612d0057505050505090565b8285019150815181811115612d185750505050505090565b843d8701016020828501011115612d325750505050505090565b612d41602082860101876121cd565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612e559083018461215d565b97965050505050505056fea264697066735822122095a08c257b56198e7db43a0249ee0a3c70a245427b32ac29a8bf7cbe09a06b8e64736f6c63430008120033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000015526f736520275468756727204e616d616a756e617300000000000000000000000000000000000000000000000000000000000000000000000000000000000004524f534500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f68747470733a2f2f6170692e6469676973706f72742e78797a2f76312f6170692f6d657461646174612f726f73652f0000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102305760003560e01c8063869f759411610130578063b09ddf7b116100b8578063e00a4d221161007c578063e00a4d221461051c578063e985e9c51461053f578063f242432a1461057b578063f2fde38b1461058e578063f5298aca146105a157600080fd5b8063b09ddf7b1461049a578063bb5f747b146104ad578063bd85b039146104c0578063c342b673146104e0578063cd53d08e146104f357600080fd5b806398650275116100ff57806398650275146104465780639ad100541461044e578063a22cb46514610461578063a7529d0214610474578063aa271e1a1461048757600080fd5b8063869f7594146103e65780638da5cb5b1461040657806395d89b411461042b578063983b2d561461043357600080fd5b80634c5a628c116101be5780636897e974116101825780636897e974146103925780636b20c454146103a5578063715018a6146103b8578063731133e9146103c05780637362d9c8146103d357600080fd5b80634c5a628c146103315780634e1273f414610339578063558a72971461035957806361d741d91461036c57806367db3b8f1461037f57600080fd5b80630e89341c116102055780630e89341c146102b357806313e7c9d8146102c65780632693ebf2146102e95780632eb2c2d6146103095780633092afd51461031e57600080fd5b80624221f014610235578062fdd58e1461026857806301ffc9a71461027b57806306fdde031461029e575b600080fd5b6102556102433660046120a0565b60096020526000908152604090205481565b6040519081526020015b60405180910390f35b6102556102763660046120d5565b6105b4565b61028e610289366004612115565b61064d565b604051901515815260200161025f565b6102a661069d565b60405161025f9190612189565b6102a66102c13660046120a0565b61072b565b61028e6102d436600461219c565b600c6020526000908152604090205460ff1681565b6102556102f73660046120a0565b60086020526000908152604090205481565b61031c610317366004612300565b61078b565b005b61031c61032c36600461219c565b6107d7565b61031c6107eb565b61034c6103473660046123a9565b6107f6565b60405161025f91906124ae565b61031c6103673660046124d1565b61091f565b61031c61037a366004612504565b610952565b61031c61038d366004612548565b610968565b61031c6103a036600461219c565b6109b5565b61031c6103b336600461258c565b6109c6565b61031c610a50565b61031c6103ce3660046125ff565b610a62565b61031c6103e136600461219c565b610bac565b6102556103f43660046120a0565b60009081526009602052604090205490565b6003546001600160a01b03165b6040516001600160a01b03909116815260200161025f565b6102a6610bda565b61031c61044136600461219c565b610be7565b61031c610c15565b61025561045c36600461265f565b610c1e565b61031c61046f3660046124d1565b610c5c565b61031c6104823660046126af565b610c67565b61028e61049536600461219c565b610cc9565b6102556104a8366004612720565b610cd6565b61028e6104bb36600461219c565b610d14565b6102556104ce3660046120a0565b60009081526008602052604090205490565b61031c6104ee3660046125ff565b610d21565b6104136105013660046120a0565b6007602052600090815260409020546001600160a01b031681565b61028e61052a3660046120a0565b600d6020526000908152604090205460ff1681565b61028e61054d36600461275b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61031c610589366004612785565b610d35565b61031c61059c36600461219c565b610d7a565b61031c6105af3660046127e9565b610df0565b60006001600160a01b0383166106245760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061067e57506001600160e01b031982166303a24d0760e21b145b8061064757506301ffc9a760e01b6001600160e01b0319831614610647565b600a80546106aa9061281c565b80601f01602080910402602001604051908101604052809291908181526020018280546106d69061281c565b80156107235780601f106106f857610100808354040283529160200191610723565b820191906000526020600020905b81548152906001019060200180831161070657829003601f168201915b505050505081565b6060600061073883610f2d565b51116107535760405180602001604052806000815250610647565b61075c82610f2d565b61076583610fc1565b604051602001610776929190612856565b60405160208183030381529060405292915050565b6001600160a01b0385163314806107a757506107a7853361054d565b6107c35760405162461bcd60e51b815260040161061b90612885565b6107d085858585856110c9565b5050505050565b6107df611273565b6107e8816112cd565b50565b6107f43361130f565b565b6060815183511461085b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161061b565b600083516001600160401b03811115610876576108766121b7565b60405190808252806020026020018201604052801561089f578160200160208202803683370190505b50905060005b8451811015610917576108ea8582815181106108c3576108c36128d4565b60200260200101518583815181106108dd576108dd6128d4565b60200260200101516105b4565b8282815181106108fc576108fc6128d4565b602090810291909101015261091081612900565b90506108a5565b509392505050565b610927611273565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b61095a611273565b6109648282611351565b5050565b610970611273565b61097982611463565b807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b836040516109a99190612189565b60405180910390a25050565b6109bd611273565b6107e88161130f565b60005b8251811015610a3f578181815181106109e4576109e46128d4565b602002602001015160086000858481518110610a0257610a026128d4565b602002602001015181526020019081526020016000206000828254610a279190612919565b90915550819050610a3781612900565b9150506109c9565b50610a4b83838361146f565b505050565b610a58611273565b6107f460006114b2565b610a6b33610cc9565b610a875760405162461bcd60e51b815260040161061b9061292c565b600083815260086020526040902054158015610ab157506000838152600d602052604090205460ff165b15610b0557604080516001808252818301909252600091602080830190803683370190505090508381600081518110610aec57610aec6128d4565b602002602001018181525050610b03816001611351565b505b600083815260096020908152604080832054600890925290912054610b2b90849061297c565b1115610b6e5760405162461bcd60e51b815260206004820152601260248201527113585e081cdd5c1c1b1e481c995858da195960721b604482015260640161061b565b610b7a84848484611504565b600083815260086020526040902054610b9490839061297c565b60009384526008602052604090932092909255505050565b610bb533610d14565b610bd15760405162461bcd60e51b815260040161061b9061298f565b6107e881611627565b600b80546106aa9061281c565b610bf033610cc9565b610c0c5760405162461bcd60e51b815260040161061b9061292c565b6107e881611669565b6107f4336112cd565b6000610c2933610d14565b610c455760405162461bcd60e51b815260040161061b9061298f565b610c5286868686866116ab565b9695505050505050565b6109643383836117d0565b610c7033610cc9565b610c8c5760405162461bcd60e51b815260040161061b9061292c565b610cb584600160008560405180604001604052806002815260200161060f60f31b8152506116ab565b50610cc38385600184610a62565b50505050565b6000610647600483610e9b565b6000610ce133610d14565b610cfd5760405162461bcd60e51b815260040161061b9061298f565b610d0b6000868686866116ab565b95945050505050565b6000610647600583610e9b565b610d29611273565b610cc384848484611504565b6001600160a01b038516331480610d515750610d51853361054d565b610d6d5760405162461bcd60e51b815260040161061b90612885565b6107d085858585856118b0565b610d82611273565b6001600160a01b038116610de75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161061b565b6107e8816114b2565b60008281526008602052604081208054839290610e0e908490612919565b90915550610a4b90508383836119e8565b610e298282610e9b565b15610e765760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015260640161061b565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b038216610efe5760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b606482015260840161061b565b506001600160a01b03166000908152602091909152604090205460ff1690565b6001600160a01b03163b151590565b606060028054610f3c9061281c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f689061281c565b8015610fb55780601f10610f8a57610100808354040283529160200191610fb5565b820191906000526020600020905b815481529060010190602001808311610f9857829003601f168201915b50505050509050919050565b606081600003610fe85750506040805180820190915260018152600360fc1b602082015290565b8160005b81156110125780610ffc81612900565b915061100b9050600a83612a03565b9150610fec565b6000816001600160401b0381111561102c5761102c6121b7565b6040519080825280601f01601f191660200182016040528015611056576020820181803683370190505b5090505b84156110c15761106b600183612919565b9150611078600a86612a17565b61108390603061297c565b60f81b818381518110611098576110986128d4565b60200101906001600160f81b031916908160001a9053506110ba600a86612a03565b945061105a565b949350505050565b81518351146110ea5760405162461bcd60e51b815260040161061b90612a2b565b6001600160a01b0384166111105760405162461bcd60e51b815260040161061b90612a73565b3361111f818787878787611a2b565b60005b845181101561120557600085828151811061113f5761113f6128d4565b60200260200101519050600085838151811061115d5761115d6128d4565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156111ad5760405162461bcd60e51b815260040161061b90612ab8565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906111ea90849061297c565b92505081905550505050806111fe90612900565b9050611122565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611255929190612b02565b60405180910390a461126b818787878787611adc565b505050505050565b6003546001600160a01b031633146107f45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b6112d8600482611c37565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b61131a600582611c37565b6040516001600160a01b038216907f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16590600090a250565b60005b8251811015610a4b5781600d6000858481518110611374576113746128d4565b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555081156113fe577f032bc66be43dbccb7487781d168eb7bda224628a3b2c3388bdf69b532a3a16118382815181106113da576113da6128d4565b60200260200101516040516113f191815260200190565b60405180910390a1611451565b7ff27b6ce5b2f5e68ddb2fd95a8a909d4ecf1daaac270935fff052feacb24f1842838281518110611431576114316128d4565b602002602001015160405161144891815260200190565b60405180910390a15b8061145b81612900565b915050611354565b60026109648282612b6d565b6001600160a01b03831633148061148b575061148b833361054d565b6114a75760405162461bcd60e51b815260040161061b90612885565b610a4b838383611cb9565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0384166115645760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161061b565b33600061157085611e55565b9050600061157d85611e55565b905061158e83600089858589611a2b565b6000868152602081815260408083206001600160a01b038b168452909152812080548792906115be90849061297c565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461161e83600089898989611ea0565b50505050505050565b611632600582610e1f565b6040516001600160a01b038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b611674600482610e1f565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6000848411156117135760405162461bcd60e51b815260206004820152602d60248201527f496e697469616c20737570706c792063616e6e6f74206265206d6f726520746860448201526c616e206d617820737570706c7960981b606482015260840161061b565b8560000361174c57611723611f5b565b955061172d611f71565b600086815260076020526040902080546001600160a01b031916331790555b82511561178c57857f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b846040516117839190612189565b60405180910390a25b83156117af576117af6117a76003546001600160a01b031690565b878685611504565b50505060008381526008602090815260408083209390935560099052205590565b816001600160a01b0316836001600160a01b0316036118435760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161061b565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166118d65760405162461bcd60e51b815260040161061b90612a73565b3360006118e285611e55565b905060006118ef85611e55565b90506118ff838989858589611a2b565b6000868152602081815260408083206001600160a01b038c168452909152902054858110156119405760405162461bcd60e51b815260040161061b90612ab8565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061197d90849061297c565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46119dd848a8a8a8a8a611ea0565b505050505050505050565b6001600160a01b038316331480611a045750611a04833361054d565b611a205760405162461bcd60e51b815260040161061b90612885565b610a4b838383611f88565b60005b835181101561161e57600d6000858381518110611a4d57611a4d6128d4565b60209081029190910181015182528101919091526040016000205460ff1615611aca576001600160a01b0386166000908152600c602052604090205460ff16611aca5760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c881b1bd8dad959608a1b604482015260640161061b565b80611ad481612900565b915050611a2e565b6001600160a01b0384163b1561126b5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611b209089908990889088908890600401612c2c565b6020604051808303816000875af1925050508015611b5b575060408051601f3d908101601f19168201909252611b5891810190612c8a565b60015b611c0757611b67612ca7565b806308c379a003611ba05750611b7b612cc3565b80611b865750611ba2565b8060405162461bcd60e51b815260040161061b9190612189565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161061b565b6001600160e01b0319811663bc197c8160e01b1461161e5760405162461bcd60e51b815260040161061b90612d4c565b611c418282610e9b565b611c975760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b606482015260840161061b565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b038316611cdf5760405162461bcd60e51b815260040161061b90612d94565b8051825114611d005760405162461bcd60e51b815260040161061b90612a2b565b6000339050611d2381856000868660405180602001604052806000815250611a2b565b60005b8351811015611de8576000848281518110611d4357611d436128d4565b602002602001015190506000848381518110611d6157611d616128d4565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015611db15760405162461bcd60e51b815260040161061b90612dd7565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580611de081612900565b915050611d26565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611e39929190612b02565b60405180910390a4604080516020810190915260009052610cc3565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611e8f57611e8f6128d4565b602090810291909101015292915050565b6001600160a01b0384163b1561126b5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611ee49089908990889088908890600401612e1b565b6020604051808303816000875af1925050508015611f1f575060408051601f3d908101601f19168201909252611f1c91810190612c8a565b60015b611f2b57611b67612ca7565b6001600160e01b0319811663f23a6e6160e01b1461161e5760405162461bcd60e51b815260040161061b90612d4c565b60006006546001611f6c919061297c565b905090565b60068054906000611f8183612900565b9190505550565b6001600160a01b038316611fae5760405162461bcd60e51b815260040161061b90612d94565b336000611fba84611e55565b90506000611fc784611e55565b9050611fe783876000858560405180602001604052806000815250611a2b565b6000858152602081815260408083206001600160a01b038a168452909152902054848110156120285760405162461bcd60e51b815260040161061b90612dd7565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460408051602081019091526000905261161e565b6000602082840312156120b257600080fd5b5035919050565b80356001600160a01b03811681146120d057600080fd5b919050565b600080604083850312156120e857600080fd5b6120f1836120b9565b946020939093013593505050565b6001600160e01b0319811681146107e857600080fd5b60006020828403121561212757600080fd5b8135612132816120ff565b9392505050565b60005b8381101561215457818101518382015260200161213c565b50506000910152565b60008151808452612175816020860160208601612139565b601f01601f19169290920160200192915050565b602081526000612132602083018461215d565b6000602082840312156121ae57600080fd5b612132826120b9565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b03811182821017156121f2576121f26121b7565b6040525050565b60006001600160401b03821115612212576122126121b7565b5060051b60200190565b600082601f83011261222d57600080fd5b8135602061223a826121f9565b60405161224782826121cd565b83815260059390931b850182019282810191508684111561226757600080fd5b8286015b84811015612282578035835291830191830161226b565b509695505050505050565b600082601f83011261229e57600080fd5b81356001600160401b038111156122b7576122b76121b7565b6040516122ce601f8301601f1916602001826121cd565b8181528460208386010111156122e357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561231857600080fd5b612321866120b9565b945061232f602087016120b9565b935060408601356001600160401b038082111561234b57600080fd5b61235789838a0161221c565b9450606088013591508082111561236d57600080fd5b61237989838a0161221c565b9350608088013591508082111561238f57600080fd5b5061239c8882890161228d565b9150509295509295909350565b600080604083850312156123bc57600080fd5b82356001600160401b03808211156123d357600080fd5b818501915085601f8301126123e757600080fd5b813560206123f4826121f9565b60405161240182826121cd565b83815260059390931b850182019282810191508984111561242157600080fd5b948201945b8386101561244657612437866120b9565b82529482019490820190612426565b9650508601359250508082111561245c57600080fd5b506124698582860161221c565b9150509250929050565b600081518084526020808501945080840160005b838110156124a357815187529582019590820190600101612487565b509495945050505050565b6020815260006121326020830184612473565b803580151581146120d057600080fd5b600080604083850312156124e457600080fd5b6124ed836120b9565b91506124fb602084016124c1565b90509250929050565b6000806040838503121561251757600080fd5b82356001600160401b0381111561252d57600080fd5b6125398582860161221c565b9250506124fb602084016124c1565b6000806040838503121561255b57600080fd5b82356001600160401b0381111561257157600080fd5b61257d8582860161228d565b95602094909401359450505050565b6000806000606084860312156125a157600080fd5b6125aa846120b9565b925060208401356001600160401b03808211156125c657600080fd5b6125d28783880161221c565b935060408601359150808211156125e857600080fd5b506125f58682870161221c565b9150509250925092565b6000806000806080858703121561261557600080fd5b61261e856120b9565b9350602085013592506040850135915060608501356001600160401b0381111561264757600080fd5b6126538782880161228d565b91505092959194509250565b600080600080600060a0868803121561267757600080fd5b85359450602086013593506040860135925060608601356001600160401b03808211156126a357600080fd5b61237989838a0161228d565b600080600080608085870312156126c557600080fd5b843593506126d5602086016120b9565b925060408501356001600160401b03808211156126f157600080fd5b6126fd8883890161228d565b9350606087013591508082111561271357600080fd5b506126538782880161228d565b6000806000806080858703121561273657600080fd5b843593506020850135925060408501356001600160401b03808211156126f157600080fd5b6000806040838503121561276e57600080fd5b612777836120b9565b91506124fb602084016120b9565b600080600080600060a0868803121561279d57600080fd5b6127a6866120b9565b94506127b4602087016120b9565b9350604086013592506060860135915060808601356001600160401b038111156127dd57600080fd5b61239c8882890161228d565b6000806000606084860312156127fe57600080fd5b612807846120b9565b95602085013595506040909401359392505050565b600181811c9082168061283057607f821691505b60208210810361285057634e487b7160e01b600052602260045260246000fd5b50919050565b60008351612868818460208801612139565b83519083019061287c818360208801612139565b01949350505050565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612912576129126128ea565b5060010190565b81810381811115610647576106476128ea565b60208082526030908201527f4d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766560408201526f20746865204d696e74657220726f6c6560801b606082015260800190565b80820180821115610647576106476128ea565b602080825260409082018190527f57686974656c69737441646d696e526f6c653a2063616c6c657220646f657320908201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612a1257612a126129ed565b500490565b600082612a2657612a266129ed565b500690565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000612b156040830185612473565b8281036020840152610d0b8185612473565b601f821115610a4b57600081815260208120601f850160051c81016020861015612b4e5750805b601f850160051c820191505b8181101561126b57828155600101612b5a565b81516001600160401b03811115612b8657612b866121b7565b612b9a81612b94845461281c565b84612b27565b602080601f831160018114612bcf5760008415612bb75750858301515b600019600386901b1c1916600185901b17855561126b565b600085815260208120601f198616915b82811015612bfe57888601518255948401946001909101908401612bdf565b5085821015612c1c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0386811682528516602082015260a060408201819052600090612c5890830186612473565b8281036060840152612c6a8186612473565b90508281036080840152612c7e818561215d565b98975050505050505050565b600060208284031215612c9c57600080fd5b8151612132816120ff565b600060033d1115612cc05760046000803e5060005160e01c5b90565b600060443d1015612cd15790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715612d0057505050505090565b8285019150815181811115612d185750505050505090565b843d8701016020828501011115612d325750505050505090565b612d41602082860101876121cd565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612e559083018461215d565b97965050505050505056fea264697066735822122095a08c257b56198e7db43a0249ee0a3c70a245427b32ac29a8bf7cbe09a06b8e64736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000015526f736520275468756727204e616d616a756e617300000000000000000000000000000000000000000000000000000000000000000000000000000000000004524f534500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f68747470733a2f2f6170692e6469676973706f72742e78797a2f76312f6170692f6d657461646174612f726f73652f0000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Rose 'Thug' Namajunas
Arg [1] : _symbol (string): ROSE
Arg [2] : _url (string): https://api.digisport.xyz/v1/api/metadata/rose/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [4] : 526f736520275468756727204e616d616a756e61730000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 524f534500000000000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000002f
Arg [8] : 68747470733a2f2f6170692e6469676973706f72742e78797a2f76312f617069
Arg [9] : 2f6d657461646174612f726f73652f0000000000000000000000000000000000
Deployed Bytecode Sourcemap
53020:5555:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48143:49;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;345:25:1;;;333:2;318:18;48143:49:0;;;;;;;;26805:230;;;;;;:::i;:::-;;:::i;25828:310::-;;;;;;:::i;:::-;;:::i;:::-;;;1369:14:1;;1362:22;1344:41;;1332:2;1317:18;25828:310:0;1204:187:1;48215:18:0;;;:::i;:::-;;;;;;;:::i;58363:209::-;;;;;;:::i;:::-;;:::i;53100:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;48093:46;;;;;;:::i;:::-;;;;;;;;;;;;;;28749:439;;;;;;:::i;:::-;;:::i;:::-;;48507:88;;;;;;:::i;:::-;;:::i;47151:95::-;;;:::i;27201:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;57284:107::-;;;;;;:::i;:::-;;:::i;57396:113::-;;;;;;:::i;:::-;;:::i;58211:144::-;;;;;;:::i;:::-;;:::i;48398:104::-;;;;;;:::i;:::-;;:::i;51914:315::-;;;;;;:::i;:::-;;:::i;45362:103::-;;;:::i;55981:503::-;;;;;;:::i;:::-;;:::i;47027:116::-;;;;;;:::i;:::-;;:::i;49242:98::-;;;;;;:::i;:::-;49295:7;49316:19;;;:14;:19;;;;;;;49242:98;44714:87;44787:6;;-1:-1:-1;;;;;44787:6:0;44714:87;;;-1:-1:-1;;;;;9686:32:1;;;9668:51;;9656:2;9641:18;44714:87:0;9522:203:1;48258:20:0;;;:::i;24284:92::-;;;;;;:::i;:::-;;:::i;24384:79::-;;;:::i;50224:261::-;;;;;;:::i;:::-;;:::i;27798:155::-;;;;;;:::i;:::-;;:::i;57098:181::-;;;;;;:::i;:::-;;:::i;24167:109::-;;;;;;:::i;:::-;;:::i;49981:236::-;;;;;;:::i;:::-;;:::i;46894:125::-;;;;;;:::i;:::-;;:::i;48987:97::-;;;;;;:::i;:::-;49042:7;49063:16;;;:11;:16;;;;;;;48987:97;56767:162;;;;;;:::i;:::-;;:::i;48046:43::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;48046:43:0;;;53145;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28025:168;;;;;;:::i;:::-;-1:-1:-1;;;;;28148:27:0;;;28124:4;28148:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;28025:168;28265:407;;;;;;:::i;:::-;;:::i;45620:201::-;;;;;;:::i;:::-;;:::i;51680:226::-;;;;;;:::i;:::-;;:::i;26805:230::-;26891:7;-1:-1:-1;;;;;26919:21:0;;26911:76;;;;-1:-1:-1;;;26911:76:0;;13256:2:1;26911:76:0;;;13238:21:1;13295:2;13275:18;;;13268:30;13334:34;13314:18;;;13307:62;-1:-1:-1;;;13385:18:1;;;13378:40;13435:19;;26911:76:0;;;;;;;;;-1:-1:-1;27005:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;27005:22:0;;;;;;;;;;26805:230;;;;;:::o;25828:310::-;25930:4;-1:-1:-1;;;;;;25967:41:0;;-1:-1:-1;;;25967:41:0;;:110;;-1:-1:-1;;;;;;;26025:52:0;;-1:-1:-1;;;26025:52:0;25967:110;:163;;;-1:-1:-1;;;;;;;;;;10444:40:0;;;26094:36;10335:157;48215:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;58363:209::-;58423:13;58491:1;58462:18;58472:7;58462:9;:18::i;:::-;58456:32;:36;:108;;;;;;;;;;;;;;;;;58519:18;58529:7;58519:9;:18::i;:::-;58539;:7;:16;:18::i;:::-;58502:56;;;;;;;;;:::i;:::-;;;;;;;;;;;;;58449:115;58363:209;-1:-1:-1;;58363:209:0:o;28749:439::-;-1:-1:-1;;;;;28982:20:0;;22536:10;28982:20;;:60;;-1:-1:-1;29006:36:0;29023:4;22536:10;28025:168;:::i;29006:36::-;28960:157;;;;-1:-1:-1;;;28960:157:0;;;;;;;:::i;:::-;29128:52;29151:4;29157:2;29161:3;29166:7;29175:4;29128:22;:52::i;:::-;28749:439;;;;;:::o;48507:88::-;44600:13;:11;:13::i;:::-;48568:22:::1;48582:7;48568:13;:22::i;:::-;48507:88:::0;:::o;47151:95::-;47203:35;22536:10;47203:21;:35::i;:::-;47151:95::o;27201:524::-;27357:16;27418:3;:10;27399:8;:15;:29;27391:83;;;;-1:-1:-1;;;27391:83:0;;14969:2:1;27391:83:0;;;14951:21:1;15008:2;14988:18;;;14981:30;15047:34;15027:18;;;15020:62;-1:-1:-1;;;15098:18:1;;;15091:39;15147:19;;27391:83:0;14767:405:1;27391:83:0;27487:30;27534:8;:15;-1:-1:-1;;;;;27520:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27520:30:0;;27487:63;;27568:9;27563:122;27587:8;:15;27583:1;:19;27563:122;;;27643:30;27653:8;27662:1;27653:11;;;;;;;;:::i;:::-;;;;;;;27666:3;27670:1;27666:6;;;;;;;;:::i;:::-;;;;;;;27643:9;:30::i;:::-;27624:13;27638:1;27624:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;27604:3;;;:::i;:::-;;;27563:122;;;-1:-1:-1;27704:13:0;27201:524;-1:-1:-1;;;27201:524:0:o;57284:107::-;44600:13;:11;:13::i;:::-;-1:-1:-1;;;;;57358:19:0;;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:28;;-1:-1:-1;;57358:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;57284:107::o;57396:113::-;44600:13;:11;:13::i;:::-;57475:29:::1;57492:3;57497:6;57475:16;:29::i;:::-;57396:113:::0;;:::o;58211:144::-;44600:13;:11;:13::i;:::-;58293:16:::1;58301:7;58293;:16::i;:::-;58338:8;58325:22;58329:7;58325:22;;;;;;:::i;:::-;;;;;;;;58211:144:::0;;:::o;48398:104::-;44600:13;:11;:13::i;:::-;48467:30:::1;48489:7;48467:21;:30::i;51914:315::-:0;52092:6;52088:80;52108:3;:10;52104:1;:14;52088:80;;;52153:6;52160:1;52153:9;;;;;;;;:::i;:::-;;;;;;;52131:11;:19;52143:3;52147:1;52143:6;;;;;;;;:::i;:::-;;;;;;;52131:19;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;52120:3:0;;-1:-1:-1;52120:3:0;;;:::i;:::-;;;;52088:80;;;;52174:47;52200:7;52209:3;52214:6;52174:25;:47::i;:::-;51914:315;;;:::o;45362:103::-;44600:13;:11;:13::i;:::-;45427:30:::1;45454:1;45427:18;:30::i;55981:503::-:0;24064:22;22536:10;24167:109;:::i;24064:22::-;24056:83;;;;-1:-1:-1;;;24056:83:0;;;;;;;:::i;:::-;56117:16:::1;::::0;;;:11:::1;:16;::::0;;;;;:21;:44;::::1;;;-1:-1:-1::0;56142:19:0::1;::::0;;;:14:::1;:19;::::0;;;;;::::1;;56117:44;56114:189;;;56201:13;::::0;;56212:1:::1;56201:13:::0;;;;;::::1;::::0;;;56178:20:::1;::::0;56201:13:::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;56201:13:0::1;56178:36;;56241:3;56229:6;56236:1;56229:9;;;;;;;;:::i;:::-;;;;;;:15;;;::::0;::::1;56261:30;56278:6;56286:4;56261:16;:30::i;:::-;56163:140;56114:189;56347:19;::::0;;;:14:::1;:19;::::0;;;;;;;;56315:11:::1;:16:::0;;;;;;;:28:::1;::::0;56334:9;;56315:28:::1;:::i;:::-;:51;;56307:82;;;::::0;-1:-1:-1;;;56307:82:0;;16463:2:1;56307:82:0::1;::::0;::::1;16445:21:1::0;16502:2;16482:18;;;16475:30;-1:-1:-1;;;16521:18:1;;;16514:48;16579:18;;56307:82:0::1;16261:342:1::0;56307:82:0::1;56394:33;56400:3;56405;56410:9;56421:5;56394;:33::i;:::-;56451:16;::::0;;;:11:::1;:16;::::0;;;;;:28:::1;::::0;56470:9;;56451:28:::1;:::i;:::-;56432:16;::::0;;;:11:::1;:16;::::0;;;;;:47;;;;-1:-1:-1;;;55981:503:0:o;47027:116::-;46767:30;22536:10;46894:125;:::i;46767:30::-;46759:107;;;;-1:-1:-1;;;46759:107:0;;;;;;;:::i;:::-;47108:27:::1;47127:7;47108:18;:27::i;48258:20::-:0;;;;;;;:::i;24284:92::-;24064:22;22536:10;24167:109;:::i;24064:22::-;24056:83;;;;-1:-1:-1;;;24056:83:0;;;;;;;:::i;:::-;24349:19:::1;24360:7;24349:10;:19::i;24384:79::-:0;24428:27;22536:10;24428:13;:27::i;50224:261::-;50398:15;46767:30;22536:10;46894:125;:::i;46767:30::-;46759:107;;;;-1:-1:-1;;;46759:107:0;;;;;;;:::i;:::-;50427:53:::1;50435:3;50440:10;50452:14;50468:4;50474:5;50427:7;:53::i;:::-;50420:60:::0;50224:261;-1:-1:-1;;;;;;50224:261:0:o;27798:155::-;27893:52;22536:10;27926:8;27936;27893:18;:52::i;57098:181::-;24064:22;22536:10;24167:109;:::i;24064:22::-;24056:83;;;;-1:-1:-1;;;24056:83:0;;;;;;;:::i;:::-;57210:29:::1;57218:2;57222:1;57225;57228:4;57210:29;;;;;;;;;;;;;-1:-1:-1::0;;;57210:29:0::1;;::::0;:7:::1;:29::i;:::-;;57250:21;57255:2;57259;57263:1;57266:4;57250;:21::i;:::-;57098:181:::0;;;;:::o;24167:109::-;24223:4;24247:21;:8;24260:7;24247:12;:21::i;49981:236::-;50132:15;46767:30;22536:10;46894:125;:::i;46767:30::-;46759:107;;;;-1:-1:-1;;;46759:107:0;;;;;;;:::i;:::-;50161:51:::1;50169:1;50172:10;50184:14;50200:4;50206:5;50161:7;:51::i;:::-;50154:58:::0;49981:236;-1:-1:-1;;;;;49981:236:0:o;46894:125::-;46958:4;46982:29;:16;47003:7;46982:20;:29::i;56767:162::-;44600:13;:11;:13::i;:::-;56891:33:::1;56897:3;56902;56907:9;56918:5;56891;:33::i;28265:407::-:0;-1:-1:-1;;;;;28473:20:0;;22536:10;28473:20;;:60;;-1:-1:-1;28497:36:0;28514:4;22536:10;28025:168;:::i;28497:36::-;28451:157;;;;-1:-1:-1;;;28451:157:0;;;;;;;:::i;:::-;28619:45;28637:4;28643:2;28647;28651:6;28659:4;28619:17;:45::i;45620:201::-;44600:13;:11;:13::i;:::-;-1:-1:-1;;;;;45709:22:0;::::1;45701:73;;;::::0;-1:-1:-1;;;45701:73:0;;17243:2:1;45701:73:0::1;::::0;::::1;17225:21:1::0;17282:2;17262:18;;;17255:30;17321:34;17301:18;;;17294:62;-1:-1:-1;;;17372:18:1;;;17365:36;17418:19;;45701:73:0::1;17041:402:1::0;45701:73:0::1;45785:28;45804:8;45785:18;:28::i;51680:226::-:0;51828:15;;;;:11;:15;;;;;:23;;51846:5;;51828:15;:23;;51846:5;;51828:23;:::i;:::-;;;;-1:-1:-1;51858:40:0;;-1:-1:-1;51879:7:0;51888:2;51892:5;51858:20;:40::i;23001:178::-;23079:18;23083:4;23089:7;23079:3;:18::i;:::-;23078:19;23070:63;;;;-1:-1:-1;;;23070:63:0;;17650:2:1;23070:63:0;;;17632:21:1;17689:2;17669:18;;;17662:30;17728:33;17708:18;;;17701:61;17779:18;;23070:63:0;17448:355:1;23070:63:0;-1:-1:-1;;;;;23144:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;23144:27:0;23167:4;23144:27;;;23001:178::o;23537:203::-;23609:4;-1:-1:-1;;;;;23634:21:0;;23626:68;;;;-1:-1:-1;;;23626:68:0;;18010:2:1;23626:68:0;;;17992:21:1;18049:2;18029:18;;;18022:30;18088:34;18068:18;;;18061:62;-1:-1:-1;;;18139:18:1;;;18132:32;18181:19;;23626:68:0;17808:398:1;23626:68:0;-1:-1:-1;;;;;;23712:20:0;:11;:20;;;;;;;;;;;;;;;23537:203::o;1233:326::-;-1:-1:-1;;;;;1528:19:0;;:23;;;1233:326::o;26549:105::-;26609:13;26642:4;26635:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26549:105;;;:::o;19710:723::-;19766:13;19987:5;19996:1;19987:10;19983:53;;-1:-1:-1;;20014:10:0;;;;;;;;;;;;-1:-1:-1;;;20014:10:0;;;;;19710:723::o;19983:53::-;20061:5;20046:12;20102:78;20109:9;;20102:78;;20135:8;;;;:::i;:::-;;-1:-1:-1;20158:10:0;;-1:-1:-1;20166:2:0;20158:10;;:::i;:::-;;;20102:78;;;20190:19;20222:6;-1:-1:-1;;;;;20212:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20212:17:0;;20190:39;;20240:154;20247:10;;20240:154;;20274:11;20284:1;20274:11;;:::i;:::-;;-1:-1:-1;20343:10:0;20351:2;20343:5;:10;:::i;:::-;20330:24;;:2;:24;:::i;:::-;20317:39;;20300:6;20307;20300:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;20300:56:0;;;;;;;;-1:-1:-1;20371:11:0;20380:2;20371:11;;:::i;:::-;;;20240:154;;;20418:6;19710:723;-1:-1:-1;;;;19710:723:0:o;30984:1146::-;31211:7;:14;31197:3;:10;:28;31189:81;;;;-1:-1:-1;;;31189:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31289:16:0;;31281:66;;;;-1:-1:-1;;;31281:66:0;;;;;;;:::i;:::-;22536:10;31404:60;22536:10;31435:4;31441:2;31445:3;31450:7;31459:4;31404:20;:60::i;:::-;31482:9;31477:421;31501:3;:10;31497:1;:14;31477:421;;;31533:10;31546:3;31550:1;31546:6;;;;;;;;:::i;:::-;;;;;;;31533:19;;31567:14;31584:7;31592:1;31584:10;;;;;;;;:::i;:::-;;;;;;;;;;;;31611:19;31633:13;;;;;;;;;;-1:-1:-1;;;;;31633:19:0;;;;;;;;;;;;31584:10;;-1:-1:-1;31675:21:0;;;;31667:76;;;;-1:-1:-1;;;31667:76:0;;;;;;;:::i;:::-;31787:9;:13;;;;;;;;;;;-1:-1:-1;;;;;31787:19:0;;;;;;;;;;31809:20;;;31787:42;;31859:17;;;;;;;:27;;31809:20;;31787:9;31859:27;;31809:20;;31859:27;:::i;:::-;;;;;;;;31518:380;;;31513:3;;;;:::i;:::-;;;31477:421;;;;31945:2;-1:-1:-1;;;;;31915:47:0;31939:4;-1:-1:-1;;;;;31915:47:0;31929:8;-1:-1:-1;;;;;31915:47:0;;31949:3;31954:7;31915:47;;;;;;;:::i;:::-;;;;;;;;32047:75;32083:8;32093:4;32099:2;32103:3;32108:7;32117:4;32047:35;:75::i;:::-;31178:952;30984:1146;;;;;:::o;44879:132::-;44787:6;;-1:-1:-1;;;;;44787:6:0;22536:10;44943:23;44935:68;;;;-1:-1:-1;;;44935:68:0;;20483:2:1;44935:68:0;;;20465:21:1;;;20502:18;;;20495:30;20561:34;20541:18;;;20534:62;20613:18;;44935:68:0;20281:356:1;24601:130:0;24661:24;:8;24677:7;24661:15;:24::i;:::-;24701:22;;-1:-1:-1;;;;;24701:22:0;;;;;;;;24601:130;:::o;47408:154::-;47476:32;:16;47500:7;47476:23;:32::i;:::-;47524:30;;-1:-1:-1;;;;;47524:30:0;;;;;;;;47408:154;:::o;57517:296::-;57592:6;57588:221;57608:3;:10;57604:1;:14;57588:221;;;57656:6;57631:14;:22;57646:3;57650:1;57646:6;;;;;;;;:::i;:::-;;;;;;;57631:22;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;57680:6;57677:127;;;57712:14;57719:3;57723:1;57719:6;;;;;;;;:::i;:::-;;;;;;;57712:14;;;;345:25:1;;333:2;318:18;;199:177;57712:14:0;;;;;;;;57677:127;;;57772:16;57781:3;57785:1;57781:6;;;;;;;;:::i;:::-;;;;;;;57772:16;;;;345:25:1;;333:2;318:18;;199:177;57772:16:0;;;;;;;;57677:127;57620:3;;;;:::i;:::-;;;;57588:221;;32974:88;33041:4;:13;33048:6;33041:4;:13;:::i;43113:359::-;-1:-1:-1;;;;;43278:23:0;;22536:10;43278:23;;:66;;-1:-1:-1;43305:39:0;43322:7;22536:10;28025:168;:::i;43305:39::-;43256:163;;;;-1:-1:-1;;;43256:163:0;;;;;;;:::i;:::-;43432:32;43443:7;43452:3;43457:6;43432:10;:32::i;45981:191::-;46074:6;;;-1:-1:-1;;;;;46091:17:0;;;-1:-1:-1;;;;;;46091:17:0;;;;;;;46124:40;;46074:6;;;46091:17;46074:6;;46124:40;;46055:16;;46124:40;46044:128;45981:191;:::o;33448:729::-;-1:-1:-1;;;;;33601:16:0;;33593:62;;;;-1:-1:-1;;;33593:62:0;;23048:2:1;33593:62:0;;;23030:21:1;23087:2;23067:18;;;23060:30;23126:34;23106:18;;;23099:62;-1:-1:-1;;;23177:18:1;;;23170:31;23218:19;;33593:62:0;22846:397:1;33593:62:0;22536:10;33668:16;33733:21;33751:2;33733:17;:21::i;:::-;33710:44;;33765:24;33792:25;33810:6;33792:17;:25::i;:::-;33765:52;;33830:66;33851:8;33869:1;33873:2;33877:3;33882:7;33891:4;33830:20;:66::i;:::-;33909:9;:13;;;;;;;;;;;-1:-1:-1;;;;;33909:17:0;;;;;;;;;:27;;33930:6;;33909:9;:27;;33930:6;;33909:27;:::i;:::-;;;;-1:-1:-1;;33952:52:0;;;23422:25:1;;;23478:2;23463:18;;23456:34;;;-1:-1:-1;;;;;33952:52:0;;;;33985:1;;33952:52;;;;;;23395:18:1;33952:52:0;;;;;;;34095:74;34126:8;34144:1;34148:2;34152;34156:6;34164:4;34095:30;:74::i;:::-;33582:595;;;33448:729;;;;:::o;47254:146::-;47319:29;:16;47340:7;47319:20;:29::i;:::-;47364:28;;-1:-1:-1;;;;;47364:28:0;;;;;;;;47254:146;:::o;24471:122::-;24528:21;:8;24541:7;24528:12;:21::i;:::-;24565:20;;-1:-1:-1;;;;;24565:20:0;;;;;;;;24471:122;:::o;50490:606::-;50641:15;50689:10;50671:14;:28;;50663:86;;;;-1:-1:-1;;;50663:86:0;;23703:2:1;50663:86:0;;;23685:21:1;23742:2;23722:18;;;23715:30;23781:34;23761:18;;;23754:62;-1:-1:-1;;;23832:18:1;;;23825:43;23885:19;;50663:86:0;23501:409:1;50663:86:0;50757:3;50764:1;50757:8;50754:109;;50779:17;:15;:17::i;:::-;50773:23;;50802;:21;:23::i;:::-;50831:13;;;;:8;:13;;;;;:26;;-1:-1:-1;;;;;;50831:26:0;50847:10;50831:26;;;50754:109;50873:18;;:22;50869:59;;50918:3;50908:14;50912:4;50908:14;;;;;;:::i;:::-;;;;;;;;50869:59;50938:19;;50934:67;;50959:42;50965:7;44787:6;;-1:-1:-1;;;;;44787:6:0;;44714:87;50965:7;50974:3;50979:14;50995:5;50959;:42::i;:::-;-1:-1:-1;;;51006:16:0;;;;:11;:16;;;;;;;;:33;;;;51044:14;:19;;;:32;51006:16;50490:606::o;37861:331::-;38016:8;-1:-1:-1;;;;;38007:17:0;:5;-1:-1:-1;;;;;38007:17:0;;37999:71;;;;-1:-1:-1;;;37999:71:0;;24117:2:1;37999:71:0;;;24099:21:1;24156:2;24136:18;;;24129:30;24195:34;24175:18;;;24168:62;-1:-1:-1;;;24246:18:1;;;24239:39;24295:19;;37999:71:0;23915:405:1;37999:71:0;-1:-1:-1;;;;;38081:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;38081:46:0;;;;;;;;;;38143:41;;1344::1;;;38143::0;;1317:18:1;38143:41:0;;;;;;;37861:331;;;:::o;29652:974::-;-1:-1:-1;;;;;29840:16:0;;29832:66;;;;-1:-1:-1;;;29832:66:0;;;;;;;:::i;:::-;22536:10;29911:16;29976:21;29994:2;29976:17;:21::i;:::-;29953:44;;30008:24;30035:25;30053:6;30035:17;:25::i;:::-;30008:52;;30073:60;30094:8;30104:4;30110:2;30114:3;30119:7;30128:4;30073:20;:60::i;:::-;30146:19;30168:13;;;;;;;;;;;-1:-1:-1;;;;;30168:19:0;;;;;;;;;;30206:21;;;;30198:76;;;;-1:-1:-1;;;30198:76:0;;;;;;;:::i;:::-;30310:9;:13;;;;;;;;;;;-1:-1:-1;;;;;30310:19:0;;;;;;;;;;30332:20;;;30310:42;;30374:17;;;;;;;:27;;30332:20;;30310:9;30374:27;;30332:20;;30374:27;:::i;:::-;;;;-1:-1:-1;;30419:46:0;;;23422:25:1;;;23478:2;23463:18;;23456:34;;;-1:-1:-1;;;;;30419:46:0;;;;;;;;;;;;;;23395:18:1;30419:46:0;;;;;;;30550:68;30581:8;30591:4;30597:2;30601;30605:6;30613:4;30550:30;:68::i;:::-;29821:805;;;;29652:974;;;;;:::o;42778:327::-;-1:-1:-1;;;;;42918:23:0;;22536:10;42918:23;;:66;;-1:-1:-1;42945:39:0;42962:7;22536:10;28025:168;:::i;42945:39::-;42896:163;;;;-1:-1:-1;;;42896:163:0;;;;;;;:::i;:::-;43072:25;43078:7;43087:2;43091:5;43072;:25::i;57818:385::-;58071:6;58067:132;58087:3;:10;58083:1;:14;58067:132;;;58113:14;:22;58128:3;58132:1;58128:6;;;;;;;;:::i;:::-;;;;;;;;;;;;58113:22;;;;;;;;;;-1:-1:-1;58113:22:0;;;;58110:84;;;-1:-1:-1;;;;;58152:15:0;;;;;;:9;:15;;;;;;;;58144:43;;;;-1:-1:-1;;;58144:43:0;;24527:2:1;58144:43:0;;;24509:21:1;24566:2;24546:18;;;24539:30;-1:-1:-1;;;24585:18:1;;;24578:45;24640:18;;58144:43:0;24325:339:1;58144:43:0;58099:3;;;;:::i;:::-;;;;58067:132;;41306:813;-1:-1:-1;;;;;41546:13:0;;1528:19;:23;41542:570;;41582:79;;-1:-1:-1;;;41582:79:0;;-1:-1:-1;;;;;41582:43:0;;;;;:79;;41626:8;;41636:4;;41642:3;;41647:7;;41656:4;;41582:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41582:79:0;;;;;;;;-1:-1:-1;;41582:79:0;;;;;;;;;;;;:::i;:::-;;;41578:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;41974:6;41967:14;;-1:-1:-1;;;41967:14:0;;;;;;;;:::i;41578:523::-;;;42023:62;;-1:-1:-1;;;42023:62:0;;26817:2:1;42023:62:0;;;26799:21:1;26856:2;26836:18;;;26829:30;26895:34;26875:18;;;26868:62;-1:-1:-1;;;26946:18:1;;;26939:50;27006:19;;42023:62:0;26615:416:1;41578:523:0;-1:-1:-1;;;;;;41743:60:0;;-1:-1:-1;;;41743:60:0;41739:159;;41828:50;;-1:-1:-1;;;41828:50:0;;;;;;;:::i;23259:183::-;23339:18;23343:4;23349:7;23339:3;:18::i;:::-;23331:64;;;;-1:-1:-1;;;23331:64:0;;27647:2:1;23331:64:0;;;27629:21:1;27686:2;27666:18;;;27659:30;27725:34;27705:18;;;27698:62;-1:-1:-1;;;27776:18:1;;;27769:31;27817:19;;23331:64:0;27445:397:1;23331:64:0;-1:-1:-1;;;;;23406:20:0;23429:5;23406:20;;;;;;;;;;;:28;;-1:-1:-1;;23406:28:0;;;23259:183::o;36749:969::-;-1:-1:-1;;;;;36901:18:0;;36893:66;;;;-1:-1:-1;;;36893:66:0;;;;;;;:::i;:::-;36992:7;:14;36978:3;:10;:28;36970:81;;;;-1:-1:-1;;;36970:81:0;;;;;;;:::i;:::-;37064:16;22536:10;37064:31;;37108:66;37129:8;37139:4;37153:1;37157:3;37162:7;37108:66;;;;;;;;;;;;:20;:66::i;:::-;37192:9;37187:373;37211:3;:10;37207:1;:14;37187:373;;;37243:10;37256:3;37260:1;37256:6;;;;;;;;:::i;:::-;;;;;;;37243:19;;37277:14;37294:7;37302:1;37294:10;;;;;;;;:::i;:::-;;;;;;;;;;;;37321:19;37343:13;;;;;;;;;;-1:-1:-1;;;;;37343:19:0;;;;;;;;;;;;37294:10;;-1:-1:-1;37385:21:0;;;;37377:70;;;;-1:-1:-1;;;37377:70:0;;;;;;;:::i;:::-;37491:9;:13;;;;;;;;;;;-1:-1:-1;;;;;37491:19:0;;;;;;;;;;37513:20;;37491:42;;37223:3;;;;:::i;:::-;;;;37187:373;;;;37615:1;-1:-1:-1;;;;;37577:55:0;37601:4;-1:-1:-1;;;;;37577:55:0;37591:8;-1:-1:-1;;;;;37577:55:0;;37619:3;37624:7;37577:55;;;;;;;:::i;:::-;;;;;;;;37645:65;;;;;;;;;37689:1;37645:65;;;30984:1146;42127:198;42247:16;;;42261:1;42247:16;;;;;;;;;42193;;42222:22;;42247:16;;;;;;;;;;;;-1:-1:-1;42247:16:0;42222:41;;42285:7;42274:5;42280:1;42274:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;42312:5;42127:198;-1:-1:-1;;42127:198:0:o;40554:744::-;-1:-1:-1;;;;;40769:13:0;;1528:19;:23;40765:526;;40805:72;;-1:-1:-1;;;40805:72:0;;-1:-1:-1;;;;;40805:38:0;;;;;:72;;40844:8;;40854:4;;40860:2;;40864:6;;40872:4;;40805:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40805:72:0;;;;;;;;-1:-1:-1;;40805:72:0;;;;;;;;;;;;:::i;:::-;;;40801:479;;;;:::i;:::-;-1:-1:-1;;;;;;40927:55:0;;-1:-1:-1;;;40927:55:0;40923:154;;41007:50;;-1:-1:-1;;;41007:50:0;;;;;;;:::i;52683:95::-;52733:7;52754:15;;52772:1;52754:19;;;;:::i;:::-;52747:26;;52683:95;:::o;52845:69::-;52892:15;:17;;;:15;:17;;;:::i;:::-;;;;;;52845:69::o;35691:808::-;-1:-1:-1;;;;;35818:18:0;;35810:66;;;;-1:-1:-1;;;35810:66:0;;;;;;;:::i;:::-;22536:10;35889:16;35954:21;35972:2;35954:17;:21::i;:::-;35931:44;;35986:24;36013:25;36031:6;36013:17;:25::i;:::-;35986:52;;36051:66;36072:8;36082:4;36096:1;36100:3;36105:7;36051:66;;;;;;;;;;;;:20;:66::i;:::-;36130:19;36152:13;;;;;;;;;;;-1:-1:-1;;;;;36152:19:0;;;;;;;;;;36190:21;;;;36182:70;;;;-1:-1:-1;;;36182:70:0;;;;;;;:::i;:::-;36288:9;:13;;;;;;;;;;;-1:-1:-1;;;;;36288:19:0;;;;;;;;;;;;36310:20;;;36288:42;;36359:54;;23422:25:1;;;23463:18;;;23456:34;;;36288:19:0;;36359:54;;;;;;23395:18:1;36359:54:0;;;;;;;36426:65;;;;;;;;;36470:1;36426:65;;;30984:1146;14:180:1;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;381:173::-;449:20;;-1:-1:-1;;;;;498:31:1;;488:42;;478:70;;544:1;541;534:12;478:70;381:173;;;:::o;559:254::-;627:6;635;688:2;676:9;667:7;663:23;659:32;656:52;;;704:1;701;694:12;656:52;727:29;746:9;727:29;:::i;:::-;717:39;803:2;788:18;;;;775:32;;-1:-1:-1;;;559:254:1:o;818:131::-;-1:-1:-1;;;;;;892:32:1;;882:43;;872:71;;939:1;936;929:12;954:245;1012:6;1065:2;1053:9;1044:7;1040:23;1036:32;1033:52;;;1081:1;1078;1071:12;1033:52;1120:9;1107:23;1139:30;1163:5;1139:30;:::i;:::-;1188:5;954:245;-1:-1:-1;;;954:245:1:o;1396:250::-;1481:1;1491:113;1505:6;1502:1;1499:13;1491:113;;;1581:11;;;1575:18;1562:11;;;1555:39;1527:2;1520:10;1491:113;;;-1:-1:-1;;1638:1:1;1620:16;;1613:27;1396:250::o;1651:271::-;1693:3;1731:5;1725:12;1758:6;1753:3;1746:19;1774:76;1843:6;1836:4;1831:3;1827:14;1820:4;1813:5;1809:16;1774:76;:::i;:::-;1904:2;1883:15;-1:-1:-1;;1879:29:1;1870:39;;;;1911:4;1866:50;;1651:271;-1:-1:-1;;1651:271:1:o;1927:220::-;2076:2;2065:9;2058:21;2039:4;2096:45;2137:2;2126:9;2122:18;2114:6;2096:45;:::i;2152:186::-;2211:6;2264:2;2252:9;2243:7;2239:23;2235:32;2232:52;;;2280:1;2277;2270:12;2232:52;2303:29;2322:9;2303:29;:::i;2343:127::-;2404:10;2399:3;2395:20;2392:1;2385:31;2435:4;2432:1;2425:15;2459:4;2456:1;2449:15;2475:249;2585:2;2566:13;;-1:-1:-1;;2562:27:1;2550:40;;-1:-1:-1;;;;;2605:34:1;;2641:22;;;2602:62;2599:88;;;2667:18;;:::i;:::-;2703:2;2696:22;-1:-1:-1;;2475:249:1:o;2729:183::-;2789:4;-1:-1:-1;;;;;2814:6:1;2811:30;2808:56;;;2844:18;;:::i;:::-;-1:-1:-1;2889:1:1;2885:14;2901:4;2881:25;;2729:183::o;2917:724::-;2971:5;3024:3;3017:4;3009:6;3005:17;3001:27;2991:55;;3042:1;3039;3032:12;2991:55;3078:6;3065:20;3104:4;3127:43;3167:2;3127:43;:::i;:::-;3199:2;3193:9;3211:31;3239:2;3231:6;3211:31;:::i;:::-;3277:18;;;3369:1;3365:10;;;;3353:23;;3349:32;;;3311:15;;;;-1:-1:-1;3393:15:1;;;3390:35;;;3421:1;3418;3411:12;3390:35;3457:2;3449:6;3445:15;3469:142;3485:6;3480:3;3477:15;3469:142;;;3551:17;;3539:30;;3589:12;;;;3502;;3469:142;;;-1:-1:-1;3629:6:1;2917:724;-1:-1:-1;;;;;;2917:724:1:o;3646:555::-;3688:5;3741:3;3734:4;3726:6;3722:17;3718:27;3708:55;;3759:1;3756;3749:12;3708:55;3795:6;3782:20;-1:-1:-1;;;;;3817:2:1;3814:26;3811:52;;;3843:18;;:::i;:::-;3892:2;3886:9;3904:67;3959:2;3940:13;;-1:-1:-1;;3936:27:1;3965:4;3932:38;3886:9;3904:67;:::i;:::-;3995:2;3987:6;3980:18;4041:3;4034:4;4029:2;4021:6;4017:15;4013:26;4010:35;4007:55;;;4058:1;4055;4048:12;4007:55;4122:2;4115:4;4107:6;4103:17;4096:4;4088:6;4084:17;4071:54;4169:1;4145:15;;;4162:4;4141:26;4134:37;;;;4149:6;3646:555;-1:-1:-1;;;3646:555:1:o;4206:943::-;4360:6;4368;4376;4384;4392;4445:3;4433:9;4424:7;4420:23;4416:33;4413:53;;;4462:1;4459;4452:12;4413:53;4485:29;4504:9;4485:29;:::i;:::-;4475:39;;4533:38;4567:2;4556:9;4552:18;4533:38;:::i;:::-;4523:48;;4622:2;4611:9;4607:18;4594:32;-1:-1:-1;;;;;4686:2:1;4678:6;4675:14;4672:34;;;4702:1;4699;4692:12;4672:34;4725:61;4778:7;4769:6;4758:9;4754:22;4725:61;:::i;:::-;4715:71;;4839:2;4828:9;4824:18;4811:32;4795:48;;4868:2;4858:8;4855:16;4852:36;;;4884:1;4881;4874:12;4852:36;4907:63;4962:7;4951:8;4940:9;4936:24;4907:63;:::i;:::-;4897:73;;5023:3;5012:9;5008:19;4995:33;4979:49;;5053:2;5043:8;5040:16;5037:36;;;5069:1;5066;5059:12;5037:36;;5092:51;5135:7;5124:8;5113:9;5109:24;5092:51;:::i;:::-;5082:61;;;4206:943;;;;;;;;:::o;5154:1208::-;5272:6;5280;5333:2;5321:9;5312:7;5308:23;5304:32;5301:52;;;5349:1;5346;5339:12;5301:52;5389:9;5376:23;-1:-1:-1;;;;;5459:2:1;5451:6;5448:14;5445:34;;;5475:1;5472;5465:12;5445:34;5513:6;5502:9;5498:22;5488:32;;5558:7;5551:4;5547:2;5543:13;5539:27;5529:55;;5580:1;5577;5570:12;5529:55;5616:2;5603:16;5638:4;5661:43;5701:2;5661:43;:::i;:::-;5733:2;5727:9;5745:31;5773:2;5765:6;5745:31;:::i;:::-;5811:18;;;5899:1;5895:10;;;;5887:19;;5883:28;;;5845:15;;;;-1:-1:-1;5923:19:1;;;5920:39;;;5955:1;5952;5945:12;5920:39;5979:11;;;;5999:148;6015:6;6010:3;6007:15;5999:148;;;6081:23;6100:3;6081:23;:::i;:::-;6069:36;;6032:12;;;;6125;;;;5999:148;;;6166:6;-1:-1:-1;;6210:18:1;;6197:32;;-1:-1:-1;;6241:16:1;;;6238:36;;;6270:1;6267;6260:12;6238:36;;6293:63;6348:7;6337:8;6326:9;6322:24;6293:63;:::i;:::-;6283:73;;;5154:1208;;;;;:::o;6367:435::-;6420:3;6458:5;6452:12;6485:6;6480:3;6473:19;6511:4;6540:2;6535:3;6531:12;6524:19;;6577:2;6570:5;6566:14;6598:1;6608:169;6622:6;6619:1;6616:13;6608:169;;;6683:13;;6671:26;;6717:12;;;;6752:15;;;;6644:1;6637:9;6608:169;;;-1:-1:-1;6793:3:1;;6367:435;-1:-1:-1;;;;;6367:435:1:o;6807:261::-;6986:2;6975:9;6968:21;6949:4;7006:56;7058:2;7047:9;7043:18;7035:6;7006:56;:::i;7073:160::-;7138:20;;7194:13;;7187:21;7177:32;;7167:60;;7223:1;7220;7213:12;7238:254;7303:6;7311;7364:2;7352:9;7343:7;7339:23;7335:32;7332:52;;;7380:1;7377;7370:12;7332:52;7403:29;7422:9;7403:29;:::i;:::-;7393:39;;7451:35;7482:2;7471:9;7467:18;7451:35;:::i;:::-;7441:45;;7238:254;;;;;:::o;7497:416::-;7587:6;7595;7648:2;7636:9;7627:7;7623:23;7619:32;7616:52;;;7664:1;7661;7654:12;7616:52;7704:9;7691:23;-1:-1:-1;;;;;7729:6:1;7726:30;7723:50;;;7769:1;7766;7759:12;7723:50;7792:61;7845:7;7836:6;7825:9;7821:22;7792:61;:::i;:::-;7782:71;;;7872:35;7903:2;7892:9;7888:18;7872:35;:::i;7918:389::-;7996:6;8004;8057:2;8045:9;8036:7;8032:23;8028:32;8025:52;;;8073:1;8070;8063:12;8025:52;8113:9;8100:23;-1:-1:-1;;;;;8138:6:1;8135:30;8132:50;;;8178:1;8175;8168:12;8132:50;8201:49;8242:7;8233:6;8222:9;8218:22;8201:49;:::i;:::-;8191:59;8297:2;8282:18;;;;8269:32;;-1:-1:-1;;;;7918:389:1:o;8312:669::-;8439:6;8447;8455;8508:2;8496:9;8487:7;8483:23;8479:32;8476:52;;;8524:1;8521;8514:12;8476:52;8547:29;8566:9;8547:29;:::i;:::-;8537:39;;8627:2;8616:9;8612:18;8599:32;-1:-1:-1;;;;;8691:2:1;8683:6;8680:14;8677:34;;;8707:1;8704;8697:12;8677:34;8730:61;8783:7;8774:6;8763:9;8759:22;8730:61;:::i;:::-;8720:71;;8844:2;8833:9;8829:18;8816:32;8800:48;;8873:2;8863:8;8860:16;8857:36;;;8889:1;8886;8879:12;8857:36;;8912:63;8967:7;8956:8;8945:9;8941:24;8912:63;:::i;:::-;8902:73;;;8312:669;;;;;:::o;8986:531::-;9081:6;9089;9097;9105;9158:3;9146:9;9137:7;9133:23;9129:33;9126:53;;;9175:1;9172;9165:12;9126:53;9198:29;9217:9;9198:29;:::i;:::-;9188:39;;9274:2;9263:9;9259:18;9246:32;9236:42;;9325:2;9314:9;9310:18;9297:32;9287:42;;9380:2;9369:9;9365:18;9352:32;-1:-1:-1;;;;;9399:6:1;9396:30;9393:50;;;9439:1;9436;9429:12;9393:50;9462:49;9503:7;9494:6;9483:9;9479:22;9462:49;:::i;:::-;9452:59;;;8986:531;;;;;;;:::o;9730:746::-;9844:6;9852;9860;9868;9876;9929:3;9917:9;9908:7;9904:23;9900:33;9897:53;;;9946:1;9943;9936:12;9897:53;9982:9;9969:23;9959:33;;10039:2;10028:9;10024:18;10011:32;10001:42;;10090:2;10079:9;10075:18;10062:32;10052:42;;10145:2;10134:9;10130:18;10117:32;-1:-1:-1;;;;;10209:2:1;10201:6;10198:14;10195:34;;;10225:1;10222;10215:12;10195:34;10248:49;10289:7;10280:6;10269:9;10265:22;10248:49;:::i;10481:683::-;10586:6;10594;10602;10610;10663:3;10651:9;10642:7;10638:23;10634:33;10631:53;;;10680:1;10677;10670:12;10631:53;10716:9;10703:23;10693:33;;10745:38;10779:2;10768:9;10764:18;10745:38;:::i;:::-;10735:48;;10834:2;10823:9;10819:18;10806:32;-1:-1:-1;;;;;10898:2:1;10890:6;10887:14;10884:34;;;10914:1;10911;10904:12;10884:34;10937:49;10978:7;10969:6;10958:9;10954:22;10937:49;:::i;:::-;10927:59;;11039:2;11028:9;11024:18;11011:32;10995:48;;11068:2;11058:8;11055:16;11052:36;;;11084:1;11081;11074:12;11052:36;;11107:51;11150:7;11139:8;11128:9;11124:24;11107:51;:::i;11169:677::-;11274:6;11282;11290;11298;11351:3;11339:9;11330:7;11326:23;11322:33;11319:53;;;11368:1;11365;11358:12;11319:53;11404:9;11391:23;11381:33;;11461:2;11450:9;11446:18;11433:32;11423:42;;11516:2;11505:9;11501:18;11488:32;-1:-1:-1;;;;;11580:2:1;11572:6;11569:14;11566:34;;;11596:1;11593;11586:12;11851:260;11919:6;11927;11980:2;11968:9;11959:7;11955:23;11951:32;11948:52;;;11996:1;11993;11986:12;11948:52;12019:29;12038:9;12019:29;:::i;:::-;12009:39;;12067:38;12101:2;12090:9;12086:18;12067:38;:::i;12116:606::-;12220:6;12228;12236;12244;12252;12305:3;12293:9;12284:7;12280:23;12276:33;12273:53;;;12322:1;12319;12312:12;12273:53;12345:29;12364:9;12345:29;:::i;:::-;12335:39;;12393:38;12427:2;12416:9;12412:18;12393:38;:::i;:::-;12383:48;;12478:2;12467:9;12463:18;12450:32;12440:42;;12529:2;12518:9;12514:18;12501:32;12491:42;;12584:3;12573:9;12569:19;12556:33;-1:-1:-1;;;;;12604:6:1;12601:30;12598:50;;;12644:1;12641;12634:12;12598:50;12667:49;12708:7;12699:6;12688:9;12684:22;12667:49;:::i;12727:322::-;12804:6;12812;12820;12873:2;12861:9;12852:7;12848:23;12844:32;12841:52;;;12889:1;12886;12879:12;12841:52;12912:29;12931:9;12912:29;:::i;:::-;12902:39;12988:2;12973:18;;12960:32;;-1:-1:-1;13039:2:1;13024:18;;;13011:32;;12727:322;-1:-1:-1;;;12727:322:1:o;13465:380::-;13544:1;13540:12;;;;13587;;;13608:61;;13662:4;13654:6;13650:17;13640:27;;13608:61;13715:2;13707:6;13704:14;13684:18;13681:38;13678:161;;13761:10;13756:3;13752:20;13749:1;13742:31;13796:4;13793:1;13786:15;13824:4;13821:1;13814:15;13678:161;;13465:380;;;:::o;13850:496::-;14029:3;14067:6;14061:13;14083:66;14142:6;14137:3;14130:4;14122:6;14118:17;14083:66;:::i;:::-;14212:13;;14171:16;;;;14234:70;14212:13;14171:16;14281:4;14269:17;;14234:70;:::i;:::-;14320:20;;13850:496;-1:-1:-1;;;;13850:496:1:o;14351:411::-;14553:2;14535:21;;;14592:2;14572:18;;;14565:30;14631:34;14626:2;14611:18;;14604:62;-1:-1:-1;;;14697:2:1;14682:18;;14675:45;14752:3;14737:19;;14351:411::o;15177:127::-;15238:10;15233:3;15229:20;15226:1;15219:31;15269:4;15266:1;15259:15;15293:4;15290:1;15283:15;15309:127;15370:10;15365:3;15361:20;15358:1;15351:31;15401:4;15398:1;15391:15;15425:4;15422:1;15415:15;15441:135;15480:3;15501:17;;;15498:43;;15521:18;;:::i;:::-;-1:-1:-1;15568:1:1;15557:13;;15441:135::o;15581:128::-;15648:9;;;15669:11;;;15666:37;;;15683:18;;:::i;15714:412::-;15916:2;15898:21;;;15955:2;15935:18;;;15928:30;15994:34;15989:2;15974:18;;15967:62;-1:-1:-1;;;16060:2:1;16045:18;;16038:46;16116:3;16101:19;;15714:412::o;16131:125::-;16196:9;;;16217:10;;;16214:36;;;16230:18;;:::i;16608:428::-;16810:2;16792:21;;;16849:2;16829:18;;;16822:30;;;16888:34;16868:18;;;16861:62;16959:34;16954:2;16939:18;;16932:62;17026:3;17011:19;;16608:428::o;18211:127::-;18272:10;18267:3;18263:20;18260:1;18253:31;18303:4;18300:1;18293:15;18327:4;18324:1;18317:15;18343:120;18383:1;18409;18399:35;;18414:18;;:::i;:::-;-1:-1:-1;18448:9:1;;18343:120::o;18468:112::-;18500:1;18526;18516:35;;18531:18;;:::i;:::-;-1:-1:-1;18565:9:1;;18468:112::o;18585:404::-;18787:2;18769:21;;;18826:2;18806:18;;;18799:30;18865:34;18860:2;18845:18;;18838:62;-1:-1:-1;;;18931:2:1;18916:18;;18909:38;18979:3;18964:19;;18585:404::o;18994:401::-;19196:2;19178:21;;;19235:2;19215:18;;;19208:30;19274:34;19269:2;19254:18;;19247:62;-1:-1:-1;;;19340:2:1;19325:18;;19318:35;19385:3;19370:19;;18994:401::o;19400:406::-;19602:2;19584:21;;;19641:2;19621:18;;;19614:30;19680:34;19675:2;19660:18;;19653:62;-1:-1:-1;;;19746:2:1;19731:18;;19724:40;19796:3;19781:19;;19400:406::o;19811:465::-;20068:2;20057:9;20050:21;20031:4;20094:56;20146:2;20135:9;20131:18;20123:6;20094:56;:::i;:::-;20198:9;20190:6;20186:22;20181:2;20170:9;20166:18;20159:50;20226:44;20263:6;20255;20226:44;:::i;20768:545::-;20870:2;20865:3;20862:11;20859:448;;;20906:1;20931:5;20927:2;20920:17;20976:4;20972:2;20962:19;21046:2;21034:10;21030:19;21027:1;21023:27;21017:4;21013:38;21082:4;21070:10;21067:20;21064:47;;;-1:-1:-1;21105:4:1;21064:47;21160:2;21155:3;21151:12;21148:1;21144:20;21138:4;21134:31;21124:41;;21215:82;21233:2;21226:5;21223:13;21215:82;;;21278:17;;;21259:1;21248:13;21215:82;;21489:1352;21615:3;21609:10;-1:-1:-1;;;;;21634:6:1;21631:30;21628:56;;;21664:18;;:::i;:::-;21693:97;21783:6;21743:38;21775:4;21769:11;21743:38;:::i;:::-;21737:4;21693:97;:::i;:::-;21845:4;;21909:2;21898:14;;21926:1;21921:663;;;;22628:1;22645:6;22642:89;;;-1:-1:-1;22697:19:1;;;22691:26;22642:89;-1:-1:-1;;21446:1:1;21442:11;;;21438:24;21434:29;21424:40;21470:1;21466:11;;;21421:57;22744:81;;21891:944;;21921:663;20715:1;20708:14;;;20752:4;20739:18;;-1:-1:-1;;21957:20:1;;;22075:236;22089:7;22086:1;22083:14;22075:236;;;22178:19;;;22172:26;22157:42;;22270:27;;;;22238:1;22226:14;;;;22105:19;;22075:236;;;22079:3;22339:6;22330:7;22327:19;22324:201;;;22400:19;;;22394:26;-1:-1:-1;;22483:1:1;22479:14;;;22495:3;22475:24;22471:37;22467:42;22452:58;22437:74;;22324:201;-1:-1:-1;;;;;22571:1:1;22555:14;;;22551:22;22538:36;;-1:-1:-1;21489:1352:1:o;24669:827::-;-1:-1:-1;;;;;25066:15:1;;;25048:34;;25118:15;;25113:2;25098:18;;25091:43;25028:3;25165:2;25150:18;;25143:31;;;24991:4;;25197:57;;25234:19;;25226:6;25197:57;:::i;:::-;25302:9;25294:6;25290:22;25285:2;25274:9;25270:18;25263:50;25336:44;25373:6;25365;25336:44;:::i;:::-;25322:58;;25429:9;25421:6;25417:22;25411:3;25400:9;25396:19;25389:51;25457:33;25483:6;25475;25457:33;:::i;:::-;25449:41;24669:827;-1:-1:-1;;;;;;;;24669:827:1:o;25501:249::-;25570:6;25623:2;25611:9;25602:7;25598:23;25594:32;25591:52;;;25639:1;25636;25629:12;25591:52;25671:9;25665:16;25690:30;25714:5;25690:30;:::i;25755:179::-;25790:3;25832:1;25814:16;25811:23;25808:120;;;25878:1;25875;25872;25857:23;-1:-1:-1;25915:1:1;25909:8;25904:3;25900:18;25808:120;25755:179;:::o;25939:671::-;25978:3;26020:4;26002:16;25999:26;25996:39;;;25939:671;:::o;25996:39::-;26062:2;26056:9;-1:-1:-1;;26127:16:1;26123:25;;26120:1;26056:9;26099:50;26178:4;26172:11;26202:16;-1:-1:-1;;;;;26308:2:1;26301:4;26293:6;26289:17;26286:25;26281:2;26273:6;26270:14;26267:45;26264:58;;;26315:5;;;;;25939:671;:::o;26264:58::-;26352:6;26346:4;26342:17;26331:28;;26388:3;26382:10;26415:2;26407:6;26404:14;26401:27;;;26421:5;;;;;;25939:671;:::o;26401:27::-;26505:2;26486:16;26480:4;26476:27;26472:36;26465:4;26456:6;26451:3;26447:16;26443:27;26440:69;26437:82;;;26512:5;;;;;;25939:671;:::o;26437:82::-;26528:57;26579:4;26570:6;26562;26558:19;26554:30;26548:4;26528:57;:::i;:::-;-1:-1:-1;26601:3:1;;25939:671;-1:-1:-1;;;;;25939:671:1:o;27036:404::-;27238:2;27220:21;;;27277:2;27257:18;;;27250:30;27316:34;27311:2;27296:18;;27289:62;-1:-1:-1;;;27382:2:1;27367:18;;27360:38;27430:3;27415:19;;27036:404::o;27847:399::-;28049:2;28031:21;;;28088:2;28068:18;;;28061:30;28127:34;28122:2;28107:18;;28100:62;-1:-1:-1;;;28193:2:1;28178:18;;28171:33;28236:3;28221:19;;27847:399::o;28251:400::-;28453:2;28435:21;;;28492:2;28472:18;;;28465:30;28531:34;28526:2;28511:18;;28504:62;-1:-1:-1;;;28597:2:1;28582:18;;28575:34;28641:3;28626:19;;28251:400::o;28656:561::-;-1:-1:-1;;;;;28953:15:1;;;28935:34;;29005:15;;29000:2;28985:18;;28978:43;29052:2;29037:18;;29030:34;;;29095:2;29080:18;;29073:34;;;28915:3;29138;29123:19;;29116:32;;;28878:4;;29165:46;;29191:19;;29183:6;29165:46;:::i;:::-;29157:54;28656:561;-1:-1:-1;;;;;;;28656:561:1:o
Swarm Source
ipfs://95a08c257b56198e7db43a0249ee0a3c70a245427b32ac29a8bf7cbe09a06b8e
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.