ETH Price: $3,494.50 (+2.52%)

Token

Aradena Comics (AC)
 

Overview

Max Total Supply

300 AC

Holders

118

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
0 AC
0xce25fc8a802ef77ad244429387cd8eb0ca2557a9
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
AradenaComics

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-01
*/

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

// File @openzeppelin/contracts/utils/introspection/[email protected]

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/[email protected]



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC721/[email protected]



pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]



pragma solidity ^0.8.0;

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

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

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


// File @openzeppelin/contracts/utils/[email protected]



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/[email protected]



pragma solidity ^0.8.0;

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

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


// File @openzeppelin/contracts/utils/[email protected]



pragma solidity ^0.8.0;

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

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

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

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

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


// File @openzeppelin/contracts/utils/introspection/[email protected]



pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/[email protected]



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 @openzeppelin/contracts/token/ERC721/extensions/[email protected]



pragma solidity ^0.8.0;

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

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

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/access/[email protected]



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);
    }
}


// File contracts/comics/AradenaComics.sol



pragma solidity ^0.8.0;


contract AradenaComics is ERC721Enumerable, Ownable {

  /**
   * @dev URI base for tokenURI function. Token URI is constructed as _baseTokenURI + tokenId.
   */
  string public baseTokenURI;

  /**
   * @dev Mapping of addresses that are authorized to add mint new tokens.
   */
  mapping (address => bool) public authorizedAddresses;

  /**
   * @dev Only authorized addresses can call a function with this modifier.
   */
  modifier onlyAuthorized() {
    require(authorizedAddresses[msg.sender] || owner() == msg.sender, "Not authorized");
    _;
  }

  /**
   * @dev Implements ERC721 contract and sets default values. 
   */
  constructor(string memory baseURI)
    ERC721("Aradena Comics", "AC")
  {
    setBaseURI(baseURI);
  }

   /**
   * @dev Sets or revokes authorized address.
   * @param addr Address we are setting.
   * @param isAuthorized True is setting, false if we are revoking.
   */
  function setAuthorizedAddress(address addr, bool isAuthorized)
    external
    onlyOwner()
  {
    authorizedAddresses[addr] = isAuthorized;
  }

  /**
   * @dev Sets metadata base uri.
   */
  function setBaseURI(string memory baseURI)
    public
    onlyOwner
  {
    baseTokenURI = baseURI;
  }

  /**
   * @dev Overrides _baseURI function so we define the URI base we will be using.
   */
  function _baseURI()
    internal
    view
    virtual
    override
    returns (string memory)
  {
    return baseTokenURI;
  }

  /**
   * @dev Creates a new NFT.
   * @param to Receiver of the newly created token. 
   * @param tokenId Unique if of the NFT.
   */
  function mint(
    address to,
    uint256 tokenId
  )
    external
    onlyAuthorized()
  {
    _safeMint(to, tokenId);
  }

  /**
   * @dev Gets all nftIDs of the owner.
   */
  function tokensOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 count = balanceOf(_owner);
    uint256[] memory result = new uint256[](count);
    for (uint256 index = 0; index < count; index++) {
      result[index] = tokenOfOwnerByIndex(_owner, index);
    }
    return result;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","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":"","type":"address"}],"name":"authorizedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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"}],"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":"address","name":"addr","type":"address"},{"internalType":"bool","name":"isAuthorized","type":"bool"}],"name":"setAuthorizedAddress","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620040d7380380620040d78339818101604052810190620000379190620004ff565b6040518060400160405280600e81526020017f41726164656e6120436f6d6963730000000000000000000000000000000000008152506040518060400160405280600281526020017f41430000000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb929190620002b2565b508060019080519060200190620000d4929190620002b2565b505050620000f7620000eb6200010f60201b60201c565b6200011760201b60201c565b6200010881620001dd60201b60201c565b5062000638565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001ed6200010f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002136200028860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200026c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200026390620005b1565b60405180910390fd5b80600b908051906020019062000284929190620002b2565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002c09062000602565b90600052602060002090601f016020900481019282620002e4576000855562000330565b82601f10620002ff57805160ff191683800117855562000330565b8280016001018555821562000330579182015b828111156200032f57825182559160200191906001019062000312565b5b5090506200033f919062000343565b5090565b5b808211156200035e57600081600090555060010162000344565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003cb8262000380565b810181811067ffffffffffffffff82111715620003ed57620003ec62000391565b5b80604052505050565b60006200040262000362565b9050620004108282620003c0565b919050565b600067ffffffffffffffff82111562000433576200043262000391565b5b6200043e8262000380565b9050602081019050919050565b60005b838110156200046b5780820151818401526020810190506200044e565b838111156200047b576000848401525b50505050565b600062000498620004928462000415565b620003f6565b905082815260208101848484011115620004b757620004b66200037b565b5b620004c48482856200044b565b509392505050565b600082601f830112620004e457620004e362000376565b5b8151620004f684826020860162000481565b91505092915050565b6000602082840312156200051857620005176200036c565b5b600082015167ffffffffffffffff81111562000539576200053862000371565b5b6200054784828501620004cc565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200059960208362000550565b9150620005a68262000561565b602082019050919050565b60006020820190508181036000830152620005cc816200058a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200061b57607f821691505b60208210811415620006325762000631620005d3565b5b50919050565b613a8f80620006486000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80636352211e116100de578063a22cb46511610097578063d547cfb711610071578063d547cfb71461045a578063e985e9c514610478578063f19e207e146104a8578063f2fde38b146104d857610173565b8063a22cb465146103f2578063b88d4fde1461040e578063c87b56dd1461042a57610173565b80636352211e1461031c57806370a082311461034c578063715018a61461037c5780638462151c146103865780638da5cb5b146103b657806395d89b41146103d457610173565b806323b872dd1161013057806323b872dd1461024c5780632f745c591461026857806340c10f191461029857806342842e0e146102b45780634f6ccce7146102d057806355f804b31461030057610173565b806301ffc9a71461017857806306fdde03146101a8578063081812fc146101c6578063095ea7b3146101f65780631351cf511461021257806318160ddd1461022e575b600080fd5b610192600480360381019061018d919061258b565b6104f4565b60405161019f91906125d3565b60405180910390f35b6101b061056e565b6040516101bd9190612687565b60405180910390f35b6101e060048036038101906101db91906126df565b610600565b6040516101ed919061274d565b60405180910390f35b610210600480360381019061020b9190612794565b610685565b005b61022c60048036038101906102279190612800565b61079d565b005b610236610874565b604051610243919061284f565b60405180910390f35b6102666004803603810190610261919061286a565b610881565b005b610282600480360381019061027d9190612794565b6108e1565b60405161028f919061284f565b60405180910390f35b6102b260048036038101906102ad9190612794565b610986565b005b6102ce60048036038101906102c9919061286a565b610a5d565b005b6102ea60048036038101906102e591906126df565b610a7d565b6040516102f7919061284f565b60405180910390f35b61031a600480360381019061031591906129f2565b610aee565b005b610336600480360381019061033191906126df565b610b84565b604051610343919061274d565b60405180910390f35b61036660048036038101906103619190612a3b565b610c36565b604051610373919061284f565b60405180910390f35b610384610cee565b005b6103a0600480360381019061039b9190612a3b565b610d76565b6040516103ad9190612b26565b60405180910390f35b6103be610e24565b6040516103cb919061274d565b60405180910390f35b6103dc610e4e565b6040516103e99190612687565b60405180910390f35b61040c60048036038101906104079190612800565b610ee0565b005b61042860048036038101906104239190612be9565b611061565b005b610444600480360381019061043f91906126df565b6110c3565b6040516104519190612687565b60405180910390f35b61046261116a565b60405161046f9190612687565b60405180910390f35b610492600480360381019061048d9190612c6c565b6111f8565b60405161049f91906125d3565b60405180910390f35b6104c260048036038101906104bd9190612a3b565b61128c565b6040516104cf91906125d3565b60405180910390f35b6104f260048036038101906104ed9190612a3b565b6112ac565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105675750610566826113a4565b5b9050919050565b60606000805461057d90612cdb565b80601f01602080910402602001604051908101604052809291908181526020018280546105a990612cdb565b80156105f65780601f106105cb576101008083540402835291602001916105f6565b820191906000526020600020905b8154815290600101906020018083116105d957829003601f168201915b5050505050905090565b600061060b82611486565b61064a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064190612d7f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061069082610b84565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f890612e11565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107206114f2565b73ffffffffffffffffffffffffffffffffffffffff16148061074f575061074e816107496114f2565b6111f8565b5b61078e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078590612ea3565b60405180910390fd5b61079883836114fa565b505050565b6107a56114f2565b73ffffffffffffffffffffffffffffffffffffffff166107c3610e24565b73ffffffffffffffffffffffffffffffffffffffff1614610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081090612f0f565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600880549050905090565b61089261088c6114f2565b826115b3565b6108d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c890612fa1565b60405180910390fd5b6108dc838383611691565b505050565b60006108ec83610c36565b821061092d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092490613033565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610a1057503373ffffffffffffffffffffffffffffffffffffffff166109f8610e24565b73ffffffffffffffffffffffffffffffffffffffff16145b610a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a469061309f565b60405180910390fd5b610a5982826118ed565b5050565b610a7883838360405180602001604052806000815250611061565b505050565b6000610a87610874565b8210610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf90613131565b60405180910390fd5b60088281548110610adc57610adb613151565b5b90600052602060002001549050919050565b610af66114f2565b73ffffffffffffffffffffffffffffffffffffffff16610b14610e24565b73ffffffffffffffffffffffffffffffffffffffff1614610b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6190612f0f565b60405180910390fd5b80600b9080519060200190610b8092919061247c565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c24906131f2565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90613284565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cf66114f2565b73ffffffffffffffffffffffffffffffffffffffff16610d14610e24565b73ffffffffffffffffffffffffffffffffffffffff1614610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6190612f0f565b60405180910390fd5b610d74600061190b565b565b60606000610d8383610c36565b905060008167ffffffffffffffff811115610da157610da06128c7565b5b604051908082528060200260200182016040528015610dcf5781602001602082028036833780820191505090505b50905060005b82811015610e1957610de785826108e1565b828281518110610dfa57610df9613151565b5b6020026020010181815250508080610e11906132d3565b915050610dd5565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e5d90612cdb565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8990612cdb565b8015610ed65780601f10610eab57610100808354040283529160200191610ed6565b820191906000526020600020905b815481529060010190602001808311610eb957829003601f168201915b5050505050905090565b610ee86114f2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4d90613368565b60405180910390fd5b8060056000610f636114f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166110106114f2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161105591906125d3565b60405180910390a35050565b61107261106c6114f2565b836115b3565b6110b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a890612fa1565b60405180910390fd5b6110bd848484846119d1565b50505050565b60606110ce82611486565b61110d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611104906133fa565b60405180910390fd5b6000611117611a2d565b905060008151116111375760405180602001604052806000815250611162565b8061114184611abf565b604051602001611152929190613456565b6040516020818303038152906040525b915050919050565b600b805461117790612cdb565b80601f01602080910402602001604051908101604052809291908181526020018280546111a390612cdb565b80156111f05780601f106111c5576101008083540402835291602001916111f0565b820191906000526020600020905b8154815290600101906020018083116111d357829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c6020528060005260406000206000915054906101000a900460ff1681565b6112b46114f2565b73ffffffffffffffffffffffffffffffffffffffff166112d2610e24565b73ffffffffffffffffffffffffffffffffffffffff1614611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f90612f0f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138f906134ec565b60405180910390fd5b6113a18161190b565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061146f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061147f575061147e82611c20565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661156d83610b84565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115be82611486565b6115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f49061357e565b60405180910390fd5b600061160883610b84565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061167757508373ffffffffffffffffffffffffffffffffffffffff1661165f84610600565b73ffffffffffffffffffffffffffffffffffffffff16145b80611688575061168781856111f8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116b182610b84565b73ffffffffffffffffffffffffffffffffffffffff1614611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90613610565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e906136a2565b60405180910390fd5b611782838383611c8a565b61178d6000826114fa565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117dd91906136c2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461183491906136f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611907828260405180602001604052806000815250611d9e565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6119dc848484611691565b6119e884848484611df9565b611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e906137be565b60405180910390fd5b50505050565b6060600b8054611a3c90612cdb565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6890612cdb565b8015611ab55780601f10611a8a57610100808354040283529160200191611ab5565b820191906000526020600020905b815481529060010190602001808311611a9857829003601f168201915b5050505050905090565b60606000821415611b07576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611c1b565b600082905060005b60008214611b39578080611b22906132d3565b915050600a82611b32919061380d565b9150611b0f565b60008167ffffffffffffffff811115611b5557611b546128c7565b5b6040519080825280601f01601f191660200182016040528015611b875781602001600182028036833780820191505090505b5090505b60008514611c1457600182611ba091906136c2565b9150600a85611baf919061383e565b6030611bbb91906136f6565b60f81b818381518110611bd157611bd0613151565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611c0d919061380d565b9450611b8b565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611c95838383611f90565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cd857611cd381611f95565b611d17565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611d1657611d158382611fde565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d5a57611d558161214b565b611d99565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611d9857611d97828261221c565b5b5b505050565b611da8838361229b565b611db56000848484611df9565b611df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611deb906137be565b60405180910390fd5b505050565b6000611e1a8473ffffffffffffffffffffffffffffffffffffffff16612469565b15611f83578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e436114f2565b8786866040518563ffffffff1660e01b8152600401611e6594939291906138c4565b602060405180830381600087803b158015611e7f57600080fd5b505af1925050508015611eb057506040513d601f19601f82011682018060405250810190611ead9190613925565b60015b611f33573d8060008114611ee0576040519150601f19603f3d011682016040523d82523d6000602084013e611ee5565b606091505b50600081511415611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f22906137be565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f88565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611feb84610c36565b611ff591906136c2565b90506000600760008481526020019081526020016000205490508181146120da576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061215f91906136c2565b905060006009600084815260200190815260200160002054905060006008838154811061218f5761218e613151565b5b9060005260206000200154905080600883815481106121b1576121b0613151565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612200576121ff613952565b5b6001900381819060005260206000200160009055905550505050565b600061222783610c36565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561230b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612302906139cd565b60405180910390fd5b61231481611486565b15612354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234b90613a39565b60405180910390fd5b61236060008383611c8a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123b091906136f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461248890612cdb565b90600052602060002090601f0160209004810192826124aa57600085556124f1565b82601f106124c357805160ff19168380011785556124f1565b828001600101855582156124f1579182015b828111156124f05782518255916020019190600101906124d5565b5b5090506124fe9190612502565b5090565b5b8082111561251b576000816000905550600101612503565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61256881612533565b811461257357600080fd5b50565b6000813590506125858161255f565b92915050565b6000602082840312156125a1576125a0612529565b5b60006125af84828501612576565b91505092915050565b60008115159050919050565b6125cd816125b8565b82525050565b60006020820190506125e860008301846125c4565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561262857808201518184015260208101905061260d565b83811115612637576000848401525b50505050565b6000601f19601f8301169050919050565b6000612659826125ee565b61266381856125f9565b935061267381856020860161260a565b61267c8161263d565b840191505092915050565b600060208201905081810360008301526126a1818461264e565b905092915050565b6000819050919050565b6126bc816126a9565b81146126c757600080fd5b50565b6000813590506126d9816126b3565b92915050565b6000602082840312156126f5576126f4612529565b5b6000612703848285016126ca565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127378261270c565b9050919050565b6127478161272c565b82525050565b6000602082019050612762600083018461273e565b92915050565b6127718161272c565b811461277c57600080fd5b50565b60008135905061278e81612768565b92915050565b600080604083850312156127ab576127aa612529565b5b60006127b98582860161277f565b92505060206127ca858286016126ca565b9150509250929050565b6127dd816125b8565b81146127e857600080fd5b50565b6000813590506127fa816127d4565b92915050565b6000806040838503121561281757612816612529565b5b60006128258582860161277f565b9250506020612836858286016127eb565b9150509250929050565b612849816126a9565b82525050565b60006020820190506128646000830184612840565b92915050565b60008060006060848603121561288357612882612529565b5b60006128918682870161277f565b93505060206128a28682870161277f565b92505060406128b3868287016126ca565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6128ff8261263d565b810181811067ffffffffffffffff8211171561291e5761291d6128c7565b5b80604052505050565b600061293161251f565b905061293d82826128f6565b919050565b600067ffffffffffffffff82111561295d5761295c6128c7565b5b6129668261263d565b9050602081019050919050565b82818337600083830152505050565b600061299561299084612942565b612927565b9050828152602081018484840111156129b1576129b06128c2565b5b6129bc848285612973565b509392505050565b600082601f8301126129d9576129d86128bd565b5b81356129e9848260208601612982565b91505092915050565b600060208284031215612a0857612a07612529565b5b600082013567ffffffffffffffff811115612a2657612a2561252e565b5b612a32848285016129c4565b91505092915050565b600060208284031215612a5157612a50612529565b5b6000612a5f8482850161277f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612a9d816126a9565b82525050565b6000612aaf8383612a94565b60208301905092915050565b6000602082019050919050565b6000612ad382612a68565b612add8185612a73565b9350612ae883612a84565b8060005b83811015612b19578151612b008882612aa3565b9750612b0b83612abb565b925050600181019050612aec565b5085935050505092915050565b60006020820190508181036000830152612b408184612ac8565b905092915050565b600067ffffffffffffffff821115612b6357612b626128c7565b5b612b6c8261263d565b9050602081019050919050565b6000612b8c612b8784612b48565b612927565b905082815260208101848484011115612ba857612ba76128c2565b5b612bb3848285612973565b509392505050565b600082601f830112612bd057612bcf6128bd565b5b8135612be0848260208601612b79565b91505092915050565b60008060008060808587031215612c0357612c02612529565b5b6000612c118782880161277f565b9450506020612c228782880161277f565b9350506040612c33878288016126ca565b925050606085013567ffffffffffffffff811115612c5457612c5361252e565b5b612c6087828801612bbb565b91505092959194509250565b60008060408385031215612c8357612c82612529565b5b6000612c918582860161277f565b9250506020612ca28582860161277f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612cf357607f821691505b60208210811415612d0757612d06612cac565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612d69602c836125f9565b9150612d7482612d0d565b604082019050919050565b60006020820190508181036000830152612d9881612d5c565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612dfb6021836125f9565b9150612e0682612d9f565b604082019050919050565b60006020820190508181036000830152612e2a81612dee565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612e8d6038836125f9565b9150612e9882612e31565b604082019050919050565b60006020820190508181036000830152612ebc81612e80565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612ef96020836125f9565b9150612f0482612ec3565b602082019050919050565b60006020820190508181036000830152612f2881612eec565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612f8b6031836125f9565b9150612f9682612f2f565b604082019050919050565b60006020820190508181036000830152612fba81612f7e565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061301d602b836125f9565b915061302882612fc1565b604082019050919050565b6000602082019050818103600083015261304c81613010565b9050919050565b7f4e6f7420617574686f72697a6564000000000000000000000000000000000000600082015250565b6000613089600e836125f9565b915061309482613053565b602082019050919050565b600060208201905081810360008301526130b88161307c565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061311b602c836125f9565b9150613126826130bf565b604082019050919050565b6000602082019050818103600083015261314a8161310e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006131dc6029836125f9565b91506131e782613180565b604082019050919050565b6000602082019050818103600083015261320b816131cf565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061326e602a836125f9565b915061327982613212565b604082019050919050565b6000602082019050818103600083015261329d81613261565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006132de826126a9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613311576133106132a4565b5b600182019050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006133526019836125f9565b915061335d8261331c565b602082019050919050565b6000602082019050818103600083015261338181613345565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006133e4602f836125f9565b91506133ef82613388565b604082019050919050565b60006020820190508181036000830152613413816133d7565b9050919050565b600081905092915050565b6000613430826125ee565b61343a818561341a565b935061344a81856020860161260a565b80840191505092915050565b60006134628285613425565b915061346e8284613425565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134d66026836125f9565b91506134e18261347a565b604082019050919050565b60006020820190508181036000830152613505816134c9565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613568602c836125f9565b91506135738261350c565b604082019050919050565b600060208201905081810360008301526135978161355b565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006135fa6029836125f9565b91506136058261359e565b604082019050919050565b60006020820190508181036000830152613629816135ed565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061368c6024836125f9565b915061369782613630565b604082019050919050565b600060208201905081810360008301526136bb8161367f565b9050919050565b60006136cd826126a9565b91506136d8836126a9565b9250828210156136eb576136ea6132a4565b5b828203905092915050565b6000613701826126a9565b915061370c836126a9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613741576137406132a4565b5b828201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006137a86032836125f9565b91506137b38261374c565b604082019050919050565b600060208201905081810360008301526137d78161379b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613818826126a9565b9150613823836126a9565b925082613833576138326137de565b5b828204905092915050565b6000613849826126a9565b9150613854836126a9565b925082613864576138636137de565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006138968261386f565b6138a0818561387a565b93506138b081856020860161260a565b6138b98161263d565b840191505092915050565b60006080820190506138d9600083018761273e565b6138e6602083018661273e565b6138f36040830185612840565b8181036060830152613905818461388b565b905095945050505050565b60008151905061391f8161255f565b92915050565b60006020828403121561393b5761393a612529565b5b600061394984828501613910565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006139b76020836125f9565b91506139c282613981565b602082019050919050565b600060208201905081810360008301526139e6816139aa565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613a23601c836125f9565b9150613a2e826139ed565b602082019050919050565b60006020820190508181036000830152613a5281613a16565b905091905056fea26469706673582212208f4fad6f29f7e2f300cad547bd54727a6ef7d63bb611afe1899d36166635b93b64736f6c634300080900330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002068747470733a2f2f6170692e61726164656e612e696f2f746f6b656e732f332f

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101735760003560e01c80636352211e116100de578063a22cb46511610097578063d547cfb711610071578063d547cfb71461045a578063e985e9c514610478578063f19e207e146104a8578063f2fde38b146104d857610173565b8063a22cb465146103f2578063b88d4fde1461040e578063c87b56dd1461042a57610173565b80636352211e1461031c57806370a082311461034c578063715018a61461037c5780638462151c146103865780638da5cb5b146103b657806395d89b41146103d457610173565b806323b872dd1161013057806323b872dd1461024c5780632f745c591461026857806340c10f191461029857806342842e0e146102b45780634f6ccce7146102d057806355f804b31461030057610173565b806301ffc9a71461017857806306fdde03146101a8578063081812fc146101c6578063095ea7b3146101f65780631351cf511461021257806318160ddd1461022e575b600080fd5b610192600480360381019061018d919061258b565b6104f4565b60405161019f91906125d3565b60405180910390f35b6101b061056e565b6040516101bd9190612687565b60405180910390f35b6101e060048036038101906101db91906126df565b610600565b6040516101ed919061274d565b60405180910390f35b610210600480360381019061020b9190612794565b610685565b005b61022c60048036038101906102279190612800565b61079d565b005b610236610874565b604051610243919061284f565b60405180910390f35b6102666004803603810190610261919061286a565b610881565b005b610282600480360381019061027d9190612794565b6108e1565b60405161028f919061284f565b60405180910390f35b6102b260048036038101906102ad9190612794565b610986565b005b6102ce60048036038101906102c9919061286a565b610a5d565b005b6102ea60048036038101906102e591906126df565b610a7d565b6040516102f7919061284f565b60405180910390f35b61031a600480360381019061031591906129f2565b610aee565b005b610336600480360381019061033191906126df565b610b84565b604051610343919061274d565b60405180910390f35b61036660048036038101906103619190612a3b565b610c36565b604051610373919061284f565b60405180910390f35b610384610cee565b005b6103a0600480360381019061039b9190612a3b565b610d76565b6040516103ad9190612b26565b60405180910390f35b6103be610e24565b6040516103cb919061274d565b60405180910390f35b6103dc610e4e565b6040516103e99190612687565b60405180910390f35b61040c60048036038101906104079190612800565b610ee0565b005b61042860048036038101906104239190612be9565b611061565b005b610444600480360381019061043f91906126df565b6110c3565b6040516104519190612687565b60405180910390f35b61046261116a565b60405161046f9190612687565b60405180910390f35b610492600480360381019061048d9190612c6c565b6111f8565b60405161049f91906125d3565b60405180910390f35b6104c260048036038101906104bd9190612a3b565b61128c565b6040516104cf91906125d3565b60405180910390f35b6104f260048036038101906104ed9190612a3b565b6112ac565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105675750610566826113a4565b5b9050919050565b60606000805461057d90612cdb565b80601f01602080910402602001604051908101604052809291908181526020018280546105a990612cdb565b80156105f65780601f106105cb576101008083540402835291602001916105f6565b820191906000526020600020905b8154815290600101906020018083116105d957829003601f168201915b5050505050905090565b600061060b82611486565b61064a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064190612d7f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061069082610b84565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f890612e11565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107206114f2565b73ffffffffffffffffffffffffffffffffffffffff16148061074f575061074e816107496114f2565b6111f8565b5b61078e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078590612ea3565b60405180910390fd5b61079883836114fa565b505050565b6107a56114f2565b73ffffffffffffffffffffffffffffffffffffffff166107c3610e24565b73ffffffffffffffffffffffffffffffffffffffff1614610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081090612f0f565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600880549050905090565b61089261088c6114f2565b826115b3565b6108d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c890612fa1565b60405180910390fd5b6108dc838383611691565b505050565b60006108ec83610c36565b821061092d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092490613033565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610a1057503373ffffffffffffffffffffffffffffffffffffffff166109f8610e24565b73ffffffffffffffffffffffffffffffffffffffff16145b610a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a469061309f565b60405180910390fd5b610a5982826118ed565b5050565b610a7883838360405180602001604052806000815250611061565b505050565b6000610a87610874565b8210610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf90613131565b60405180910390fd5b60088281548110610adc57610adb613151565b5b90600052602060002001549050919050565b610af66114f2565b73ffffffffffffffffffffffffffffffffffffffff16610b14610e24565b73ffffffffffffffffffffffffffffffffffffffff1614610b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6190612f0f565b60405180910390fd5b80600b9080519060200190610b8092919061247c565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c24906131f2565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90613284565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cf66114f2565b73ffffffffffffffffffffffffffffffffffffffff16610d14610e24565b73ffffffffffffffffffffffffffffffffffffffff1614610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6190612f0f565b60405180910390fd5b610d74600061190b565b565b60606000610d8383610c36565b905060008167ffffffffffffffff811115610da157610da06128c7565b5b604051908082528060200260200182016040528015610dcf5781602001602082028036833780820191505090505b50905060005b82811015610e1957610de785826108e1565b828281518110610dfa57610df9613151565b5b6020026020010181815250508080610e11906132d3565b915050610dd5565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e5d90612cdb565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8990612cdb565b8015610ed65780601f10610eab57610100808354040283529160200191610ed6565b820191906000526020600020905b815481529060010190602001808311610eb957829003601f168201915b5050505050905090565b610ee86114f2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4d90613368565b60405180910390fd5b8060056000610f636114f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166110106114f2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161105591906125d3565b60405180910390a35050565b61107261106c6114f2565b836115b3565b6110b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a890612fa1565b60405180910390fd5b6110bd848484846119d1565b50505050565b60606110ce82611486565b61110d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611104906133fa565b60405180910390fd5b6000611117611a2d565b905060008151116111375760405180602001604052806000815250611162565b8061114184611abf565b604051602001611152929190613456565b6040516020818303038152906040525b915050919050565b600b805461117790612cdb565b80601f01602080910402602001604051908101604052809291908181526020018280546111a390612cdb565b80156111f05780601f106111c5576101008083540402835291602001916111f0565b820191906000526020600020905b8154815290600101906020018083116111d357829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c6020528060005260406000206000915054906101000a900460ff1681565b6112b46114f2565b73ffffffffffffffffffffffffffffffffffffffff166112d2610e24565b73ffffffffffffffffffffffffffffffffffffffff1614611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f90612f0f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138f906134ec565b60405180910390fd5b6113a18161190b565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061146f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061147f575061147e82611c20565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661156d83610b84565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115be82611486565b6115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f49061357e565b60405180910390fd5b600061160883610b84565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061167757508373ffffffffffffffffffffffffffffffffffffffff1661165f84610600565b73ffffffffffffffffffffffffffffffffffffffff16145b80611688575061168781856111f8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116b182610b84565b73ffffffffffffffffffffffffffffffffffffffff1614611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90613610565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e906136a2565b60405180910390fd5b611782838383611c8a565b61178d6000826114fa565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117dd91906136c2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461183491906136f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611907828260405180602001604052806000815250611d9e565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6119dc848484611691565b6119e884848484611df9565b611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e906137be565b60405180910390fd5b50505050565b6060600b8054611a3c90612cdb565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6890612cdb565b8015611ab55780601f10611a8a57610100808354040283529160200191611ab5565b820191906000526020600020905b815481529060010190602001808311611a9857829003601f168201915b5050505050905090565b60606000821415611b07576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611c1b565b600082905060005b60008214611b39578080611b22906132d3565b915050600a82611b32919061380d565b9150611b0f565b60008167ffffffffffffffff811115611b5557611b546128c7565b5b6040519080825280601f01601f191660200182016040528015611b875781602001600182028036833780820191505090505b5090505b60008514611c1457600182611ba091906136c2565b9150600a85611baf919061383e565b6030611bbb91906136f6565b60f81b818381518110611bd157611bd0613151565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611c0d919061380d565b9450611b8b565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611c95838383611f90565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cd857611cd381611f95565b611d17565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611d1657611d158382611fde565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d5a57611d558161214b565b611d99565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611d9857611d97828261221c565b5b5b505050565b611da8838361229b565b611db56000848484611df9565b611df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611deb906137be565b60405180910390fd5b505050565b6000611e1a8473ffffffffffffffffffffffffffffffffffffffff16612469565b15611f83578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e436114f2565b8786866040518563ffffffff1660e01b8152600401611e6594939291906138c4565b602060405180830381600087803b158015611e7f57600080fd5b505af1925050508015611eb057506040513d601f19601f82011682018060405250810190611ead9190613925565b60015b611f33573d8060008114611ee0576040519150601f19603f3d011682016040523d82523d6000602084013e611ee5565b606091505b50600081511415611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f22906137be565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f88565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611feb84610c36565b611ff591906136c2565b90506000600760008481526020019081526020016000205490508181146120da576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061215f91906136c2565b905060006009600084815260200190815260200160002054905060006008838154811061218f5761218e613151565b5b9060005260206000200154905080600883815481106121b1576121b0613151565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612200576121ff613952565b5b6001900381819060005260206000200160009055905550505050565b600061222783610c36565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561230b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612302906139cd565b60405180910390fd5b61231481611486565b15612354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234b90613a39565b60405180910390fd5b61236060008383611c8a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123b091906136f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461248890612cdb565b90600052602060002090601f0160209004810192826124aa57600085556124f1565b82601f106124c357805160ff19168380011785556124f1565b828001600101855582156124f1579182015b828111156124f05782518255916020019190600101906124d5565b5b5090506124fe9190612502565b5090565b5b8082111561251b576000816000905550600101612503565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61256881612533565b811461257357600080fd5b50565b6000813590506125858161255f565b92915050565b6000602082840312156125a1576125a0612529565b5b60006125af84828501612576565b91505092915050565b60008115159050919050565b6125cd816125b8565b82525050565b60006020820190506125e860008301846125c4565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561262857808201518184015260208101905061260d565b83811115612637576000848401525b50505050565b6000601f19601f8301169050919050565b6000612659826125ee565b61266381856125f9565b935061267381856020860161260a565b61267c8161263d565b840191505092915050565b600060208201905081810360008301526126a1818461264e565b905092915050565b6000819050919050565b6126bc816126a9565b81146126c757600080fd5b50565b6000813590506126d9816126b3565b92915050565b6000602082840312156126f5576126f4612529565b5b6000612703848285016126ca565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127378261270c565b9050919050565b6127478161272c565b82525050565b6000602082019050612762600083018461273e565b92915050565b6127718161272c565b811461277c57600080fd5b50565b60008135905061278e81612768565b92915050565b600080604083850312156127ab576127aa612529565b5b60006127b98582860161277f565b92505060206127ca858286016126ca565b9150509250929050565b6127dd816125b8565b81146127e857600080fd5b50565b6000813590506127fa816127d4565b92915050565b6000806040838503121561281757612816612529565b5b60006128258582860161277f565b9250506020612836858286016127eb565b9150509250929050565b612849816126a9565b82525050565b60006020820190506128646000830184612840565b92915050565b60008060006060848603121561288357612882612529565b5b60006128918682870161277f565b93505060206128a28682870161277f565b92505060406128b3868287016126ca565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6128ff8261263d565b810181811067ffffffffffffffff8211171561291e5761291d6128c7565b5b80604052505050565b600061293161251f565b905061293d82826128f6565b919050565b600067ffffffffffffffff82111561295d5761295c6128c7565b5b6129668261263d565b9050602081019050919050565b82818337600083830152505050565b600061299561299084612942565b612927565b9050828152602081018484840111156129b1576129b06128c2565b5b6129bc848285612973565b509392505050565b600082601f8301126129d9576129d86128bd565b5b81356129e9848260208601612982565b91505092915050565b600060208284031215612a0857612a07612529565b5b600082013567ffffffffffffffff811115612a2657612a2561252e565b5b612a32848285016129c4565b91505092915050565b600060208284031215612a5157612a50612529565b5b6000612a5f8482850161277f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612a9d816126a9565b82525050565b6000612aaf8383612a94565b60208301905092915050565b6000602082019050919050565b6000612ad382612a68565b612add8185612a73565b9350612ae883612a84565b8060005b83811015612b19578151612b008882612aa3565b9750612b0b83612abb565b925050600181019050612aec565b5085935050505092915050565b60006020820190508181036000830152612b408184612ac8565b905092915050565b600067ffffffffffffffff821115612b6357612b626128c7565b5b612b6c8261263d565b9050602081019050919050565b6000612b8c612b8784612b48565b612927565b905082815260208101848484011115612ba857612ba76128c2565b5b612bb3848285612973565b509392505050565b600082601f830112612bd057612bcf6128bd565b5b8135612be0848260208601612b79565b91505092915050565b60008060008060808587031215612c0357612c02612529565b5b6000612c118782880161277f565b9450506020612c228782880161277f565b9350506040612c33878288016126ca565b925050606085013567ffffffffffffffff811115612c5457612c5361252e565b5b612c6087828801612bbb565b91505092959194509250565b60008060408385031215612c8357612c82612529565b5b6000612c918582860161277f565b9250506020612ca28582860161277f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612cf357607f821691505b60208210811415612d0757612d06612cac565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612d69602c836125f9565b9150612d7482612d0d565b604082019050919050565b60006020820190508181036000830152612d9881612d5c565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612dfb6021836125f9565b9150612e0682612d9f565b604082019050919050565b60006020820190508181036000830152612e2a81612dee565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612e8d6038836125f9565b9150612e9882612e31565b604082019050919050565b60006020820190508181036000830152612ebc81612e80565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612ef96020836125f9565b9150612f0482612ec3565b602082019050919050565b60006020820190508181036000830152612f2881612eec565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612f8b6031836125f9565b9150612f9682612f2f565b604082019050919050565b60006020820190508181036000830152612fba81612f7e565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061301d602b836125f9565b915061302882612fc1565b604082019050919050565b6000602082019050818103600083015261304c81613010565b9050919050565b7f4e6f7420617574686f72697a6564000000000000000000000000000000000000600082015250565b6000613089600e836125f9565b915061309482613053565b602082019050919050565b600060208201905081810360008301526130b88161307c565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061311b602c836125f9565b9150613126826130bf565b604082019050919050565b6000602082019050818103600083015261314a8161310e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006131dc6029836125f9565b91506131e782613180565b604082019050919050565b6000602082019050818103600083015261320b816131cf565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061326e602a836125f9565b915061327982613212565b604082019050919050565b6000602082019050818103600083015261329d81613261565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006132de826126a9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613311576133106132a4565b5b600182019050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006133526019836125f9565b915061335d8261331c565b602082019050919050565b6000602082019050818103600083015261338181613345565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006133e4602f836125f9565b91506133ef82613388565b604082019050919050565b60006020820190508181036000830152613413816133d7565b9050919050565b600081905092915050565b6000613430826125ee565b61343a818561341a565b935061344a81856020860161260a565b80840191505092915050565b60006134628285613425565b915061346e8284613425565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134d66026836125f9565b91506134e18261347a565b604082019050919050565b60006020820190508181036000830152613505816134c9565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613568602c836125f9565b91506135738261350c565b604082019050919050565b600060208201905081810360008301526135978161355b565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006135fa6029836125f9565b91506136058261359e565b604082019050919050565b60006020820190508181036000830152613629816135ed565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061368c6024836125f9565b915061369782613630565b604082019050919050565b600060208201905081810360008301526136bb8161367f565b9050919050565b60006136cd826126a9565b91506136d8836126a9565b9250828210156136eb576136ea6132a4565b5b828203905092915050565b6000613701826126a9565b915061370c836126a9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613741576137406132a4565b5b828201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006137a86032836125f9565b91506137b38261374c565b604082019050919050565b600060208201905081810360008301526137d78161379b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613818826126a9565b9150613823836126a9565b925082613833576138326137de565b5b828204905092915050565b6000613849826126a9565b9150613854836126a9565b925082613864576138636137de565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006138968261386f565b6138a0818561387a565b93506138b081856020860161260a565b6138b98161263d565b840191505092915050565b60006080820190506138d9600083018761273e565b6138e6602083018661273e565b6138f36040830185612840565b8181036060830152613905818461388b565b905095945050505050565b60008151905061391f8161255f565b92915050565b60006020828403121561393b5761393a612529565b5b600061394984828501613910565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006139b76020836125f9565b91506139c282613981565b602082019050919050565b600060208201905081810360008301526139e6816139aa565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613a23601c836125f9565b9150613a2e826139ed565b602082019050919050565b60006020820190508181036000830152613a5281613a16565b905091905056fea26469706673582212208f4fad6f29f7e2f300cad547bd54727a6ef7d63bb611afe1899d36166635b93b64736f6c63430008090033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002068747470733a2f2f6170692e61726164656e612e696f2f746f6b656e732f332f

-----Decoded View---------------
Arg [0] : baseURI (string): https://api.aradena.io/tokens/3/

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [2] : 68747470733a2f2f6170692e61726164656e612e696f2f746f6b656e732f332f


Deployed Bytecode Sourcemap

43371:2171:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34858:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21747:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23306:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22829:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44312:150;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35498:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24196:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35166:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45010:132;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24606:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35688:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44517:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21441:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21171:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42661:94;;;:::i;:::-;;45203:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42010:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21916:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23599:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24862:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22091:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43540:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23965:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43663:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42910:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34858:224;34960:4;34999:35;34984:50;;;:11;:50;;;;:90;;;;35038:36;35062:11;35038:23;:36::i;:::-;34984:90;34977:97;;34858:224;;;:::o;21747:100::-;21801:13;21834:5;21827:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21747:100;:::o;23306:221::-;23382:7;23410:16;23418:7;23410;:16::i;:::-;23402:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23495:15;:24;23511:7;23495:24;;;;;;;;;;;;;;;;;;;;;23488:31;;23306:221;;;:::o;22829:411::-;22910:13;22926:23;22941:7;22926:14;:23::i;:::-;22910:39;;22974:5;22968:11;;:2;:11;;;;22960:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23068:5;23052:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23077:37;23094:5;23101:12;:10;:12::i;:::-;23077:16;:37::i;:::-;23052:62;23030:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23211:21;23220:2;23224:7;23211:8;:21::i;:::-;22899:341;22829:411;;:::o;44312:150::-;42241:12;:10;:12::i;:::-;42230:23;;:7;:5;:7::i;:::-;:23;;;42222:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44444:12:::1;44416:19;:25;44436:4;44416:25;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;44312:150:::0;;:::o;35498:113::-;35559:7;35586:10;:17;;;;35579:24;;35498:113;:::o;24196:339::-;24391:41;24410:12;:10;:12::i;:::-;24424:7;24391:18;:41::i;:::-;24383:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24499:28;24509:4;24515:2;24519:7;24499:9;:28::i;:::-;24196:339;;;:::o;35166:256::-;35263:7;35299:23;35316:5;35299:16;:23::i;:::-;35291:5;:31;35283:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35388:12;:19;35401:5;35388:19;;;;;;;;;;;;;;;:26;35408:5;35388:26;;;;;;;;;;;;35381:33;;35166:256;;;;:::o;45010:132::-;43854:19;:31;43874:10;43854:31;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;43900:10;43889:21;;:7;:5;:7::i;:::-;:21;;;43854:56;43846:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;45114:22:::1;45124:2;45128:7;45114:9;:22::i;:::-;45010:132:::0;;:::o;24606:185::-;24744:39;24761:4;24767:2;24771:7;24744:39;;;;;;;;;;;;:16;:39::i;:::-;24606:185;;;:::o;35688:233::-;35763:7;35799:30;:28;:30::i;:::-;35791:5;:38;35783:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35896:10;35907:5;35896:17;;;;;;;;:::i;:::-;;;;;;;;;;35889:24;;35688:233;;;:::o;44517:108::-;42241:12;:10;:12::i;:::-;42230:23;;:7;:5;:7::i;:::-;:23;;;42222:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44612:7:::1;44597:12;:22;;;;;;;;;;;;:::i;:::-;;44517:108:::0;:::o;21441:239::-;21513:7;21533:13;21549:7;:16;21557:7;21549:16;;;;;;;;;;;;;;;;;;;;;21533:32;;21601:1;21584:19;;:5;:19;;;;21576:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21667:5;21660:12;;;21441:239;;;:::o;21171:208::-;21243:7;21288:1;21271:19;;:5;:19;;;;21263:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21355:9;:16;21365:5;21355:16;;;;;;;;;;;;;;;;21348:23;;21171:208;;;:::o;42661:94::-;42241:12;:10;:12::i;:::-;42230:23;;:7;:5;:7::i;:::-;:23;;;42222:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42726:21:::1;42744:1;42726:9;:21::i;:::-;42661:94::o:0;45203:336::-;45278:16;45306:13;45322:17;45332:6;45322:9;:17::i;:::-;45306:33;;45346:23;45386:5;45372:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45346:46;;45404:13;45399:115;45431:5;45423;:13;45399:115;;;45472:34;45492:6;45500:5;45472:19;:34::i;:::-;45456:6;45463:5;45456:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;45438:7;;;;;:::i;:::-;;;;45399:115;;;;45527:6;45520:13;;;;45203:336;;;:::o;42010:87::-;42056:7;42083:6;;;;;;;;;;;42076:13;;42010:87;:::o;21916:104::-;21972:13;22005:7;21998:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21916:104;:::o;23599:295::-;23714:12;:10;:12::i;:::-;23702:24;;:8;:24;;;;23694:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23814:8;23769:18;:32;23788:12;:10;:12::i;:::-;23769:32;;;;;;;;;;;;;;;:42;23802:8;23769:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23867:8;23838:48;;23853:12;:10;:12::i;:::-;23838:48;;;23877:8;23838:48;;;;;;:::i;:::-;;;;;;;;23599:295;;:::o;24862:328::-;25037:41;25056:12;:10;:12::i;:::-;25070:7;25037:18;:41::i;:::-;25029:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25143:39;25157:4;25163:2;25167:7;25176:5;25143:13;:39::i;:::-;24862:328;;;;:::o;22091:334::-;22164:13;22198:16;22206:7;22198;:16::i;:::-;22190:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22279:21;22303:10;:8;:10::i;:::-;22279:34;;22355:1;22337:7;22331:21;:25;:86;;;;;;;;;;;;;;;;;22383:7;22392:18;:7;:16;:18::i;:::-;22366:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22331:86;22324:93;;;22091:334;;;:::o;43540:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23965:164::-;24062:4;24086:18;:25;24105:5;24086:25;;;;;;;;;;;;;;;:35;24112:8;24086:35;;;;;;;;;;;;;;;;;;;;;;;;;24079:42;;23965:164;;;;:::o;43663:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;42910:192::-;42241:12;:10;:12::i;:::-;42230:23;;:7;:5;:7::i;:::-;:23;;;42222:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43019:1:::1;42999:22;;:8;:22;;;;42991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43075:19;43085:8;43075:9;:19::i;:::-;42910:192:::0;:::o;20802:305::-;20904:4;20956:25;20941:40;;;:11;:40;;;;:105;;;;21013:33;20998:48;;;:11;:48;;;;20941:105;:158;;;;21063:36;21087:11;21063:23;:36::i;:::-;20941:158;20921:178;;20802:305;;;:::o;26700:127::-;26765:4;26817:1;26789:30;;:7;:16;26797:7;26789:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26782:37;;26700:127;;;:::o;16204:98::-;16257:7;16284:10;16277:17;;16204:98;:::o;30682:174::-;30784:2;30757:15;:24;30773:7;30757:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30840:7;30836:2;30802:46;;30811:23;30826:7;30811:14;:23::i;:::-;30802:46;;;;;;;;;;;;30682:174;;:::o;26994:348::-;27087:4;27112:16;27120:7;27112;:16::i;:::-;27104:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27188:13;27204:23;27219:7;27204:14;:23::i;:::-;27188:39;;27257:5;27246:16;;:7;:16;;;:51;;;;27290:7;27266:31;;:20;27278:7;27266:11;:20::i;:::-;:31;;;27246:51;:87;;;;27301:32;27318:5;27325:7;27301:16;:32::i;:::-;27246:87;27238:96;;;26994:348;;;;:::o;29986:578::-;30145:4;30118:31;;:23;30133:7;30118:14;:23::i;:::-;:31;;;30110:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30228:1;30214:16;;:2;:16;;;;30206:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30284:39;30305:4;30311:2;30315:7;30284:20;:39::i;:::-;30388:29;30405:1;30409:7;30388:8;:29::i;:::-;30449:1;30430:9;:15;30440:4;30430:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30478:1;30461:9;:13;30471:2;30461:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30509:2;30490:7;:16;30498:7;30490:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30548:7;30544:2;30529:27;;30538:4;30529:27;;;;;;;;;;;;29986:578;;;:::o;27684:110::-;27760:26;27770:2;27774:7;27760:26;;;;;;;;;;;;:9;:26::i;:::-;27684:110;;:::o;43110:173::-;43166:16;43185:6;;;;;;;;;;;43166:25;;43211:8;43202:6;;:17;;;;;;;;;;;;;;;;;;43266:8;43235:40;;43256:8;43235:40;;;;;;;;;;;;43155:128;43110:173;:::o;26072:315::-;26229:28;26239:4;26245:2;26249:7;26229:9;:28::i;:::-;26276:48;26299:4;26305:2;26309:7;26318:5;26276:22;:48::i;:::-;26268:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26072:315;;;;:::o;44728:135::-;44813:13;44845:12;44838:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44728:135;:::o;16737:723::-;16793:13;17023:1;17014:5;:10;17010:53;;;17041:10;;;;;;;;;;;;;;;;;;;;;17010:53;17073:12;17088:5;17073:20;;17104:14;17129:78;17144:1;17136:4;:9;17129:78;;17162:8;;;;;:::i;:::-;;;;17193:2;17185:10;;;;;:::i;:::-;;;17129:78;;;17217:19;17249:6;17239:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17217:39;;17267:154;17283:1;17274:5;:10;17267:154;;17311:1;17301:11;;;;;:::i;:::-;;;17378:2;17370:5;:10;;;;:::i;:::-;17357:2;:24;;;;:::i;:::-;17344:39;;17327:6;17334;17327:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17407:2;17398:11;;;;;:::i;:::-;;;17267:154;;;17445:6;17431:21;;;;;16737:723;;;;:::o;19300:157::-;19385:4;19424:25;19409:40;;;:11;:40;;;;19402:47;;19300:157;;;:::o;36534:589::-;36678:45;36705:4;36711:2;36715:7;36678:26;:45::i;:::-;36756:1;36740:18;;:4;:18;;;36736:187;;;36775:40;36807:7;36775:31;:40::i;:::-;36736:187;;;36845:2;36837:10;;:4;:10;;;36833:90;;36864:47;36897:4;36903:7;36864:32;:47::i;:::-;36833:90;36736:187;36951:1;36937:16;;:2;:16;;;36933:183;;;36970:45;37007:7;36970:36;:45::i;:::-;36933:183;;;37043:4;37037:10;;:2;:10;;;37033:83;;37064:40;37092:2;37096:7;37064:27;:40::i;:::-;37033:83;36933:183;36534:589;;;:::o;28021:321::-;28151:18;28157:2;28161:7;28151:5;:18::i;:::-;28202:54;28233:1;28237:2;28241:7;28250:5;28202:22;:54::i;:::-;28180:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28021:321;;;:::o;31421:799::-;31576:4;31597:15;:2;:13;;;:15::i;:::-;31593:620;;;31649:2;31633:36;;;31670:12;:10;:12::i;:::-;31684:4;31690:7;31699:5;31633:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31629:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31892:1;31875:6;:13;:18;31871:272;;;31918:60;;;;;;;;;;:::i;:::-;;;;;;;;31871:272;32093:6;32087:13;32078:6;32074:2;32070:15;32063:38;31629:529;31766:41;;;31756:51;;;:6;:51;;;;31749:58;;;;;31593:620;32197:4;32190:11;;31421:799;;;;;;;:::o;32792:126::-;;;;:::o;37846:164::-;37950:10;:17;;;;37923:15;:24;37939:7;37923:24;;;;;;;;;;;:44;;;;37978:10;37994:7;37978:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37846:164;:::o;38637:988::-;38903:22;38953:1;38928:22;38945:4;38928:16;:22::i;:::-;:26;;;;:::i;:::-;38903:51;;38965:18;38986:17;:26;39004:7;38986:26;;;;;;;;;;;;38965:47;;39133:14;39119:10;:28;39115:328;;39164:19;39186:12;:18;39199:4;39186:18;;;;;;;;;;;;;;;:34;39205:14;39186:34;;;;;;;;;;;;39164:56;;39270:11;39237:12;:18;39250:4;39237:18;;;;;;;;;;;;;;;:30;39256:10;39237:30;;;;;;;;;;;:44;;;;39387:10;39354:17;:30;39372:11;39354:30;;;;;;;;;;;:43;;;;39149:294;39115:328;39539:17;:26;39557:7;39539:26;;;;;;;;;;;39532:33;;;39583:12;:18;39596:4;39583:18;;;;;;;;;;;;;;;:34;39602:14;39583:34;;;;;;;;;;;39576:41;;;38718:907;;38637:988;;:::o;39920:1079::-;40173:22;40218:1;40198:10;:17;;;;:21;;;;:::i;:::-;40173:46;;40230:18;40251:15;:24;40267:7;40251:24;;;;;;;;;;;;40230:45;;40602:19;40624:10;40635:14;40624:26;;;;;;;;:::i;:::-;;;;;;;;;;40602:48;;40688:11;40663:10;40674;40663:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40799:10;40768:15;:28;40784:11;40768:28;;;;;;;;;;;:41;;;;40940:15;:24;40956:7;40940:24;;;;;;;;;;;40933:31;;;40975:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39991:1008;;;39920:1079;:::o;37424:221::-;37509:14;37526:20;37543:2;37526:16;:20::i;:::-;37509:37;;37584:7;37557:12;:16;37570:2;37557:16;;;;;;;;;;;;;;;:24;37574:6;37557:24;;;;;;;;;;;:34;;;;37631:6;37602:17;:26;37620:7;37602:26;;;;;;;;;;;:35;;;;37498:147;37424:221;;:::o;28678:382::-;28772:1;28758:16;;:2;:16;;;;28750:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28831:16;28839:7;28831;:16::i;:::-;28830:17;28822:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28893:45;28922:1;28926:2;28930:7;28893:20;:45::i;:::-;28968:1;28951:9;:13;28961:2;28951:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28999:2;28980:7;:16;28988:7;28980:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29044:7;29040:2;29019:33;;29036:1;29019:33;;;;;;;;;;;;28678:382;;:::o;8240:387::-;8300:4;8508:12;8575:7;8563:20;8555:28;;8618:1;8611:4;:8;8604:15;;;8240:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:116::-;5008:21;5023:5;5008:21;:::i;:::-;5001:5;4998:32;4988:60;;5044:1;5041;5034:12;4988:60;4938:116;:::o;5060:133::-;5103:5;5141:6;5128:20;5119:29;;5157:30;5181:5;5157:30;:::i;:::-;5060:133;;;;:::o;5199:468::-;5264:6;5272;5321:2;5309:9;5300:7;5296:23;5292:32;5289:119;;;5327:79;;:::i;:::-;5289:119;5447:1;5472:53;5517:7;5508:6;5497:9;5493:22;5472:53;:::i;:::-;5462:63;;5418:117;5574:2;5600:50;5642:7;5633:6;5622:9;5618:22;5600:50;:::i;:::-;5590:60;;5545:115;5199:468;;;;;:::o;5673:118::-;5760:24;5778:5;5760:24;:::i;:::-;5755:3;5748:37;5673:118;;:::o;5797:222::-;5890:4;5928:2;5917:9;5913:18;5905:26;;5941:71;6009:1;5998:9;5994:17;5985:6;5941:71;:::i;:::-;5797:222;;;;:::o;6025:619::-;6102:6;6110;6118;6167:2;6155:9;6146:7;6142:23;6138:32;6135:119;;;6173:79;;:::i;:::-;6135:119;6293:1;6318:53;6363:7;6354:6;6343:9;6339:22;6318:53;:::i;:::-;6308:63;;6264:117;6420:2;6446:53;6491:7;6482:6;6471:9;6467:22;6446:53;:::i;:::-;6436:63;;6391:118;6548:2;6574:53;6619:7;6610:6;6599:9;6595:22;6574:53;:::i;:::-;6564:63;;6519:118;6025:619;;;;;:::o;6650:117::-;6759:1;6756;6749:12;6773:117;6882:1;6879;6872:12;6896:180;6944:77;6941:1;6934:88;7041:4;7038:1;7031:15;7065:4;7062:1;7055:15;7082:281;7165:27;7187:4;7165:27;:::i;:::-;7157:6;7153:40;7295:6;7283:10;7280:22;7259:18;7247:10;7244:34;7241:62;7238:88;;;7306:18;;:::i;:::-;7238:88;7346:10;7342:2;7335:22;7125:238;7082:281;;:::o;7369:129::-;7403:6;7430:20;;:::i;:::-;7420:30;;7459:33;7487:4;7479:6;7459:33;:::i;:::-;7369:129;;;:::o;7504:308::-;7566:4;7656:18;7648:6;7645:30;7642:56;;;7678:18;;:::i;:::-;7642:56;7716:29;7738:6;7716:29;:::i;:::-;7708:37;;7800:4;7794;7790:15;7782:23;;7504:308;;;:::o;7818:154::-;7902:6;7897:3;7892;7879:30;7964:1;7955:6;7950:3;7946:16;7939:27;7818:154;;;:::o;7978:412::-;8056:5;8081:66;8097:49;8139:6;8097:49;:::i;:::-;8081:66;:::i;:::-;8072:75;;8170:6;8163:5;8156:21;8208:4;8201:5;8197:16;8246:3;8237:6;8232:3;8228:16;8225:25;8222:112;;;8253:79;;:::i;:::-;8222:112;8343:41;8377:6;8372:3;8367;8343:41;:::i;:::-;8062:328;7978:412;;;;;:::o;8410:340::-;8466:5;8515:3;8508:4;8500:6;8496:17;8492:27;8482:122;;8523:79;;:::i;:::-;8482:122;8640:6;8627:20;8665:79;8740:3;8732:6;8725:4;8717:6;8713:17;8665:79;:::i;:::-;8656:88;;8472:278;8410:340;;;;:::o;8756:509::-;8825:6;8874:2;8862:9;8853:7;8849:23;8845:32;8842:119;;;8880:79;;:::i;:::-;8842:119;9028:1;9017:9;9013:17;9000:31;9058:18;9050:6;9047:30;9044:117;;;9080:79;;:::i;:::-;9044:117;9185:63;9240:7;9231:6;9220:9;9216:22;9185:63;:::i;:::-;9175:73;;8971:287;8756:509;;;;:::o;9271:329::-;9330:6;9379:2;9367:9;9358:7;9354:23;9350:32;9347:119;;;9385:79;;:::i;:::-;9347:119;9505:1;9530:53;9575:7;9566:6;9555:9;9551:22;9530:53;:::i;:::-;9520:63;;9476:117;9271:329;;;;:::o;9606:114::-;9673:6;9707:5;9701:12;9691:22;;9606:114;;;:::o;9726:184::-;9825:11;9859:6;9854:3;9847:19;9899:4;9894:3;9890:14;9875:29;;9726:184;;;;:::o;9916:132::-;9983:4;10006:3;9998:11;;10036:4;10031:3;10027:14;10019:22;;9916:132;;;:::o;10054:108::-;10131:24;10149:5;10131:24;:::i;:::-;10126:3;10119:37;10054:108;;:::o;10168:179::-;10237:10;10258:46;10300:3;10292:6;10258:46;:::i;:::-;10336:4;10331:3;10327:14;10313:28;;10168:179;;;;:::o;10353:113::-;10423:4;10455;10450:3;10446:14;10438:22;;10353:113;;;:::o;10502:732::-;10621:3;10650:54;10698:5;10650:54;:::i;:::-;10720:86;10799:6;10794:3;10720:86;:::i;:::-;10713:93;;10830:56;10880:5;10830:56;:::i;:::-;10909:7;10940:1;10925:284;10950:6;10947:1;10944:13;10925:284;;;11026:6;11020:13;11053:63;11112:3;11097:13;11053:63;:::i;:::-;11046:70;;11139:60;11192:6;11139:60;:::i;:::-;11129:70;;10985:224;10972:1;10969;10965:9;10960:14;;10925:284;;;10929:14;11225:3;11218:10;;10626:608;;;10502:732;;;;:::o;11240:373::-;11383:4;11421:2;11410:9;11406:18;11398:26;;11470:9;11464:4;11460:20;11456:1;11445:9;11441:17;11434:47;11498:108;11601:4;11592:6;11498:108;:::i;:::-;11490:116;;11240:373;;;;:::o;11619:307::-;11680:4;11770:18;11762:6;11759:30;11756:56;;;11792:18;;:::i;:::-;11756:56;11830:29;11852:6;11830:29;:::i;:::-;11822:37;;11914:4;11908;11904:15;11896:23;;11619:307;;;:::o;11932:410::-;12009:5;12034:65;12050:48;12091:6;12050:48;:::i;:::-;12034:65;:::i;:::-;12025:74;;12122:6;12115:5;12108:21;12160:4;12153:5;12149:16;12198:3;12189:6;12184:3;12180:16;12177:25;12174:112;;;12205:79;;:::i;:::-;12174:112;12295:41;12329:6;12324:3;12319;12295:41;:::i;:::-;12015:327;11932:410;;;;;:::o;12361:338::-;12416:5;12465:3;12458:4;12450:6;12446:17;12442:27;12432:122;;12473:79;;:::i;:::-;12432:122;12590:6;12577:20;12615:78;12689:3;12681:6;12674:4;12666:6;12662:17;12615:78;:::i;:::-;12606:87;;12422:277;12361:338;;;;:::o;12705:943::-;12800:6;12808;12816;12824;12873:3;12861:9;12852:7;12848:23;12844:33;12841:120;;;12880:79;;:::i;:::-;12841:120;13000:1;13025:53;13070:7;13061:6;13050:9;13046:22;13025:53;:::i;:::-;13015:63;;12971:117;13127:2;13153:53;13198:7;13189:6;13178:9;13174:22;13153:53;:::i;:::-;13143:63;;13098:118;13255:2;13281:53;13326:7;13317:6;13306:9;13302:22;13281:53;:::i;:::-;13271:63;;13226:118;13411:2;13400:9;13396:18;13383:32;13442:18;13434:6;13431:30;13428:117;;;13464:79;;:::i;:::-;13428:117;13569:62;13623:7;13614:6;13603:9;13599:22;13569:62;:::i;:::-;13559:72;;13354:287;12705:943;;;;;;;:::o;13654:474::-;13722:6;13730;13779:2;13767:9;13758:7;13754:23;13750:32;13747:119;;;13785:79;;:::i;:::-;13747:119;13905:1;13930:53;13975:7;13966:6;13955:9;13951:22;13930:53;:::i;:::-;13920:63;;13876:117;14032:2;14058:53;14103:7;14094:6;14083:9;14079:22;14058:53;:::i;:::-;14048:63;;14003:118;13654:474;;;;;:::o;14134:180::-;14182:77;14179:1;14172:88;14279:4;14276:1;14269:15;14303:4;14300:1;14293:15;14320:320;14364:6;14401:1;14395:4;14391:12;14381:22;;14448:1;14442:4;14438:12;14469:18;14459:81;;14525:4;14517:6;14513:17;14503:27;;14459:81;14587:2;14579:6;14576:14;14556:18;14553:38;14550:84;;;14606:18;;:::i;:::-;14550:84;14371:269;14320:320;;;:::o;14646:231::-;14786:34;14782:1;14774:6;14770:14;14763:58;14855:14;14850:2;14842:6;14838:15;14831:39;14646:231;:::o;14883:366::-;15025:3;15046:67;15110:2;15105:3;15046:67;:::i;:::-;15039:74;;15122:93;15211:3;15122:93;:::i;:::-;15240:2;15235:3;15231:12;15224:19;;14883:366;;;:::o;15255:419::-;15421:4;15459:2;15448:9;15444:18;15436:26;;15508:9;15502:4;15498:20;15494:1;15483:9;15479:17;15472:47;15536:131;15662:4;15536:131;:::i;:::-;15528:139;;15255:419;;;:::o;15680:220::-;15820:34;15816:1;15808:6;15804:14;15797:58;15889:3;15884:2;15876:6;15872:15;15865:28;15680:220;:::o;15906:366::-;16048:3;16069:67;16133:2;16128:3;16069:67;:::i;:::-;16062:74;;16145:93;16234:3;16145:93;:::i;:::-;16263:2;16258:3;16254:12;16247:19;;15906:366;;;:::o;16278:419::-;16444:4;16482:2;16471:9;16467:18;16459:26;;16531:9;16525:4;16521:20;16517:1;16506:9;16502:17;16495:47;16559:131;16685:4;16559:131;:::i;:::-;16551:139;;16278:419;;;:::o;16703:243::-;16843:34;16839:1;16831:6;16827:14;16820:58;16912:26;16907:2;16899:6;16895:15;16888:51;16703:243;:::o;16952:366::-;17094:3;17115:67;17179:2;17174:3;17115:67;:::i;:::-;17108:74;;17191:93;17280:3;17191:93;:::i;:::-;17309:2;17304:3;17300:12;17293:19;;16952:366;;;:::o;17324:419::-;17490:4;17528:2;17517:9;17513:18;17505:26;;17577:9;17571:4;17567:20;17563:1;17552:9;17548:17;17541:47;17605:131;17731:4;17605:131;:::i;:::-;17597:139;;17324:419;;;:::o;17749:182::-;17889:34;17885:1;17877:6;17873:14;17866:58;17749:182;:::o;17937:366::-;18079:3;18100:67;18164:2;18159:3;18100:67;:::i;:::-;18093:74;;18176:93;18265:3;18176:93;:::i;:::-;18294:2;18289:3;18285:12;18278:19;;17937:366;;;:::o;18309:419::-;18475:4;18513:2;18502:9;18498:18;18490:26;;18562:9;18556:4;18552:20;18548:1;18537:9;18533:17;18526:47;18590:131;18716:4;18590:131;:::i;:::-;18582:139;;18309:419;;;:::o;18734:236::-;18874:34;18870:1;18862:6;18858:14;18851:58;18943:19;18938:2;18930:6;18926:15;18919:44;18734:236;:::o;18976:366::-;19118:3;19139:67;19203:2;19198:3;19139:67;:::i;:::-;19132:74;;19215:93;19304:3;19215:93;:::i;:::-;19333:2;19328:3;19324:12;19317:19;;18976:366;;;:::o;19348:419::-;19514:4;19552:2;19541:9;19537:18;19529:26;;19601:9;19595:4;19591:20;19587:1;19576:9;19572:17;19565:47;19629:131;19755:4;19629:131;:::i;:::-;19621:139;;19348:419;;;:::o;19773:230::-;19913:34;19909:1;19901:6;19897:14;19890:58;19982:13;19977:2;19969:6;19965:15;19958:38;19773:230;:::o;20009:366::-;20151:3;20172:67;20236:2;20231:3;20172:67;:::i;:::-;20165:74;;20248:93;20337:3;20248:93;:::i;:::-;20366:2;20361:3;20357:12;20350:19;;20009:366;;;:::o;20381:419::-;20547:4;20585:2;20574:9;20570:18;20562:26;;20634:9;20628:4;20624:20;20620:1;20609:9;20605:17;20598:47;20662:131;20788:4;20662:131;:::i;:::-;20654:139;;20381:419;;;:::o;20806:164::-;20946:16;20942:1;20934:6;20930:14;20923:40;20806:164;:::o;20976:366::-;21118:3;21139:67;21203:2;21198:3;21139:67;:::i;:::-;21132:74;;21215:93;21304:3;21215:93;:::i;:::-;21333:2;21328:3;21324:12;21317:19;;20976:366;;;:::o;21348:419::-;21514:4;21552:2;21541:9;21537:18;21529:26;;21601:9;21595:4;21591:20;21587:1;21576:9;21572:17;21565:47;21629:131;21755:4;21629:131;:::i;:::-;21621:139;;21348:419;;;:::o;21773:231::-;21913:34;21909:1;21901:6;21897:14;21890:58;21982:14;21977:2;21969:6;21965:15;21958:39;21773:231;:::o;22010:366::-;22152:3;22173:67;22237:2;22232:3;22173:67;:::i;:::-;22166:74;;22249:93;22338:3;22249:93;:::i;:::-;22367:2;22362:3;22358:12;22351:19;;22010:366;;;:::o;22382:419::-;22548:4;22586:2;22575:9;22571:18;22563:26;;22635:9;22629:4;22625:20;22621:1;22610:9;22606:17;22599:47;22663:131;22789:4;22663:131;:::i;:::-;22655:139;;22382:419;;;:::o;22807:180::-;22855:77;22852:1;22845:88;22952:4;22949:1;22942:15;22976:4;22973:1;22966:15;22993:228;23133:34;23129:1;23121:6;23117:14;23110:58;23202:11;23197:2;23189:6;23185:15;23178:36;22993:228;:::o;23227:366::-;23369:3;23390:67;23454:2;23449:3;23390:67;:::i;:::-;23383:74;;23466:93;23555:3;23466:93;:::i;:::-;23584:2;23579:3;23575:12;23568:19;;23227:366;;;:::o;23599:419::-;23765:4;23803:2;23792:9;23788:18;23780:26;;23852:9;23846:4;23842:20;23838:1;23827:9;23823:17;23816:47;23880:131;24006:4;23880:131;:::i;:::-;23872:139;;23599:419;;;:::o;24024:229::-;24164:34;24160:1;24152:6;24148:14;24141:58;24233:12;24228:2;24220:6;24216:15;24209:37;24024:229;:::o;24259:366::-;24401:3;24422:67;24486:2;24481:3;24422:67;:::i;:::-;24415:74;;24498:93;24587:3;24498:93;:::i;:::-;24616:2;24611:3;24607:12;24600:19;;24259:366;;;:::o;24631:419::-;24797:4;24835:2;24824:9;24820:18;24812:26;;24884:9;24878:4;24874:20;24870:1;24859:9;24855:17;24848:47;24912:131;25038:4;24912:131;:::i;:::-;24904:139;;24631:419;;;:::o;25056:180::-;25104:77;25101:1;25094:88;25201:4;25198:1;25191:15;25225:4;25222:1;25215:15;25242:233;25281:3;25304:24;25322:5;25304:24;:::i;:::-;25295:33;;25350:66;25343:5;25340:77;25337:103;;;25420:18;;:::i;:::-;25337:103;25467:1;25460:5;25456:13;25449:20;;25242:233;;;:::o;25481:175::-;25621:27;25617:1;25609:6;25605:14;25598:51;25481:175;:::o;25662:366::-;25804:3;25825:67;25889:2;25884:3;25825:67;:::i;:::-;25818:74;;25901:93;25990:3;25901:93;:::i;:::-;26019:2;26014:3;26010:12;26003:19;;25662:366;;;:::o;26034:419::-;26200:4;26238:2;26227:9;26223:18;26215:26;;26287:9;26281:4;26277:20;26273:1;26262:9;26258:17;26251:47;26315:131;26441:4;26315:131;:::i;:::-;26307:139;;26034:419;;;:::o;26459:234::-;26599:34;26595:1;26587:6;26583:14;26576:58;26668:17;26663:2;26655:6;26651:15;26644:42;26459:234;:::o;26699:366::-;26841:3;26862:67;26926:2;26921:3;26862:67;:::i;:::-;26855:74;;26938:93;27027:3;26938:93;:::i;:::-;27056:2;27051:3;27047:12;27040:19;;26699:366;;;:::o;27071:419::-;27237:4;27275:2;27264:9;27260:18;27252:26;;27324:9;27318:4;27314:20;27310:1;27299:9;27295:17;27288:47;27352:131;27478:4;27352:131;:::i;:::-;27344:139;;27071:419;;;:::o;27496:148::-;27598:11;27635:3;27620:18;;27496:148;;;;:::o;27650:377::-;27756:3;27784:39;27817:5;27784:39;:::i;:::-;27839:89;27921:6;27916:3;27839:89;:::i;:::-;27832:96;;27937:52;27982:6;27977:3;27970:4;27963:5;27959:16;27937:52;:::i;:::-;28014:6;28009:3;28005:16;27998:23;;27760:267;27650:377;;;;:::o;28033:435::-;28213:3;28235:95;28326:3;28317:6;28235:95;:::i;:::-;28228:102;;28347:95;28438:3;28429:6;28347:95;:::i;:::-;28340:102;;28459:3;28452:10;;28033:435;;;;;:::o;28474:225::-;28614:34;28610:1;28602:6;28598:14;28591:58;28683:8;28678:2;28670:6;28666:15;28659:33;28474:225;:::o;28705:366::-;28847:3;28868:67;28932:2;28927:3;28868:67;:::i;:::-;28861:74;;28944:93;29033:3;28944:93;:::i;:::-;29062:2;29057:3;29053:12;29046:19;;28705:366;;;:::o;29077:419::-;29243:4;29281:2;29270:9;29266:18;29258:26;;29330:9;29324:4;29320:20;29316:1;29305:9;29301:17;29294:47;29358:131;29484:4;29358:131;:::i;:::-;29350:139;;29077:419;;;:::o;29502:231::-;29642:34;29638:1;29630:6;29626:14;29619:58;29711:14;29706:2;29698:6;29694:15;29687:39;29502:231;:::o;29739:366::-;29881:3;29902:67;29966:2;29961:3;29902:67;:::i;:::-;29895:74;;29978:93;30067:3;29978:93;:::i;:::-;30096:2;30091:3;30087:12;30080:19;;29739:366;;;:::o;30111:419::-;30277:4;30315:2;30304:9;30300:18;30292:26;;30364:9;30358:4;30354:20;30350:1;30339:9;30335:17;30328:47;30392:131;30518:4;30392:131;:::i;:::-;30384:139;;30111:419;;;:::o;30536:228::-;30676:34;30672:1;30664:6;30660:14;30653:58;30745:11;30740:2;30732:6;30728:15;30721:36;30536:228;:::o;30770:366::-;30912:3;30933:67;30997:2;30992:3;30933:67;:::i;:::-;30926:74;;31009:93;31098:3;31009:93;:::i;:::-;31127:2;31122:3;31118:12;31111:19;;30770:366;;;:::o;31142:419::-;31308:4;31346:2;31335:9;31331:18;31323:26;;31395:9;31389:4;31385:20;31381:1;31370:9;31366:17;31359:47;31423:131;31549:4;31423:131;:::i;:::-;31415:139;;31142:419;;;:::o;31567:223::-;31707:34;31703:1;31695:6;31691:14;31684:58;31776:6;31771:2;31763:6;31759:15;31752:31;31567:223;:::o;31796:366::-;31938:3;31959:67;32023:2;32018:3;31959:67;:::i;:::-;31952:74;;32035:93;32124:3;32035:93;:::i;:::-;32153:2;32148:3;32144:12;32137:19;;31796:366;;;:::o;32168:419::-;32334:4;32372:2;32361:9;32357:18;32349:26;;32421:9;32415:4;32411:20;32407:1;32396:9;32392:17;32385:47;32449:131;32575:4;32449:131;:::i;:::-;32441:139;;32168:419;;;:::o;32593:191::-;32633:4;32653:20;32671:1;32653:20;:::i;:::-;32648:25;;32687:20;32705:1;32687:20;:::i;:::-;32682:25;;32726:1;32723;32720:8;32717:34;;;32731:18;;:::i;:::-;32717:34;32776:1;32773;32769:9;32761:17;;32593:191;;;;:::o;32790:305::-;32830:3;32849:20;32867:1;32849:20;:::i;:::-;32844:25;;32883:20;32901:1;32883:20;:::i;:::-;32878:25;;33037:1;32969:66;32965:74;32962:1;32959:81;32956:107;;;33043:18;;:::i;:::-;32956:107;33087:1;33084;33080:9;33073:16;;32790:305;;;;:::o;33101:237::-;33241:34;33237:1;33229:6;33225:14;33218:58;33310:20;33305:2;33297:6;33293:15;33286:45;33101:237;:::o;33344:366::-;33486:3;33507:67;33571:2;33566:3;33507:67;:::i;:::-;33500:74;;33583:93;33672:3;33583:93;:::i;:::-;33701:2;33696:3;33692:12;33685:19;;33344:366;;;:::o;33716:419::-;33882:4;33920:2;33909:9;33905:18;33897:26;;33969:9;33963:4;33959:20;33955:1;33944:9;33940:17;33933:47;33997:131;34123:4;33997:131;:::i;:::-;33989:139;;33716:419;;;:::o;34141:180::-;34189:77;34186:1;34179:88;34286:4;34283:1;34276:15;34310:4;34307:1;34300:15;34327:185;34367:1;34384:20;34402:1;34384:20;:::i;:::-;34379:25;;34418:20;34436:1;34418:20;:::i;:::-;34413:25;;34457:1;34447:35;;34462:18;;:::i;:::-;34447:35;34504:1;34501;34497:9;34492:14;;34327:185;;;;:::o;34518:176::-;34550:1;34567:20;34585:1;34567:20;:::i;:::-;34562:25;;34601:20;34619:1;34601:20;:::i;:::-;34596:25;;34640:1;34630:35;;34645:18;;:::i;:::-;34630:35;34686:1;34683;34679:9;34674:14;;34518:176;;;;:::o;34700:98::-;34751:6;34785:5;34779:12;34769:22;;34700:98;;;:::o;34804:168::-;34887:11;34921:6;34916:3;34909:19;34961:4;34956:3;34952:14;34937:29;;34804:168;;;;:::o;34978:360::-;35064:3;35092:38;35124:5;35092:38;:::i;:::-;35146:70;35209:6;35204:3;35146:70;:::i;:::-;35139:77;;35225:52;35270:6;35265:3;35258:4;35251:5;35247:16;35225:52;:::i;:::-;35302:29;35324:6;35302:29;:::i;:::-;35297:3;35293:39;35286:46;;35068:270;34978:360;;;;:::o;35344:640::-;35539:4;35577:3;35566:9;35562:19;35554:27;;35591:71;35659:1;35648:9;35644:17;35635:6;35591:71;:::i;:::-;35672:72;35740:2;35729:9;35725:18;35716:6;35672:72;:::i;:::-;35754;35822:2;35811:9;35807:18;35798:6;35754:72;:::i;:::-;35873:9;35867:4;35863:20;35858:2;35847:9;35843:18;35836:48;35901:76;35972:4;35963:6;35901:76;:::i;:::-;35893:84;;35344:640;;;;;;;:::o;35990:141::-;36046:5;36077:6;36071:13;36062:22;;36093:32;36119:5;36093:32;:::i;:::-;35990:141;;;;:::o;36137:349::-;36206:6;36255:2;36243:9;36234:7;36230:23;36226:32;36223:119;;;36261:79;;:::i;:::-;36223:119;36381:1;36406:63;36461:7;36452:6;36441:9;36437:22;36406:63;:::i;:::-;36396:73;;36352:127;36137:349;;;;:::o;36492:180::-;36540:77;36537:1;36530:88;36637:4;36634:1;36627:15;36661:4;36658:1;36651:15;36678:182;36818:34;36814:1;36806:6;36802:14;36795:58;36678:182;:::o;36866:366::-;37008:3;37029:67;37093:2;37088:3;37029:67;:::i;:::-;37022:74;;37105:93;37194:3;37105:93;:::i;:::-;37223:2;37218:3;37214:12;37207:19;;36866:366;;;:::o;37238:419::-;37404:4;37442:2;37431:9;37427:18;37419:26;;37491:9;37485:4;37481:20;37477:1;37466:9;37462:17;37455:47;37519:131;37645:4;37519:131;:::i;:::-;37511:139;;37238:419;;;:::o;37663:178::-;37803:30;37799:1;37791:6;37787:14;37780:54;37663:178;:::o;37847:366::-;37989:3;38010:67;38074:2;38069:3;38010:67;:::i;:::-;38003:74;;38086:93;38175:3;38086:93;:::i;:::-;38204:2;38199:3;38195:12;38188:19;;37847:366;;;:::o;38219:419::-;38385:4;38423:2;38412:9;38408:18;38400:26;;38472:9;38466:4;38462:20;38458:1;38447:9;38443:17;38436:47;38500:131;38626:4;38500:131;:::i;:::-;38492:139;;38219:419;;;:::o

Swarm Source

ipfs://8f4fad6f29f7e2f300cad547bd54727a6ef7d63bb611afe1899d36166635b93b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.