ERC-721
Overview
Max Total Supply
0 FCells
Holders
5
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 FCellsLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
FluorescentCells
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-18 */ // SPDX-License-Identifier: None pragma solidity ^0.8.0; 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); } } 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; } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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); } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } 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); } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract FluorescentCells is ERC721, Ownable { using SafeMath for uint256; using Address for uint256; using Counters for Counters.Counter; Counters.Counter private _tokenSupply; string private baseURI; uint256 public constant supplyLimit = 501; bool public mintOpen = false; constructor(string memory name, string memory symbol) ERC721(name, symbol) { } function mint(uint numberOfMints) public payable { uint256 supply = _tokenSupply.current() + 1; require(mintOpen, "Sale needs to be active"); require(numberOfMints > 0 && numberOfMints < 4, "Invalid purchase amount"); require(supply.add(numberOfMints) <= supplyLimit, "Payment exceeds total supply"); for(uint256 i = 1; i <= numberOfMints; i++){ _safeMint(msg.sender, supply + i); _tokenSupply.increment(); } } function _baseURI() internal view override returns (string memory) { return baseURI; } function setBaseURI(string calldata newBaseUri) external onlyOwner { baseURI = newBaseUri; } function toggleSale() public onlyOwner { mintOpen = !mintOpen; } function returnbalance() external view returns(uint256){ uint256 balance = address(this).balance; return balance; } function returnCounter() external view returns(uint256){ return _tokenSupply.current(); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override { ERC721.safeTransferFrom(from, to, tokenId, data); } function withdraw() external onlyOwner { require(address(this).balance > 0, "EMPTY_BALANCE"); uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"returnbalance","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseUri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supplyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600960006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405162003958380380620039588339818101604052810190620000529190620003cb565b818181600090805190602001906200006c9291906200017e565b508060019080519060200190620000859291906200017e565b505050620000a86200009c620000b060201b60201c565b620000b860201b60201c565b5050620004b5565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200018c906200047f565b90600052602060002090601f016020900481019282620001b05760008555620001fc565b82601f10620001cb57805160ff1916838001178555620001fc565b82800160010185558215620001fc579182015b82811115620001fb578251825591602001919060010190620001de565b5b5090506200020b91906200020f565b5090565b5b808211156200022a57600081600090555060010162000210565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000297826200024c565b810181811067ffffffffffffffff82111715620002b957620002b86200025d565b5b80604052505050565b6000620002ce6200022e565b9050620002dc82826200028c565b919050565b600067ffffffffffffffff821115620002ff57620002fe6200025d565b5b6200030a826200024c565b9050602081019050919050565b60005b83811015620003375780820151818401526020810190506200031a565b8381111562000347576000848401525b50505050565b6000620003646200035e84620002e1565b620002c2565b90508281526020810184848401111562000383576200038262000247565b5b6200039084828562000317565b509392505050565b600082601f830112620003b057620003af62000242565b5b8151620003c28482602086016200034d565b91505092915050565b60008060408385031215620003e557620003e462000238565b5b600083015167ffffffffffffffff8111156200040657620004056200023d565b5b620004148582860162000398565b925050602083015167ffffffffffffffff8111156200043857620004376200023d565b5b620004468582860162000398565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200049857607f821691505b60208210811415620004af57620004ae62000450565b5b50919050565b61349380620004c56000396000f3fe60806040526004361061014b5760003560e01c8063715018a6116100b6578063a4f58a351161006f578063a4f58a3514610449578063b88d4fde14610474578063c87b56dd1461049d578063e985e9c5146104da578063ea601ce014610517578063f2fde38b146105425761014b565b8063715018a6146103805780637d8966e4146103975780638da5cb5b146103ae57806395d89b41146103d9578063a0712d6814610404578063a22cb465146104205761014b565b806324bbd0491161010857806324bbd049146102725780633ccfd60b1461029d57806342842e0e146102b457806355f804b3146102dd5780636352211e1461030657806370a08231146103435761014b565b806301ffc9a71461015057806306fdde031461018d578063081812fc146101b8578063095ea7b3146101f557806319d1997a1461021e57806323b872dd14610249575b600080fd5b34801561015c57600080fd5b50610177600480360381019061017291906120bb565b61056b565b6040516101849190612103565b60405180910390f35b34801561019957600080fd5b506101a261064d565b6040516101af91906121b7565b60405180910390f35b3480156101c457600080fd5b506101df60048036038101906101da919061220f565b6106df565b6040516101ec919061227d565b60405180910390f35b34801561020157600080fd5b5061021c600480360381019061021791906122c4565b610764565b005b34801561022a57600080fd5b5061023361087c565b6040516102409190612313565b60405180910390f35b34801561025557600080fd5b50610270600480360381019061026b919061232e565b610882565b005b34801561027e57600080fd5b506102876108e2565b6040516102949190612103565b60405180910390f35b3480156102a957600080fd5b506102b26108f5565b005b3480156102c057600080fd5b506102db60048036038101906102d6919061232e565b610a03565b005b3480156102e957600080fd5b5061030460048036038101906102ff91906123e6565b610a23565b005b34801561031257600080fd5b5061032d6004803603810190610328919061220f565b610ab5565b60405161033a919061227d565b60405180910390f35b34801561034f57600080fd5b5061036a60048036038101906103659190612433565b610b67565b6040516103779190612313565b60405180910390f35b34801561038c57600080fd5b50610395610c1f565b005b3480156103a357600080fd5b506103ac610ca7565b005b3480156103ba57600080fd5b506103c3610d4f565b6040516103d0919061227d565b60405180910390f35b3480156103e557600080fd5b506103ee610d79565b6040516103fb91906121b7565b60405180910390f35b61041e6004803603810190610419919061220f565b610e0b565b005b34801561042c57600080fd5b506104476004803603810190610442919061248c565b610f5f565b005b34801561045557600080fd5b5061045e6110e0565b60405161046b9190612313565b60405180910390f35b34801561048057600080fd5b5061049b600480360381019061049691906125fc565b6110ed565b005b3480156104a957600080fd5b506104c460048036038101906104bf919061220f565b6110ff565b6040516104d191906121b7565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc919061267f565b6111a6565b60405161050e9190612103565b60405180910390f35b34801561052357600080fd5b5061052c61123a565b6040516105399190612313565b60405180910390f35b34801561054e57600080fd5b5061056960048036038101906105649190612433565b61124b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061063657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610646575061064582611343565b5b9050919050565b60606000805461065c906126ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610688906126ee565b80156106d55780601f106106aa576101008083540402835291602001916106d5565b820191906000526020600020905b8154815290600101906020018083116106b857829003601f168201915b5050505050905090565b60006106ea826113ad565b610729576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072090612792565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061076f82610ab5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d790612824565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107ff611419565b73ffffffffffffffffffffffffffffffffffffffff16148061082e575061082d81610828611419565b6111a6565b5b61086d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610864906128b6565b60405180910390fd5b6108778383611421565b505050565b6101f581565b61089361088d611419565b826114da565b6108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c990612948565b60405180910390fd5b6108dd8383836115b8565b505050565b600960009054906101000a900460ff1681565b6108fd611419565b73ffffffffffffffffffffffffffffffffffffffff1661091b610d4f565b73ffffffffffffffffffffffffffffffffffffffff1614610971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610968906129b4565b60405180910390fd5b600047116109b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab90612a20565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156109ff573d6000803e3d6000fd5b5050565b610a1e838383604051806020016040528060008152506110ed565b505050565b610a2b611419565b73ffffffffffffffffffffffffffffffffffffffff16610a49610d4f565b73ffffffffffffffffffffffffffffffffffffffff1614610a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a96906129b4565b60405180910390fd5b818160089190610ab0929190611fac565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5590612ab2565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcf90612b44565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c27611419565b73ffffffffffffffffffffffffffffffffffffffff16610c45610d4f565b73ffffffffffffffffffffffffffffffffffffffff1614610c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c92906129b4565b60405180910390fd5b610ca56000611814565b565b610caf611419565b73ffffffffffffffffffffffffffffffffffffffff16610ccd610d4f565b73ffffffffffffffffffffffffffffffffffffffff1614610d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1a906129b4565b60405180910390fd5b600960009054906101000a900460ff1615600960006101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d88906126ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610db4906126ee565b8015610e015780601f10610dd657610100808354040283529160200191610e01565b820191906000526020600020905b815481529060010190602001808311610de457829003601f168201915b5050505050905090565b60006001610e1960076118da565b610e239190612b93565b9050600960009054906101000a900460ff16610e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6b90612c35565b60405180910390fd5b600082118015610e845750600482105b610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba90612ca1565b60405180910390fd5b6101f5610ed983836118e890919063ffffffff16565b1115610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190612d0d565b60405180910390fd5b6000600190505b828111610f5a57610f3d338284610f389190612b93565b6118fe565b610f47600761191c565b8080610f5290612d2d565b915050610f21565b505050565b610f67611419565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc90612dc2565b60405180910390fd5b8060056000610fe2611419565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661108f611419565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110d49190612103565b60405180910390a35050565b6000804790508091505090565b6110f984848484611932565b50505050565b606061110a826113ad565b611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090612e54565b60405180910390fd5b6000611153611994565b90506000815111611173576040518060200160405280600081525061119e565b8061117d84611a26565b60405160200161118e929190612eb0565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600061124660076118da565b905090565b611253611419565b73ffffffffffffffffffffffffffffffffffffffff16611271610d4f565b73ffffffffffffffffffffffffffffffffffffffff16146112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be906129b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132e90612f46565b60405180910390fd5b61134081611814565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661149483610ab5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006114e5826113ad565b611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b90612fd8565b60405180910390fd5b600061152f83610ab5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061159e57508373ffffffffffffffffffffffffffffffffffffffff16611586846106df565b73ffffffffffffffffffffffffffffffffffffffff16145b806115af57506115ae81856111a6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166115d882610ab5565b73ffffffffffffffffffffffffffffffffffffffff161461162e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116259061306a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561169e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611695906130fc565b60405180910390fd5b6116a9838383611b87565b6116b4600082611421565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611704919061311c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461175b9190612b93565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b600081836118f69190612b93565b905092915050565b611918828260405180602001604052806000815250611b8c565b5050565b6001816000016000828254019250508190555050565b61194361193d611419565b836114da565b611982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197990612948565b60405180910390fd5b61198e84848484611be7565b50505050565b6060600880546119a3906126ee565b80601f01602080910402602001604051908101604052809291908181526020018280546119cf906126ee565b8015611a1c5780601f106119f157610100808354040283529160200191611a1c565b820191906000526020600020905b8154815290600101906020018083116119ff57829003601f168201915b5050505050905090565b60606000821415611a6e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611b82565b600082905060005b60008214611aa0578080611a8990612d2d565b915050600a82611a99919061317f565b9150611a76565b60008167ffffffffffffffff811115611abc57611abb6124d1565b5b6040519080825280601f01601f191660200182016040528015611aee5781602001600182028036833780820191505090505b5090505b60008514611b7b57600182611b07919061311c565b9150600a85611b1691906131b0565b6030611b229190612b93565b60f81b818381518110611b3857611b376131e1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611b74919061317f565b9450611af2565b8093505050505b919050565b505050565b611b968383611c43565b611ba36000848484611e11565b611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd990613282565b60405180910390fd5b505050565b611bf28484846115b8565b611bfe84848484611e11565b611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613282565b60405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa906132ee565b60405180910390fd5b611cbc816113ad565b15611cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf39061335a565b60405180910390fd5b611d0860008383611b87565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d589190612b93565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000611e328473ffffffffffffffffffffffffffffffffffffffff16611f99565b15611f8c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e5b611419565b8786866040518563ffffffff1660e01b8152600401611e7d94939291906133cf565b6020604051808303816000875af1925050508015611eb957506040513d601f19601f82011682018060405250810190611eb69190613430565b60015b611f3c573d8060008114611ee9576040519150601f19603f3d011682016040523d82523d6000602084013e611eee565b606091505b50600081511415611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b90613282565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f91565b600190505b949350505050565b600080823b905060008111915050919050565b828054611fb8906126ee565b90600052602060002090601f016020900481019282611fda5760008555612021565b82601f10611ff357803560ff1916838001178555612021565b82800160010185558215612021579182015b82811115612020578235825591602001919060010190612005565b5b50905061202e9190612032565b5090565b5b8082111561204b576000816000905550600101612033565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61209881612063565b81146120a357600080fd5b50565b6000813590506120b58161208f565b92915050565b6000602082840312156120d1576120d0612059565b5b60006120df848285016120a6565b91505092915050565b60008115159050919050565b6120fd816120e8565b82525050565b600060208201905061211860008301846120f4565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561215857808201518184015260208101905061213d565b83811115612167576000848401525b50505050565b6000601f19601f8301169050919050565b60006121898261211e565b6121938185612129565b93506121a381856020860161213a565b6121ac8161216d565b840191505092915050565b600060208201905081810360008301526121d1818461217e565b905092915050565b6000819050919050565b6121ec816121d9565b81146121f757600080fd5b50565b600081359050612209816121e3565b92915050565b60006020828403121561222557612224612059565b5b6000612233848285016121fa565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122678261223c565b9050919050565b6122778161225c565b82525050565b6000602082019050612292600083018461226e565b92915050565b6122a18161225c565b81146122ac57600080fd5b50565b6000813590506122be81612298565b92915050565b600080604083850312156122db576122da612059565b5b60006122e9858286016122af565b92505060206122fa858286016121fa565b9150509250929050565b61230d816121d9565b82525050565b60006020820190506123286000830184612304565b92915050565b60008060006060848603121561234757612346612059565b5b6000612355868287016122af565b9350506020612366868287016122af565b9250506040612377868287016121fa565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126123a6576123a5612381565b5b8235905067ffffffffffffffff8111156123c3576123c2612386565b5b6020830191508360018202830111156123df576123de61238b565b5b9250929050565b600080602083850312156123fd576123fc612059565b5b600083013567ffffffffffffffff81111561241b5761241a61205e565b5b61242785828601612390565b92509250509250929050565b60006020828403121561244957612448612059565b5b6000612457848285016122af565b91505092915050565b612469816120e8565b811461247457600080fd5b50565b60008135905061248681612460565b92915050565b600080604083850312156124a3576124a2612059565b5b60006124b1858286016122af565b92505060206124c285828601612477565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6125098261216d565b810181811067ffffffffffffffff82111715612528576125276124d1565b5b80604052505050565b600061253b61204f565b90506125478282612500565b919050565b600067ffffffffffffffff821115612567576125666124d1565b5b6125708261216d565b9050602081019050919050565b82818337600083830152505050565b600061259f61259a8461254c565b612531565b9050828152602081018484840111156125bb576125ba6124cc565b5b6125c684828561257d565b509392505050565b600082601f8301126125e3576125e2612381565b5b81356125f384826020860161258c565b91505092915050565b6000806000806080858703121561261657612615612059565b5b6000612624878288016122af565b9450506020612635878288016122af565b9350506040612646878288016121fa565b925050606085013567ffffffffffffffff8111156126675761266661205e565b5b612673878288016125ce565b91505092959194509250565b6000806040838503121561269657612695612059565b5b60006126a4858286016122af565b92505060206126b5858286016122af565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061270657607f821691505b6020821081141561271a576127196126bf565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061277c602c83612129565b915061278782612720565b604082019050919050565b600060208201905081810360008301526127ab8161276f565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061280e602183612129565b9150612819826127b2565b604082019050919050565b6000602082019050818103600083015261283d81612801565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006128a0603883612129565b91506128ab82612844565b604082019050919050565b600060208201905081810360008301526128cf81612893565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612932603183612129565b915061293d826128d6565b604082019050919050565b6000602082019050818103600083015261296181612925565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061299e602083612129565b91506129a982612968565b602082019050919050565b600060208201905081810360008301526129cd81612991565b9050919050565b7f454d5054595f42414c414e434500000000000000000000000000000000000000600082015250565b6000612a0a600d83612129565b9150612a15826129d4565b602082019050919050565b60006020820190508181036000830152612a39816129fd565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612a9c602983612129565b9150612aa782612a40565b604082019050919050565b60006020820190508181036000830152612acb81612a8f565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612b2e602a83612129565b9150612b3982612ad2565b604082019050919050565b60006020820190508181036000830152612b5d81612b21565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b9e826121d9565b9150612ba9836121d9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bde57612bdd612b64565b5b828201905092915050565b7f53616c65206e6565647320746f20626520616374697665000000000000000000600082015250565b6000612c1f601783612129565b9150612c2a82612be9565b602082019050919050565b60006020820190508181036000830152612c4e81612c12565b9050919050565b7f496e76616c696420707572636861736520616d6f756e74000000000000000000600082015250565b6000612c8b601783612129565b9150612c9682612c55565b602082019050919050565b60006020820190508181036000830152612cba81612c7e565b9050919050565b7f5061796d656e74206578636565647320746f74616c20737570706c7900000000600082015250565b6000612cf7601c83612129565b9150612d0282612cc1565b602082019050919050565b60006020820190508181036000830152612d2681612cea565b9050919050565b6000612d38826121d9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d6b57612d6a612b64565b5b600182019050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000612dac601983612129565b9150612db782612d76565b602082019050919050565b60006020820190508181036000830152612ddb81612d9f565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000612e3e602f83612129565b9150612e4982612de2565b604082019050919050565b60006020820190508181036000830152612e6d81612e31565b9050919050565b600081905092915050565b6000612e8a8261211e565b612e948185612e74565b9350612ea481856020860161213a565b80840191505092915050565b6000612ebc8285612e7f565b9150612ec88284612e7f565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612f30602683612129565b9150612f3b82612ed4565b604082019050919050565b60006020820190508181036000830152612f5f81612f23565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612fc2602c83612129565b9150612fcd82612f66565b604082019050919050565b60006020820190508181036000830152612ff181612fb5565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613054602983612129565b915061305f82612ff8565b604082019050919050565b6000602082019050818103600083015261308381613047565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006130e6602483612129565b91506130f18261308a565b604082019050919050565b60006020820190508181036000830152613115816130d9565b9050919050565b6000613127826121d9565b9150613132836121d9565b92508282101561314557613144612b64565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061318a826121d9565b9150613195836121d9565b9250826131a5576131a4613150565b5b828204905092915050565b60006131bb826121d9565b91506131c6836121d9565b9250826131d6576131d5613150565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061326c603283612129565b915061327782613210565b604082019050919050565b6000602082019050818103600083015261329b8161325f565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006132d8602083612129565b91506132e3826132a2565b602082019050919050565b60006020820190508181036000830152613307816132cb565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613344601c83612129565b915061334f8261330e565b602082019050919050565b6000602082019050818103600083015261337381613337565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006133a18261337a565b6133ab8185613385565b93506133bb81856020860161213a565b6133c48161216d565b840191505092915050565b60006080820190506133e4600083018761226e565b6133f1602083018661226e565b6133fe6040830185612304565b81810360608301526134108184613396565b905095945050505050565b60008151905061342a8161208f565b92915050565b60006020828403121561344657613445612059565b5b60006134548482850161341b565b9150509291505056fea26469706673582212209a4931bcca31952b8299215eabdff64456de27747ec1745b1ad5381e21d3a7f164736f6c634300080b0033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000010466c756f72657363656e7443656c6c730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064643656c6c730000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061014b5760003560e01c8063715018a6116100b6578063a4f58a351161006f578063a4f58a3514610449578063b88d4fde14610474578063c87b56dd1461049d578063e985e9c5146104da578063ea601ce014610517578063f2fde38b146105425761014b565b8063715018a6146103805780637d8966e4146103975780638da5cb5b146103ae57806395d89b41146103d9578063a0712d6814610404578063a22cb465146104205761014b565b806324bbd0491161010857806324bbd049146102725780633ccfd60b1461029d57806342842e0e146102b457806355f804b3146102dd5780636352211e1461030657806370a08231146103435761014b565b806301ffc9a71461015057806306fdde031461018d578063081812fc146101b8578063095ea7b3146101f557806319d1997a1461021e57806323b872dd14610249575b600080fd5b34801561015c57600080fd5b50610177600480360381019061017291906120bb565b61056b565b6040516101849190612103565b60405180910390f35b34801561019957600080fd5b506101a261064d565b6040516101af91906121b7565b60405180910390f35b3480156101c457600080fd5b506101df60048036038101906101da919061220f565b6106df565b6040516101ec919061227d565b60405180910390f35b34801561020157600080fd5b5061021c600480360381019061021791906122c4565b610764565b005b34801561022a57600080fd5b5061023361087c565b6040516102409190612313565b60405180910390f35b34801561025557600080fd5b50610270600480360381019061026b919061232e565b610882565b005b34801561027e57600080fd5b506102876108e2565b6040516102949190612103565b60405180910390f35b3480156102a957600080fd5b506102b26108f5565b005b3480156102c057600080fd5b506102db60048036038101906102d6919061232e565b610a03565b005b3480156102e957600080fd5b5061030460048036038101906102ff91906123e6565b610a23565b005b34801561031257600080fd5b5061032d6004803603810190610328919061220f565b610ab5565b60405161033a919061227d565b60405180910390f35b34801561034f57600080fd5b5061036a60048036038101906103659190612433565b610b67565b6040516103779190612313565b60405180910390f35b34801561038c57600080fd5b50610395610c1f565b005b3480156103a357600080fd5b506103ac610ca7565b005b3480156103ba57600080fd5b506103c3610d4f565b6040516103d0919061227d565b60405180910390f35b3480156103e557600080fd5b506103ee610d79565b6040516103fb91906121b7565b60405180910390f35b61041e6004803603810190610419919061220f565b610e0b565b005b34801561042c57600080fd5b506104476004803603810190610442919061248c565b610f5f565b005b34801561045557600080fd5b5061045e6110e0565b60405161046b9190612313565b60405180910390f35b34801561048057600080fd5b5061049b600480360381019061049691906125fc565b6110ed565b005b3480156104a957600080fd5b506104c460048036038101906104bf919061220f565b6110ff565b6040516104d191906121b7565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc919061267f565b6111a6565b60405161050e9190612103565b60405180910390f35b34801561052357600080fd5b5061052c61123a565b6040516105399190612313565b60405180910390f35b34801561054e57600080fd5b5061056960048036038101906105649190612433565b61124b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061063657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610646575061064582611343565b5b9050919050565b60606000805461065c906126ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610688906126ee565b80156106d55780601f106106aa576101008083540402835291602001916106d5565b820191906000526020600020905b8154815290600101906020018083116106b857829003601f168201915b5050505050905090565b60006106ea826113ad565b610729576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072090612792565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061076f82610ab5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d790612824565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107ff611419565b73ffffffffffffffffffffffffffffffffffffffff16148061082e575061082d81610828611419565b6111a6565b5b61086d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610864906128b6565b60405180910390fd5b6108778383611421565b505050565b6101f581565b61089361088d611419565b826114da565b6108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c990612948565b60405180910390fd5b6108dd8383836115b8565b505050565b600960009054906101000a900460ff1681565b6108fd611419565b73ffffffffffffffffffffffffffffffffffffffff1661091b610d4f565b73ffffffffffffffffffffffffffffffffffffffff1614610971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610968906129b4565b60405180910390fd5b600047116109b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab90612a20565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156109ff573d6000803e3d6000fd5b5050565b610a1e838383604051806020016040528060008152506110ed565b505050565b610a2b611419565b73ffffffffffffffffffffffffffffffffffffffff16610a49610d4f565b73ffffffffffffffffffffffffffffffffffffffff1614610a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a96906129b4565b60405180910390fd5b818160089190610ab0929190611fac565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5590612ab2565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcf90612b44565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c27611419565b73ffffffffffffffffffffffffffffffffffffffff16610c45610d4f565b73ffffffffffffffffffffffffffffffffffffffff1614610c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c92906129b4565b60405180910390fd5b610ca56000611814565b565b610caf611419565b73ffffffffffffffffffffffffffffffffffffffff16610ccd610d4f565b73ffffffffffffffffffffffffffffffffffffffff1614610d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1a906129b4565b60405180910390fd5b600960009054906101000a900460ff1615600960006101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d88906126ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610db4906126ee565b8015610e015780601f10610dd657610100808354040283529160200191610e01565b820191906000526020600020905b815481529060010190602001808311610de457829003601f168201915b5050505050905090565b60006001610e1960076118da565b610e239190612b93565b9050600960009054906101000a900460ff16610e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6b90612c35565b60405180910390fd5b600082118015610e845750600482105b610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba90612ca1565b60405180910390fd5b6101f5610ed983836118e890919063ffffffff16565b1115610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190612d0d565b60405180910390fd5b6000600190505b828111610f5a57610f3d338284610f389190612b93565b6118fe565b610f47600761191c565b8080610f5290612d2d565b915050610f21565b505050565b610f67611419565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc90612dc2565b60405180910390fd5b8060056000610fe2611419565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661108f611419565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110d49190612103565b60405180910390a35050565b6000804790508091505090565b6110f984848484611932565b50505050565b606061110a826113ad565b611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090612e54565b60405180910390fd5b6000611153611994565b90506000815111611173576040518060200160405280600081525061119e565b8061117d84611a26565b60405160200161118e929190612eb0565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600061124660076118da565b905090565b611253611419565b73ffffffffffffffffffffffffffffffffffffffff16611271610d4f565b73ffffffffffffffffffffffffffffffffffffffff16146112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be906129b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132e90612f46565b60405180910390fd5b61134081611814565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661149483610ab5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006114e5826113ad565b611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b90612fd8565b60405180910390fd5b600061152f83610ab5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061159e57508373ffffffffffffffffffffffffffffffffffffffff16611586846106df565b73ffffffffffffffffffffffffffffffffffffffff16145b806115af57506115ae81856111a6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166115d882610ab5565b73ffffffffffffffffffffffffffffffffffffffff161461162e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116259061306a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561169e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611695906130fc565b60405180910390fd5b6116a9838383611b87565b6116b4600082611421565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611704919061311c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461175b9190612b93565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b600081836118f69190612b93565b905092915050565b611918828260405180602001604052806000815250611b8c565b5050565b6001816000016000828254019250508190555050565b61194361193d611419565b836114da565b611982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197990612948565b60405180910390fd5b61198e84848484611be7565b50505050565b6060600880546119a3906126ee565b80601f01602080910402602001604051908101604052809291908181526020018280546119cf906126ee565b8015611a1c5780601f106119f157610100808354040283529160200191611a1c565b820191906000526020600020905b8154815290600101906020018083116119ff57829003601f168201915b5050505050905090565b60606000821415611a6e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611b82565b600082905060005b60008214611aa0578080611a8990612d2d565b915050600a82611a99919061317f565b9150611a76565b60008167ffffffffffffffff811115611abc57611abb6124d1565b5b6040519080825280601f01601f191660200182016040528015611aee5781602001600182028036833780820191505090505b5090505b60008514611b7b57600182611b07919061311c565b9150600a85611b1691906131b0565b6030611b229190612b93565b60f81b818381518110611b3857611b376131e1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611b74919061317f565b9450611af2565b8093505050505b919050565b505050565b611b968383611c43565b611ba36000848484611e11565b611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd990613282565b60405180910390fd5b505050565b611bf28484846115b8565b611bfe84848484611e11565b611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613282565b60405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa906132ee565b60405180910390fd5b611cbc816113ad565b15611cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf39061335a565b60405180910390fd5b611d0860008383611b87565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d589190612b93565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000611e328473ffffffffffffffffffffffffffffffffffffffff16611f99565b15611f8c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e5b611419565b8786866040518563ffffffff1660e01b8152600401611e7d94939291906133cf565b6020604051808303816000875af1925050508015611eb957506040513d601f19601f82011682018060405250810190611eb69190613430565b60015b611f3c573d8060008114611ee9576040519150601f19603f3d011682016040523d82523d6000602084013e611eee565b606091505b50600081511415611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b90613282565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f91565b600190505b949350505050565b600080823b905060008111915050919050565b828054611fb8906126ee565b90600052602060002090601f016020900481019282611fda5760008555612021565b82601f10611ff357803560ff1916838001178555612021565b82800160010185558215612021579182015b82811115612020578235825591602001919060010190612005565b5b50905061202e9190612032565b5090565b5b8082111561204b576000816000905550600101612033565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61209881612063565b81146120a357600080fd5b50565b6000813590506120b58161208f565b92915050565b6000602082840312156120d1576120d0612059565b5b60006120df848285016120a6565b91505092915050565b60008115159050919050565b6120fd816120e8565b82525050565b600060208201905061211860008301846120f4565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561215857808201518184015260208101905061213d565b83811115612167576000848401525b50505050565b6000601f19601f8301169050919050565b60006121898261211e565b6121938185612129565b93506121a381856020860161213a565b6121ac8161216d565b840191505092915050565b600060208201905081810360008301526121d1818461217e565b905092915050565b6000819050919050565b6121ec816121d9565b81146121f757600080fd5b50565b600081359050612209816121e3565b92915050565b60006020828403121561222557612224612059565b5b6000612233848285016121fa565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122678261223c565b9050919050565b6122778161225c565b82525050565b6000602082019050612292600083018461226e565b92915050565b6122a18161225c565b81146122ac57600080fd5b50565b6000813590506122be81612298565b92915050565b600080604083850312156122db576122da612059565b5b60006122e9858286016122af565b92505060206122fa858286016121fa565b9150509250929050565b61230d816121d9565b82525050565b60006020820190506123286000830184612304565b92915050565b60008060006060848603121561234757612346612059565b5b6000612355868287016122af565b9350506020612366868287016122af565b9250506040612377868287016121fa565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126123a6576123a5612381565b5b8235905067ffffffffffffffff8111156123c3576123c2612386565b5b6020830191508360018202830111156123df576123de61238b565b5b9250929050565b600080602083850312156123fd576123fc612059565b5b600083013567ffffffffffffffff81111561241b5761241a61205e565b5b61242785828601612390565b92509250509250929050565b60006020828403121561244957612448612059565b5b6000612457848285016122af565b91505092915050565b612469816120e8565b811461247457600080fd5b50565b60008135905061248681612460565b92915050565b600080604083850312156124a3576124a2612059565b5b60006124b1858286016122af565b92505060206124c285828601612477565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6125098261216d565b810181811067ffffffffffffffff82111715612528576125276124d1565b5b80604052505050565b600061253b61204f565b90506125478282612500565b919050565b600067ffffffffffffffff821115612567576125666124d1565b5b6125708261216d565b9050602081019050919050565b82818337600083830152505050565b600061259f61259a8461254c565b612531565b9050828152602081018484840111156125bb576125ba6124cc565b5b6125c684828561257d565b509392505050565b600082601f8301126125e3576125e2612381565b5b81356125f384826020860161258c565b91505092915050565b6000806000806080858703121561261657612615612059565b5b6000612624878288016122af565b9450506020612635878288016122af565b9350506040612646878288016121fa565b925050606085013567ffffffffffffffff8111156126675761266661205e565b5b612673878288016125ce565b91505092959194509250565b6000806040838503121561269657612695612059565b5b60006126a4858286016122af565b92505060206126b5858286016122af565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061270657607f821691505b6020821081141561271a576127196126bf565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061277c602c83612129565b915061278782612720565b604082019050919050565b600060208201905081810360008301526127ab8161276f565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061280e602183612129565b9150612819826127b2565b604082019050919050565b6000602082019050818103600083015261283d81612801565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006128a0603883612129565b91506128ab82612844565b604082019050919050565b600060208201905081810360008301526128cf81612893565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612932603183612129565b915061293d826128d6565b604082019050919050565b6000602082019050818103600083015261296181612925565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061299e602083612129565b91506129a982612968565b602082019050919050565b600060208201905081810360008301526129cd81612991565b9050919050565b7f454d5054595f42414c414e434500000000000000000000000000000000000000600082015250565b6000612a0a600d83612129565b9150612a15826129d4565b602082019050919050565b60006020820190508181036000830152612a39816129fd565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612a9c602983612129565b9150612aa782612a40565b604082019050919050565b60006020820190508181036000830152612acb81612a8f565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612b2e602a83612129565b9150612b3982612ad2565b604082019050919050565b60006020820190508181036000830152612b5d81612b21565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b9e826121d9565b9150612ba9836121d9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bde57612bdd612b64565b5b828201905092915050565b7f53616c65206e6565647320746f20626520616374697665000000000000000000600082015250565b6000612c1f601783612129565b9150612c2a82612be9565b602082019050919050565b60006020820190508181036000830152612c4e81612c12565b9050919050565b7f496e76616c696420707572636861736520616d6f756e74000000000000000000600082015250565b6000612c8b601783612129565b9150612c9682612c55565b602082019050919050565b60006020820190508181036000830152612cba81612c7e565b9050919050565b7f5061796d656e74206578636565647320746f74616c20737570706c7900000000600082015250565b6000612cf7601c83612129565b9150612d0282612cc1565b602082019050919050565b60006020820190508181036000830152612d2681612cea565b9050919050565b6000612d38826121d9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d6b57612d6a612b64565b5b600182019050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000612dac601983612129565b9150612db782612d76565b602082019050919050565b60006020820190508181036000830152612ddb81612d9f565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000612e3e602f83612129565b9150612e4982612de2565b604082019050919050565b60006020820190508181036000830152612e6d81612e31565b9050919050565b600081905092915050565b6000612e8a8261211e565b612e948185612e74565b9350612ea481856020860161213a565b80840191505092915050565b6000612ebc8285612e7f565b9150612ec88284612e7f565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612f30602683612129565b9150612f3b82612ed4565b604082019050919050565b60006020820190508181036000830152612f5f81612f23565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612fc2602c83612129565b9150612fcd82612f66565b604082019050919050565b60006020820190508181036000830152612ff181612fb5565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613054602983612129565b915061305f82612ff8565b604082019050919050565b6000602082019050818103600083015261308381613047565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006130e6602483612129565b91506130f18261308a565b604082019050919050565b60006020820190508181036000830152613115816130d9565b9050919050565b6000613127826121d9565b9150613132836121d9565b92508282101561314557613144612b64565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061318a826121d9565b9150613195836121d9565b9250826131a5576131a4613150565b5b828204905092915050565b60006131bb826121d9565b91506131c6836121d9565b9250826131d6576131d5613150565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061326c603283612129565b915061327782613210565b604082019050919050565b6000602082019050818103600083015261329b8161325f565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006132d8602083612129565b91506132e3826132a2565b602082019050919050565b60006020820190508181036000830152613307816132cb565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613344601c83612129565b915061334f8261330e565b602082019050919050565b6000602082019050818103600083015261337381613337565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006133a18261337a565b6133ab8185613385565b93506133bb81856020860161213a565b6133c48161216d565b840191505092915050565b60006080820190506133e4600083018761226e565b6133f1602083018661226e565b6133fe6040830185612304565b81810360608301526134108184613396565b905095945050505050565b60008151905061342a8161208f565b92915050565b60006020828403121561344657613445612059565b5b60006134548482850161341b565b9150509291505056fea26469706673582212209a4931bcca31952b8299215eabdff64456de27747ec1745b1ad5381e21d3a7f164736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000010466c756f72657363656e7443656c6c730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064643656c6c730000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): FluorescentCells
Arg [1] : symbol (string): FCells
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [3] : 466c756f72657363656e7443656c6c7300000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 4643656c6c730000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
39055:1896:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25249:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26194:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27753:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27276:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39297:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28643:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39347:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40739:207;;;;;;;;;;;;;:::i;:::-;;29053:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40103:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25888:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25618:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38426:94;;;;;;;;;;;;;:::i;:::-;;40217:78;;;;;;;;;;;;;:::i;:::-;;37775:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26363:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39477:510;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28046:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40303:138;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40560:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26538:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28412:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40449:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38675:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25249:305;25351:4;25403:25;25388:40;;;:11;:40;;;;:105;;;;25460:33;25445:48;;;:11;:48;;;;25388:105;:158;;;;25510:36;25534:11;25510:23;:36::i;:::-;25388:158;25368:178;;25249:305;;;:::o;26194:100::-;26248:13;26281:5;26274:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26194:100;:::o;27753:221::-;27829:7;27857:16;27865:7;27857;:16::i;:::-;27849:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27942:15;:24;27958:7;27942:24;;;;;;;;;;;;;;;;;;;;;27935:31;;27753:221;;;:::o;27276:411::-;27357:13;27373:23;27388:7;27373:14;:23::i;:::-;27357:39;;27421:5;27415:11;;:2;:11;;;;27407:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27515:5;27499:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27524:37;27541:5;27548:12;:10;:12::i;:::-;27524:16;:37::i;:::-;27499:62;27477:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27658:21;27667:2;27671:7;27658:8;:21::i;:::-;27346:341;27276:411;;:::o;39297:41::-;39335:3;39297:41;:::o;28643:339::-;28838:41;28857:12;:10;:12::i;:::-;28871:7;28838:18;:41::i;:::-;28830:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28946:28;28956:4;28962:2;28966:7;28946:9;:28::i;:::-;28643:339;;;:::o;39347:28::-;;;;;;;;;;;;;:::o;40739:207::-;38006:12;:10;:12::i;:::-;37995:23;;:7;:5;:7::i;:::-;:23;;;37987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40821:1:::1;40797:21;:25;40789:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;40851:15;40869:21;40851:39;;40909:10;40901:28;;:37;40930:7;40901:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40778:168;40739:207::o:0;29053:185::-;29191:39;29208:4;29214:2;29218:7;29191:39;;;;;;;;;;;;:16;:39::i;:::-;29053:185;;;:::o;40103:106::-;38006:12;:10;:12::i;:::-;37995:23;;:7;:5;:7::i;:::-;:23;;;37987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40191:10:::1;;40181:7;:20;;;;;;;:::i;:::-;;40103:106:::0;;:::o;25888:239::-;25960:7;25980:13;25996:7;:16;26004:7;25996:16;;;;;;;;;;;;;;;;;;;;;25980:32;;26048:1;26031:19;;:5;:19;;;;26023:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26114:5;26107:12;;;25888:239;;;:::o;25618:208::-;25690:7;25735:1;25718:19;;:5;:19;;;;25710:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25802:9;:16;25812:5;25802:16;;;;;;;;;;;;;;;;25795:23;;25618:208;;;:::o;38426:94::-;38006:12;:10;:12::i;:::-;37995:23;;:7;:5;:7::i;:::-;:23;;;37987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38491:21:::1;38509:1;38491:9;:21::i;:::-;38426:94::o:0;40217:78::-;38006:12;:10;:12::i;:::-;37995:23;;:7;:5;:7::i;:::-;:23;;;37987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40279:8:::1;;;;;;;;;;;40278:9;40267:8;;:20;;;;;;;;;;;;;;;;;;40217:78::o:0;37775:87::-;37821:7;37848:6;;;;;;;;;;;37841:13;;37775:87;:::o;26363:104::-;26419:13;26452:7;26445:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26363:104;:::o;39477:510::-;39537:14;39579:1;39554:22;:12;:20;:22::i;:::-;:26;;;;:::i;:::-;39537:43;;39599:8;;;;;;;;;;;39591:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;39670:1;39654:13;:17;:38;;;;;39691:1;39675:13;:17;39654:38;39646:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;39335:3;39743:25;39754:13;39743:6;:10;;:25;;;;:::i;:::-;:40;;39735:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;39840:9;39852:1;39840:13;;39836:142;39860:13;39855:1;:18;39836:142;;39894:33;39904:10;39925:1;39916:6;:10;;;;:::i;:::-;39894:9;:33::i;:::-;39942:24;:12;:22;:24::i;:::-;39875:3;;;;;:::i;:::-;;;;39836:142;;;;39526:461;39477:510;:::o;28046:295::-;28161:12;:10;:12::i;:::-;28149:24;;:8;:24;;;;28141:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28261:8;28216:18;:32;28235:12;:10;:12::i;:::-;28216:32;;;;;;;;;;;;;;;:42;28249:8;28216:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28314:8;28285:48;;28300:12;:10;:12::i;:::-;28285:48;;;28324:8;28285:48;;;;;;:::i;:::-;;;;;;;;28046:295;;:::o;40303:138::-;40350:7;40369:15;40387:21;40369:39;;40426:7;40419:14;;;40303:138;:::o;40560:171::-;40675:48;40699:4;40705:2;40709:7;40718:4;40675:23;:48::i;:::-;40560:171;;;;:::o;26538:334::-;26611:13;26645:16;26653:7;26645;:16::i;:::-;26637:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26726:21;26750:10;:8;:10::i;:::-;26726:34;;26802:1;26784:7;26778:21;:25;:86;;;;;;;;;;;;;;;;;26830:7;26839:18;:7;:16;:18::i;:::-;26813:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26778:86;26771:93;;;26538:334;;;:::o;28412:164::-;28509:4;28533:18;:25;28552:5;28533:25;;;;;;;;;;;;;;;:35;28559:8;28533:35;;;;;;;;;;;;;;;;;;;;;;;;;28526:42;;28412:164;;;;:::o;40449:103::-;40496:7;40522:22;:12;:20;:22::i;:::-;40515:29;;40449:103;:::o;38675:192::-;38006:12;:10;:12::i;:::-;37995:23;;:7;:5;:7::i;:::-;:23;;;37987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38784:1:::1;38764:22;;:8;:22;;;;38756:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38840:19;38850:8;38840:9;:19::i;:::-;38675:192:::0;:::o;11770:157::-;11855:4;11894:25;11879:40;;;:11;:40;;;;11872:47;;11770:157;;;:::o;31147:127::-;31212:4;31264:1;31236:30;;:7;:16;31244:7;31236:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31229:37;;31147:127;;;:::o;3047:98::-;3100:7;3127:10;3120:17;;3047:98;:::o;35129:174::-;35231:2;35204:15;:24;35220:7;35204:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35287:7;35283:2;35249:46;;35258:23;35273:7;35258:14;:23::i;:::-;35249:46;;;;;;;;;;;;35129:174;;:::o;31441:348::-;31534:4;31559:16;31567:7;31559;:16::i;:::-;31551:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31635:13;31651:23;31666:7;31651:14;:23::i;:::-;31635:39;;31704:5;31693:16;;:7;:16;;;:51;;;;31737:7;31713:31;;:20;31725:7;31713:11;:20::i;:::-;:31;;;31693:51;:87;;;;31748:32;31765:5;31772:7;31748:16;:32::i;:::-;31693:87;31685:96;;;31441:348;;;;:::o;34433:578::-;34592:4;34565:31;;:23;34580:7;34565:14;:23::i;:::-;:31;;;34557:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34675:1;34661:16;;:2;:16;;;;34653:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34731:39;34752:4;34758:2;34762:7;34731:20;:39::i;:::-;34835:29;34852:1;34856:7;34835:8;:29::i;:::-;34896:1;34877:9;:15;34887:4;34877:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34925:1;34908:9;:13;34918:2;34908:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34956:2;34937:7;:16;34945:7;34937:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34995:7;34991:2;34976:27;;34985:4;34976:27;;;;;;;;;;;;34433:578;;;:::o;38875:173::-;38931:16;38950:6;;;;;;;;;;;38931:25;;38976:8;38967:6;;:17;;;;;;;;;;;;;;;;;;39031:8;39000:40;;39021:8;39000:40;;;;;;;;;;;;38920:128;38875:173;:::o;2421:114::-;2486:7;2513;:14;;;2506:21;;2421:114;;;:::o;19403:98::-;19461:7;19492:1;19488;:5;;;;:::i;:::-;19481:12;;19403:98;;;;:::o;32131:110::-;32207:26;32217:2;32221:7;32207:26;;;;;;;;;;;;:9;:26::i;:::-;32131:110;;:::o;2543:127::-;2650:1;2632:7;:14;;;:19;;;;;;;;;;;2543:127;:::o;29309:328::-;29484:41;29503:12;:10;:12::i;:::-;29517:7;29484:18;:41::i;:::-;29476:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29590:39;29604:4;29610:2;29614:7;29623:5;29590:13;:39::i;:::-;29309:328;;;;:::o;39995:100::-;40047:13;40080:7;40073:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39995:100;:::o;251:723::-;307:13;537:1;528:5;:10;524:53;;;555:10;;;;;;;;;;;;;;;;;;;;;524:53;587:12;602:5;587:20;;618:14;643:78;658:1;650:4;:9;643:78;;676:8;;;;;:::i;:::-;;;;707:2;699:10;;;;;:::i;:::-;;;643:78;;;731:19;763:6;753:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;731:39;;781:154;797:1;788:5;:10;781:154;;825:1;815:11;;;;;:::i;:::-;;;892:2;884:5;:10;;;;:::i;:::-;871:2;:24;;;;:::i;:::-;858:39;;841:6;848;841:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;921:2;912:11;;;;;:::i;:::-;;;781:154;;;959:6;945:21;;;;;251:723;;;;:::o;37239:126::-;;;;:::o;32468:321::-;32598:18;32604:2;32608:7;32598:5;:18::i;:::-;32649:54;32680:1;32684:2;32688:7;32697:5;32649:22;:54::i;:::-;32627:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32468:321;;;:::o;30519:315::-;30676:28;30686:4;30692:2;30696:7;30676:9;:28::i;:::-;30723:48;30746:4;30752:2;30756:7;30765:5;30723:22;:48::i;:::-;30715:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30519:315;;;;:::o;33125:382::-;33219:1;33205:16;;:2;:16;;;;33197:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33278:16;33286:7;33278;:16::i;:::-;33277:17;33269:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33340:45;33369:1;33373:2;33377:7;33340:20;:45::i;:::-;33415:1;33398:9;:13;33408:2;33398:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33446:2;33427:7;:16;33435:7;33427:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33491:7;33487:2;33466:33;;33483:1;33466:33;;;;;;;;;;;;33125:382;;:::o;35868:799::-;36023:4;36044:15;:2;:13;;;:15::i;:::-;36040:620;;;36096:2;36080:36;;;36117:12;:10;:12::i;:::-;36131:4;36137:7;36146:5;36080:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36076:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36339:1;36322:6;:13;:18;36318:272;;;36365:60;;;;;;;;;;:::i;:::-;;;;;;;;36318:272;36540:6;36534:13;36525:6;36521:2;36517:15;36510:38;36076:529;36213:41;;;36203:51;;;:6;:51;;;;36196:58;;;;;36040:620;36644:4;36637:11;;35868:799;;;;;;;:::o;3871:387::-;3931:4;4139:12;4206:7;4194:20;4186:28;;4249:1;4242:4;:8;4235:15;;;3871:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:117;6270:1;6267;6260:12;6298:553;6356:8;6366:6;6416:3;6409:4;6401:6;6397:17;6393:27;6383:122;;6424:79;;:::i;:::-;6383:122;6537:6;6524:20;6514:30;;6567:18;6559:6;6556:30;6553:117;;;6589:79;;:::i;:::-;6553:117;6703:4;6695:6;6691:17;6679:29;;6757:3;6749:4;6741:6;6737:17;6727:8;6723:32;6720:41;6717:128;;;6764:79;;:::i;:::-;6717:128;6298:553;;;;;:::o;6857:529::-;6928:6;6936;6985:2;6973:9;6964:7;6960:23;6956:32;6953:119;;;6991:79;;:::i;:::-;6953:119;7139:1;7128:9;7124:17;7111:31;7169:18;7161:6;7158:30;7155:117;;;7191:79;;:::i;:::-;7155:117;7304:65;7361:7;7352:6;7341:9;7337:22;7304:65;:::i;:::-;7286:83;;;;7082:297;6857:529;;;;;:::o;7392:329::-;7451:6;7500:2;7488:9;7479:7;7475:23;7471:32;7468:119;;;7506:79;;:::i;:::-;7468:119;7626:1;7651:53;7696:7;7687:6;7676:9;7672:22;7651:53;:::i;:::-;7641:63;;7597:117;7392:329;;;;:::o;7727:116::-;7797:21;7812:5;7797:21;:::i;:::-;7790:5;7787:32;7777:60;;7833:1;7830;7823:12;7777:60;7727:116;:::o;7849:133::-;7892:5;7930:6;7917:20;7908:29;;7946:30;7970:5;7946:30;:::i;:::-;7849:133;;;;:::o;7988:468::-;8053:6;8061;8110:2;8098:9;8089:7;8085:23;8081:32;8078:119;;;8116:79;;:::i;:::-;8078:119;8236:1;8261:53;8306:7;8297:6;8286:9;8282:22;8261:53;:::i;:::-;8251:63;;8207:117;8363:2;8389:50;8431:7;8422:6;8411:9;8407:22;8389:50;:::i;:::-;8379:60;;8334:115;7988:468;;;;;:::o;8462:117::-;8571:1;8568;8561:12;8585:180;8633:77;8630:1;8623:88;8730:4;8727:1;8720:15;8754:4;8751:1;8744:15;8771:281;8854:27;8876:4;8854:27;:::i;:::-;8846:6;8842:40;8984:6;8972:10;8969:22;8948:18;8936:10;8933:34;8930:62;8927:88;;;8995:18;;:::i;:::-;8927:88;9035:10;9031:2;9024:22;8814:238;8771:281;;:::o;9058:129::-;9092:6;9119:20;;:::i;:::-;9109:30;;9148:33;9176:4;9168:6;9148:33;:::i;:::-;9058:129;;;:::o;9193:307::-;9254:4;9344:18;9336:6;9333:30;9330:56;;;9366:18;;:::i;:::-;9330:56;9404:29;9426:6;9404:29;:::i;:::-;9396:37;;9488:4;9482;9478:15;9470:23;;9193:307;;;:::o;9506:154::-;9590:6;9585:3;9580;9567:30;9652:1;9643:6;9638:3;9634:16;9627:27;9506:154;;;:::o;9666:410::-;9743:5;9768:65;9784:48;9825:6;9784:48;:::i;:::-;9768:65;:::i;:::-;9759:74;;9856:6;9849:5;9842:21;9894:4;9887:5;9883:16;9932:3;9923:6;9918:3;9914:16;9911:25;9908:112;;;9939:79;;:::i;:::-;9908:112;10029:41;10063:6;10058:3;10053;10029:41;:::i;:::-;9749:327;9666:410;;;;;:::o;10095:338::-;10150:5;10199:3;10192:4;10184:6;10180:17;10176:27;10166:122;;10207:79;;:::i;:::-;10166:122;10324:6;10311:20;10349:78;10423:3;10415:6;10408:4;10400:6;10396:17;10349:78;:::i;:::-;10340:87;;10156:277;10095:338;;;;:::o;10439:943::-;10534:6;10542;10550;10558;10607:3;10595:9;10586:7;10582:23;10578:33;10575:120;;;10614:79;;:::i;:::-;10575:120;10734:1;10759:53;10804:7;10795:6;10784:9;10780:22;10759:53;:::i;:::-;10749:63;;10705:117;10861:2;10887:53;10932:7;10923:6;10912:9;10908:22;10887:53;:::i;:::-;10877:63;;10832:118;10989:2;11015:53;11060:7;11051:6;11040:9;11036:22;11015:53;:::i;:::-;11005:63;;10960:118;11145:2;11134:9;11130:18;11117:32;11176:18;11168:6;11165:30;11162:117;;;11198:79;;:::i;:::-;11162:117;11303:62;11357:7;11348:6;11337:9;11333:22;11303:62;:::i;:::-;11293:72;;11088:287;10439:943;;;;;;;:::o;11388:474::-;11456:6;11464;11513:2;11501:9;11492:7;11488:23;11484:32;11481:119;;;11519:79;;:::i;:::-;11481:119;11639:1;11664:53;11709:7;11700:6;11689:9;11685:22;11664:53;:::i;:::-;11654:63;;11610:117;11766:2;11792:53;11837:7;11828:6;11817:9;11813:22;11792:53;:::i;:::-;11782:63;;11737:118;11388:474;;;;;:::o;11868:180::-;11916:77;11913:1;11906:88;12013:4;12010:1;12003:15;12037:4;12034:1;12027:15;12054:320;12098:6;12135:1;12129:4;12125:12;12115:22;;12182:1;12176:4;12172:12;12203:18;12193:81;;12259:4;12251:6;12247:17;12237:27;;12193:81;12321:2;12313:6;12310:14;12290:18;12287:38;12284:84;;;12340:18;;:::i;:::-;12284:84;12105:269;12054:320;;;:::o;12380:231::-;12520:34;12516:1;12508:6;12504:14;12497:58;12589:14;12584:2;12576:6;12572:15;12565:39;12380:231;:::o;12617:366::-;12759:3;12780:67;12844:2;12839:3;12780:67;:::i;:::-;12773:74;;12856:93;12945:3;12856:93;:::i;:::-;12974:2;12969:3;12965:12;12958:19;;12617:366;;;:::o;12989:419::-;13155:4;13193:2;13182:9;13178:18;13170:26;;13242:9;13236:4;13232:20;13228:1;13217:9;13213:17;13206:47;13270:131;13396:4;13270:131;:::i;:::-;13262:139;;12989:419;;;:::o;13414:220::-;13554:34;13550:1;13542:6;13538:14;13531:58;13623:3;13618:2;13610:6;13606:15;13599:28;13414:220;:::o;13640:366::-;13782:3;13803:67;13867:2;13862:3;13803:67;:::i;:::-;13796:74;;13879:93;13968:3;13879:93;:::i;:::-;13997:2;13992:3;13988:12;13981:19;;13640:366;;;:::o;14012:419::-;14178:4;14216:2;14205:9;14201:18;14193:26;;14265:9;14259:4;14255:20;14251:1;14240:9;14236:17;14229:47;14293:131;14419:4;14293:131;:::i;:::-;14285:139;;14012:419;;;:::o;14437:243::-;14577:34;14573:1;14565:6;14561:14;14554:58;14646:26;14641:2;14633:6;14629:15;14622:51;14437:243;:::o;14686:366::-;14828:3;14849:67;14913:2;14908:3;14849:67;:::i;:::-;14842:74;;14925:93;15014:3;14925:93;:::i;:::-;15043:2;15038:3;15034:12;15027:19;;14686:366;;;:::o;15058:419::-;15224:4;15262:2;15251:9;15247:18;15239:26;;15311:9;15305:4;15301:20;15297:1;15286:9;15282:17;15275:47;15339:131;15465:4;15339:131;:::i;:::-;15331:139;;15058:419;;;:::o;15483:236::-;15623:34;15619:1;15611:6;15607:14;15600:58;15692:19;15687:2;15679:6;15675:15;15668:44;15483:236;:::o;15725:366::-;15867:3;15888:67;15952:2;15947:3;15888:67;:::i;:::-;15881:74;;15964:93;16053:3;15964:93;:::i;:::-;16082:2;16077:3;16073:12;16066:19;;15725:366;;;:::o;16097:419::-;16263:4;16301:2;16290:9;16286:18;16278:26;;16350:9;16344:4;16340:20;16336:1;16325:9;16321:17;16314:47;16378:131;16504:4;16378:131;:::i;:::-;16370:139;;16097:419;;;:::o;16522:182::-;16662:34;16658:1;16650:6;16646:14;16639:58;16522:182;:::o;16710:366::-;16852:3;16873:67;16937:2;16932:3;16873:67;:::i;:::-;16866:74;;16949:93;17038:3;16949:93;:::i;:::-;17067:2;17062:3;17058:12;17051:19;;16710:366;;;:::o;17082:419::-;17248:4;17286:2;17275:9;17271:18;17263:26;;17335:9;17329:4;17325:20;17321:1;17310:9;17306:17;17299:47;17363:131;17489:4;17363:131;:::i;:::-;17355:139;;17082:419;;;:::o;17507:163::-;17647:15;17643:1;17635:6;17631:14;17624:39;17507:163;:::o;17676:366::-;17818:3;17839:67;17903:2;17898:3;17839:67;:::i;:::-;17832:74;;17915:93;18004:3;17915:93;:::i;:::-;18033:2;18028:3;18024:12;18017:19;;17676:366;;;:::o;18048:419::-;18214:4;18252:2;18241:9;18237:18;18229:26;;18301:9;18295:4;18291:20;18287:1;18276:9;18272:17;18265:47;18329:131;18455:4;18329:131;:::i;:::-;18321:139;;18048:419;;;:::o;18473:228::-;18613:34;18609:1;18601:6;18597:14;18590:58;18682:11;18677:2;18669:6;18665:15;18658:36;18473:228;:::o;18707:366::-;18849:3;18870:67;18934:2;18929:3;18870:67;:::i;:::-;18863:74;;18946:93;19035:3;18946:93;:::i;:::-;19064:2;19059:3;19055:12;19048:19;;18707:366;;;:::o;19079:419::-;19245:4;19283:2;19272:9;19268:18;19260:26;;19332:9;19326:4;19322:20;19318:1;19307:9;19303:17;19296:47;19360:131;19486:4;19360:131;:::i;:::-;19352:139;;19079:419;;;:::o;19504:229::-;19644:34;19640:1;19632:6;19628:14;19621:58;19713:12;19708:2;19700:6;19696:15;19689:37;19504:229;:::o;19739:366::-;19881:3;19902:67;19966:2;19961:3;19902:67;:::i;:::-;19895:74;;19978:93;20067:3;19978:93;:::i;:::-;20096:2;20091:3;20087:12;20080:19;;19739:366;;;:::o;20111:419::-;20277:4;20315:2;20304:9;20300:18;20292:26;;20364:9;20358:4;20354:20;20350:1;20339:9;20335:17;20328:47;20392:131;20518:4;20392:131;:::i;:::-;20384:139;;20111:419;;;:::o;20536:180::-;20584:77;20581:1;20574:88;20681:4;20678:1;20671:15;20705:4;20702:1;20695:15;20722:305;20762:3;20781:20;20799:1;20781:20;:::i;:::-;20776:25;;20815:20;20833:1;20815:20;:::i;:::-;20810:25;;20969:1;20901:66;20897:74;20894:1;20891:81;20888:107;;;20975:18;;:::i;:::-;20888:107;21019:1;21016;21012:9;21005:16;;20722:305;;;;:::o;21033:173::-;21173:25;21169:1;21161:6;21157:14;21150:49;21033:173;:::o;21212:366::-;21354:3;21375:67;21439:2;21434:3;21375:67;:::i;:::-;21368:74;;21451:93;21540:3;21451:93;:::i;:::-;21569:2;21564:3;21560:12;21553:19;;21212:366;;;:::o;21584:419::-;21750:4;21788:2;21777:9;21773:18;21765:26;;21837:9;21831:4;21827:20;21823:1;21812:9;21808:17;21801:47;21865:131;21991:4;21865:131;:::i;:::-;21857:139;;21584:419;;;:::o;22009:173::-;22149:25;22145:1;22137:6;22133:14;22126:49;22009:173;:::o;22188:366::-;22330:3;22351:67;22415:2;22410:3;22351:67;:::i;:::-;22344:74;;22427:93;22516:3;22427:93;:::i;:::-;22545:2;22540:3;22536:12;22529:19;;22188:366;;;:::o;22560:419::-;22726:4;22764:2;22753:9;22749:18;22741:26;;22813:9;22807:4;22803:20;22799:1;22788:9;22784:17;22777:47;22841:131;22967:4;22841:131;:::i;:::-;22833:139;;22560:419;;;:::o;22985:178::-;23125:30;23121:1;23113:6;23109:14;23102:54;22985:178;:::o;23169:366::-;23311:3;23332:67;23396:2;23391:3;23332:67;:::i;:::-;23325:74;;23408:93;23497:3;23408:93;:::i;:::-;23526:2;23521:3;23517:12;23510:19;;23169:366;;;:::o;23541:419::-;23707:4;23745:2;23734:9;23730:18;23722:26;;23794:9;23788:4;23784:20;23780:1;23769:9;23765:17;23758:47;23822:131;23948:4;23822:131;:::i;:::-;23814:139;;23541:419;;;:::o;23966:233::-;24005:3;24028:24;24046:5;24028:24;:::i;:::-;24019:33;;24074:66;24067:5;24064:77;24061:103;;;24144:18;;:::i;:::-;24061:103;24191:1;24184:5;24180:13;24173:20;;23966:233;;;:::o;24205:175::-;24345:27;24341:1;24333:6;24329:14;24322:51;24205:175;:::o;24386:366::-;24528:3;24549:67;24613:2;24608:3;24549:67;:::i;:::-;24542:74;;24625:93;24714:3;24625:93;:::i;:::-;24743:2;24738:3;24734:12;24727:19;;24386:366;;;:::o;24758:419::-;24924:4;24962:2;24951:9;24947:18;24939:26;;25011:9;25005:4;25001:20;24997:1;24986:9;24982:17;24975:47;25039:131;25165:4;25039:131;:::i;:::-;25031:139;;24758:419;;;:::o;25183:234::-;25323:34;25319:1;25311:6;25307:14;25300:58;25392:17;25387:2;25379:6;25375:15;25368:42;25183:234;:::o;25423:366::-;25565:3;25586:67;25650:2;25645:3;25586:67;:::i;:::-;25579:74;;25662:93;25751:3;25662:93;:::i;:::-;25780:2;25775:3;25771:12;25764:19;;25423:366;;;:::o;25795:419::-;25961:4;25999:2;25988:9;25984:18;25976:26;;26048:9;26042:4;26038:20;26034:1;26023:9;26019:17;26012:47;26076:131;26202:4;26076:131;:::i;:::-;26068:139;;25795:419;;;:::o;26220:148::-;26322:11;26359:3;26344:18;;26220:148;;;;:::o;26374:377::-;26480:3;26508:39;26541:5;26508:39;:::i;:::-;26563:89;26645:6;26640:3;26563:89;:::i;:::-;26556:96;;26661:52;26706:6;26701:3;26694:4;26687:5;26683:16;26661:52;:::i;:::-;26738:6;26733:3;26729:16;26722:23;;26484:267;26374:377;;;;:::o;26757:435::-;26937:3;26959:95;27050:3;27041:6;26959:95;:::i;:::-;26952:102;;27071:95;27162:3;27153:6;27071:95;:::i;:::-;27064:102;;27183:3;27176:10;;26757:435;;;;;:::o;27198:225::-;27338:34;27334:1;27326:6;27322:14;27315:58;27407:8;27402:2;27394:6;27390:15;27383:33;27198:225;:::o;27429:366::-;27571:3;27592:67;27656:2;27651:3;27592:67;:::i;:::-;27585:74;;27668:93;27757:3;27668:93;:::i;:::-;27786:2;27781:3;27777:12;27770:19;;27429:366;;;:::o;27801:419::-;27967:4;28005:2;27994:9;27990:18;27982:26;;28054:9;28048:4;28044:20;28040:1;28029:9;28025:17;28018:47;28082:131;28208:4;28082:131;:::i;:::-;28074:139;;27801:419;;;:::o;28226:231::-;28366:34;28362:1;28354:6;28350:14;28343:58;28435:14;28430:2;28422:6;28418:15;28411:39;28226:231;:::o;28463:366::-;28605:3;28626:67;28690:2;28685:3;28626:67;:::i;:::-;28619:74;;28702:93;28791:3;28702:93;:::i;:::-;28820:2;28815:3;28811:12;28804:19;;28463:366;;;:::o;28835:419::-;29001:4;29039:2;29028:9;29024:18;29016:26;;29088:9;29082:4;29078:20;29074:1;29063:9;29059:17;29052:47;29116:131;29242:4;29116:131;:::i;:::-;29108:139;;28835:419;;;:::o;29260:228::-;29400:34;29396:1;29388:6;29384:14;29377:58;29469:11;29464:2;29456:6;29452:15;29445:36;29260:228;:::o;29494:366::-;29636:3;29657:67;29721:2;29716:3;29657:67;:::i;:::-;29650:74;;29733:93;29822:3;29733:93;:::i;:::-;29851:2;29846:3;29842:12;29835:19;;29494:366;;;:::o;29866:419::-;30032:4;30070:2;30059:9;30055:18;30047:26;;30119:9;30113:4;30109:20;30105:1;30094:9;30090:17;30083:47;30147:131;30273:4;30147:131;:::i;:::-;30139:139;;29866:419;;;:::o;30291:223::-;30431:34;30427:1;30419:6;30415:14;30408:58;30500:6;30495:2;30487:6;30483:15;30476:31;30291:223;:::o;30520:366::-;30662:3;30683:67;30747:2;30742:3;30683:67;:::i;:::-;30676:74;;30759:93;30848:3;30759:93;:::i;:::-;30877:2;30872:3;30868:12;30861:19;;30520:366;;;:::o;30892:419::-;31058:4;31096:2;31085:9;31081:18;31073:26;;31145:9;31139:4;31135:20;31131:1;31120:9;31116:17;31109:47;31173:131;31299:4;31173:131;:::i;:::-;31165:139;;30892:419;;;:::o;31317:191::-;31357:4;31377:20;31395:1;31377:20;:::i;:::-;31372:25;;31411:20;31429:1;31411:20;:::i;:::-;31406:25;;31450:1;31447;31444:8;31441:34;;;31455:18;;:::i;:::-;31441:34;31500:1;31497;31493:9;31485:17;;31317:191;;;;:::o;31514:180::-;31562:77;31559:1;31552:88;31659:4;31656:1;31649:15;31683:4;31680:1;31673:15;31700:185;31740:1;31757:20;31775:1;31757:20;:::i;:::-;31752:25;;31791:20;31809:1;31791:20;:::i;:::-;31786:25;;31830:1;31820:35;;31835:18;;:::i;:::-;31820:35;31877:1;31874;31870:9;31865:14;;31700:185;;;;:::o;31891:176::-;31923:1;31940:20;31958:1;31940:20;:::i;:::-;31935:25;;31974:20;31992:1;31974:20;:::i;:::-;31969:25;;32013:1;32003:35;;32018:18;;:::i;:::-;32003:35;32059:1;32056;32052:9;32047:14;;31891:176;;;;:::o;32073:180::-;32121:77;32118:1;32111:88;32218:4;32215:1;32208:15;32242:4;32239:1;32232:15;32259:237;32399:34;32395:1;32387:6;32383:14;32376:58;32468:20;32463:2;32455:6;32451:15;32444:45;32259:237;:::o;32502:366::-;32644:3;32665:67;32729:2;32724:3;32665:67;:::i;:::-;32658:74;;32741:93;32830:3;32741:93;:::i;:::-;32859:2;32854:3;32850:12;32843:19;;32502:366;;;:::o;32874:419::-;33040:4;33078:2;33067:9;33063:18;33055:26;;33127:9;33121:4;33117:20;33113:1;33102:9;33098:17;33091:47;33155:131;33281:4;33155:131;:::i;:::-;33147:139;;32874:419;;;:::o;33299:182::-;33439:34;33435:1;33427:6;33423:14;33416:58;33299:182;:::o;33487:366::-;33629:3;33650:67;33714:2;33709:3;33650:67;:::i;:::-;33643:74;;33726:93;33815:3;33726:93;:::i;:::-;33844:2;33839:3;33835:12;33828:19;;33487:366;;;:::o;33859:419::-;34025:4;34063:2;34052:9;34048:18;34040:26;;34112:9;34106:4;34102:20;34098:1;34087:9;34083:17;34076:47;34140:131;34266:4;34140:131;:::i;:::-;34132:139;;33859:419;;;:::o;34284:178::-;34424:30;34420:1;34412:6;34408:14;34401:54;34284:178;:::o;34468:366::-;34610:3;34631:67;34695:2;34690:3;34631:67;:::i;:::-;34624:74;;34707:93;34796:3;34707:93;:::i;:::-;34825:2;34820:3;34816:12;34809:19;;34468:366;;;:::o;34840:419::-;35006:4;35044:2;35033:9;35029:18;35021:26;;35093:9;35087:4;35083:20;35079:1;35068:9;35064:17;35057:47;35121:131;35247:4;35121:131;:::i;:::-;35113:139;;34840:419;;;:::o;35265:98::-;35316:6;35350:5;35344:12;35334:22;;35265:98;;;:::o;35369:168::-;35452:11;35486:6;35481:3;35474:19;35526:4;35521:3;35517:14;35502:29;;35369:168;;;;:::o;35543:360::-;35629:3;35657:38;35689:5;35657:38;:::i;:::-;35711:70;35774:6;35769:3;35711:70;:::i;:::-;35704:77;;35790:52;35835:6;35830:3;35823:4;35816:5;35812:16;35790:52;:::i;:::-;35867:29;35889:6;35867:29;:::i;:::-;35862:3;35858:39;35851:46;;35633:270;35543:360;;;;:::o;35909:640::-;36104:4;36142:3;36131:9;36127:19;36119:27;;36156:71;36224:1;36213:9;36209:17;36200:6;36156:71;:::i;:::-;36237:72;36305:2;36294:9;36290:18;36281:6;36237:72;:::i;:::-;36319;36387:2;36376:9;36372:18;36363:6;36319:72;:::i;:::-;36438:9;36432:4;36428:20;36423:2;36412:9;36408:18;36401:48;36466:76;36537:4;36528:6;36466:76;:::i;:::-;36458:84;;35909:640;;;;;;;:::o;36555:141::-;36611:5;36642:6;36636:13;36627:22;;36658:32;36684:5;36658:32;:::i;:::-;36555:141;;;;:::o;36702:349::-;36771:6;36820:2;36808:9;36799:7;36795:23;36791:32;36788:119;;;36826:79;;:::i;:::-;36788:119;36946:1;36971:63;37026:7;37017:6;37006:9;37002:22;36971:63;:::i;:::-;36961:73;;36917:127;36702:349;;;;:::o
Swarm Source
ipfs://9a4931bcca31952b8299215eabdff64456de27747ec1745b1ad5381e21d3a7f1
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.