Token FANTOM_CARS

 

Overview ERC-721

Total Supply:
0 FCARS

Holders:
8 addresses
Balance
0 FCARS
0x0000000000000000000000000000000000000000
Loading
[ Download CSV Export  ] 
Loading
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
FantomCars

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-25
*/

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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


pragma solidity ^0.8.0;

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


pragma solidity ^0.8.0;


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

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

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


pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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


pragma solidity ^0.8.0;

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

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

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

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

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


pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/ERC721.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

// File: contracts/Example.sol

pragma solidity ^0.8.1;




contract FantomCars is ERC721, Ownable {
    
    using Strings for uint256;
    
    // Optional mapping for token URIs
    mapping (uint256 => string) private _tokenURIs;

    // Base URI
    string private _baseURIextended;


    constructor(string memory _name, string memory _symbol)
        ERC721(_name, _symbol)
    {}
    
    function setBaseURI(string memory baseURI_) external onlyOwner() {
        _baseURIextended = baseURI_;
    }
    
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }
    
    function _baseURI() internal view virtual override returns (string memory) {
        return _baseURIextended;
    }
    
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();
        
        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
        // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.
        return string(abi.encodePacked(base, tokenId.toString()));
    }
    

    function mint(
        address _to,
        uint256 _tokenId,
        string memory tokenURI_
    ) external onlyOwner() {
        _mint(_to, _tokenId);
        _setTokenURI(_tokenId, tokenURI_);
    }

    function burn(uint256 _tokenId) external onlyOwner() {
        _burn(_tokenId);
    }
}

Contract Security Audit

Contract ABI

[{"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":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"tokenURI_","type":"string"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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"}]

60806040523480156200001157600080fd5b506040516200368138038062003681833981810160405281019062000037919062000291565b818181600090805190602001906200005192919062000163565b5080600190805190602001906200006a92919062000163565b5050506200008d620000816200009560201b60201c565b6200009d60201b60201c565b50506200049a565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200017190620003ab565b90600052602060002090601f016020900481019282620001955760008555620001e1565b82601f10620001b057805160ff1916838001178555620001e1565b82800160010185558215620001e1579182015b82811115620001e0578251825591602001919060010190620001c3565b5b509050620001f09190620001f4565b5090565b5b808211156200020f576000816000905550600101620001f5565b5090565b60006200022a62000224846200033f565b62000316565b9050828152602081018484840111156200024957620002486200047a565b5b6200025684828562000375565b509392505050565b600082601f83011262000276576200027562000475565b5b81516200028884826020860162000213565b91505092915050565b60008060408385031215620002ab57620002aa62000484565b5b600083015167ffffffffffffffff811115620002cc57620002cb6200047f565b5b620002da858286016200025e565b925050602083015167ffffffffffffffff811115620002fe57620002fd6200047f565b5b6200030c858286016200025e565b9150509250929050565b60006200032262000335565b9050620003308282620003e1565b919050565b6000604051905090565b600067ffffffffffffffff8211156200035d576200035c62000446565b5b620003688262000489565b9050602081019050919050565b60005b838110156200039557808201518184015260208101905062000378565b83811115620003a5576000848401525b50505050565b60006002820490506001821680620003c457607f821691505b60208210811415620003db57620003da62000417565b5b50919050565b620003ec8262000489565b810181811067ffffffffffffffff821117156200040e576200040d62000446565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6131d780620004aa6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806370a08231116100ad578063b88d4fde11610071578063b88d4fde146102f2578063c87b56dd1461030e578063d3fc98641461033e578063e985e9c51461035a578063f2fde38b1461038a57610121565b806370a0823114610260578063715018a6146102905780638da5cb5b1461029a57806395d89b41146102b8578063a22cb465146102d657610121565b806323b872dd116100f457806323b872dd146101c057806342842e0e146101dc57806342966c68146101f857806355f804b3146102145780636352211e1461023057610121565b806301ffc9a71461012657806306fdde0314610156578063081812fc14610174578063095ea7b3146101a4575b600080fd5b610140600480360381019061013b9190612180565b6103a6565b60405161014d91906125fe565b60405180910390f35b61015e610488565b60405161016b9190612619565b60405180910390f35b61018e60048036038101906101899190612223565b61051a565b60405161019b9190612597565b60405180910390f35b6101be60048036038101906101b991906120d1565b61059f565b005b6101da60048036038101906101d59190611fbb565b6106b7565b005b6101f660048036038101906101f19190611fbb565b610717565b005b610212600480360381019061020d9190612223565b610737565b005b61022e600480360381019061022991906121da565b6107bf565b005b61024a60048036038101906102459190612223565b610855565b6040516102579190612597565b60405180910390f35b61027a60048036038101906102759190611f4e565b610907565b604051610287919061285b565b60405180910390f35b6102986109bf565b005b6102a2610a47565b6040516102af9190612597565b60405180910390f35b6102c0610a71565b6040516102cd9190612619565b60405180910390f35b6102f060048036038101906102eb9190612091565b610b03565b005b61030c6004803603810190610307919061200e565b610c84565b005b61032860048036038101906103239190612223565b610ce6565b6040516103359190612619565b60405180910390f35b61035860048036038101906103539190612111565b610e59565b005b610374600480360381019061036f9190611f7b565b610eee565b60405161038191906125fe565b60405180910390f35b6103a4600480360381019061039f9190611f4e565b610f82565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061047157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061048157506104808261107a565b5b9050919050565b60606000805461049790612ab1565b80601f01602080910402602001604051908101604052809291908181526020018280546104c390612ab1565b80156105105780601f106104e557610100808354040283529160200191610510565b820191906000526020600020905b8154815290600101906020018083116104f357829003601f168201915b5050505050905090565b6000610525826110e4565b610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055b9061277b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105aa82610855565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561061b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106129061281b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661063a611150565b73ffffffffffffffffffffffffffffffffffffffff161480610669575061066881610663611150565b610eee565b5b6106a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069f906126fb565b60405180910390fd5b6106b28383611158565b505050565b6106c86106c2611150565b82611211565b610707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fe9061283b565b60405180910390fd5b6107128383836112ef565b505050565b61073283838360405180602001604052806000815250610c84565b505050565b61073f611150565b73ffffffffffffffffffffffffffffffffffffffff1661075d610a47565b73ffffffffffffffffffffffffffffffffffffffff16146107b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107aa906127bb565b60405180910390fd5b6107bc8161154b565b50565b6107c7611150565b73ffffffffffffffffffffffffffffffffffffffff166107e5610a47565b73ffffffffffffffffffffffffffffffffffffffff161461083b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610832906127bb565b60405180910390fd5b8060089080519060200190610851929190611d62565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f59061273b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096f9061271b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109c7611150565b73ffffffffffffffffffffffffffffffffffffffff166109e5610a47565b73ffffffffffffffffffffffffffffffffffffffff1614610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a32906127bb565b60405180910390fd5b610a45600061165c565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610a8090612ab1565b80601f0160208091040260200160405190810160405280929190818152602001828054610aac90612ab1565b8015610af95780601f10610ace57610100808354040283529160200191610af9565b820191906000526020600020905b815481529060010190602001808311610adc57829003601f168201915b5050505050905090565b610b0b611150565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b70906126bb565b60405180910390fd5b8060056000610b86611150565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610c33611150565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610c7891906125fe565b60405180910390a35050565b610c95610c8f611150565b83611211565b610cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccb9061283b565b60405180910390fd5b610ce084848484611722565b50505050565b6060610cf1826110e4565b610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d27906127fb565b60405180910390fd5b6000600760008481526020019081526020016000208054610d5090612ab1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7c90612ab1565b8015610dc95780601f10610d9e57610100808354040283529160200191610dc9565b820191906000526020600020905b815481529060010190602001808311610dac57829003601f168201915b505050505090506000610dda61177e565b9050600081511415610df0578192505050610e54565b600082511115610e25578082604051602001610e0d929190612573565b60405160208183030381529060405292505050610e54565b80610e2f85611810565b604051602001610e40929190612573565b604051602081830303815290604052925050505b919050565b610e61611150565b73ffffffffffffffffffffffffffffffffffffffff16610e7f610a47565b73ffffffffffffffffffffffffffffffffffffffff1614610ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecc906127bb565b60405180910390fd5b610edf8383611971565b610ee98282611b3f565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f8a611150565b73ffffffffffffffffffffffffffffffffffffffff16610fa8610a47565b73ffffffffffffffffffffffffffffffffffffffff1614610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff5906127bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561106e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110659061265b565b60405180910390fd5b6110778161165c565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166111cb83610855565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061121c826110e4565b61125b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611252906126db565b60405180910390fd5b600061126683610855565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806112d557508373ffffffffffffffffffffffffffffffffffffffff166112bd8461051a565b73ffffffffffffffffffffffffffffffffffffffff16145b806112e657506112e58185610eee565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661130f82610855565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c906127db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cc9061269b565b60405180910390fd5b6113e0838383611bb3565b6113eb600082611158565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461143b91906129c7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114929190612940565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061155682610855565b905061156481600084611bb3565b61156f600083611158565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115bf91906129c7565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61172d8484846112ef565b61173984848484611bb8565b611778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176f9061263b565b60405180910390fd5b50505050565b60606008805461178d90612ab1565b80601f01602080910402602001604051908101604052809291908181526020018280546117b990612ab1565b80156118065780601f106117db57610100808354040283529160200191611806565b820191906000526020600020905b8154815290600101906020018083116117e957829003601f168201915b5050505050905090565b60606000821415611858576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061196c565b600082905060005b6000821461188a57808061187390612b14565b915050600a826118839190612996565b9150611860565b60008167ffffffffffffffff8111156118a6576118a5612c4a565b5b6040519080825280601f01601f1916602001820160405280156118d85781602001600182028036833780820191505090505b5090505b60008514611965576001826118f191906129c7565b9150600a856119009190612b5d565b603061190c9190612940565b60f81b81838151811061192257611921612c1b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561195e9190612996565b94506118dc565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d89061275b565b60405180910390fd5b6119ea816110e4565b15611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a219061267b565b60405180910390fd5b611a3660008383611bb3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a869190612940565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b611b48826110e4565b611b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7e9061279b565b60405180910390fd5b80600760008481526020019081526020016000209080519060200190611bae929190611d62565b505050565b505050565b6000611bd98473ffffffffffffffffffffffffffffffffffffffff16611d4f565b15611d42578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611c02611150565b8786866040518563ffffffff1660e01b8152600401611c2494939291906125b2565b602060405180830381600087803b158015611c3e57600080fd5b505af1925050508015611c6f57506040513d601f19601f82011682018060405250810190611c6c91906121ad565b60015b611cf2573d8060008114611c9f576040519150601f19603f3d011682016040523d82523d6000602084013e611ca4565b606091505b50600081511415611cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce19061263b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611d47565b600190505b949350505050565b600080823b905060008111915050919050565b828054611d6e90612ab1565b90600052602060002090601f016020900481019282611d905760008555611dd7565b82601f10611da957805160ff1916838001178555611dd7565b82800160010185558215611dd7579182015b82811115611dd6578251825591602001919060010190611dbb565b5b509050611de49190611de8565b5090565b5b80821115611e01576000816000905550600101611de9565b5090565b6000611e18611e138461289b565b612876565b905082815260208101848484011115611e3457611e33612c7e565b5b611e3f848285612a6f565b509392505050565b6000611e5a611e55846128cc565b612876565b905082815260208101848484011115611e7657611e75612c7e565b5b611e81848285612a6f565b509392505050565b600081359050611e9881613145565b92915050565b600081359050611ead8161315c565b92915050565b600081359050611ec281613173565b92915050565b600081519050611ed781613173565b92915050565b600082601f830112611ef257611ef1612c79565b5b8135611f02848260208601611e05565b91505092915050565b600082601f830112611f2057611f1f612c79565b5b8135611f30848260208601611e47565b91505092915050565b600081359050611f488161318a565b92915050565b600060208284031215611f6457611f63612c88565b5b6000611f7284828501611e89565b91505092915050565b60008060408385031215611f9257611f91612c88565b5b6000611fa085828601611e89565b9250506020611fb185828601611e89565b9150509250929050565b600080600060608486031215611fd457611fd3612c88565b5b6000611fe286828701611e89565b9350506020611ff386828701611e89565b925050604061200486828701611f39565b9150509250925092565b6000806000806080858703121561202857612027612c88565b5b600061203687828801611e89565b945050602061204787828801611e89565b935050604061205887828801611f39565b925050606085013567ffffffffffffffff81111561207957612078612c83565b5b61208587828801611edd565b91505092959194509250565b600080604083850312156120a8576120a7612c88565b5b60006120b685828601611e89565b92505060206120c785828601611e9e565b9150509250929050565b600080604083850312156120e8576120e7612c88565b5b60006120f685828601611e89565b925050602061210785828601611f39565b9150509250929050565b60008060006060848603121561212a57612129612c88565b5b600061213886828701611e89565b935050602061214986828701611f39565b925050604084013567ffffffffffffffff81111561216a57612169612c83565b5b61217686828701611f0b565b9150509250925092565b60006020828403121561219657612195612c88565b5b60006121a484828501611eb3565b91505092915050565b6000602082840312156121c3576121c2612c88565b5b60006121d184828501611ec8565b91505092915050565b6000602082840312156121f0576121ef612c88565b5b600082013567ffffffffffffffff81111561220e5761220d612c83565b5b61221a84828501611f0b565b91505092915050565b60006020828403121561223957612238612c88565b5b600061224784828501611f39565b91505092915050565b612259816129fb565b82525050565b61226881612a0d565b82525050565b6000612279826128fd565b6122838185612913565b9350612293818560208601612a7e565b61229c81612c8d565b840191505092915050565b60006122b282612908565b6122bc8185612924565b93506122cc818560208601612a7e565b6122d581612c8d565b840191505092915050565b60006122eb82612908565b6122f58185612935565b9350612305818560208601612a7e565b80840191505092915050565b600061231e603283612924565b915061232982612c9e565b604082019050919050565b6000612341602683612924565b915061234c82612ced565b604082019050919050565b6000612364601c83612924565b915061236f82612d3c565b602082019050919050565b6000612387602483612924565b915061239282612d65565b604082019050919050565b60006123aa601983612924565b91506123b582612db4565b602082019050919050565b60006123cd602c83612924565b91506123d882612ddd565b604082019050919050565b60006123f0603883612924565b91506123fb82612e2c565b604082019050919050565b6000612413602a83612924565b915061241e82612e7b565b604082019050919050565b6000612436602983612924565b915061244182612eca565b604082019050919050565b6000612459602083612924565b915061246482612f19565b602082019050919050565b600061247c602c83612924565b915061248782612f42565b604082019050919050565b600061249f602c83612924565b91506124aa82612f91565b604082019050919050565b60006124c2602083612924565b91506124cd82612fe0565b602082019050919050565b60006124e5602983612924565b91506124f082613009565b604082019050919050565b6000612508602f83612924565b915061251382613058565b604082019050919050565b600061252b602183612924565b9150612536826130a7565b604082019050919050565b600061254e603183612924565b9150612559826130f6565b604082019050919050565b61256d81612a65565b82525050565b600061257f82856122e0565b915061258b82846122e0565b91508190509392505050565b60006020820190506125ac6000830184612250565b92915050565b60006080820190506125c76000830187612250565b6125d46020830186612250565b6125e16040830185612564565b81810360608301526125f3818461226e565b905095945050505050565b6000602082019050612613600083018461225f565b92915050565b6000602082019050818103600083015261263381846122a7565b905092915050565b6000602082019050818103600083015261265481612311565b9050919050565b6000602082019050818103600083015261267481612334565b9050919050565b6000602082019050818103600083015261269481612357565b9050919050565b600060208201905081810360008301526126b48161237a565b9050919050565b600060208201905081810360008301526126d48161239d565b9050919050565b600060208201905081810360008301526126f4816123c0565b9050919050565b60006020820190508181036000830152612714816123e3565b9050919050565b6000602082019050818103600083015261273481612406565b9050919050565b6000602082019050818103600083015261275481612429565b9050919050565b600060208201905081810360008301526127748161244c565b9050919050565b600060208201905081810360008301526127948161246f565b9050919050565b600060208201905081810360008301526127b481612492565b9050919050565b600060208201905081810360008301526127d4816124b5565b9050919050565b600060208201905081810360008301526127f4816124d8565b9050919050565b60006020820190508181036000830152612814816124fb565b9050919050565b600060208201905081810360008301526128348161251e565b9050919050565b6000602082019050818103600083015261285481612541565b9050919050565b60006020820190506128706000830184612564565b92915050565b6000612880612891565b905061288c8282612ae3565b919050565b6000604051905090565b600067ffffffffffffffff8211156128b6576128b5612c4a565b5b6128bf82612c8d565b9050602081019050919050565b600067ffffffffffffffff8211156128e7576128e6612c4a565b5b6128f082612c8d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061294b82612a65565b915061295683612a65565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561298b5761298a612b8e565b5b828201905092915050565b60006129a182612a65565b91506129ac83612a65565b9250826129bc576129bb612bbd565b5b828204905092915050565b60006129d282612a65565b91506129dd83612a65565b9250828210156129f0576129ef612b8e565b5b828203905092915050565b6000612a0682612a45565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612a9c578082015181840152602081019050612a81565b83811115612aab576000848401525b50505050565b60006002820490506001821680612ac957607f821691505b60208210811415612add57612adc612bec565b5b50919050565b612aec82612c8d565b810181811067ffffffffffffffff82111715612b0b57612b0a612c4a565b5b80604052505050565b6000612b1f82612a65565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612b5257612b51612b8e565b5b600182019050919050565b6000612b6882612a65565b9150612b7383612a65565b925082612b8357612b82612bbd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61314e816129fb565b811461315957600080fd5b50565b61316581612a0d565b811461317057600080fd5b50565b61317c81612a19565b811461318757600080fd5b50565b61319381612a65565b811461319e57600080fd5b5056fea26469706673582212205e1907380a721616801307de877ad3e9f34022b555cc0b8d1fe5880b1000edcc64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b46414e544f4d5f4341525300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054643415253000000000000000000000000000000000000000000000000000000

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b46414e544f4d5f4341525300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054643415253000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): FANTOM_CARS
Arg [1] : _symbol (string): FCARS

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [3] : 46414e544f4d5f43415253000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 4643415253000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

34564:1951:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22374:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23319:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24878:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24401:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25768:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26178:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36425:87;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34915:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23013:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22743:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2375:94;;;:::i;:::-;;1724:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23488:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25171:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26434:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35394:801;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36209:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25537:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2624:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22374:305;22476:4;22528:25;22513:40;;;:11;:40;;;;:105;;;;22585:33;22570:48;;;:11;:48;;;;22513:105;:158;;;;22635:36;22659:11;22635:23;:36::i;:::-;22513:158;22493:178;;22374:305;;;:::o;23319:100::-;23373:13;23406:5;23399:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23319:100;:::o;24878:221::-;24954:7;24982:16;24990:7;24982;:16::i;:::-;24974:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25067:15;:24;25083:7;25067:24;;;;;;;;;;;;;;;;;;;;;25060:31;;24878:221;;;:::o;24401:411::-;24482:13;24498:23;24513:7;24498:14;:23::i;:::-;24482:39;;24546:5;24540:11;;:2;:11;;;;24532:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24640:5;24624:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24649:37;24666:5;24673:12;:10;:12::i;:::-;24649:16;:37::i;:::-;24624:62;24602:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24783:21;24792:2;24796:7;24783:8;:21::i;:::-;24471:341;24401:411;;:::o;25768:339::-;25963:41;25982:12;:10;:12::i;:::-;25996:7;25963:18;:41::i;:::-;25955:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26071:28;26081:4;26087:2;26091:7;26071:9;:28::i;:::-;25768:339;;;:::o;26178:185::-;26316:39;26333:4;26339:2;26343:7;26316:39;;;;;;;;;;;;:16;:39::i;:::-;26178:185;;;:::o;36425:87::-;1955:12;:10;:12::i;:::-;1944:23;;:7;:5;:7::i;:::-;:23;;;1936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36489:15:::1;36495:8;36489:5;:15::i;:::-;36425:87:::0;:::o;34915:111::-;1955:12;:10;:12::i;:::-;1944:23;;:7;:5;:7::i;:::-;:23;;;1936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35010:8:::1;34991:16;:27;;;;;;;;;;;;:::i;:::-;;34915:111:::0;:::o;23013:239::-;23085:7;23105:13;23121:7;:16;23129:7;23121:16;;;;;;;;;;;;;;;;;;;;;23105:32;;23173:1;23156:19;;:5;:19;;;;23148:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23239:5;23232:12;;;23013:239;;;:::o;22743:208::-;22815:7;22860:1;22843:19;;:5;:19;;;;22835:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22927:9;:16;22937:5;22927:16;;;;;;;;;;;;;;;;22920:23;;22743:208;;;:::o;2375:94::-;1955:12;:10;:12::i;:::-;1944:23;;:7;:5;:7::i;:::-;:23;;;1936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2440:21:::1;2458:1;2440:9;:21::i;:::-;2375:94::o:0;1724:87::-;1770:7;1797:6;;;;;;;;;;;1790:13;;1724:87;:::o;23488:104::-;23544:13;23577:7;23570:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23488:104;:::o;25171:295::-;25286:12;:10;:12::i;:::-;25274:24;;:8;:24;;;;25266:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25386:8;25341:18;:32;25360:12;:10;:12::i;:::-;25341:32;;;;;;;;;;;;;;;:42;25374:8;25341:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25439:8;25410:48;;25425:12;:10;:12::i;:::-;25410:48;;;25449:8;25410:48;;;;;;:::i;:::-;;;;;;;;25171:295;;:::o;26434:328::-;26609:41;26628:12;:10;:12::i;:::-;26642:7;26609:18;:41::i;:::-;26601:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26715:39;26729:4;26735:2;26739:7;26748:5;26715:13;:39::i;:::-;26434:328;;;;:::o;35394:801::-;35467:13;35501:16;35509:7;35501;:16::i;:::-;35493:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;35582:23;35608:10;:19;35619:7;35608:19;;;;;;;;;;;35582:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35638:18;35659:10;:8;:10::i;:::-;35638:31;;35775:1;35759:4;35753:18;:23;35749:72;;;35800:9;35793:16;;;;;;35749:72;35951:1;35931:9;35925:23;:27;35921:108;;;36000:4;36006:9;35983:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35969:48;;;;;;35921:108;36161:4;36167:18;:7;:16;:18::i;:::-;36144:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36130:57;;;;35394:801;;;;:::o;36209:208::-;1955:12;:10;:12::i;:::-;1944:23;;:7;:5;:7::i;:::-;:23;;;1936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36345:20:::1;36351:3;36356:8;36345:5;:20::i;:::-;36376:33;36389:8;36399:9;36376:12;:33::i;:::-;36209:208:::0;;;:::o;25537:164::-;25634:4;25658:18;:25;25677:5;25658:25;;;;;;;;;;;;;;;:35;25684:8;25658:35;;;;;;;;;;;;;;;;;;;;;;;;;25651:42;;25537:164;;;;:::o;2624:192::-;1955:12;:10;:12::i;:::-;1944:23;;:7;:5;:7::i;:::-;:23;;;1936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2733:1:::1;2713:22;;:8;:22;;;;2705:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2789:19;2799:8;2789:9;:19::i;:::-;2624:192:::0;:::o;20847:157::-;20932:4;20971:25;20956:40;;;:11;:40;;;;20949:47;;20847:157;;;:::o;28272:127::-;28337:4;28389:1;28361:30;;:7;:16;28369:7;28361:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28354:37;;28272:127;;;:::o;567:98::-;620:7;647:10;640:17;;567:98;:::o;32254:174::-;32356:2;32329:15;:24;32345:7;32329:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32412:7;32408:2;32374:46;;32383:23;32398:7;32383:14;:23::i;:::-;32374:46;;;;;;;;;;;;32254:174;;:::o;28566:348::-;28659:4;28684:16;28692:7;28684;:16::i;:::-;28676:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28760:13;28776:23;28791:7;28776:14;:23::i;:::-;28760:39;;28829:5;28818:16;;:7;:16;;;:51;;;;28862:7;28838:31;;:20;28850:7;28838:11;:20::i;:::-;:31;;;28818:51;:87;;;;28873:32;28890:5;28897:7;28873:16;:32::i;:::-;28818:87;28810:96;;;28566:348;;;;:::o;31558:578::-;31717:4;31690:31;;:23;31705:7;31690:14;:23::i;:::-;:31;;;31682:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31800:1;31786:16;;:2;:16;;;;31778:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31856:39;31877:4;31883:2;31887:7;31856:20;:39::i;:::-;31960:29;31977:1;31981:7;31960:8;:29::i;:::-;32021:1;32002:9;:15;32012:4;32002:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32050:1;32033:9;:13;32043:2;32033:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32081:2;32062:7;:16;32070:7;32062:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32120:7;32116:2;32101:27;;32110:4;32101:27;;;;;;;;;;;;31558:578;;;:::o;30861:360::-;30921:13;30937:23;30952:7;30937:14;:23::i;:::-;30921:39;;30973:48;30994:5;31009:1;31013:7;30973:20;:48::i;:::-;31062:29;31079:1;31083:7;31062:8;:29::i;:::-;31124:1;31104:9;:16;31114:5;31104:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;31143:7;:16;31151:7;31143:16;;;;;;;;;;;;31136:23;;;;;;;;;;;31205:7;31201:1;31177:36;;31186:5;31177:36;;;;;;;;;;;;30910:311;30861:360;:::o;2824:173::-;2880:16;2899:6;;;;;;;;;;;2880:25;;2925:8;2916:6;;:17;;;;;;;;;;;;;;;;;;2980:8;2949:40;;2970:8;2949:40;;;;;;;;;;;;2869:128;2824:173;:::o;27644:315::-;27801:28;27811:4;27817:2;27821:7;27801:9;:28::i;:::-;27848:48;27871:4;27877:2;27881:7;27890:5;27848:22;:48::i;:::-;27840:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27644:315;;;;:::o;35265:117::-;35325:13;35358:16;35351:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35265:117;:::o;18359:723::-;18415:13;18645:1;18636:5;:10;18632:53;;;18663:10;;;;;;;;;;;;;;;;;;;;;18632:53;18695:12;18710:5;18695:20;;18726:14;18751:78;18766:1;18758:4;:9;18751:78;;18784:8;;;;;:::i;:::-;;;;18815:2;18807:10;;;;;:::i;:::-;;;18751:78;;;18839:19;18871:6;18861:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18839:39;;18889:154;18905:1;18896:5;:10;18889:154;;18933:1;18923:11;;;;;:::i;:::-;;;19000:2;18992:5;:10;;;;:::i;:::-;18979:2;:24;;;;:::i;:::-;18966:39;;18949:6;18956;18949:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;19029:2;19020:11;;;;;:::i;:::-;;;18889:154;;;19067:6;19053:21;;;;;18359:723;;;;:::o;30250:382::-;30344:1;30330:16;;:2;:16;;;;30322:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30403:16;30411:7;30403;:16::i;:::-;30402:17;30394:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30465:45;30494:1;30498:2;30502:7;30465:20;:45::i;:::-;30540:1;30523:9;:13;30533:2;30523:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30571:2;30552:7;:16;30560:7;30552:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30616:7;30612:2;30591:33;;30608:1;30591:33;;;;;;;;;;;;30250:382;;:::o;35038:215::-;35138:16;35146:7;35138;:16::i;:::-;35130:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35236:9;35214:10;:19;35225:7;35214:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;35038:215;;:::o;34364:126::-;;;;:::o;32993:799::-;33148:4;33169:15;:2;:13;;;:15::i;:::-;33165:620;;;33221:2;33205:36;;;33242:12;:10;:12::i;:::-;33256:4;33262:7;33271:5;33205:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33201:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33464:1;33447:6;:13;:18;33443:272;;;33490:60;;;;;;;;;;:::i;:::-;;;;;;;;33443:272;33665:6;33659:13;33650:6;33646:2;33642:15;33635:38;33201:529;33338:41;;;33328:51;;;:6;:51;;;;33321:58;;;;;33165:620;33769:4;33762:11;;32993:799;;;;;;;:::o;10773:387::-;10833:4;11041:12;11108:7;11096:20;11088:28;;11151:1;11144:4;:8;11137:15;;;10773:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:799::-;5707:6;5715;5723;5772:2;5760:9;5751:7;5747:23;5743:32;5740:119;;;5778:79;;:::i;:::-;5740:119;5898:1;5923:53;5968:7;5959:6;5948:9;5944:22;5923:53;:::i;:::-;5913:63;;5869:117;6025:2;6051:53;6096:7;6087:6;6076:9;6072:22;6051:53;:::i;:::-;6041:63;;5996:118;6181:2;6170:9;6166:18;6153:32;6212:18;6204:6;6201:30;6198:117;;;6234:79;;:::i;:::-;6198:117;6339:63;6394:7;6385:6;6374:9;6370:22;6339:63;:::i;:::-;6329:73;;6124:288;5620:799;;;;;:::o;6425:327::-;6483:6;6532:2;6520:9;6511:7;6507:23;6503:32;6500:119;;;6538:79;;:::i;:::-;6500:119;6658:1;6683:52;6727:7;6718:6;6707:9;6703:22;6683:52;:::i;:::-;6673:62;;6629:116;6425:327;;;;:::o;6758:349::-;6827:6;6876:2;6864:9;6855:7;6851:23;6847:32;6844:119;;;6882:79;;:::i;:::-;6844:119;7002:1;7027:63;7082:7;7073:6;7062:9;7058:22;7027:63;:::i;:::-;7017:73;;6973:127;6758:349;;;;:::o;7113:509::-;7182:6;7231:2;7219:9;7210:7;7206:23;7202:32;7199:119;;;7237:79;;:::i;:::-;7199:119;7385:1;7374:9;7370:17;7357:31;7415:18;7407:6;7404:30;7401:117;;;7437:79;;:::i;:::-;7401:117;7542:63;7597:7;7588:6;7577:9;7573:22;7542:63;:::i;:::-;7532:73;;7328:287;7113:509;;;;:::o;7628:329::-;7687:6;7736:2;7724:9;7715:7;7711:23;7707:32;7704:119;;;7742:79;;:::i;:::-;7704:119;7862:1;7887:53;7932:7;7923:6;7912:9;7908:22;7887:53;:::i;:::-;7877:63;;7833:117;7628:329;;;;:::o;7963:118::-;8050:24;8068:5;8050:24;:::i;:::-;8045:3;8038:37;7963:118;;:::o;8087:109::-;8168:21;8183:5;8168:21;:::i;:::-;8163:3;8156:34;8087:109;;:::o;8202:360::-;8288:3;8316:38;8348:5;8316:38;:::i;:::-;8370:70;8433:6;8428:3;8370:70;:::i;:::-;8363:77;;8449:52;8494:6;8489:3;8482:4;8475:5;8471:16;8449:52;:::i;:::-;8526:29;8548:6;8526:29;:::i;:::-;8521:3;8517:39;8510:46;;8292:270;8202:360;;;;:::o;8568:364::-;8656:3;8684:39;8717:5;8684:39;:::i;:::-;8739:71;8803:6;8798:3;8739:71;:::i;:::-;8732:78;;8819:52;8864:6;8859:3;8852:4;8845:5;8841:16;8819:52;:::i;:::-;8896:29;8918:6;8896:29;:::i;:::-;8891:3;8887:39;8880:46;;8660:272;8568:364;;;;:::o;8938:377::-;9044:3;9072:39;9105:5;9072:39;:::i;:::-;9127:89;9209:6;9204:3;9127:89;:::i;:::-;9120:96;;9225:52;9270:6;9265:3;9258:4;9251:5;9247:16;9225:52;:::i;:::-;9302:6;9297:3;9293:16;9286:23;;9048:267;8938:377;;;;:::o;9321:366::-;9463:3;9484:67;9548:2;9543:3;9484:67;:::i;:::-;9477:74;;9560:93;9649:3;9560:93;:::i;:::-;9678:2;9673:3;9669:12;9662:19;;9321:366;;;:::o;9693:::-;9835:3;9856:67;9920:2;9915:3;9856:67;:::i;:::-;9849:74;;9932:93;10021:3;9932:93;:::i;:::-;10050:2;10045:3;10041:12;10034:19;;9693:366;;;:::o;10065:::-;10207:3;10228:67;10292:2;10287:3;10228:67;:::i;:::-;10221:74;;10304:93;10393:3;10304:93;:::i;:::-;10422:2;10417:3;10413:12;10406:19;;10065:366;;;:::o;10437:::-;10579:3;10600:67;10664:2;10659:3;10600:67;:::i;:::-;10593:74;;10676:93;10765:3;10676:93;:::i;:::-;10794:2;10789:3;10785:12;10778:19;;10437:366;;;:::o;10809:::-;10951:3;10972:67;11036:2;11031:3;10972:67;:::i;:::-;10965:74;;11048:93;11137:3;11048:93;:::i;:::-;11166:2;11161:3;11157:12;11150:19;;10809:366;;;:::o;11181:::-;11323:3;11344:67;11408:2;11403:3;11344:67;:::i;:::-;11337:74;;11420:93;11509:3;11420:93;:::i;:::-;11538:2;11533:3;11529:12;11522:19;;11181:366;;;:::o;11553:::-;11695:3;11716:67;11780:2;11775:3;11716:67;:::i;:::-;11709:74;;11792:93;11881:3;11792:93;:::i;:::-;11910:2;11905:3;11901:12;11894:19;;11553:366;;;:::o;11925:::-;12067:3;12088:67;12152:2;12147:3;12088:67;:::i;:::-;12081:74;;12164:93;12253:3;12164:93;:::i;:::-;12282:2;12277:3;12273:12;12266:19;;11925:366;;;:::o;12297:::-;12439:3;12460:67;12524:2;12519:3;12460:67;:::i;:::-;12453:74;;12536:93;12625:3;12536:93;:::i;:::-;12654:2;12649:3;12645:12;12638:19;;12297:366;;;:::o;12669:::-;12811:3;12832:67;12896:2;12891:3;12832:67;:::i;:::-;12825:74;;12908:93;12997:3;12908:93;:::i;:::-;13026:2;13021:3;13017:12;13010:19;;12669:366;;;:::o;13041:::-;13183:3;13204:67;13268:2;13263:3;13204:67;:::i;:::-;13197:74;;13280:93;13369:3;13280:93;:::i;:::-;13398:2;13393:3;13389:12;13382:19;;13041:366;;;:::o;13413:::-;13555:3;13576:67;13640:2;13635:3;13576:67;:::i;:::-;13569:74;;13652:93;13741:3;13652:93;:::i;:::-;13770:2;13765:3;13761:12;13754:19;;13413:366;;;:::o;13785:::-;13927:3;13948:67;14012:2;14007:3;13948:67;:::i;:::-;13941:74;;14024:93;14113:3;14024:93;:::i;:::-;14142:2;14137:3;14133:12;14126:19;;13785:366;;;:::o;14157:::-;14299:3;14320:67;14384:2;14379:3;14320:67;:::i;:::-;14313:74;;14396:93;14485:3;14396:93;:::i;:::-;14514:2;14509:3;14505:12;14498:19;;14157:366;;;:::o;14529:::-;14671:3;14692:67;14756:2;14751:3;14692:67;:::i;:::-;14685:74;;14768:93;14857:3;14768:93;:::i;:::-;14886:2;14881:3;14877:12;14870:19;;14529:366;;;:::o;14901:::-;15043:3;15064:67;15128:2;15123:3;15064:67;:::i;:::-;15057:74;;15140:93;15229:3;15140:93;:::i;:::-;15258:2;15253:3;15249:12;15242:19;;14901:366;;;:::o;15273:::-;15415:3;15436:67;15500:2;15495:3;15436:67;:::i;:::-;15429:74;;15512:93;15601:3;15512:93;:::i;:::-;15630:2;15625:3;15621:12;15614:19;;15273:366;;;:::o;15645:118::-;15732:24;15750:5;15732:24;:::i;:::-;15727:3;15720:37;15645:118;;:::o;15769:435::-;15949:3;15971:95;16062:3;16053:6;15971:95;:::i;:::-;15964:102;;16083:95;16174:3;16165:6;16083:95;:::i;:::-;16076:102;;16195:3;16188:10;;15769:435;;;;;:::o;16210:222::-;16303:4;16341:2;16330:9;16326:18;16318:26;;16354:71;16422:1;16411:9;16407:17;16398:6;16354:71;:::i;:::-;16210:222;;;;:::o;16438:640::-;16633:4;16671:3;16660:9;16656:19;16648:27;;16685:71;16753:1;16742:9;16738:17;16729:6;16685:71;:::i;:::-;16766:72;16834:2;16823:9;16819:18;16810:6;16766:72;:::i;:::-;16848;16916:2;16905:9;16901:18;16892:6;16848:72;:::i;:::-;16967:9;16961:4;16957:20;16952:2;16941:9;16937:18;16930:48;16995:76;17066:4;17057:6;16995:76;:::i;:::-;16987:84;;16438:640;;;;;;;:::o;17084:210::-;17171:4;17209:2;17198:9;17194:18;17186:26;;17222:65;17284:1;17273:9;17269:17;17260:6;17222:65;:::i;:::-;17084:210;;;;:::o;17300:313::-;17413:4;17451:2;17440:9;17436:18;17428:26;;17500:9;17494:4;17490:20;17486:1;17475:9;17471:17;17464:47;17528:78;17601:4;17592:6;17528:78;:::i;:::-;17520:86;;17300:313;;;;:::o;17619:419::-;17785:4;17823:2;17812:9;17808:18;17800:26;;17872:9;17866:4;17862:20;17858:1;17847:9;17843:17;17836:47;17900:131;18026:4;17900:131;:::i;:::-;17892:139;;17619:419;;;:::o;18044:::-;18210:4;18248:2;18237:9;18233:18;18225:26;;18297:9;18291:4;18287:20;18283:1;18272:9;18268:17;18261:47;18325:131;18451:4;18325:131;:::i;:::-;18317:139;;18044:419;;;:::o;18469:::-;18635:4;18673:2;18662:9;18658:18;18650:26;;18722:9;18716:4;18712:20;18708:1;18697:9;18693:17;18686:47;18750:131;18876:4;18750:131;:::i;:::-;18742:139;;18469:419;;;:::o;18894:::-;19060:4;19098:2;19087:9;19083:18;19075:26;;19147:9;19141:4;19137:20;19133:1;19122:9;19118:17;19111:47;19175:131;19301:4;19175:131;:::i;:::-;19167:139;;18894:419;;;:::o;19319:::-;19485:4;19523:2;19512:9;19508:18;19500:26;;19572:9;19566:4;19562:20;19558:1;19547:9;19543:17;19536:47;19600:131;19726:4;19600:131;:::i;:::-;19592:139;;19319:419;;;:::o;19744:::-;19910:4;19948:2;19937:9;19933:18;19925:26;;19997:9;19991:4;19987:20;19983:1;19972:9;19968:17;19961:47;20025:131;20151:4;20025:131;:::i;:::-;20017:139;;19744:419;;;:::o;20169:::-;20335:4;20373:2;20362:9;20358:18;20350:26;;20422:9;20416:4;20412:20;20408:1;20397:9;20393:17;20386:47;20450:131;20576:4;20450:131;:::i;:::-;20442:139;;20169:419;;;:::o;20594:::-;20760:4;20798:2;20787:9;20783:18;20775:26;;20847:9;20841:4;20837:20;20833:1;20822:9;20818:17;20811:47;20875:131;21001:4;20875:131;:::i;:::-;20867:139;;20594:419;;;:::o;21019:::-;21185:4;21223:2;21212:9;21208:18;21200:26;;21272:9;21266:4;21262:20;21258:1;21247:9;21243:17;21236:47;21300:131;21426:4;21300:131;:::i;:::-;21292:139;;21019:419;;;:::o;21444:::-;21610:4;21648:2;21637:9;21633:18;21625:26;;21697:9;21691:4;21687:20;21683:1;21672:9;21668:17;21661:47;21725:131;21851:4;21725:131;:::i;:::-;21717:139;;21444:419;;;:::o;21869:::-;22035:4;22073:2;22062:9;22058:18;22050:26;;22122:9;22116:4;22112:20;22108:1;22097:9;22093:17;22086:47;22150:131;22276:4;22150:131;:::i;:::-;22142:139;;21869:419;;;:::o;22294:::-;22460:4;22498:2;22487:9;22483:18;22475:26;;22547:9;22541:4;22537:20;22533:1;22522:9;22518:17;22511:47;22575:131;22701:4;22575:131;:::i;:::-;22567:139;;22294:419;;;:::o;22719:::-;22885:4;22923:2;22912:9;22908:18;22900:26;;22972:9;22966:4;22962:20;22958:1;22947:9;22943:17;22936:47;23000:131;23126:4;23000:131;:::i;:::-;22992:139;;22719:419;;;:::o;23144:::-;23310:4;23348:2;23337:9;23333:18;23325:26;;23397:9;23391:4;23387:20;23383:1;23372:9;23368:17;23361:47;23425:131;23551:4;23425:131;:::i;:::-;23417:139;;23144:419;;;:::o;23569:::-;23735:4;23773:2;23762:9;23758:18;23750:26;;23822:9;23816:4;23812:20;23808:1;23797:9;23793:17;23786:47;23850:131;23976:4;23850:131;:::i;:::-;23842:139;;23569:419;;;:::o;23994:::-;24160:4;24198:2;24187:9;24183:18;24175:26;;24247:9;24241:4;24237:20;24233:1;24222:9;24218:17;24211:47;24275:131;24401:4;24275:131;:::i;:::-;24267:139;;23994:419;;;:::o;24419:::-;24585:4;24623:2;24612:9;24608:18;24600:26;;24672:9;24666:4;24662:20;24658:1;24647:9;24643:17;24636:47;24700:131;24826:4;24700:131;:::i;:::-;24692:139;;24419:419;;;:::o;24844:222::-;24937:4;24975:2;24964:9;24960:18;24952:26;;24988:71;25056:1;25045:9;25041:17;25032:6;24988:71;:::i;:::-;24844:222;;;;:::o;25072:129::-;25106:6;25133:20;;:::i;:::-;25123:30;;25162:33;25190:4;25182:6;25162:33;:::i;:::-;25072:129;;;:::o;25207:75::-;25240:6;25273:2;25267:9;25257:19;;25207:75;:::o;25288:307::-;25349:4;25439:18;25431:6;25428:30;25425:56;;;25461:18;;:::i;:::-;25425:56;25499:29;25521:6;25499:29;:::i;:::-;25491:37;;25583:4;25577;25573:15;25565:23;;25288:307;;;:::o;25601:308::-;25663:4;25753:18;25745:6;25742:30;25739:56;;;25775:18;;:::i;:::-;25739:56;25813:29;25835:6;25813:29;:::i;:::-;25805:37;;25897:4;25891;25887:15;25879:23;;25601:308;;;:::o;25915:98::-;25966:6;26000:5;25994:12;25984:22;;25915:98;;;:::o;26019:99::-;26071:6;26105:5;26099:12;26089:22;;26019:99;;;:::o;26124:168::-;26207:11;26241:6;26236:3;26229:19;26281:4;26276:3;26272:14;26257:29;;26124:168;;;;:::o;26298:169::-;26382:11;26416:6;26411:3;26404:19;26456:4;26451:3;26447:14;26432:29;;26298:169;;;;:::o;26473:148::-;26575:11;26612:3;26597:18;;26473:148;;;;:::o;26627:305::-;26667:3;26686:20;26704:1;26686:20;:::i;:::-;26681:25;;26720:20;26738:1;26720:20;:::i;:::-;26715:25;;26874:1;26806:66;26802:74;26799:1;26796:81;26793:107;;;26880:18;;:::i;:::-;26793:107;26924:1;26921;26917:9;26910:16;;26627:305;;;;:::o;26938:185::-;26978:1;26995:20;27013:1;26995:20;:::i;:::-;26990:25;;27029:20;27047:1;27029:20;:::i;:::-;27024:25;;27068:1;27058:35;;27073:18;;:::i;:::-;27058:35;27115:1;27112;27108:9;27103:14;;26938:185;;;;:::o;27129:191::-;27169:4;27189:20;27207:1;27189:20;:::i;:::-;27184:25;;27223:20;27241:1;27223:20;:::i;:::-;27218:25;;27262:1;27259;27256:8;27253:34;;;27267:18;;:::i;:::-;27253:34;27312:1;27309;27305:9;27297:17;;27129:191;;;;:::o;27326:96::-;27363:7;27392:24;27410:5;27392:24;:::i;:::-;27381:35;;27326:96;;;:::o;27428:90::-;27462:7;27505:5;27498:13;27491:21;27480:32;;27428:90;;;:::o;27524:149::-;27560:7;27600:66;27593:5;27589:78;27578:89;;27524:149;;;:::o;27679:126::-;27716:7;27756:42;27749:5;27745:54;27734:65;;27679:126;;;:::o;27811:77::-;27848:7;27877:5;27866:16;;27811:77;;;:::o;27894:154::-;27978:6;27973:3;27968;27955:30;28040:1;28031:6;28026:3;28022:16;28015:27;27894:154;;;:::o;28054:307::-;28122:1;28132:113;28146:6;28143:1;28140:13;28132:113;;;28231:1;28226:3;28222:11;28216:18;28212:1;28207:3;28203:11;28196:39;28168:2;28165:1;28161:10;28156:15;;28132:113;;;28263:6;28260:1;28257:13;28254:101;;;28343:1;28334:6;28329:3;28325:16;28318:27;28254:101;28103:258;28054:307;;;:::o;28367:320::-;28411:6;28448:1;28442:4;28438:12;28428:22;;28495:1;28489:4;28485:12;28516:18;28506:81;;28572:4;28564:6;28560:17;28550:27;;28506:81;28634:2;28626:6;28623:14;28603:18;28600:38;28597:84;;;28653:18;;:::i;:::-;28597:84;28418:269;28367:320;;;:::o;28693:281::-;28776:27;28798:4;28776:27;:::i;:::-;28768:6;28764:40;28906:6;28894:10;28891:22;28870:18;28858:10;28855:34;28852:62;28849:88;;;28917:18;;:::i;:::-;28849:88;28957:10;28953:2;28946:22;28736:238;28693:281;;:::o;28980:233::-;29019:3;29042:24;29060:5;29042:24;:::i;:::-;29033:33;;29088:66;29081:5;29078:77;29075:103;;;29158:18;;:::i;:::-;29075:103;29205:1;29198:5;29194:13;29187:20;;28980:233;;;:::o;29219:176::-;29251:1;29268:20;29286:1;29268:20;:::i;:::-;29263:25;;29302:20;29320:1;29302:20;:::i;:::-;29297:25;;29341:1;29331:35;;29346:18;;:::i;:::-;29331:35;29387:1;29384;29380:9;29375:14;;29219:176;;;;:::o;29401:180::-;29449:77;29446:1;29439:88;29546:4;29543:1;29536:15;29570:4;29567:1;29560:15;29587:180;29635:77;29632:1;29625:88;29732:4;29729:1;29722:15;29756:4;29753:1;29746:15;29773:180;29821:77;29818:1;29811:88;29918:4;29915:1;29908:15;29942:4;29939:1;29932:15;29959:180;30007:77;30004:1;29997:88;30104:4;30101:1;30094:15;30128:4;30125:1;30118:15;30145:180;30193:77;30190:1;30183:88;30290:4;30287:1;30280:15;30314:4;30311:1;30304:15;30331:117;30440:1;30437;30430:12;30454:117;30563:1;30560;30553:12;30577:117;30686:1;30683;30676:12;30700:117;30809:1;30806;30799:12;30823:102;30864:6;30915:2;30911:7;30906:2;30899:5;30895:14;30891:28;30881:38;;30823:102;;;:::o;30931:237::-;31071:34;31067:1;31059:6;31055:14;31048:58;31140:20;31135:2;31127:6;31123:15;31116:45;30931:237;:::o;31174:225::-;31314:34;31310:1;31302:6;31298:14;31291:58;31383:8;31378:2;31370:6;31366:15;31359:33;31174:225;:::o;31405:178::-;31545:30;31541:1;31533:6;31529:14;31522:54;31405:178;:::o;31589:223::-;31729:34;31725:1;31717:6;31713:14;31706:58;31798:6;31793:2;31785:6;31781:15;31774:31;31589:223;:::o;31818:175::-;31958:27;31954:1;31946:6;31942:14;31935:51;31818:175;:::o;31999:231::-;32139:34;32135:1;32127:6;32123:14;32116:58;32208:14;32203:2;32195:6;32191:15;32184:39;31999:231;:::o;32236:243::-;32376:34;32372:1;32364:6;32360:14;32353:58;32445:26;32440:2;32432:6;32428:15;32421:51;32236:243;:::o;32485:229::-;32625:34;32621:1;32613:6;32609:14;32602:58;32694:12;32689:2;32681:6;32677:15;32670:37;32485:229;:::o;32720:228::-;32860:34;32856:1;32848:6;32844:14;32837:58;32929:11;32924:2;32916:6;32912:15;32905:36;32720:228;:::o;32954:182::-;33094:34;33090:1;33082:6;33078:14;33071:58;32954:182;:::o;33142:231::-;33282:34;33278:1;33270:6;33266:14;33259:58;33351:14;33346:2;33338:6;33334:15;33327:39;33142:231;:::o;33379:::-;33519:34;33515:1;33507:6;33503:14;33496:58;33588:14;33583:2;33575:6;33571:15;33564:39;33379:231;:::o;33616:182::-;33756:34;33752:1;33744:6;33740:14;33733:58;33616:182;:::o;33804:228::-;33944:34;33940:1;33932:6;33928:14;33921:58;34013:11;34008:2;34000:6;33996:15;33989:36;33804:228;:::o;34038:234::-;34178:34;34174:1;34166:6;34162:14;34155:58;34247:17;34242:2;34234:6;34230:15;34223:42;34038:234;:::o;34278:220::-;34418:34;34414:1;34406:6;34402:14;34395:58;34487:3;34482:2;34474:6;34470:15;34463:28;34278:220;:::o;34504:236::-;34644:34;34640:1;34632:6;34628:14;34621:58;34713:19;34708:2;34700:6;34696:15;34689:44;34504:236;:::o;34746:122::-;34819:24;34837:5;34819:24;:::i;:::-;34812:5;34809:35;34799:63;;34858:1;34855;34848:12;34799:63;34746:122;:::o;34874:116::-;34944:21;34959:5;34944:21;:::i;:::-;34937:5;34934:32;34924:60;;34980:1;34977;34970:12;34924:60;34874:116;:::o;34996:120::-;35068:23;35085:5;35068:23;:::i;:::-;35061:5;35058:34;35048:62;;35106:1;35103;35096:12;35048:62;34996:120;:::o;35122:122::-;35195:24;35213:5;35195:24;:::i;:::-;35188:5;35185:35;35175:63;;35234:1;35231;35224:12;35175:63;35122:122;:::o

Swarm Source

ipfs://5e1907380a721616801307de877ad3e9f34022b555cc0b8d1fe5880b1000edcc
Loading