ETH Price: $2,682.59 (+1.72%)

Bubbly and Friends (BUBBLY)
 

Overview

TokenID

281

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
NFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-26
*/

// SPDX-License-Identifier: MIT

// Sources flattened with hardhat v2.9.9 https://hardhat.org

// File contracts/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 contracts/openzeppelin/contracts/token/ERC721/IERC721.sol

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
	/**
	 * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
	 */
	event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

	/**
	 * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
	 */
	event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

	/**
	 * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
	 */
	event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

	/**
	 * @dev Returns the number of tokens in ``owner``'s account.
	 */
	function balanceOf(address owner) external view returns (uint256 balance);

	/**
	 * @dev Returns the owner of the `tokenId` token.
	 *
	 * Requirements:
	 *
	 * - `tokenId` must exist.
	 */
	function ownerOf(uint256 tokenId) external view returns (address owner);

	/**
	 * @dev Safely transfers `tokenId` token from `from` to `to`.
	 *
	 * Requirements:
	 *
	 * - `from` cannot be the zero address.
	 * - `to` cannot be the zero address.
	 * - `tokenId` token must exist and be owned by `from`.
	 * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
	 * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
	 *
	 * Emits a {Transfer} event.
	 */
	function safeTransferFrom(
		address from,
		address to,
		uint256 tokenId,
		bytes calldata data
	) external;

	/**
	 * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
	 * are aware of the ERC721 protocol to prevent tokens from being forever locked.
	 *
	 * Requirements:
	 *
	 * - `from` cannot be the zero address.
	 * - `to` cannot be the zero address.
	 * - `tokenId` token must exist and be owned by `from`.
	 * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
	 * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
	 *
	 * Emits a {Transfer} event.
	 */
	function safeTransferFrom(
		address from,
		address to,
		uint256 tokenId
	) external;

	/**
	 * @dev Transfers `tokenId` token from `from` to `to`.
	 *
	 * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
	 *
	 * Requirements:
	 *
	 * - `from` cannot be the zero address.
	 * - `to` cannot be the zero address.
	 * - `tokenId` token must be owned by `from`.
	 * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
	 *
	 * Emits a {Transfer} event.
	 */
	function transferFrom(
		address from,
		address to,
		uint256 tokenId
	) external;

	/**
	 * @dev Gives permission to `to` to transfer `tokenId` token to another account.
	 * The approval is cleared when the token is transferred.
	 *
	 * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
	 *
	 * Requirements:
	 *
	 * - The caller must own the token or be an approved operator.
	 * - `tokenId` must exist.
	 *
	 * Emits an {Approval} event.
	 */
	function approve(address to, uint256 tokenId) external;

	/**
	 * @dev Approve or remove `operator` as an operator for the caller.
	 * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
	 *
	 * Requirements:
	 *
	 * - The `operator` cannot be the caller.
	 *
	 * Emits an {ApprovalForAll} event.
	 */
	function setApprovalForAll(address operator, bool _approved) external;

	/**
	 * @dev Returns the account approved for `tokenId` token.
	 *
	 * Requirements:
	 *
	 * - `tokenId` must exist.
	 */
	function getApproved(uint256 tokenId) external view returns (address operator);

	/**
	 * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
	 *
	 * See {setApprovalForAll}
	 */
	function isApprovedForAll(address owner, address operator) external view returns (bool);
}

// File contracts/openzeppelin/contracts/token/ERC721/IERC721Receiver.sol

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
	/**
	 * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
	 * by `operator` from `from`, this function is called.
	 *
	 * It must return its Solidity selector to confirm the token transfer.
	 * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
	 *
	 * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
	 */
	function onERC721Received(
		address operator,
		address from,
		uint256 tokenId,
		bytes calldata data
	) external returns (bytes4);
}

// File contracts/openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
	/**
	 * @dev Returns the token collection name.
	 */
	function name() external view returns (string memory);

	/**
	 * @dev Returns the token collection symbol.
	 */
	function symbol() external view returns (string memory);

	/**
	 * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
	 */
	function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File contracts/openzeppelin/contracts/utils/Address.sol

// OpenZeppelin Contracts (last updated v4.5.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

				assembly {
					let returndata_size := mload(returndata)
					revert(add(32, returndata), returndata_size)
				}
			} else {
				revert(errorMessage);
			}
		}
	}
}

// File contracts/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/openzeppelin/contracts/utils/Strings.sol

// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
	bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

	/**
	 * @dev Converts a `uint256` to its ASCII `string` decimal representation.
	 */
	function toString(uint256 value) internal pure returns (string memory) {
		// Inspired by OraclizeAPI's implementation - MIT licence
		// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

		if (value == 0) {
			return "0";
		}
		uint256 temp = value;
		uint256 digits;
		while (temp != 0) {
			digits++;
			temp /= 10;
		}
		bytes memory buffer = new bytes(digits);
		while (value != 0) {
			digits -= 1;
			buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
			value /= 10;
		}
		return string(buffer);
	}

	/**
	 * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
	 */
	function toHexString(uint256 value) internal pure returns (string memory) {
		if (value == 0) {
			return "0x00";
		}
		uint256 temp = value;
		uint256 length = 0;
		while (temp != 0) {
			length++;
			temp >>= 8;
		}
		return toHexString(value, length);
	}

	/**
	 * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
	 */
	function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
		bytes memory buffer = new bytes(2 * length + 2);
		buffer[0] = "0";
		buffer[1] = "x";
		for (uint256 i = 2 * length + 1; i > 1; --i) {
			buffer[i] = _HEX_SYMBOLS[value & 0xf];
			value >>= 4;
		}
		require(value == 0, "Strings: hex length insufficient");
		return string(buffer);
	}
}

// File contracts/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 contracts/openzeppelin/contracts/token/ERC721/ERC721.sol

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
	using Address for address;
	using Strings for uint256;

	// Token name
	string private _name;

	// Token symbol
	string private _symbol;

	// Mapping from token ID to owner address
	mapping(uint256 => address) private _owners;

	// Mapping owner address to token count
	mapping(address => uint256) private _balances;

	// Mapping from token ID to approved address
	mapping(uint256 => address) private _tokenApprovals;

	// Mapping from owner to operator approvals
	mapping(address => mapping(address => bool)) private _operatorApprovals;

	/**
	 * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
	 */
	constructor(string memory name_, string memory symbol_) {
		_name = name_;
		_symbol = symbol_;
	}

	/**
	 * @dev See {IERC165-supportsInterface}.
	 */
	function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
		return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId);
	}

	/**
	 * @dev See {IERC721-balanceOf}.
	 */
	function balanceOf(address owner) public view virtual override returns (uint256) {
		require(owner != address(0), "ERC721: balance query for the zero address");
		return _balances[owner];
	}

	/**
	 * @dev See {IERC721-ownerOf}.
	 */
	function ownerOf(uint256 tokenId) public view virtual override returns (address) {
		address owner = _owners[tokenId];
		require(owner != address(0), "ERC721: owner query for nonexistent token");
		return owner;
	}

	/**
	 * @dev See {IERC721Metadata-name}.
	 */
	function name() public view virtual override returns (string memory) {
		return _name;
	}

	/**
	 * @dev See {IERC721Metadata-symbol}.
	 */
	function symbol() public view virtual override returns (string memory) {
		return _symbol;
	}

	/**
	 * @dev See {IERC721Metadata-tokenURI}.
	 */
	function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
		require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

		string memory baseURI = _baseURI();
		return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
	}

	/**
	 * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
	 * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
	 * by default, can be overridden in child contracts.
	 */
	function _baseURI() internal view virtual returns (string memory) {
		return "";
	}

	/**
	 * @dev See {IERC721-approve}.
	 */
	function approve(address to, uint256 tokenId) public virtual override {
		address owner = ERC721.ownerOf(tokenId);
		require(to != owner, "ERC721: approval to current owner");

		require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all");

		_approve(to, tokenId);
	}

	/**
	 * @dev See {IERC721-getApproved}.
	 */
	function getApproved(uint256 tokenId) public view virtual override returns (address) {
		require(_exists(tokenId), "ERC721: approved query for nonexistent token");

		return _tokenApprovals[tokenId];
	}

	/**
	 * @dev See {IERC721-setApprovalForAll}.
	 */
	function setApprovalForAll(address operator, bool approved) public virtual override {
		_setApprovalForAll(_msgSender(), operator, approved);
	}

	/**
	 * @dev See {IERC721-isApprovedForAll}.
	 */
	function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
		return _operatorApprovals[owner][operator];
	}

	/**
	 * @dev See {IERC721-transferFrom}.
	 */
	function transferFrom(
		address from,
		address to,
		uint256 tokenId
	) public virtual override {
		//solhint-disable-next-line max-line-length
		require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

		_transfer(from, to, tokenId);
	}

	/**
	 * @dev See {IERC721-safeTransferFrom}.
	 */
	function safeTransferFrom(
		address from,
		address to,
		uint256 tokenId
	) public virtual override {
		safeTransferFrom(from, to, tokenId, "");
	}

	/**
	 * @dev See {IERC721-safeTransferFrom}.
	 */
	function safeTransferFrom(
		address from,
		address to,
		uint256 tokenId,
		bytes memory data
	) public virtual override {
		require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
		_safeTransfer(from, to, tokenId, data);
	}

	/**
	 * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
	 * are aware of the ERC721 protocol to prevent tokens from being forever locked.
	 *
	 * `data` is additional data, it has no specified format and it is sent in call to `to`.
	 *
	 * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
	 * implement alternative mechanisms to perform token transfer, such as signature-based.
	 *
	 * Requirements:
	 *
	 * - `from` cannot be the zero address.
	 * - `to` cannot be the zero address.
	 * - `tokenId` token must exist and be owned by `from`.
	 * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
	 *
	 * Emits a {Transfer} event.
	 */
	function _safeTransfer(
		address from,
		address to,
		uint256 tokenId,
		bytes memory data
	) internal virtual {
		_transfer(from, to, tokenId);
		require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
	}

	/**
	 * @dev Returns whether `tokenId` exists.
	 *
	 * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
	 *
	 * Tokens start existing when they are minted (`_mint`),
	 * and stop existing when they are burned (`_burn`).
	 */
	function _exists(uint256 tokenId) internal view virtual returns (bool) {
		return _owners[tokenId] != address(0);
	}

	/**
	 * @dev Returns whether `spender` is allowed to manage `tokenId`.
	 *
	 * Requirements:
	 *
	 * - `tokenId` must exist.
	 */
	function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
		require(_exists(tokenId), "ERC721: operator query for nonexistent token");
		address owner = ERC721.ownerOf(tokenId);
		return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
	}

	/**
	 * @dev Safely mints `tokenId` and transfers it to `to`.
	 *
	 * Requirements:
	 *
	 * - `tokenId` must not exist.
	 * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
	 *
	 * Emits a {Transfer} event.
	 */
	function _safeMint(address to, uint256 tokenId) internal virtual {
		_safeMint(to, tokenId, "");
	}

	/**
	 * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
	 * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
	 */
	function _safeMint(
		address to,
		uint256 tokenId,
		bytes memory data
	) internal virtual {
		_mint(to, tokenId);
		require(_checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
	}

	/**
	 * @dev Mints `tokenId` and transfers it to `to`.
	 *
	 * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
	 *
	 * Requirements:
	 *
	 * - `tokenId` must not exist.
	 * - `to` cannot be the zero address.
	 *
	 * Emits a {Transfer} event.
	 */
	function _mint(address to, uint256 tokenId) internal virtual {
		require(to != address(0), "ERC721: mint to the zero address");
		require(!_exists(tokenId), "ERC721: token already minted");

		_beforeTokenTransfer(address(0), to, tokenId);

		_balances[to] += 1;
		_owners[tokenId] = to;

		emit Transfer(address(0), to, tokenId);

		_afterTokenTransfer(address(0), to, tokenId);
	}

	/**
	 * @dev Destroys `tokenId`.
	 * The approval is cleared when the token is burned.
	 *
	 * Requirements:
	 *
	 * - `tokenId` must exist.
	 *
	 * Emits a {Transfer} event.
	 */
	function _burn(uint256 tokenId) internal virtual {
		address owner = ERC721.ownerOf(tokenId);

		_beforeTokenTransfer(owner, address(0), tokenId);

		// Clear approvals
		_approve(address(0), tokenId);

		_balances[owner] -= 1;
		delete _owners[tokenId];

		emit Transfer(owner, address(0), tokenId);

		_afterTokenTransfer(owner, address(0), tokenId);
	}

	/**
	 * @dev Transfers `tokenId` from `from` to `to`.
	 *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
	 *
	 * Requirements:
	 *
	 * - `to` cannot be the zero address.
	 * - `tokenId` token must be owned by `from`.
	 *
	 * Emits a {Transfer} event.
	 */
	function _transfer(
		address from,
		address to,
		uint256 tokenId
	) internal virtual {
		require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
		require(to != address(0), "ERC721: transfer to the zero address");

		_beforeTokenTransfer(from, to, tokenId);

		// Clear approvals from the previous owner
		_approve(address(0), tokenId);

		_balances[from] -= 1;
		_balances[to] += 1;
		_owners[tokenId] = to;

		emit Transfer(from, to, tokenId);

		_afterTokenTransfer(from, to, tokenId);
	}

	/**
	 * @dev Approve `to` to operate on `tokenId`
	 *
	 * Emits an {Approval} event.
	 */
	function _approve(address to, uint256 tokenId) internal virtual {
		_tokenApprovals[tokenId] = to;
		emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
	}

	/**
	 * @dev Approve `operator` to operate on all of `owner` tokens
	 *
	 * Emits an {ApprovalForAll} event.
	 */
	function _setApprovalForAll(
		address owner,
		address operator,
		bool approved
	) internal virtual {
		require(owner != operator, "ERC721: approve to caller");
		_operatorApprovals[owner][operator] = approved;
		emit ApprovalForAll(owner, operator, approved);
	}

	/**
	 * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
	 * The call is not executed if the target address is not a contract.
	 *
	 * @param from address representing the previous owner of the given token ID
	 * @param to target address that will receive the tokens
	 * @param tokenId uint256 ID of the token to be transferred
	 * @param data bytes optional data to send along with the call
	 * @return bool whether the call correctly returned the expected magic value
	 */
	function _checkOnERC721Received(
		address from,
		address to,
		uint256 tokenId,
		bytes memory data
	) private returns (bool) {
		if (to.isContract()) {
			try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
				return retval == IERC721Receiver.onERC721Received.selector;
			} catch (bytes memory reason) {
				if (reason.length == 0) {
					revert("ERC721: transfer to non ERC721Receiver implementer");
				} else {
					assembly {
						revert(add(32, reason), mload(reason))
					}
				}
			}
		} else {
			return true;
		}
	}

	/**
	 * @dev Hook that is called before any token transfer. This includes minting
	 * and burning.
	 *
	 * Calling conditions:
	 *
	 * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
	 * transferred to `to`.
	 * - When `from` is zero, `tokenId` will be minted for `to`.
	 * - When `to` is zero, ``from``'s `tokenId` will be burned.
	 * - `from` and `to` are never both zero.
	 *
	 * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
	 */
	function _beforeTokenTransfer(
		address from,
		address to,
		uint256 tokenId
	) internal virtual {}

	/**
	 * @dev Hook that is called after any transfer of tokens. This includes
	 * minting and burning.
	 *
	 * Calling conditions:
	 *
	 * - when `from` and `to` are both non-zero.
	 * - `from` and `to` are never both zero.
	 *
	 * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
	 */
	function _afterTokenTransfer(
		address from,
		address to,
		uint256 tokenId
	) internal virtual {}
}

// File contracts/openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol

// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
	/**
	 * @dev Returns the total amount of tokens stored by the contract.
	 */
	function totalSupply() external view returns (uint256);

	/**
	 * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
	 * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
	 */
	function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

	/**
	 * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
	 * Use along with {totalSupply} to enumerate all tokens.
	 */
	function tokenByIndex(uint256 index) external view returns (uint256);
}

// File contracts/openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol)

pragma solidity ^0.8.0;

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
	// Mapping from owner to list of owned token IDs
	mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

	// Mapping from token ID to index of the owner tokens list
	mapping(uint256 => uint256) private _ownedTokensIndex;

	// Array with all token ids, used for enumeration
	uint256[] private _allTokens;

	// Mapping from token id to position in the allTokens array
	mapping(uint256 => uint256) private _allTokensIndex;

	/**
	 * @dev See {IERC165-supportsInterface}.
	 */
	function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
		return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
	}

	/**
	 * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
	 */
	function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
		require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
		return _ownedTokens[owner][index];
	}

	/**
	 * @dev See {IERC721Enumerable-totalSupply}.
	 */
	function totalSupply() public view virtual override returns (uint256) {
		return _allTokens.length;
	}

	/**
	 * @dev See {IERC721Enumerable-tokenByIndex}.
	 */
	function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
		require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
		return _allTokens[index];
	}

	/**
	 * @dev Hook that is called before any token transfer. This includes minting
	 * and burning.
	 *
	 * Calling conditions:
	 *
	 * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
	 * transferred to `to`.
	 * - When `from` is zero, `tokenId` will be minted for `to`.
	 * - When `to` is zero, ``from``'s `tokenId` will be burned.
	 * - `from` cannot be the zero address.
	 * - `to` cannot be the zero address.
	 *
	 * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
	 */
	function _beforeTokenTransfer(
		address from,
		address to,
		uint256 tokenId
	) internal virtual override {
		super._beforeTokenTransfer(from, to, tokenId);

		if (from == address(0)) {
			_addTokenToAllTokensEnumeration(tokenId);
		} else if (from != to) {
			_removeTokenFromOwnerEnumeration(from, tokenId);
		}
		if (to == address(0)) {
			_removeTokenFromAllTokensEnumeration(tokenId);
		} else if (to != from) {
			_addTokenToOwnerEnumeration(to, tokenId);
		}
	}

	/**
	 * @dev Private function to add a token to this extension's ownership-tracking data structures.
	 * @param to address representing the new owner of the given token ID
	 * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
	 */
	function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
		uint256 length = ERC721.balanceOf(to);
		_ownedTokens[to][length] = tokenId;
		_ownedTokensIndex[tokenId] = length;
	}

	/**
	 * @dev Private function to add a token to this extension's token tracking data structures.
	 * @param tokenId uint256 ID of the token to be added to the tokens list
	 */
	function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
		_allTokensIndex[tokenId] = _allTokens.length;
		_allTokens.push(tokenId);
	}

	/**
	 * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
	 * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
	 * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
	 * This has O(1) time complexity, but alters the order of the _ownedTokens array.
	 * @param from address representing the previous owner of the given token ID
	 * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
	 */
	function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
		// To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
		// then delete the last slot (swap and pop).

		uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
		uint256 tokenIndex = _ownedTokensIndex[tokenId];

		// When the token to delete is the last token, the swap operation is unnecessary
		if (tokenIndex != lastTokenIndex) {
			uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

			_ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
			_ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
		}

		// This also deletes the contents at the last position of the array
		delete _ownedTokensIndex[tokenId];
		delete _ownedTokens[from][lastTokenIndex];
	}

	/**
	 * @dev Private function to remove a token from this extension's token tracking data structures.
	 * This has O(1) time complexity, but alters the order of the _allTokens array.
	 * @param tokenId uint256 ID of the token to be removed from the tokens list
	 */
	function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
		// To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
		// then delete the last slot (swap and pop).

		uint256 lastTokenIndex = _allTokens.length - 1;
		uint256 tokenIndex = _allTokensIndex[tokenId];

		// When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
		// rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
		// an 'if' statement (like in _removeTokenFromOwnerEnumeration)
		uint256 lastTokenId = _allTokens[lastTokenIndex];

		_allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
		_allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

		// This also deletes the contents at the last position of the array
		delete _allTokensIndex[tokenId];
		_allTokens.pop();
	}
}

// File contracts/openzeppelin/contracts/security/Pausable.sol

// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
	/**
	 * @dev Emitted when the pause is triggered by `account`.
	 */
	event Paused(address account);

	/**
	 * @dev Emitted when the pause is lifted by `account`.
	 */
	event Unpaused(address account);

	bool private _paused;

	/**
	 * @dev Initializes the contract in unpaused state.
	 */
	constructor() {
		_paused = false;
	}

	/**
	 * @dev Returns true if the contract is paused, and false otherwise.
	 */
	function paused() public view virtual returns (bool) {
		return _paused;
	}

	/**
	 * @dev Modifier to make a function callable only when the contract is not paused.
	 *
	 * Requirements:
	 *
	 * - The contract must not be paused.
	 */
	modifier whenNotPaused() {
		require(!paused(), "Pausable: paused");
		_;
	}

	/**
	 * @dev Modifier to make a function callable only when the contract is paused.
	 *
	 * Requirements:
	 *
	 * - The contract must be paused.
	 */
	modifier whenPaused() {
		require(paused(), "Pausable: not paused");
		_;
	}

	/**
	 * @dev Triggers stopped state.
	 *
	 * Requirements:
	 *
	 * - The contract must not be paused.
	 */
	function _pause() internal virtual whenNotPaused {
		_paused = true;
		emit Paused(_msgSender());
	}

	/**
	 * @dev Returns to normal state.
	 *
	 * Requirements:
	 *
	 * - The contract must be paused.
	 */
	function _unpause() internal virtual whenPaused {
		_paused = false;
		emit Unpaused(_msgSender());
	}
}

// File contracts/openzeppelin/contracts/access/Ownable.sol

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
	address private _owner;

	event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

	/**
	 * @dev Initializes the contract setting the deployer as the initial owner.
	 */
	constructor() {
		_transferOwnership(_msgSender());
	}

	/**
	 * @dev Returns the address of the current owner.
	 */
	function owner() public view virtual returns (address) {
		return _owner;
	}

	/**
	 * @dev Throws if called by any account other than the owner.
	 */
	modifier onlyOwner() {
		require(owner() == _msgSender(), "Ownable: caller is not the owner");
		_;
	}

	/**
	 * @dev Leaves the contract without owner. It will not be possible to call
	 * `onlyOwner` functions anymore. Can only be called by the current owner.
	 *
	 * NOTE: Renouncing ownership will leave the contract without an owner,
	 * thereby removing any functionality that is only available to the owner.
	 */
	function renounceOwnership() public virtual onlyOwner {
		_transferOwnership(address(0));
	}

	/**
	 * @dev Transfers ownership of the contract to a new account (`newOwner`).
	 * Can only be called by the current owner.
	 */
	function transferOwnership(address newOwner) public virtual onlyOwner {
		require(newOwner != address(0), "Ownable: new owner is the zero address");
		_transferOwnership(newOwner);
	}

	/**
	 * @dev Transfers ownership of the contract to a new account (`newOwner`).
	 * Internal function without access restriction.
	 */
	function _transferOwnership(address newOwner) internal virtual {
		address oldOwner = _owner;
		_owner = newOwner;
		emit OwnershipTransferred(oldOwner, newOwner);
	}
}

// File contracts/openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Burnable.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 Burnable Token
 * @dev ERC721 Token that can be irreversibly burned (destroyed).
 */
abstract contract ERC721Burnable is Context, ERC721 {
	/**
	 * @dev Burns `tokenId`. See {ERC721-_burn}.
	 *
	 * Requirements:
	 *
	 * - The caller must own `tokenId` or be an approved operator.
	 */
	function burn(uint256 tokenId) public virtual {
		//solhint-disable-next-line max-line-length
		require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved");
		_burn(tokenId);
	}
}

// File contracts/openzeppelin/contracts/utils/Counters.sol

// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
	struct Counter {
		// This variable should never be directly accessed by users of the library: interactions must be restricted to
		// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
		// this feature: see https://github.com/ethereum/solidity/issues/4637
		uint256 _value; // default: 0
	}

	function current(Counter storage counter) internal view returns (uint256) {
		return counter._value;
	}

	function increment(Counter storage counter) internal {
		unchecked {
			counter._value += 1;
		}
	}

	function decrement(Counter storage counter) internal {
		uint256 value = counter._value;
		require(value > 0, "Counter: decrement overflow");
		unchecked {
			counter._value = value - 1;
		}
	}

	function reset(Counter storage counter) internal {
		counter._value = 0;
	}
}

// File contracts/NFT/NFT.sol

pragma solidity ^0.8.7;

contract NFT is ERC721, ERC721Enumerable, Pausable, Ownable, ERC721Burnable {
	using Counters for Counters.Counter;

	Counters.Counter private _tokenIdCounter;
	string private _baseTokenURI;
	uint256 public maxAmount;
	address public minterContract;
	address public devAddress;

	constructor(address _devAddress, uint256 _amount) ERC721("Bubbly and Friends", "BUBBLY") {
		setDevAddress(_devAddress);
		setMaxAmount(_amount);
	}

	modifier checkMaxAmount() {
		require(maxAmount > _tokenIdCounter.current(), "Maximum number of NFTs reached.");
		_;
	}

	modifier onlyDev() {
		require(_msgSender() == devAddress);
		_;
	}

	modifier onlyMinter() {
		require(_msgSender() == minterContract);
		_;
	}

	function pause() public onlyOwner {
		_pause();
	}

	function unpause() public onlyOwner {
		_unpause();
	}

	// !! Sale Contract Only mintable
	function saleMint(address to) external checkMaxAmount onlyMinter {
		_tokenIdCounter.increment();
		uint256 _tokenId = _tokenIdCounter.current();
		_mint(to, _tokenId);
	}

	function tokenURI(uint256 _tokenId) public view override returns (string memory) {
		require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token");
		return string(abi.encodePacked(_baseURI(), Strings.toString(_tokenId)));
	}

	function setBaseURI(string memory _uri) public onlyDev {
		_baseTokenURI = _uri;
	}

	function setMinterContract(address saleContract) public onlyDev {
		minterContract = saleContract;
	}

	function setDevAddress(address _devAddress) public onlyOwner {
		devAddress = _devAddress;
	}

	function setMaxAmount(uint256 _amount) public onlyDev {
		maxAmount = _amount;
	}

	function _baseURI() internal view virtual override returns (string memory) {
		return _baseTokenURI;
	}

	function _beforeTokenTransfer(
		address from,
		address to,
		uint256 tokenId
	) internal override(ERC721, ERC721Enumerable) whenNotPaused {
		super._beforeTokenTransfer(from, to, tokenId);
	}

	function _afterTokenTransfer(
		address from,
		address to,
		uint256 tokenId
	) internal override(ERC721) {
		super._afterTokenTransfer(from, to, tokenId);
	}

	function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) {
		return super.supportsInterface(interfaceId);
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minterContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"saleMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"saleContract","type":"address"}],"name":"setMinterContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620045dc380380620045dc833981810160405281019062000037919062000459565b6040518060400160405280601281526020017f427562626c7920616e6420467269656e647300000000000000000000000000008152506040518060400160405280600681526020017f425542424c5900000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb9291906200037b565b508060019080519060200190620000d49291906200037b565b5050506000600a60006101000a81548160ff02191690831515021790555062000112620001066200013c60201b60201c565b6200014460201b60201c565b62000123826200020a60201b60201c565b6200013481620002dd60201b60201c565b5050620005ff565b600033905090565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200021a6200013c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002406200035160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200029090620004c7565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620003266200013c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200034757600080fd5b80600d8190555050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003899062000538565b90600052602060002090601f016020900481019282620003ad5760008555620003f9565b82601f10620003c857805160ff1916838001178555620003f9565b82800160010185558215620003f9579182015b82811115620003f8578251825591602001919060010190620003db565b5b5090506200040891906200040c565b5090565b5b80821115620004275760008160009055506001016200040d565b5090565b6000815190506200043c81620005cb565b92915050565b6000815190506200045381620005e5565b92915050565b600080604083850312156200047357620004726200059d565b5b600062000483858286016200042b565b9250506020620004968582860162000442565b9150509250929050565b6000620004af602083620004e9565b9150620004bc82620005a2565b602082019050919050565b60006020820190508181036000830152620004e281620004a0565b9050919050565b600082825260208201905092915050565b600062000507826200050e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200055157607f821691505b602082108114156200056857620005676200056e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620005d681620004fa565b8114620005e257600080fd5b50565b620005f0816200052e565b8114620005fc57600080fd5b50565b613fcd806200060f6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80635c975abb1161010f57806395d89b41116100a2578063c87b56dd11610071578063c87b56dd14610530578063d0d41fe114610560578063e985e9c51461057c578063f2fde38b146105ac576101e5565b806395d89b41146104be578063a22cb465146104dc578063b88d4fde146104f8578063c7a5f93f14610514576101e5565b8063715018a6116100de578063715018a61461046e5780638456cb59146104785780638da5cb5b1461048257806392f00233146104a0576101e5565b80635c975abb146103d25780635f48f393146103f05780636352211e1461040e57806370a082311461043e576101e5565b806338478ae71161018757806342966c681161015657806342966c681461034e5780634f6ccce71461036a5780634fe47f701461039a57806355f804b3146103b6576101e5565b806338478ae7146102ee5780633ad10ef61461030a5780633f4ba83a1461032857806342842e0e14610332576101e5565b8063095ea7b3116101c3578063095ea7b31461026857806318160ddd1461028457806323b872dd146102a25780632f745c59146102be576101e5565b806301ffc9a7146101ea57806306fdde031461021a578063081812fc14610238575b600080fd5b61020460048036038101906101ff9190612cdf565b6105c8565b604051610211919061320c565b60405180910390f35b6102226105da565b60405161022f9190613227565b60405180910390f35b610252600480360381019061024d9190612d82565b61066c565b60405161025f91906131a5565b60405180910390f35b610282600480360381019061027d9190612c9f565b6106f1565b005b61028c610809565b6040516102999190613509565b60405180910390f35b6102bc60048036038101906102b79190612b89565b610816565b005b6102d860048036038101906102d39190612c9f565b610876565b6040516102e59190613509565b60405180910390f35b61030860048036038101906103039190612b1c565b61091b565b005b6103126109c0565b60405161031f91906131a5565b60405180910390f35b6103306109e6565b005b61034c60048036038101906103479190612b89565b610a6c565b005b61036860048036038101906103639190612d82565b610a8c565b005b610384600480360381019061037f9190612d82565b610ae8565b6040516103919190613509565b60405180910390f35b6103b460048036038101906103af9190612d82565b610b59565b005b6103d060048036038101906103cb9190612d39565b610bc4565b005b6103da610c3f565b6040516103e7919061320c565b60405180910390f35b6103f8610c56565b6040516104059190613509565b60405180910390f35b61042860048036038101906104239190612d82565b610c5c565b60405161043591906131a5565b60405180910390f35b61045860048036038101906104539190612b1c565b610d0e565b6040516104659190613509565b60405180910390f35b610476610dc6565b005b610480610e4e565b005b61048a610ed4565b60405161049791906131a5565b60405180910390f35b6104a8610efe565b6040516104b591906131a5565b60405180910390f35b6104c6610f24565b6040516104d39190613227565b60405180910390f35b6104f660048036038101906104f19190612c5f565b610fb6565b005b610512600480360381019061050d9190612bdc565b610fcc565b005b61052e60048036038101906105299190612b1c565b61102e565b005b61054a60048036038101906105459190612d82565b611102565b6040516105579190613227565b60405180910390f35b61057a60048036038101906105759190612b1c565b611184565b005b61059660048036038101906105919190612b49565b611244565b6040516105a3919061320c565b60405180910390f35b6105c660048036038101906105c19190612b1c565b6112d8565b005b60006105d3826113d0565b9050919050565b6060600080546105e99061375f565b80601f01602080910402602001604051908101604052809291908181526020018280546106159061375f565b80156106625780601f1061063757610100808354040283529160200191610662565b820191906000526020600020905b81548152906001019060200180831161064557829003601f168201915b5050505050905090565b60006106778261144a565b6106b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90613429565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106fc82610c5c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561076d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076490613489565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661078c6114b6565b73ffffffffffffffffffffffffffffffffffffffff1614806107bb57506107ba816107b56114b6565b611244565b5b6107fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f1906133a9565b60405180910390fd5b61080483836114be565b505050565b6000600880549050905090565b6108276108216114b6565b82611577565b610866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085d906134a9565b60405180910390fd5b610871838383611655565b505050565b600061088183610d0e565b82106108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b990613269565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661095c6114b6565b73ffffffffffffffffffffffffffffffffffffffff161461097c57600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109ee6114b6565b73ffffffffffffffffffffffffffffffffffffffff16610a0c610ed4565b73ffffffffffffffffffffffffffffffffffffffff1614610a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5990613449565b60405180910390fd5b610a6a6118bc565b565b610a8783838360405180602001604052806000815250610fcc565b505050565b610a9d610a976114b6565b82611577565b610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad3906134e9565b60405180910390fd5b610ae58161195e565b50565b6000610af2610809565b8210610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a906134c9565b60405180910390fd5b60088281548110610b4757610b466138f8565b5b90600052602060002001549050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b9a6114b6565b73ffffffffffffffffffffffffffffffffffffffff1614610bba57600080fd5b80600d8190555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610c056114b6565b73ffffffffffffffffffffffffffffffffffffffff1614610c2557600080fd5b80600c9080519060200190610c3b929190612930565b5050565b6000600a60009054906101000a900460ff16905090565b600d5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc906133e9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d76906133c9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dce6114b6565b73ffffffffffffffffffffffffffffffffffffffff16610dec610ed4565b73ffffffffffffffffffffffffffffffffffffffff1614610e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3990613449565b60405180910390fd5b610e4c6000611a7b565b565b610e566114b6565b73ffffffffffffffffffffffffffffffffffffffff16610e74610ed4565b73ffffffffffffffffffffffffffffffffffffffff1614610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190613449565b60405180910390fd5b610ed2611b41565b565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054610f339061375f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5f9061375f565b8015610fac5780601f10610f8157610100808354040283529160200191610fac565b820191906000526020600020905b815481529060010190602001808311610f8f57829003601f168201915b5050505050905090565b610fc8610fc16114b6565b8383611be4565b5050565b610fdd610fd76114b6565b83611577565b61101c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611013906134a9565b60405180910390fd5b61102884848484611d51565b50505050565b611038600b611dad565b600d541161107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107290613369565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110bc6114b6565b73ffffffffffffffffffffffffffffffffffffffff16146110dc57600080fd5b6110e6600b611dbb565b60006110f2600b611dad565b90506110fe8282611dd1565b5050565b606061110d8261144a565b61114c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114390613469565b60405180910390fd5b611154611fab565b61115d8361203d565b60405160200161116e929190613181565b6040516020818303038152906040529050919050565b61118c6114b6565b73ffffffffffffffffffffffffffffffffffffffff166111aa610ed4565b73ffffffffffffffffffffffffffffffffffffffff1614611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f790613449565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112e06114b6565b73ffffffffffffffffffffffffffffffffffffffff166112fe610ed4565b73ffffffffffffffffffffffffffffffffffffffff1614611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134b90613449565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb906132a9565b60405180910390fd5b6113cd81611a7b565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061144357506114428261219e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661153183610c5c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115828261144a565b6115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b890613349565b60405180910390fd5b60006115cc83610c5c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061160e575061160d8185611244565b5b8061164c57508373ffffffffffffffffffffffffffffffffffffffff166116348461066c565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661167582610c5c565b73ffffffffffffffffffffffffffffffffffffffff16146116cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c2906132c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561173b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173290613309565b60405180910390fd5b611746838383612280565b6117516000826114be565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117a19190613675565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117f891906135ee565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46118b78383836122d8565b505050565b6118c4610c3f565b611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa90613249565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6119476114b6565b60405161195491906131a5565b60405180910390a1565b600061196982610c5c565b905061197781600084612280565b6119826000836114be565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119d29190613675565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a77816000846122d8565b5050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611b49610c3f565b15611b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8090613389565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611bcd6114b6565b604051611bda91906131a5565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4a90613329565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d44919061320c565b60405180910390a3505050565b611d5c848484611655565b611d68848484846122e8565b611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e90613289565b60405180910390fd5b50505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3890613409565b60405180910390fd5b611e4a8161144a565b15611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e81906132e9565b60405180910390fd5b611e9660008383612280565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ee691906135ee565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611fa7600083836122d8565b5050565b6060600c8054611fba9061375f565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe69061375f565b80156120335780601f1061200857610100808354040283529160200191612033565b820191906000526020600020905b81548152906001019060200180831161201657829003601f168201915b5050505050905090565b60606000821415612085576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612199565b600082905060005b600082146120b75780806120a0906137c2565b915050600a826120b09190613644565b915061208d565b60008167ffffffffffffffff8111156120d3576120d2613927565b5b6040519080825280601f01601f1916602001820160405280156121055781602001600182028036833780820191505090505b5090505b600085146121925760018261211e9190613675565b9150600a8561212d919061380b565b603061213991906135ee565b60f81b81838151811061214f5761214e6138f8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561218b9190613644565b9450612109565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061226957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061227957506122788261247f565b5b9050919050565b612288610c3f565b156122c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bf90613389565b60405180910390fd5b6122d38383836124e9565b505050565b6122e38383836125fd565b505050565b60006123098473ffffffffffffffffffffffffffffffffffffffff16612602565b15612472578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123326114b6565b8786866040518563ffffffff1660e01b815260040161235494939291906131c0565b602060405180830381600087803b15801561236e57600080fd5b505af192505050801561239f57506040513d601f19601f8201168201806040525081019061239c9190612d0c565b60015b612422573d80600081146123cf576040519150601f19603f3d011682016040523d82523d6000602084013e6123d4565b606091505b5060008151141561241a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241190613289565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612477565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6124f4838383612625565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612537576125328161262a565b612576565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612575576125748382612673565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125b9576125b4816127e0565b6125f8565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146125f7576125f682826128b1565b5b5b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161268084610d0e565b61268a9190613675565b905060006007600084815260200190815260200160002054905081811461276f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127f49190613675565b9050600060096000848152602001908152602001600020549050600060088381548110612824576128236138f8565b5b906000526020600020015490508060088381548110612846576128456138f8565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612895576128946138c9565b5b6001900381819060005260206000200160009055905550505050565b60006128bc83610d0e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461293c9061375f565b90600052602060002090601f01602090048101928261295e57600085556129a5565b82601f1061297757805160ff19168380011785556129a5565b828001600101855582156129a5579182015b828111156129a4578251825591602001919060010190612989565b5b5090506129b291906129b6565b5090565b5b808211156129cf5760008160009055506001016129b7565b5090565b60006129e66129e184613549565b613524565b905082815260208101848484011115612a0257612a0161395b565b5b612a0d84828561371d565b509392505050565b6000612a28612a238461357a565b613524565b905082815260208101848484011115612a4457612a4361395b565b5b612a4f84828561371d565b509392505050565b600081359050612a6681613f3b565b92915050565b600081359050612a7b81613f52565b92915050565b600081359050612a9081613f69565b92915050565b600081519050612aa581613f69565b92915050565b600082601f830112612ac057612abf613956565b5b8135612ad08482602086016129d3565b91505092915050565b600082601f830112612aee57612aed613956565b5b8135612afe848260208601612a15565b91505092915050565b600081359050612b1681613f80565b92915050565b600060208284031215612b3257612b31613965565b5b6000612b4084828501612a57565b91505092915050565b60008060408385031215612b6057612b5f613965565b5b6000612b6e85828601612a57565b9250506020612b7f85828601612a57565b9150509250929050565b600080600060608486031215612ba257612ba1613965565b5b6000612bb086828701612a57565b9350506020612bc186828701612a57565b9250506040612bd286828701612b07565b9150509250925092565b60008060008060808587031215612bf657612bf5613965565b5b6000612c0487828801612a57565b9450506020612c1587828801612a57565b9350506040612c2687828801612b07565b925050606085013567ffffffffffffffff811115612c4757612c46613960565b5b612c5387828801612aab565b91505092959194509250565b60008060408385031215612c7657612c75613965565b5b6000612c8485828601612a57565b9250506020612c9585828601612a6c565b9150509250929050565b60008060408385031215612cb657612cb5613965565b5b6000612cc485828601612a57565b9250506020612cd585828601612b07565b9150509250929050565b600060208284031215612cf557612cf4613965565b5b6000612d0384828501612a81565b91505092915050565b600060208284031215612d2257612d21613965565b5b6000612d3084828501612a96565b91505092915050565b600060208284031215612d4f57612d4e613965565b5b600082013567ffffffffffffffff811115612d6d57612d6c613960565b5b612d7984828501612ad9565b91505092915050565b600060208284031215612d9857612d97613965565b5b6000612da684828501612b07565b91505092915050565b612db8816136a9565b82525050565b612dc7816136bb565b82525050565b6000612dd8826135ab565b612de281856135c1565b9350612df281856020860161372c565b612dfb8161396a565b840191505092915050565b6000612e11826135b6565b612e1b81856135d2565b9350612e2b81856020860161372c565b612e348161396a565b840191505092915050565b6000612e4a826135b6565b612e5481856135e3565b9350612e6481856020860161372c565b80840191505092915050565b6000612e7d6014836135d2565b9150612e888261397b565b602082019050919050565b6000612ea0602b836135d2565b9150612eab826139a4565b604082019050919050565b6000612ec36032836135d2565b9150612ece826139f3565b604082019050919050565b6000612ee66026836135d2565b9150612ef182613a42565b604082019050919050565b6000612f096025836135d2565b9150612f1482613a91565b604082019050919050565b6000612f2c601c836135d2565b9150612f3782613ae0565b602082019050919050565b6000612f4f6024836135d2565b9150612f5a82613b09565b604082019050919050565b6000612f726019836135d2565b9150612f7d82613b58565b602082019050919050565b6000612f95602c836135d2565b9150612fa082613b81565b604082019050919050565b6000612fb8601f836135d2565b9150612fc382613bd0565b602082019050919050565b6000612fdb6010836135d2565b9150612fe682613bf9565b602082019050919050565b6000612ffe6038836135d2565b915061300982613c22565b604082019050919050565b6000613021602a836135d2565b915061302c82613c71565b604082019050919050565b60006130446029836135d2565b915061304f82613cc0565b604082019050919050565b60006130676020836135d2565b915061307282613d0f565b602082019050919050565b600061308a602c836135d2565b915061309582613d38565b604082019050919050565b60006130ad6020836135d2565b91506130b882613d87565b602082019050919050565b60006130d0602f836135d2565b91506130db82613db0565b604082019050919050565b60006130f36021836135d2565b91506130fe82613dff565b604082019050919050565b60006131166031836135d2565b915061312182613e4e565b604082019050919050565b6000613139602c836135d2565b915061314482613e9d565b604082019050919050565b600061315c6030836135d2565b915061316782613eec565b604082019050919050565b61317b81613713565b82525050565b600061318d8285612e3f565b91506131998284612e3f565b91508190509392505050565b60006020820190506131ba6000830184612daf565b92915050565b60006080820190506131d56000830187612daf565b6131e26020830186612daf565b6131ef6040830185613172565b81810360608301526132018184612dcd565b905095945050505050565b60006020820190506132216000830184612dbe565b92915050565b600060208201905081810360008301526132418184612e06565b905092915050565b6000602082019050818103600083015261326281612e70565b9050919050565b6000602082019050818103600083015261328281612e93565b9050919050565b600060208201905081810360008301526132a281612eb6565b9050919050565b600060208201905081810360008301526132c281612ed9565b9050919050565b600060208201905081810360008301526132e281612efc565b9050919050565b6000602082019050818103600083015261330281612f1f565b9050919050565b6000602082019050818103600083015261332281612f42565b9050919050565b6000602082019050818103600083015261334281612f65565b9050919050565b6000602082019050818103600083015261336281612f88565b9050919050565b6000602082019050818103600083015261338281612fab565b9050919050565b600060208201905081810360008301526133a281612fce565b9050919050565b600060208201905081810360008301526133c281612ff1565b9050919050565b600060208201905081810360008301526133e281613014565b9050919050565b6000602082019050818103600083015261340281613037565b9050919050565b600060208201905081810360008301526134228161305a565b9050919050565b600060208201905081810360008301526134428161307d565b9050919050565b60006020820190508181036000830152613462816130a0565b9050919050565b60006020820190508181036000830152613482816130c3565b9050919050565b600060208201905081810360008301526134a2816130e6565b9050919050565b600060208201905081810360008301526134c281613109565b9050919050565b600060208201905081810360008301526134e28161312c565b9050919050565b600060208201905081810360008301526135028161314f565b9050919050565b600060208201905061351e6000830184613172565b92915050565b600061352e61353f565b905061353a8282613791565b919050565b6000604051905090565b600067ffffffffffffffff82111561356457613563613927565b5b61356d8261396a565b9050602081019050919050565b600067ffffffffffffffff82111561359557613594613927565b5b61359e8261396a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006135f982613713565b915061360483613713565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136395761363861383c565b5b828201905092915050565b600061364f82613713565b915061365a83613713565b92508261366a5761366961386b565b5b828204905092915050565b600061368082613713565b915061368b83613713565b92508282101561369e5761369d61383c565b5b828203905092915050565b60006136b4826136f3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561374a57808201518184015260208101905061372f565b83811115613759576000848401525b50505050565b6000600282049050600182168061377757607f821691505b6020821081141561378b5761378a61389a565b5b50919050565b61379a8261396a565b810181811067ffffffffffffffff821117156137b9576137b8613927565b5b80604052505050565b60006137cd82613713565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613800576137ff61383c565b5b600182019050919050565b600061381682613713565b915061382183613713565b9250826138315761383061386b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d6178696d756d206e756d626572206f66204e46547320726561636865642e00600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b613f44816136a9565b8114613f4f57600080fd5b50565b613f5b816136bb565b8114613f6657600080fd5b50565b613f72816136c7565b8114613f7d57600080fd5b50565b613f8981613713565b8114613f9457600080fd5b5056fea264697066735822122019965c6572352c258c85a1f99b62f02ac685d2eaf62ad3b9e5009c7f722edf5e64736f6c63430008070033000000000000000000000000aca3709b851765a55d48f9ce24f51ab57c08902c0000000000000000000000000000000000000000000000000000000000001388

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80635c975abb1161010f57806395d89b41116100a2578063c87b56dd11610071578063c87b56dd14610530578063d0d41fe114610560578063e985e9c51461057c578063f2fde38b146105ac576101e5565b806395d89b41146104be578063a22cb465146104dc578063b88d4fde146104f8578063c7a5f93f14610514576101e5565b8063715018a6116100de578063715018a61461046e5780638456cb59146104785780638da5cb5b1461048257806392f00233146104a0576101e5565b80635c975abb146103d25780635f48f393146103f05780636352211e1461040e57806370a082311461043e576101e5565b806338478ae71161018757806342966c681161015657806342966c681461034e5780634f6ccce71461036a5780634fe47f701461039a57806355f804b3146103b6576101e5565b806338478ae7146102ee5780633ad10ef61461030a5780633f4ba83a1461032857806342842e0e14610332576101e5565b8063095ea7b3116101c3578063095ea7b31461026857806318160ddd1461028457806323b872dd146102a25780632f745c59146102be576101e5565b806301ffc9a7146101ea57806306fdde031461021a578063081812fc14610238575b600080fd5b61020460048036038101906101ff9190612cdf565b6105c8565b604051610211919061320c565b60405180910390f35b6102226105da565b60405161022f9190613227565b60405180910390f35b610252600480360381019061024d9190612d82565b61066c565b60405161025f91906131a5565b60405180910390f35b610282600480360381019061027d9190612c9f565b6106f1565b005b61028c610809565b6040516102999190613509565b60405180910390f35b6102bc60048036038101906102b79190612b89565b610816565b005b6102d860048036038101906102d39190612c9f565b610876565b6040516102e59190613509565b60405180910390f35b61030860048036038101906103039190612b1c565b61091b565b005b6103126109c0565b60405161031f91906131a5565b60405180910390f35b6103306109e6565b005b61034c60048036038101906103479190612b89565b610a6c565b005b61036860048036038101906103639190612d82565b610a8c565b005b610384600480360381019061037f9190612d82565b610ae8565b6040516103919190613509565b60405180910390f35b6103b460048036038101906103af9190612d82565b610b59565b005b6103d060048036038101906103cb9190612d39565b610bc4565b005b6103da610c3f565b6040516103e7919061320c565b60405180910390f35b6103f8610c56565b6040516104059190613509565b60405180910390f35b61042860048036038101906104239190612d82565b610c5c565b60405161043591906131a5565b60405180910390f35b61045860048036038101906104539190612b1c565b610d0e565b6040516104659190613509565b60405180910390f35b610476610dc6565b005b610480610e4e565b005b61048a610ed4565b60405161049791906131a5565b60405180910390f35b6104a8610efe565b6040516104b591906131a5565b60405180910390f35b6104c6610f24565b6040516104d39190613227565b60405180910390f35b6104f660048036038101906104f19190612c5f565b610fb6565b005b610512600480360381019061050d9190612bdc565b610fcc565b005b61052e60048036038101906105299190612b1c565b61102e565b005b61054a60048036038101906105459190612d82565b611102565b6040516105579190613227565b60405180910390f35b61057a60048036038101906105759190612b1c565b611184565b005b61059660048036038101906105919190612b49565b611244565b6040516105a3919061320c565b60405180910390f35b6105c660048036038101906105c19190612b1c565b6112d8565b005b60006105d3826113d0565b9050919050565b6060600080546105e99061375f565b80601f01602080910402602001604051908101604052809291908181526020018280546106159061375f565b80156106625780601f1061063757610100808354040283529160200191610662565b820191906000526020600020905b81548152906001019060200180831161064557829003601f168201915b5050505050905090565b60006106778261144a565b6106b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90613429565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106fc82610c5c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561076d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076490613489565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661078c6114b6565b73ffffffffffffffffffffffffffffffffffffffff1614806107bb57506107ba816107b56114b6565b611244565b5b6107fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f1906133a9565b60405180910390fd5b61080483836114be565b505050565b6000600880549050905090565b6108276108216114b6565b82611577565b610866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085d906134a9565b60405180910390fd5b610871838383611655565b505050565b600061088183610d0e565b82106108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b990613269565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661095c6114b6565b73ffffffffffffffffffffffffffffffffffffffff161461097c57600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109ee6114b6565b73ffffffffffffffffffffffffffffffffffffffff16610a0c610ed4565b73ffffffffffffffffffffffffffffffffffffffff1614610a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5990613449565b60405180910390fd5b610a6a6118bc565b565b610a8783838360405180602001604052806000815250610fcc565b505050565b610a9d610a976114b6565b82611577565b610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad3906134e9565b60405180910390fd5b610ae58161195e565b50565b6000610af2610809565b8210610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a906134c9565b60405180910390fd5b60088281548110610b4757610b466138f8565b5b90600052602060002001549050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b9a6114b6565b73ffffffffffffffffffffffffffffffffffffffff1614610bba57600080fd5b80600d8190555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610c056114b6565b73ffffffffffffffffffffffffffffffffffffffff1614610c2557600080fd5b80600c9080519060200190610c3b929190612930565b5050565b6000600a60009054906101000a900460ff16905090565b600d5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc906133e9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d76906133c9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dce6114b6565b73ffffffffffffffffffffffffffffffffffffffff16610dec610ed4565b73ffffffffffffffffffffffffffffffffffffffff1614610e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3990613449565b60405180910390fd5b610e4c6000611a7b565b565b610e566114b6565b73ffffffffffffffffffffffffffffffffffffffff16610e74610ed4565b73ffffffffffffffffffffffffffffffffffffffff1614610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190613449565b60405180910390fd5b610ed2611b41565b565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054610f339061375f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5f9061375f565b8015610fac5780601f10610f8157610100808354040283529160200191610fac565b820191906000526020600020905b815481529060010190602001808311610f8f57829003601f168201915b5050505050905090565b610fc8610fc16114b6565b8383611be4565b5050565b610fdd610fd76114b6565b83611577565b61101c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611013906134a9565b60405180910390fd5b61102884848484611d51565b50505050565b611038600b611dad565b600d541161107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107290613369565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110bc6114b6565b73ffffffffffffffffffffffffffffffffffffffff16146110dc57600080fd5b6110e6600b611dbb565b60006110f2600b611dad565b90506110fe8282611dd1565b5050565b606061110d8261144a565b61114c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114390613469565b60405180910390fd5b611154611fab565b61115d8361203d565b60405160200161116e929190613181565b6040516020818303038152906040529050919050565b61118c6114b6565b73ffffffffffffffffffffffffffffffffffffffff166111aa610ed4565b73ffffffffffffffffffffffffffffffffffffffff1614611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f790613449565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112e06114b6565b73ffffffffffffffffffffffffffffffffffffffff166112fe610ed4565b73ffffffffffffffffffffffffffffffffffffffff1614611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134b90613449565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb906132a9565b60405180910390fd5b6113cd81611a7b565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061144357506114428261219e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661153183610c5c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115828261144a565b6115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b890613349565b60405180910390fd5b60006115cc83610c5c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061160e575061160d8185611244565b5b8061164c57508373ffffffffffffffffffffffffffffffffffffffff166116348461066c565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661167582610c5c565b73ffffffffffffffffffffffffffffffffffffffff16146116cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c2906132c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561173b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173290613309565b60405180910390fd5b611746838383612280565b6117516000826114be565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117a19190613675565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117f891906135ee565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46118b78383836122d8565b505050565b6118c4610c3f565b611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa90613249565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6119476114b6565b60405161195491906131a5565b60405180910390a1565b600061196982610c5c565b905061197781600084612280565b6119826000836114be565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119d29190613675565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a77816000846122d8565b5050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611b49610c3f565b15611b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8090613389565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611bcd6114b6565b604051611bda91906131a5565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4a90613329565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d44919061320c565b60405180910390a3505050565b611d5c848484611655565b611d68848484846122e8565b611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e90613289565b60405180910390fd5b50505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3890613409565b60405180910390fd5b611e4a8161144a565b15611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e81906132e9565b60405180910390fd5b611e9660008383612280565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ee691906135ee565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611fa7600083836122d8565b5050565b6060600c8054611fba9061375f565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe69061375f565b80156120335780601f1061200857610100808354040283529160200191612033565b820191906000526020600020905b81548152906001019060200180831161201657829003601f168201915b5050505050905090565b60606000821415612085576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612199565b600082905060005b600082146120b75780806120a0906137c2565b915050600a826120b09190613644565b915061208d565b60008167ffffffffffffffff8111156120d3576120d2613927565b5b6040519080825280601f01601f1916602001820160405280156121055781602001600182028036833780820191505090505b5090505b600085146121925760018261211e9190613675565b9150600a8561212d919061380b565b603061213991906135ee565b60f81b81838151811061214f5761214e6138f8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561218b9190613644565b9450612109565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061226957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061227957506122788261247f565b5b9050919050565b612288610c3f565b156122c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bf90613389565b60405180910390fd5b6122d38383836124e9565b505050565b6122e38383836125fd565b505050565b60006123098473ffffffffffffffffffffffffffffffffffffffff16612602565b15612472578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123326114b6565b8786866040518563ffffffff1660e01b815260040161235494939291906131c0565b602060405180830381600087803b15801561236e57600080fd5b505af192505050801561239f57506040513d601f19601f8201168201806040525081019061239c9190612d0c565b60015b612422573d80600081146123cf576040519150601f19603f3d011682016040523d82523d6000602084013e6123d4565b606091505b5060008151141561241a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241190613289565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612477565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6124f4838383612625565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612537576125328161262a565b612576565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612575576125748382612673565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125b9576125b4816127e0565b6125f8565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146125f7576125f682826128b1565b5b5b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161268084610d0e565b61268a9190613675565b905060006007600084815260200190815260200160002054905081811461276f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127f49190613675565b9050600060096000848152602001908152602001600020549050600060088381548110612824576128236138f8565b5b906000526020600020015490508060088381548110612846576128456138f8565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612895576128946138c9565b5b6001900381819060005260206000200160009055905550505050565b60006128bc83610d0e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461293c9061375f565b90600052602060002090601f01602090048101928261295e57600085556129a5565b82601f1061297757805160ff19168380011785556129a5565b828001600101855582156129a5579182015b828111156129a4578251825591602001919060010190612989565b5b5090506129b291906129b6565b5090565b5b808211156129cf5760008160009055506001016129b7565b5090565b60006129e66129e184613549565b613524565b905082815260208101848484011115612a0257612a0161395b565b5b612a0d84828561371d565b509392505050565b6000612a28612a238461357a565b613524565b905082815260208101848484011115612a4457612a4361395b565b5b612a4f84828561371d565b509392505050565b600081359050612a6681613f3b565b92915050565b600081359050612a7b81613f52565b92915050565b600081359050612a9081613f69565b92915050565b600081519050612aa581613f69565b92915050565b600082601f830112612ac057612abf613956565b5b8135612ad08482602086016129d3565b91505092915050565b600082601f830112612aee57612aed613956565b5b8135612afe848260208601612a15565b91505092915050565b600081359050612b1681613f80565b92915050565b600060208284031215612b3257612b31613965565b5b6000612b4084828501612a57565b91505092915050565b60008060408385031215612b6057612b5f613965565b5b6000612b6e85828601612a57565b9250506020612b7f85828601612a57565b9150509250929050565b600080600060608486031215612ba257612ba1613965565b5b6000612bb086828701612a57565b9350506020612bc186828701612a57565b9250506040612bd286828701612b07565b9150509250925092565b60008060008060808587031215612bf657612bf5613965565b5b6000612c0487828801612a57565b9450506020612c1587828801612a57565b9350506040612c2687828801612b07565b925050606085013567ffffffffffffffff811115612c4757612c46613960565b5b612c5387828801612aab565b91505092959194509250565b60008060408385031215612c7657612c75613965565b5b6000612c8485828601612a57565b9250506020612c9585828601612a6c565b9150509250929050565b60008060408385031215612cb657612cb5613965565b5b6000612cc485828601612a57565b9250506020612cd585828601612b07565b9150509250929050565b600060208284031215612cf557612cf4613965565b5b6000612d0384828501612a81565b91505092915050565b600060208284031215612d2257612d21613965565b5b6000612d3084828501612a96565b91505092915050565b600060208284031215612d4f57612d4e613965565b5b600082013567ffffffffffffffff811115612d6d57612d6c613960565b5b612d7984828501612ad9565b91505092915050565b600060208284031215612d9857612d97613965565b5b6000612da684828501612b07565b91505092915050565b612db8816136a9565b82525050565b612dc7816136bb565b82525050565b6000612dd8826135ab565b612de281856135c1565b9350612df281856020860161372c565b612dfb8161396a565b840191505092915050565b6000612e11826135b6565b612e1b81856135d2565b9350612e2b81856020860161372c565b612e348161396a565b840191505092915050565b6000612e4a826135b6565b612e5481856135e3565b9350612e6481856020860161372c565b80840191505092915050565b6000612e7d6014836135d2565b9150612e888261397b565b602082019050919050565b6000612ea0602b836135d2565b9150612eab826139a4565b604082019050919050565b6000612ec36032836135d2565b9150612ece826139f3565b604082019050919050565b6000612ee66026836135d2565b9150612ef182613a42565b604082019050919050565b6000612f096025836135d2565b9150612f1482613a91565b604082019050919050565b6000612f2c601c836135d2565b9150612f3782613ae0565b602082019050919050565b6000612f4f6024836135d2565b9150612f5a82613b09565b604082019050919050565b6000612f726019836135d2565b9150612f7d82613b58565b602082019050919050565b6000612f95602c836135d2565b9150612fa082613b81565b604082019050919050565b6000612fb8601f836135d2565b9150612fc382613bd0565b602082019050919050565b6000612fdb6010836135d2565b9150612fe682613bf9565b602082019050919050565b6000612ffe6038836135d2565b915061300982613c22565b604082019050919050565b6000613021602a836135d2565b915061302c82613c71565b604082019050919050565b60006130446029836135d2565b915061304f82613cc0565b604082019050919050565b60006130676020836135d2565b915061307282613d0f565b602082019050919050565b600061308a602c836135d2565b915061309582613d38565b604082019050919050565b60006130ad6020836135d2565b91506130b882613d87565b602082019050919050565b60006130d0602f836135d2565b91506130db82613db0565b604082019050919050565b60006130f36021836135d2565b91506130fe82613dff565b604082019050919050565b60006131166031836135d2565b915061312182613e4e565b604082019050919050565b6000613139602c836135d2565b915061314482613e9d565b604082019050919050565b600061315c6030836135d2565b915061316782613eec565b604082019050919050565b61317b81613713565b82525050565b600061318d8285612e3f565b91506131998284612e3f565b91508190509392505050565b60006020820190506131ba6000830184612daf565b92915050565b60006080820190506131d56000830187612daf565b6131e26020830186612daf565b6131ef6040830185613172565b81810360608301526132018184612dcd565b905095945050505050565b60006020820190506132216000830184612dbe565b92915050565b600060208201905081810360008301526132418184612e06565b905092915050565b6000602082019050818103600083015261326281612e70565b9050919050565b6000602082019050818103600083015261328281612e93565b9050919050565b600060208201905081810360008301526132a281612eb6565b9050919050565b600060208201905081810360008301526132c281612ed9565b9050919050565b600060208201905081810360008301526132e281612efc565b9050919050565b6000602082019050818103600083015261330281612f1f565b9050919050565b6000602082019050818103600083015261332281612f42565b9050919050565b6000602082019050818103600083015261334281612f65565b9050919050565b6000602082019050818103600083015261336281612f88565b9050919050565b6000602082019050818103600083015261338281612fab565b9050919050565b600060208201905081810360008301526133a281612fce565b9050919050565b600060208201905081810360008301526133c281612ff1565b9050919050565b600060208201905081810360008301526133e281613014565b9050919050565b6000602082019050818103600083015261340281613037565b9050919050565b600060208201905081810360008301526134228161305a565b9050919050565b600060208201905081810360008301526134428161307d565b9050919050565b60006020820190508181036000830152613462816130a0565b9050919050565b60006020820190508181036000830152613482816130c3565b9050919050565b600060208201905081810360008301526134a2816130e6565b9050919050565b600060208201905081810360008301526134c281613109565b9050919050565b600060208201905081810360008301526134e28161312c565b9050919050565b600060208201905081810360008301526135028161314f565b9050919050565b600060208201905061351e6000830184613172565b92915050565b600061352e61353f565b905061353a8282613791565b919050565b6000604051905090565b600067ffffffffffffffff82111561356457613563613927565b5b61356d8261396a565b9050602081019050919050565b600067ffffffffffffffff82111561359557613594613927565b5b61359e8261396a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006135f982613713565b915061360483613713565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136395761363861383c565b5b828201905092915050565b600061364f82613713565b915061365a83613713565b92508261366a5761366961386b565b5b828204905092915050565b600061368082613713565b915061368b83613713565b92508282101561369e5761369d61383c565b5b828203905092915050565b60006136b4826136f3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561374a57808201518184015260208101905061372f565b83811115613759576000848401525b50505050565b6000600282049050600182168061377757607f821691505b6020821081141561378b5761378a61389a565b5b50919050565b61379a8261396a565b810181811067ffffffffffffffff821117156137b9576137b8613927565b5b80604052505050565b60006137cd82613713565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613800576137ff61383c565b5b600182019050919050565b600061381682613713565b915061382183613713565b9250826138315761383061386b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d6178696d756d206e756d626572206f66204e46547320726561636865642e00600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b613f44816136a9565b8114613f4f57600080fd5b50565b613f5b816136bb565b8114613f6657600080fd5b50565b613f72816136c7565b8114613f7d57600080fd5b50565b613f8981613713565b8114613f9457600080fd5b5056fea264697066735822122019965c6572352c258c85a1f99b62f02ac685d2eaf62ad3b9e5009c7f722edf5e64736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000aca3709b851765a55d48f9ce24f51ab57c08902c0000000000000000000000000000000000000000000000000000000000001388

-----Decoded View---------------
Arg [0] : _devAddress (address): 0xACA3709b851765a55D48f9cE24F51ab57C08902c
Arg [1] : _amount (uint256): 5000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000aca3709b851765a55d48f9ce24f51ab57c08902c
Arg [1] : 0000000000000000000000000000000000000000000000000000000000001388


Deployed Bytecode Sourcemap

45826:2348:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48009:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20830:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22212:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21811:347;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34176:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22893:297;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33871:241;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47229:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46084:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46613:56;;;:::i;:::-;;23249:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44184:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34345:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47437:83;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47139:85;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40289:77;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46023:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20557:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20314:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42928:94;;;:::i;:::-;;46556:52;;;:::i;:::-;;42337:78;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46051:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20978:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22478:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23463:284;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46710:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46890:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47337:95;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22683:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43162:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48009:162;48112:4;48130:36;48154:11;48130:23;:36::i;:::-;48123:43;;48009:162;;;:::o;20830:91::-;20884:13;20911:5;20904:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20830:91;:::o;22212:206::-;22288:7;22310:16;22318:7;22310;:16::i;:::-;22302:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22389:15;:24;22405:7;22389:24;;;;;;;;;;;;;;;;;;;;;22382:31;;22212:206;;;:::o;21811:347::-;21886:13;21902:23;21917:7;21902:14;:23::i;:::-;21886:39;;21944:5;21938:11;;:2;:11;;;;21930:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22018:5;22002:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22027:37;22044:5;22051:12;:10;:12::i;:::-;22027:16;:37::i;:::-;22002:62;21994:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;22132:21;22141:2;22145:7;22132:8;:21::i;:::-;21881:277;21811:347;;:::o;34176:104::-;34237:7;34258:10;:17;;;;34251:24;;34176:104;:::o;22893:297::-;23055:41;23074:12;:10;:12::i;:::-;23088:7;23055:18;:41::i;:::-;23047:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23157:28;23167:4;23173:2;23177:7;23157:9;:28::i;:::-;22893:297;;;:::o;33871:241::-;33968:7;33998:23;34015:5;33998:16;:23::i;:::-;33990:5;:31;33982:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34081:12;:19;34094:5;34081:19;;;;;;;;;;;;;;;:26;34101:5;34081:26;;;;;;;;;;;;34074:33;;33871:241;;;;:::o;47229:103::-;46447:10;;;;;;;;;;;46431:26;;:12;:10;:12::i;:::-;:26;;;46423:35;;;;;;47315:12:::1;47298:14;;:29;;;;;;;;;;;;;;;;;;47229:103:::0;:::o;46084:25::-;;;;;;;;;;;;;:::o;46613:56::-;42541:12;:10;:12::i;:::-;42530:23;;:7;:5;:7::i;:::-;:23;;;42522:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46654:10:::1;:8;:10::i;:::-;46613:56::o:0;23249:155::-;23360:39;23377:4;23383:2;23387:7;23360:39;;;;;;;;;;;;:16;:39::i;:::-;23249:155;;;:::o;44184:224::-;44290:41;44309:12;:10;:12::i;:::-;44323:7;44290:18;:41::i;:::-;44282:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;44389:14;44395:7;44389:5;:14::i;:::-;44184:224;:::o;34345:218::-;34420:7;34450:30;:28;:30::i;:::-;34442:5;:38;34434:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;34541:10;34552:5;34541:17;;;;;;;;:::i;:::-;;;;;;;;;;34534:24;;34345:218;;;:::o;47437:83::-;46447:10;;;;;;;;;;;46431:26;;:12;:10;:12::i;:::-;:26;;;46423:35;;;;;;47508:7:::1;47496:9;:19;;;;47437:83:::0;:::o;47139:85::-;46447:10;;;;;;;;;;;46431:26;;:12;:10;:12::i;:::-;:26;;;46423:35;;;;;;47215:4:::1;47199:13;:20;;;;;;;;;;;;:::i;:::-;;47139:85:::0;:::o;40289:77::-;40336:4;40354:7;;;;;;;;;;;40347:14;;40289:77;:::o;46023:24::-;;;;:::o;20557:218::-;20629:7;20643:13;20659:7;:16;20667:7;20659:16;;;;;;;;;;;;;;;;;;;;;20643:32;;20705:1;20688:19;;:5;:19;;;;20680:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20765:5;20758:12;;;20557:218;;;:::o;20314:193::-;20386:7;20425:1;20408:19;;:5;:19;;;;20400:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20486:9;:16;20496:5;20486:16;;;;;;;;;;;;;;;;20479:23;;20314:193;;;:::o;42928:94::-;42541:12;:10;:12::i;:::-;42530:23;;:7;:5;:7::i;:::-;:23;;;42522:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42987:30:::1;43014:1;42987:18;:30::i;:::-;42928:94::o:0;46556:52::-;42541:12;:10;:12::i;:::-;42530:23;;:7;:5;:7::i;:::-;:23;;;42522:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46595:8:::1;:6;:8::i;:::-;46556:52::o:0;42337:78::-;42383:7;42404:6;;;;;;;;;;;42397:13;;42337:78;:::o;46051:29::-;;;;;;;;;;;;;:::o;20978:95::-;21034:13;21061:7;21054:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20978:95;:::o;22478:146::-;22567:52;22586:12;:10;:12::i;:::-;22600:8;22610;22567:18;:52::i;:::-;22478:146;;:::o;23463:284::-;23604:41;23623:12;:10;:12::i;:::-;23637:7;23604:18;:41::i;:::-;23596:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23704:38;23718:4;23724:2;23728:7;23737:4;23704:13;:38::i;:::-;23463:284;;;;:::o;46710:175::-;46322:25;:15;:23;:25::i;:::-;46310:9;;:37;46302:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;46525:14:::1;;;;;;;;;;;46509:30;;:12;:10;:12::i;:::-;:30;;;46501:39;;;::::0;::::1;;46780:27:::2;:15;:25;:27::i;:::-;46812:16;46831:25;:15;:23;:25::i;:::-;46812:44;;46861:19;46867:2;46871:8;46861:5;:19::i;:::-;46775:110;46710:175:::0;:::o;46890:244::-;46956:13;46984:17;46992:8;46984:7;:17::i;:::-;46976:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;47089:10;:8;:10::i;:::-;47101:26;47118:8;47101:16;:26::i;:::-;47072:56;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47058:71;;46890:244;;;:::o;47337:95::-;42541:12;:10;:12::i;:::-;42530:23;;:7;:5;:7::i;:::-;:23;;;42522:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47416:11:::1;47403:10;;:24;;;;;;;;;;;;;;;;;;47337:95:::0;:::o;22683:155::-;22780:4;22798:18;:25;22817:5;22798:25;;;;;;;;;;;;;;;:35;22824:8;22798:35;;;;;;;;;;;;;;;;;;;;;;;;;22791:42;;22683:155;;;;:::o;43162:186::-;42541:12;:10;:12::i;:::-;42530:23;;:7;:5;:7::i;:::-;:23;;;42522:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43265:1:::1;43245:22;;:8;:22;;;;43237:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43315:28;43334:8;43315:18;:28::i;:::-;43162:186:::0;:::o;33584:215::-;33686:4;33719:35;33704:50;;;:11;:50;;;;:90;;;;33758:36;33782:11;33758:23;:36::i;:::-;33704:90;33697:97;;33584:215;;;:::o;25128:118::-;25193:4;25239:1;25211:30;;:7;:16;25219:7;25211:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25204:37;;25128:118;;;:::o;15655:89::-;15708:7;15729:10;15722:17;;15655:89;:::o;28783:159::-;28879:2;28852:15;:24;28868:7;28852:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28929:7;28925:2;28891:46;;28900:23;28915:7;28900:14;:23::i;:::-;28891:46;;;;;;;;;;;;28783:159;;:::o;25389:327::-;25482:4;25501:16;25509:7;25501;:16::i;:::-;25493:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25571:13;25587:23;25602:7;25587:14;:23::i;:::-;25571:39;;25634:5;25623:16;;:7;:16;;;:52;;;;25643:32;25660:5;25667:7;25643:16;:32::i;:::-;25623:52;:87;;;;25703:7;25679:31;;:20;25691:7;25679:11;:20::i;:::-;:31;;;25623:87;25615:96;;;25389:327;;;;:::o;28141:541::-;28273:4;28246:31;;:23;28261:7;28246:14;:23::i;:::-;:31;;;28238:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28346:1;28332:16;;:2;:16;;;;28324:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28396:39;28417:4;28423:2;28427:7;28396:20;:39::i;:::-;28488:29;28505:1;28509:7;28488:8;:29::i;:::-;28543:1;28524:9;:15;28534:4;28524:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;28566:1;28549:9;:13;28559:2;28549:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28591:2;28572:7;:16;28580:7;28572:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28624:7;28620:2;28605:27;;28614:4;28605:27;;;;;;;;;;;;28639:38;28659:4;28665:2;28669:7;28639:19;:38::i;:::-;28141:541;;;:::o;41198:105::-;40814:8;:6;:8::i;:::-;40806:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;41261:5:::1;41251:7;;:15;;;;;;;;;;;;;;;;;;41276:22;41285:12;:10;:12::i;:::-;41276:22;;;;;;:::i;:::-;;;;;;;;41198:105::o:0;27471:369::-;27525:13;27541:23;27556:7;27541:14;:23::i;:::-;27525:39;;27571:48;27592:5;27607:1;27611:7;27571:20;:48::i;:::-;27648:29;27665:1;27669:7;27648:8;:29::i;:::-;27704:1;27684:9;:16;27694:5;27684:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;27717:7;:16;27725:7;27717:16;;;;;;;;;;;;27710:23;;;;;;;;;;;27773:7;27769:1;27745:36;;27754:5;27745:36;;;;;;;;;;;;27788:47;27808:5;27823:1;27827:7;27788:19;:47::i;:::-;27520:320;27471:369;:::o;43493:170::-;43561:16;43580:6;;;;;;;;;;;43561:25;;43600:8;43591:6;;:17;;;;;;;;;;;;;;;;;;43649:8;43618:40;;43639:8;43618:40;;;;;;;;;;;;43556:107;43493:170;:::o;40978:103::-;40576:8;:6;:8::i;:::-;40575:9;40567:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;41042:4:::1;41032:7;;:14;;;;;;;;;;;;;;;;;;41056:20;41063:12;:10;:12::i;:::-;41056:20;;;;;;:::i;:::-;;;;;;;;40978:103::o:0;29067:273::-;29195:8;29186:17;;:5;:17;;;;29178:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;29276:8;29238:18;:25;29257:5;29238:25;;;;;;;;;;;;;;;:35;29264:8;29238:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;29316:8;29294:41;;29309:5;29294:41;;;29326:8;29294:41;;;;;;:::i;:::-;;;;;;;;29067:273;;;:::o;24571:271::-;24694:28;24704:4;24710:2;24714:7;24694:9;:28::i;:::-;24735:47;24758:4;24764:2;24768:7;24777:4;24735:22;:47::i;:::-;24727:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;24571:271;;;;:::o;45260:105::-;45325:7;45346;:14;;;45339:21;;45260:105;;;:::o;45370:103::-;45462:1;45444:7;:14;;;:19;;;;;;;;;;;45370:103;:::o;26881:394::-;26969:1;26955:16;;:2;:16;;;;26947:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27022:16;27030:7;27022;:16::i;:::-;27021:17;27013:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27078:45;27107:1;27111:2;27115:7;27078:20;:45::i;:::-;27147:1;27130:9;:13;27140:2;27130:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27172:2;27153:7;:16;27161:7;27153:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27211:7;27207:2;27186:33;;27203:1;27186:33;;;;;;;;;;;;27226:44;27254:1;27258:2;27262:7;27226:19;:44::i;:::-;26881:394;;:::o;47525:105::-;47585:13;47612;47605:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47525:105;:::o;16204:594::-;16260:13;16472:1;16463:5;:10;16459:38;;;16481:10;;;;;;;;;;;;;;;;;;;;;16459:38;16501:12;16516:5;16501:20;;16526:14;16545:54;16560:1;16552:4;:9;16545:54;;16569:8;;;;;:::i;:::-;;;;16591:2;16583:10;;;;;:::i;:::-;;;16545:54;;;16603:19;16635:6;16625:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16603:39;;16647:121;16663:1;16654:5;:10;16647:121;;16682:1;16672:11;;;;;:::i;:::-;;;16740:2;16732:5;:10;;;;:::i;:::-;16719:2;:24;;;;:::i;:::-;16706:39;;16689:6;16696;16689:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16760:2;16751:11;;;;;:::i;:::-;;;16647:121;;;16786:6;16772:21;;;;;16204:594;;;;:::o;20005:257::-;20107:4;20140:25;20125:40;;;:11;:40;;;;:92;;;;20184:33;20169:48;;;:11;:48;;;;20125:92;:132;;;;20221:36;20245:11;20221:23;:36::i;:::-;20125:132;20118:139;;20005:257;;;:::o;47635:199::-;40576:8;:6;:8::i;:::-;40575:9;40567:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;47784:45:::1;47811:4;47817:2;47821:7;47784:26;:45::i;:::-;47635:199:::0;;;:::o;47839:165::-;47955:44;47981:4;47987:2;47991:7;47955:25;:44::i;:::-;47839:165;;;:::o;29871:602::-;29998:4;30013:15;:2;:13;;;:15::i;:::-;30009:460;;;30056:2;30040:36;;;30077:12;:10;:12::i;:::-;30091:4;30097:7;30106:4;30040:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30036:399;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30265:1;30248:6;:13;:18;30244:185;;;30276:60;;;;;;;;;;:::i;:::-;;;;;;;;30244:185;30406:6;30400:13;30391:6;30387:2;30383:15;30376:38;30036:399;30160:41;;;30150:51;;;:6;:51;;;;30143:58;;;;;30009:460;30459:4;30452:11;;29871:602;;;;;;;:::o;18532:148::-;18617:4;18650:25;18635:40;;;:11;:40;;;;18628:47;;18532:148;;;:::o;35128:487::-;35245:45;35272:4;35278:2;35282:7;35245:26;:45::i;:::-;35317:1;35301:18;;:4;:18;;;35297:157;;;35327:40;35359:7;35327:31;:40::i;:::-;35297:157;;;35391:2;35383:10;;:4;:10;;;35379:75;;35401:47;35434:4;35440:7;35401:32;:47::i;:::-;35379:75;35297:157;35476:1;35462:16;;:2;:16;;;35458:153;;;35486:45;35523:7;35486:36;:45::i;:::-;35458:153;;;35553:4;35547:10;;:2;:10;;;35543:68;;35565:40;35593:2;35597:7;35565:27;:40::i;:::-;35543:68;35458:153;35128:487;;;:::o;31454:104::-;;;;:::o;8428:299::-;8488:4;8721:1;8699:7;:19;;;:23;8692:30;;8428:299;;;:::o;31000:105::-;;;;:::o;36284:149::-;36382:10;:17;;;;36355:15;:24;36371:7;36355:24;;;;;;;;;;;:44;;;;36404:10;36420:7;36404:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36284:149;:::o;37033:898::-;37281:22;37331:1;37306:22;37323:4;37306:16;:22::i;:::-;:26;;;;:::i;:::-;37281:51;;37337:18;37358:17;:26;37376:7;37358:26;;;;;;;;;;;;37337:47;;37493:14;37479:10;:28;37475:295;;37515:19;37537:12;:18;37550:4;37537:18;;;;;;;;;;;;;;;:34;37556:14;37537:34;;;;;;;;;;;;37515:56;;37612:11;37579:12;:18;37592:4;37579:18;;;;;;;;;;;;;;;:30;37598:10;37579:30;;;;;;;;;;;:44;;;;37720:10;37687:17;:30;37705:11;37687:30;;;;;;;;;;;:43;;;;37509:261;37475:295;37854:17;:26;37872:7;37854:26;;;;;;;;;;;37847:33;;;37892:12;:18;37905:4;37892:18;;;;;;;;;;;;;;;:34;37911:14;37892:34;;;;;;;;;;;37885:41;;;37114:817;;37033:898;;:::o;38208:998::-;38443:22;38488:1;38468:10;:17;;;;:21;;;;:::i;:::-;38443:46;;38494:18;38515:15;:24;38531:7;38515:24;;;;;;;;;;;;38494:45;;38842:19;38864:10;38875:14;38864:26;;;;;;;;:::i;:::-;;;;;;;;;;38842:48;;38922:11;38897:10;38908;38897:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;39027:10;38996:15;:28;39012:11;38996:28;;;;;;;;;;;:41;;;;39156:15;:24;39172:7;39156:24;;;;;;;;;;;39149:31;;;39185:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38279:927;;;38208:998;:::o;35898:200::-;35977:14;35994:20;36011:2;35994:16;:20::i;:::-;35977:37;;36046:7;36019:12;:16;36032:2;36019:16;;;;;;;;;;;;;;;:24;36036:6;36019:24;;;;;;;;;;;:34;;;;36087:6;36058:17;:26;36076:7;36058:26;;;;;;;;;;;:35;;;;35972:126;35898:200;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7158:118;;:::o;7282:109::-;7363:21;7378:5;7363:21;:::i;:::-;7358:3;7351:34;7282:109;;:::o;7397:360::-;7483:3;7511:38;7543:5;7511:38;:::i;:::-;7565:70;7628:6;7623:3;7565:70;:::i;:::-;7558:77;;7644:52;7689:6;7684:3;7677:4;7670:5;7666:16;7644:52;:::i;:::-;7721:29;7743:6;7721:29;:::i;:::-;7716:3;7712:39;7705:46;;7487:270;7397:360;;;;:::o;7763:364::-;7851:3;7879:39;7912:5;7879:39;:::i;:::-;7934:71;7998:6;7993:3;7934:71;:::i;:::-;7927:78;;8014:52;8059:6;8054:3;8047:4;8040:5;8036:16;8014:52;:::i;:::-;8091:29;8113:6;8091:29;:::i;:::-;8086:3;8082:39;8075:46;;7855:272;7763:364;;;;:::o;8133:377::-;8239:3;8267:39;8300:5;8267:39;:::i;:::-;8322:89;8404:6;8399:3;8322:89;:::i;:::-;8315:96;;8420:52;8465:6;8460:3;8453:4;8446:5;8442:16;8420:52;:::i;:::-;8497:6;8492:3;8488:16;8481:23;;8243:267;8133:377;;;;:::o;8516:366::-;8658:3;8679:67;8743:2;8738:3;8679:67;:::i;:::-;8672:74;;8755:93;8844:3;8755:93;:::i;:::-;8873:2;8868:3;8864:12;8857:19;;8516:366;;;:::o;8888:::-;9030:3;9051:67;9115:2;9110:3;9051:67;:::i;:::-;9044:74;;9127:93;9216:3;9127:93;:::i;:::-;9245:2;9240:3;9236:12;9229:19;;8888:366;;;:::o;9260:::-;9402:3;9423:67;9487:2;9482:3;9423:67;:::i;:::-;9416:74;;9499:93;9588:3;9499:93;:::i;:::-;9617:2;9612:3;9608:12;9601:19;;9260:366;;;:::o;9632:::-;9774:3;9795:67;9859:2;9854:3;9795:67;:::i;:::-;9788:74;;9871:93;9960:3;9871:93;:::i;:::-;9989:2;9984:3;9980:12;9973:19;;9632:366;;;:::o;10004:::-;10146:3;10167:67;10231:2;10226:3;10167:67;:::i;:::-;10160:74;;10243:93;10332:3;10243:93;:::i;:::-;10361:2;10356:3;10352:12;10345:19;;10004:366;;;:::o;10376:::-;10518:3;10539:67;10603:2;10598:3;10539:67;:::i;:::-;10532:74;;10615:93;10704:3;10615:93;:::i;:::-;10733:2;10728:3;10724:12;10717:19;;10376:366;;;:::o;10748:::-;10890:3;10911:67;10975:2;10970:3;10911:67;:::i;:::-;10904:74;;10987:93;11076:3;10987:93;:::i;:::-;11105:2;11100:3;11096:12;11089:19;;10748:366;;;:::o;11120:::-;11262:3;11283:67;11347:2;11342:3;11283:67;:::i;:::-;11276:74;;11359:93;11448:3;11359:93;:::i;:::-;11477:2;11472:3;11468:12;11461:19;;11120:366;;;:::o;11492:::-;11634:3;11655:67;11719:2;11714:3;11655:67;:::i;:::-;11648:74;;11731:93;11820:3;11731:93;:::i;:::-;11849:2;11844:3;11840:12;11833:19;;11492:366;;;:::o;11864:::-;12006:3;12027:67;12091:2;12086:3;12027:67;:::i;:::-;12020:74;;12103:93;12192:3;12103:93;:::i;:::-;12221:2;12216:3;12212:12;12205:19;;11864:366;;;:::o;12236:::-;12378:3;12399:67;12463:2;12458:3;12399:67;:::i;:::-;12392:74;;12475:93;12564:3;12475:93;:::i;:::-;12593:2;12588:3;12584:12;12577:19;;12236:366;;;:::o;12608:::-;12750:3;12771:67;12835:2;12830:3;12771:67;:::i;:::-;12764:74;;12847:93;12936:3;12847:93;:::i;:::-;12965:2;12960:3;12956:12;12949:19;;12608:366;;;:::o;12980:::-;13122:3;13143:67;13207:2;13202:3;13143:67;:::i;:::-;13136:74;;13219:93;13308:3;13219:93;:::i;:::-;13337:2;13332:3;13328:12;13321:19;;12980:366;;;:::o;13352:::-;13494:3;13515:67;13579:2;13574:3;13515:67;:::i;:::-;13508:74;;13591:93;13680:3;13591:93;:::i;:::-;13709:2;13704:3;13700:12;13693:19;;13352:366;;;:::o;13724:::-;13866:3;13887:67;13951:2;13946:3;13887:67;:::i;:::-;13880:74;;13963:93;14052:3;13963:93;:::i;:::-;14081:2;14076:3;14072:12;14065:19;;13724:366;;;:::o;14096:::-;14238:3;14259:67;14323:2;14318:3;14259:67;:::i;:::-;14252:74;;14335:93;14424:3;14335:93;:::i;:::-;14453:2;14448:3;14444:12;14437:19;;14096:366;;;:::o;14468:::-;14610:3;14631:67;14695:2;14690:3;14631:67;:::i;:::-;14624:74;;14707:93;14796:3;14707:93;:::i;:::-;14825:2;14820:3;14816:12;14809:19;;14468:366;;;:::o;14840:::-;14982:3;15003:67;15067:2;15062:3;15003:67;:::i;:::-;14996:74;;15079:93;15168:3;15079:93;:::i;:::-;15197:2;15192:3;15188:12;15181:19;;14840:366;;;:::o;15212:::-;15354:3;15375:67;15439:2;15434:3;15375:67;:::i;:::-;15368:74;;15451:93;15540:3;15451:93;:::i;:::-;15569:2;15564:3;15560:12;15553:19;;15212:366;;;:::o;15584:::-;15726:3;15747:67;15811:2;15806:3;15747:67;:::i;:::-;15740:74;;15823:93;15912:3;15823:93;:::i;:::-;15941:2;15936:3;15932:12;15925:19;;15584:366;;;:::o;15956:::-;16098:3;16119:67;16183:2;16178:3;16119:67;:::i;:::-;16112:74;;16195:93;16284:3;16195:93;:::i;:::-;16313:2;16308:3;16304:12;16297:19;;15956:366;;;:::o;16328:::-;16470:3;16491:67;16555:2;16550:3;16491:67;:::i;:::-;16484:74;;16567:93;16656:3;16567:93;:::i;:::-;16685:2;16680:3;16676:12;16669:19;;16328:366;;;:::o;16700:118::-;16787:24;16805:5;16787:24;:::i;:::-;16782:3;16775:37;16700:118;;:::o;16824:435::-;17004:3;17026:95;17117:3;17108:6;17026:95;:::i;:::-;17019:102;;17138:95;17229:3;17220:6;17138:95;:::i;:::-;17131:102;;17250:3;17243:10;;16824:435;;;;;:::o;17265:222::-;17358:4;17396:2;17385:9;17381:18;17373:26;;17409:71;17477:1;17466:9;17462:17;17453:6;17409:71;:::i;:::-;17265:222;;;;:::o;17493:640::-;17688:4;17726:3;17715:9;17711:19;17703:27;;17740:71;17808:1;17797:9;17793:17;17784:6;17740:71;:::i;:::-;17821:72;17889:2;17878:9;17874:18;17865:6;17821:72;:::i;:::-;17903;17971:2;17960:9;17956:18;17947:6;17903:72;:::i;:::-;18022:9;18016:4;18012:20;18007:2;17996:9;17992:18;17985:48;18050:76;18121:4;18112:6;18050:76;:::i;:::-;18042:84;;17493:640;;;;;;;:::o;18139:210::-;18226:4;18264:2;18253:9;18249:18;18241:26;;18277:65;18339:1;18328:9;18324:17;18315:6;18277:65;:::i;:::-;18139:210;;;;:::o;18355:313::-;18468:4;18506:2;18495:9;18491:18;18483:26;;18555:9;18549:4;18545:20;18541:1;18530:9;18526:17;18519:47;18583:78;18656:4;18647:6;18583:78;:::i;:::-;18575:86;;18355:313;;;;:::o;18674:419::-;18840:4;18878:2;18867:9;18863:18;18855:26;;18927:9;18921:4;18917:20;18913:1;18902:9;18898:17;18891:47;18955:131;19081:4;18955:131;:::i;:::-;18947:139;;18674:419;;;:::o;19099:::-;19265:4;19303:2;19292:9;19288:18;19280:26;;19352:9;19346:4;19342:20;19338:1;19327:9;19323:17;19316:47;19380:131;19506:4;19380:131;:::i;:::-;19372:139;;19099:419;;;:::o;19524:::-;19690:4;19728:2;19717:9;19713:18;19705:26;;19777:9;19771:4;19767:20;19763:1;19752:9;19748:17;19741:47;19805:131;19931:4;19805:131;:::i;:::-;19797:139;;19524:419;;;:::o;19949:::-;20115:4;20153:2;20142:9;20138:18;20130:26;;20202:9;20196:4;20192:20;20188:1;20177:9;20173:17;20166:47;20230:131;20356:4;20230:131;:::i;:::-;20222:139;;19949:419;;;:::o;20374:::-;20540:4;20578:2;20567:9;20563:18;20555:26;;20627:9;20621:4;20617:20;20613:1;20602:9;20598:17;20591:47;20655:131;20781:4;20655:131;:::i;:::-;20647:139;;20374:419;;;:::o;20799:::-;20965:4;21003:2;20992:9;20988:18;20980:26;;21052:9;21046:4;21042:20;21038:1;21027:9;21023:17;21016:47;21080:131;21206:4;21080:131;:::i;:::-;21072:139;;20799:419;;;:::o;21224:::-;21390:4;21428:2;21417:9;21413:18;21405:26;;21477:9;21471:4;21467:20;21463:1;21452:9;21448:17;21441:47;21505:131;21631:4;21505:131;:::i;:::-;21497:139;;21224:419;;;:::o;21649:::-;21815:4;21853:2;21842:9;21838:18;21830:26;;21902:9;21896:4;21892:20;21888:1;21877:9;21873:17;21866:47;21930:131;22056:4;21930:131;:::i;:::-;21922:139;;21649:419;;;:::o;22074:::-;22240:4;22278:2;22267:9;22263:18;22255:26;;22327:9;22321:4;22317:20;22313:1;22302:9;22298:17;22291:47;22355:131;22481:4;22355:131;:::i;:::-;22347:139;;22074:419;;;:::o;22499:::-;22665:4;22703:2;22692:9;22688:18;22680:26;;22752:9;22746:4;22742:20;22738:1;22727:9;22723:17;22716:47;22780:131;22906:4;22780:131;:::i;:::-;22772:139;;22499:419;;;:::o;22924:::-;23090:4;23128:2;23117:9;23113:18;23105:26;;23177:9;23171:4;23167:20;23163:1;23152:9;23148:17;23141:47;23205:131;23331:4;23205:131;:::i;:::-;23197:139;;22924:419;;;:::o;23349:::-;23515:4;23553:2;23542:9;23538:18;23530:26;;23602:9;23596:4;23592:20;23588:1;23577:9;23573:17;23566:47;23630:131;23756:4;23630:131;:::i;:::-;23622:139;;23349:419;;;:::o;23774:::-;23940:4;23978:2;23967:9;23963:18;23955:26;;24027:9;24021:4;24017:20;24013:1;24002:9;23998:17;23991:47;24055:131;24181:4;24055:131;:::i;:::-;24047:139;;23774:419;;;:::o;24199:::-;24365:4;24403:2;24392:9;24388:18;24380:26;;24452:9;24446:4;24442:20;24438:1;24427:9;24423:17;24416:47;24480:131;24606:4;24480:131;:::i;:::-;24472:139;;24199:419;;;:::o;24624:::-;24790:4;24828:2;24817:9;24813:18;24805:26;;24877:9;24871:4;24867:20;24863:1;24852:9;24848:17;24841:47;24905:131;25031:4;24905:131;:::i;:::-;24897:139;;24624:419;;;:::o;25049:::-;25215:4;25253:2;25242:9;25238:18;25230:26;;25302:9;25296:4;25292:20;25288:1;25277:9;25273:17;25266:47;25330:131;25456:4;25330:131;:::i;:::-;25322:139;;25049:419;;;:::o;25474:::-;25640:4;25678:2;25667:9;25663:18;25655:26;;25727:9;25721:4;25717:20;25713:1;25702:9;25698:17;25691:47;25755:131;25881:4;25755:131;:::i;:::-;25747:139;;25474:419;;;:::o;25899:::-;26065:4;26103:2;26092:9;26088:18;26080:26;;26152:9;26146:4;26142:20;26138:1;26127:9;26123:17;26116:47;26180:131;26306:4;26180:131;:::i;:::-;26172:139;;25899:419;;;:::o;26324:::-;26490:4;26528:2;26517:9;26513:18;26505:26;;26577:9;26571:4;26567:20;26563:1;26552:9;26548:17;26541:47;26605:131;26731:4;26605:131;:::i;:::-;26597:139;;26324:419;;;:::o;26749:::-;26915:4;26953:2;26942:9;26938:18;26930:26;;27002:9;26996:4;26992:20;26988:1;26977:9;26973:17;26966:47;27030:131;27156:4;27030:131;:::i;:::-;27022:139;;26749:419;;;:::o;27174:::-;27340:4;27378:2;27367:9;27363:18;27355:26;;27427:9;27421:4;27417:20;27413:1;27402:9;27398:17;27391:47;27455:131;27581:4;27455:131;:::i;:::-;27447:139;;27174:419;;;:::o;27599:::-;27765:4;27803:2;27792:9;27788:18;27780:26;;27852:9;27846:4;27842:20;27838:1;27827:9;27823:17;27816:47;27880:131;28006:4;27880:131;:::i;:::-;27872:139;;27599:419;;;:::o;28024:222::-;28117:4;28155:2;28144:9;28140:18;28132:26;;28168:71;28236:1;28225:9;28221:17;28212:6;28168:71;:::i;:::-;28024:222;;;;:::o;28252:129::-;28286:6;28313:20;;:::i;:::-;28303:30;;28342:33;28370:4;28362:6;28342:33;:::i;:::-;28252:129;;;:::o;28387:75::-;28420:6;28453:2;28447:9;28437:19;;28387:75;:::o;28468:307::-;28529:4;28619:18;28611:6;28608:30;28605:56;;;28641:18;;:::i;:::-;28605:56;28679:29;28701:6;28679:29;:::i;:::-;28671:37;;28763:4;28757;28753:15;28745:23;;28468:307;;;:::o;28781:308::-;28843:4;28933:18;28925:6;28922:30;28919:56;;;28955:18;;:::i;:::-;28919:56;28993:29;29015:6;28993:29;:::i;:::-;28985:37;;29077:4;29071;29067:15;29059:23;;28781:308;;;:::o;29095:98::-;29146:6;29180:5;29174:12;29164:22;;29095:98;;;:::o;29199:99::-;29251:6;29285:5;29279:12;29269:22;;29199:99;;;:::o;29304:168::-;29387:11;29421:6;29416:3;29409:19;29461:4;29456:3;29452:14;29437:29;;29304:168;;;;:::o;29478:169::-;29562:11;29596:6;29591:3;29584:19;29636:4;29631:3;29627:14;29612:29;;29478:169;;;;:::o;29653:148::-;29755:11;29792:3;29777:18;;29653:148;;;;:::o;29807:305::-;29847:3;29866:20;29884:1;29866:20;:::i;:::-;29861:25;;29900:20;29918:1;29900:20;:::i;:::-;29895:25;;30054:1;29986:66;29982:74;29979:1;29976:81;29973:107;;;30060:18;;:::i;:::-;29973:107;30104:1;30101;30097:9;30090:16;;29807:305;;;;:::o;30118:185::-;30158:1;30175:20;30193:1;30175:20;:::i;:::-;30170:25;;30209:20;30227:1;30209:20;:::i;:::-;30204:25;;30248:1;30238:35;;30253:18;;:::i;:::-;30238:35;30295:1;30292;30288:9;30283:14;;30118:185;;;;:::o;30309:191::-;30349:4;30369:20;30387:1;30369:20;:::i;:::-;30364:25;;30403:20;30421:1;30403:20;:::i;:::-;30398:25;;30442:1;30439;30436:8;30433:34;;;30447:18;;:::i;:::-;30433:34;30492:1;30489;30485:9;30477:17;;30309:191;;;;:::o;30506:96::-;30543:7;30572:24;30590:5;30572:24;:::i;:::-;30561:35;;30506:96;;;:::o;30608:90::-;30642:7;30685:5;30678:13;30671:21;30660:32;;30608:90;;;:::o;30704:149::-;30740:7;30780:66;30773:5;30769:78;30758:89;;30704:149;;;:::o;30859:126::-;30896:7;30936:42;30929:5;30925:54;30914:65;;30859:126;;;:::o;30991:77::-;31028:7;31057:5;31046:16;;30991:77;;;:::o;31074:154::-;31158:6;31153:3;31148;31135:30;31220:1;31211:6;31206:3;31202:16;31195:27;31074:154;;;:::o;31234:307::-;31302:1;31312:113;31326:6;31323:1;31320:13;31312:113;;;31411:1;31406:3;31402:11;31396:18;31392:1;31387:3;31383:11;31376:39;31348:2;31345:1;31341:10;31336:15;;31312:113;;;31443:6;31440:1;31437:13;31434:101;;;31523:1;31514:6;31509:3;31505:16;31498:27;31434:101;31283:258;31234:307;;;:::o;31547:320::-;31591:6;31628:1;31622:4;31618:12;31608:22;;31675:1;31669:4;31665:12;31696:18;31686:81;;31752:4;31744:6;31740:17;31730:27;;31686:81;31814:2;31806:6;31803:14;31783:18;31780:38;31777:84;;;31833:18;;:::i;:::-;31777:84;31598:269;31547:320;;;:::o;31873:281::-;31956:27;31978:4;31956:27;:::i;:::-;31948:6;31944:40;32086:6;32074:10;32071:22;32050:18;32038:10;32035:34;32032:62;32029:88;;;32097:18;;:::i;:::-;32029:88;32137:10;32133:2;32126:22;31916:238;31873:281;;:::o;32160:233::-;32199:3;32222:24;32240:5;32222:24;:::i;:::-;32213:33;;32268:66;32261:5;32258:77;32255:103;;;32338:18;;:::i;:::-;32255:103;32385:1;32378:5;32374:13;32367:20;;32160:233;;;:::o;32399:176::-;32431:1;32448:20;32466:1;32448:20;:::i;:::-;32443:25;;32482:20;32500:1;32482:20;:::i;:::-;32477:25;;32521:1;32511:35;;32526:18;;:::i;:::-;32511:35;32567:1;32564;32560:9;32555:14;;32399:176;;;;:::o;32581:180::-;32629:77;32626:1;32619:88;32726:4;32723:1;32716:15;32750:4;32747:1;32740:15;32767:180;32815:77;32812:1;32805:88;32912:4;32909:1;32902:15;32936:4;32933:1;32926:15;32953:180;33001:77;32998:1;32991:88;33098:4;33095:1;33088:15;33122:4;33119:1;33112:15;33139:180;33187:77;33184:1;33177:88;33284:4;33281:1;33274:15;33308:4;33305:1;33298:15;33325:180;33373:77;33370:1;33363:88;33470:4;33467:1;33460:15;33494:4;33491:1;33484:15;33511:180;33559:77;33556:1;33549:88;33656:4;33653:1;33646:15;33680:4;33677:1;33670:15;33697:117;33806:1;33803;33796:12;33820:117;33929:1;33926;33919:12;33943:117;34052:1;34049;34042:12;34066:117;34175:1;34172;34165:12;34189:102;34230:6;34281:2;34277:7;34272:2;34265:5;34261:14;34257:28;34247:38;;34189:102;;;:::o;34297:170::-;34437:22;34433:1;34425:6;34421:14;34414:46;34297:170;:::o;34473:230::-;34613:34;34609:1;34601:6;34597:14;34590:58;34682:13;34677:2;34669:6;34665:15;34658:38;34473:230;:::o;34709:237::-;34849:34;34845:1;34837:6;34833:14;34826:58;34918:20;34913:2;34905:6;34901:15;34894:45;34709:237;:::o;34952:225::-;35092:34;35088:1;35080:6;35076:14;35069:58;35161:8;35156:2;35148:6;35144:15;35137:33;34952:225;:::o;35183:224::-;35323:34;35319:1;35311:6;35307:14;35300:58;35392:7;35387:2;35379:6;35375:15;35368:32;35183:224;:::o;35413:178::-;35553:30;35549:1;35541:6;35537:14;35530:54;35413:178;:::o;35597:223::-;35737:34;35733:1;35725:6;35721:14;35714:58;35806:6;35801:2;35793:6;35789:15;35782:31;35597:223;:::o;35826:175::-;35966:27;35962:1;35954:6;35950:14;35943:51;35826:175;:::o;36007:231::-;36147:34;36143:1;36135:6;36131:14;36124:58;36216:14;36211:2;36203:6;36199:15;36192:39;36007:231;:::o;36244:181::-;36384:33;36380:1;36372:6;36368:14;36361:57;36244:181;:::o;36431:166::-;36571:18;36567:1;36559:6;36555:14;36548:42;36431:166;:::o;36603:243::-;36743:34;36739:1;36731:6;36727:14;36720:58;36812:26;36807:2;36799:6;36795:15;36788:51;36603:243;:::o;36852:229::-;36992:34;36988:1;36980:6;36976:14;36969:58;37061:12;37056:2;37048:6;37044:15;37037:37;36852:229;:::o;37087:228::-;37227:34;37223:1;37215:6;37211:14;37204:58;37296:11;37291:2;37283:6;37279:15;37272:36;37087:228;:::o;37321:182::-;37461:34;37457:1;37449:6;37445:14;37438:58;37321:182;:::o;37509:231::-;37649:34;37645:1;37637:6;37633:14;37626:58;37718:14;37713:2;37705:6;37701:15;37694:39;37509:231;:::o;37746:182::-;37886:34;37882:1;37874:6;37870:14;37863:58;37746:182;:::o;37934:234::-;38074:34;38070:1;38062:6;38058:14;38051:58;38143:17;38138:2;38130:6;38126:15;38119:42;37934:234;:::o;38174:220::-;38314:34;38310:1;38302:6;38298:14;38291:58;38383:3;38378:2;38370:6;38366:15;38359:28;38174:220;:::o;38400:236::-;38540:34;38536:1;38528:6;38524:14;38517:58;38609:19;38604:2;38596:6;38592:15;38585:44;38400:236;:::o;38642:231::-;38782:34;38778:1;38770:6;38766:14;38759:58;38851:14;38846:2;38838:6;38834:15;38827:39;38642:231;:::o;38879:235::-;39019:34;39015:1;39007:6;39003:14;38996:58;39088:18;39083:2;39075:6;39071:15;39064:43;38879:235;:::o;39120:122::-;39193:24;39211:5;39193:24;:::i;:::-;39186:5;39183:35;39173:63;;39232:1;39229;39222:12;39173:63;39120:122;:::o;39248:116::-;39318:21;39333:5;39318:21;:::i;:::-;39311:5;39308:32;39298:60;;39354:1;39351;39344:12;39298:60;39248:116;:::o;39370:120::-;39442:23;39459:5;39442:23;:::i;:::-;39435:5;39432:34;39422:62;;39480:1;39477;39470:12;39422:62;39370:120;:::o;39496:122::-;39569:24;39587:5;39569:24;:::i;:::-;39562:5;39559:35;39549:63;;39608:1;39605;39598:12;39549:63;39496:122;:::o

Swarm Source

ipfs://19965c6572352c258c85a1f99b62f02ac685d2eaf62ad3b9e5009c7f722edf5e
Loading...
Loading
Loading...
Loading
[ 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.