ETH Price: $2,425.07 (-0.87%)
 

Overview

Max Total Supply

1,391 CR

Holders

594

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 CR
0xf81aa280a2f40d0cdc8577685cebd8dda1e407d6
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:
ChainRenegades

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-19
*/

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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(to).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/ChainRenegades.sol


pragma solidity ^0.8.0;

// OpenZeppelin Imports


// Chain Renegades | ERC721 \ Ownable
contract ChainRenegades is ERC721Enumerable, Ownable {
  using Strings for uint256;

  // Override Base Token URI Variable
  string public _baseTokenURI;

  // Drop Details
  bool public _active = false;
  uint256 public _gifts = 600;
  uint256 public _price = 0.055 ether;
  uint256 public _supply = 9999;

  // Team Addresses
  address public artist = 0x8b88130e3B6d99aC05e382C17bD28dcaD2F86D41;
  address public dev = 0xd230f390AbB50470fa265a022d673c6147BDc396;

  // On deployment, set the `baseURI` and mint the team tokens
  constructor(string memory baseURI) ERC721("Chain Renegades", "CR") {
    setBaseURI(baseURI);
    _safeMint( artist, 0);
    _safeMint( dev, 1);
  }

  /*
  * @dev: Override function for `_baseURI()` that returns `_baseTokenURI`
  */
  function _baseURI() internal view virtual override returns (string memory) {
    return _baseTokenURI;
  }

  /*
  * @dev: Sets `_baseTokenURI` to provided string
  */
  function setBaseURI(string memory baseURI) public onlyOwner {
    _baseTokenURI = baseURI;
  }

  /*
  * @dev: Sets `_active` to provided boolean value
  */
  function setActive(bool active) public onlyOwner {
     _active = active;
  }

  /*
  * @dev: Returns tokens in the wallet of the provided `_owner`
  */
  function getTokensByWallet(address _owner) public view returns(uint256[] memory) {
    uint256 tokenCount = balanceOf(_owner);

    uint256[] memory tokensId = new uint256[](tokenCount);
    for(uint256 i; i < tokenCount; i++){
        tokensId[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokensId;
  }

  /*
  * @dev: Sends provided token `_amount` to the provided address
  */
  function gift(address _to, uint256 _amount) external onlyOwner {
    // Check that the amount provided does not exceed the gift reserve
    require(_amount <= _gifts, "Gift reserve exceeded with provided amount.");

    uint256 supply = totalSupply();

    for(uint256 i; i < _amount; i++){
      _safeMint( _to, supply + i );
    }

    _gifts -= _amount;
  }

  /*
  * @dev: Mints the provided token `_amount`
  */
  function train(uint256 _amount) public payable {
    uint256 supply = totalSupply();

    // Check that the sale is active
    require( _active, "Sale is not active.");

    // Check that provided amount does not exceed limit
    require( _amount < 21, "Provided amount exceeds mint limit.");

    // Check that the provided ether is sufficient
    require( msg.value >= _price * _amount, "Insufficient ether provided.");

    // Check that amount provided does not exceed the supply
    require( supply + _amount <= _supply - _gifts, "Supply exceeded with provided amount.");

    for(uint256 i; i < _amount; i++){
      _safeMint( msg.sender, supply + i );
    }
  }

  /*
  * @dev: Splits contract balance and sends half to the artist & half to the dev
  */
  function withdraw() public payable onlyOwner {
    uint256 _each = address(this).balance / 2;

    require(payable(artist).send(_each));
    require(payable(dev).send(_each));
  }
}

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":[],"name":"_active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_gifts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"artist","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"dev","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getTokensByWallet","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"bool","name":"active","type":"bool"}],"name":"setActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"train","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526000600c60006101000a81548160ff021916908315150217905550610258600d5566c3663566a58000600e5561270f600f55738b88130e3b6d99ac05e382c17bd28dcad2f86d41601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d230f390abb50470fa265a022d673c6147bdc396601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000ed57600080fd5b50604051620059ab380380620059ab833981810160405281019062000113919062000fb1565b6040518060400160405280600f81526020017f436861696e2052656e65676164657300000000000000000000000000000000008152506040518060400160405280600281526020017f435200000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200019792919062000e4c565b508060019080519060200190620001b092919062000e4c565b505050620001d3620001c76200025560201b60201c565b6200025d60201b60201c565b620001e4816200032360201b60201c565b62000219601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000620003ce60201b60201c565b6200024e601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620003ce60201b60201c565b506200161b565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003336200025560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000359620003f460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003b2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a990620011f8565b60405180910390fd5b80600b9080519060200190620003ca92919062000e4c565b5050565b620003f08282604051806020016040528060008152506200041e60201b60201c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200043083836200048c60201b60201c565b6200044560008484846200067260201b60201c565b62000487576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200047e9062001170565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004f690620011d6565b60405180910390fd5b62000510816200082c60201b60201c565b1562000553576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054a9062001192565b60405180910390fd5b62000567600083836200089860201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005b99190620012a6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620006a08473ffffffffffffffffffffffffffffffffffffffff16620009df60201b620019e41760201c565b156200081f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006d26200025560201b60201c565b8786866040518563ffffffff1660e01b8152600401620006f694939291906200111c565b602060405180830381600087803b1580156200071157600080fd5b505af19250505080156200074557506040513d601f19601f8201168201806040525081019062000742919062000f85565b60015b620007ce573d806000811462000778576040519150601f19603f3d011682016040523d82523d6000602084013e6200077d565b606091505b50600081511415620007c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007bd9062001170565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000824565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620008b0838383620009f260201b620019f71760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620008fd57620008f781620009f760201b60201c565b62000945565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620009445762000943838262000a4060201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000992576200098c8162000bbd60201b60201c565b620009da565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620009d957620009d8828262000d0560201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000a5a8462000d9160201b620010661760201c565b62000a66919062001303565b905060006007600084815260200190815260200160002054905081811462000b4c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000bd3919062001303565b905060006009600084815260200190815260200160002054905060006008838154811062000c2a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811062000c73577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000ce9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600062000d1d8362000d9160201b620010661760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000dfc90620011b4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000e5a90620013de565b90600052602060002090601f01602090048101928262000e7e576000855562000eca565b82601f1062000e9957805160ff191683800117855562000eca565b8280016001018555821562000eca579182015b8281111562000ec957825182559160200191906001019062000eac565b5b50905062000ed9919062000edd565b5090565b5b8082111562000ef857600081600090555060010162000ede565b5090565b600062000f1362000f0d8462001243565b6200121a565b90508281526020810184848401111562000f2c57600080fd5b62000f39848285620013a8565b509392505050565b60008151905062000f528162001601565b92915050565b600082601f83011262000f6a57600080fd5b815162000f7c84826020860162000efc565b91505092915050565b60006020828403121562000f9857600080fd5b600062000fa88482850162000f41565b91505092915050565b60006020828403121562000fc457600080fd5b600082015167ffffffffffffffff81111562000fdf57600080fd5b62000fed8482850162000f58565b91505092915050565b62001001816200133e565b82525050565b6000620010148262001279565b62001020818562001284565b935062001032818560208601620013a8565b6200103d81620014d7565b840191505092915050565b60006200105760328362001295565b91506200106482620014e8565b604082019050919050565b60006200107e601c8362001295565b91506200108b8262001537565b602082019050919050565b6000620010a5602a8362001295565b9150620010b28262001560565b604082019050919050565b6000620010cc60208362001295565b9150620010d982620015af565b602082019050919050565b6000620010f360208362001295565b91506200110082620015d8565b602082019050919050565b62001116816200139e565b82525050565b600060808201905062001133600083018762000ff6565b62001142602083018662000ff6565b6200115160408301856200110b565b818103606083015262001165818462001007565b905095945050505050565b600060208201905081810360008301526200118b8162001048565b9050919050565b60006020820190508181036000830152620011ad816200106f565b9050919050565b60006020820190508181036000830152620011cf8162001096565b9050919050565b60006020820190508181036000830152620011f181620010bd565b9050919050565b600060208201905081810360008301526200121381620010e4565b9050919050565b60006200122662001239565b905062001234828262001414565b919050565b6000604051905090565b600067ffffffffffffffff821115620012615762001260620014a8565b5b6200126c82620014d7565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620012b3826200139e565b9150620012c0836200139e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620012f857620012f76200144a565b5b828201905092915050565b600062001310826200139e565b91506200131d836200139e565b9250828210156200133357620013326200144a565b5b828203905092915050565b60006200134b826200137e565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620013c8578082015181840152602081019050620013ab565b83811115620013d8576000848401525b50505050565b60006002820490506001821680620013f757607f821691505b602082108114156200140e576200140d62001479565b5b50919050565b6200141f82620014d7565b810181811067ffffffffffffffff82111715620014415762001440620014a8565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200160c8162001352565b81146200161857600080fd5b50565b614380806200162b6000396000f3fe6080604052600436106101e35760003560e01c80636352211e11610102578063b88d4fde11610095578063d3b90b3011610064578063d3b90b30146106c6578063e985e9c514610703578063ee40494614610740578063f2fde38b1461076b576101e3565b8063b88d4fde1461060c578063c87b56dd14610635578063cbce4c9714610672578063cfc86f7b1461069b576101e3565b806391cca3db116100d157806391cca3db1461056457806395d89b411461058f578063a22cb465146105ba578063acec338a146105e3576101e3565b80636352211e146104a857806370a08231146104e5578063715018a6146105225780638da5cb5b14610539576101e3565b80632f745c591161017a57806343bc16121161014957806343bc1612146103ec5780634d615d23146104175780634f6ccce71461044257806355f804b31461047f576101e3565b80632f745c5914610360578063368004ed1461039d5780633ccfd60b146103b957806342842e0e146103c3576101e3565b806315945790116101b657806315945790146102b657806318160ddd146102e1578063235b6ea11461030c57806323b872dd14610337576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612f26565b610794565b60405161021c9190613509565b60405180910390f35b34801561023157600080fd5b5061023a61080e565b6040516102479190613524565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190612fb9565b6108a0565b6040516102849190613480565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190612ec1565b610925565b005b3480156102c257600080fd5b506102cb610a3d565b6040516102d89190613826565b60405180910390f35b3480156102ed57600080fd5b506102f6610a43565b6040516103039190613826565b60405180910390f35b34801561031857600080fd5b50610321610a50565b60405161032e9190613826565b60405180910390f35b34801561034357600080fd5b5061035e60048036038101906103599190612dbb565b610a56565b005b34801561036c57600080fd5b5061038760048036038101906103829190612ec1565b610ab6565b6040516103949190613826565b60405180910390f35b6103b760048036038101906103b29190612fb9565b610b5b565b005b6103c1610cde565b005b3480156103cf57600080fd5b506103ea60048036038101906103e59190612dbb565b610e2e565b005b3480156103f857600080fd5b50610401610e4e565b60405161040e9190613480565b60405180910390f35b34801561042357600080fd5b5061042c610e74565b6040516104399190613509565b60405180910390f35b34801561044e57600080fd5b5061046960048036038101906104649190612fb9565b610e87565b6040516104769190613826565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a19190612f78565b610f1e565b005b3480156104b457600080fd5b506104cf60048036038101906104ca9190612fb9565b610fb4565b6040516104dc9190613480565b60405180910390f35b3480156104f157600080fd5b5061050c60048036038101906105079190612d56565b611066565b6040516105199190613826565b60405180910390f35b34801561052e57600080fd5b5061053761111e565b005b34801561054557600080fd5b5061054e6111a6565b60405161055b9190613480565b60405180910390f35b34801561057057600080fd5b506105796111d0565b6040516105869190613480565b60405180910390f35b34801561059b57600080fd5b506105a46111f6565b6040516105b19190613524565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190612e85565b611288565b005b3480156105ef57600080fd5b5061060a60048036038101906106059190612efd565b611409565b005b34801561061857600080fd5b50610633600480360381019061062e9190612e0a565b6114a2565b005b34801561064157600080fd5b5061065c60048036038101906106579190612fb9565b611504565b6040516106699190613524565b60405180910390f35b34801561067e57600080fd5b5061069960048036038101906106949190612ec1565b6115ab565b005b3480156106a757600080fd5b506106b06116ca565b6040516106bd9190613524565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e89190612d56565b611758565b6040516106fa91906134e7565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190612d7f565b611852565b6040516107379190613509565b60405180910390f35b34801561074c57600080fd5b506107556118e6565b6040516107629190613826565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190612d56565b6118ec565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108075750610806826119fc565b5b9050919050565b60606000805461081d90613b0f565b80601f016020809104026020016040519081016040528092919081815260200182805461084990613b0f565b80156108965780601f1061086b57610100808354040283529160200191610896565b820191906000526020600020905b81548152906001019060200180831161087957829003601f168201915b5050505050905090565b60006108ab82611ade565b6108ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e1906136e6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061093082610fb4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099890613786565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109c0611b4a565b73ffffffffffffffffffffffffffffffffffffffff1614806109ef57506109ee816109e9611b4a565b611852565b5b610a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2590613646565b60405180910390fd5b610a388383611b52565b505050565b600f5481565b6000600880549050905090565b600e5481565b610a67610a61611b4a565b82611c0b565b610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d906137c6565b60405180910390fd5b610ab1838383611ce9565b505050565b6000610ac183611066565b8210610b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af990613546565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000610b65610a43565b9050600c60009054906101000a900460ff16610bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bad90613766565b60405180910390fd5b60158210610bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf090613806565b60405180910390fd5b81600e54610c0791906139cb565b341015610c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c40906136a6565b60405180910390fd5b600d54600f54610c599190613a25565b8282610c659190613944565b1115610ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9d906137a6565b60405180910390fd5b60005b82811015610cd957610cc6338284610cc19190613944565b611f45565b8080610cd190613b72565b915050610ca9565b505050565b610ce6611b4a565b73ffffffffffffffffffffffffffffffffffffffff16610d046111a6565b73ffffffffffffffffffffffffffffffffffffffff1614610d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5190613706565b60405180910390fd5b6000600247610d69919061399a565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610dcb57600080fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610e2b57600080fd5b50565b610e49838383604051806020016040528060008152506114a2565b505050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900460ff1681565b6000610e91610a43565b8210610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec9906137e6565b60405180910390fd5b60088281548110610f0c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610f26611b4a565b73ffffffffffffffffffffffffffffffffffffffff16610f446111a6565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190613706565b60405180910390fd5b80600b9080519060200190610fb0929190612b7a565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105490613686565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ce90613666565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611126611b4a565b73ffffffffffffffffffffffffffffffffffffffff166111446111a6565b73ffffffffffffffffffffffffffffffffffffffff161461119a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119190613706565b60405180910390fd5b6111a46000611f63565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606001805461120590613b0f565b80601f016020809104026020016040519081016040528092919081815260200182805461123190613b0f565b801561127e5780601f106112535761010080835404028352916020019161127e565b820191906000526020600020905b81548152906001019060200180831161126157829003601f168201915b5050505050905090565b611290611b4a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f5906135e6565b60405180910390fd5b806005600061130b611b4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166113b8611b4a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113fd9190613509565b60405180910390a35050565b611411611b4a565b73ffffffffffffffffffffffffffffffffffffffff1661142f6111a6565b73ffffffffffffffffffffffffffffffffffffffff1614611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90613706565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b6114b36114ad611b4a565b83611c0b565b6114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e9906137c6565b60405180910390fd5b6114fe84848484612029565b50505050565b606061150f82611ade565b61154e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154590613746565b60405180910390fd5b6000611558612085565b9050600081511161157857604051806020016040528060008152506115a3565b8061158284612117565b60405160200161159392919061345c565b6040516020818303038152906040525b915050919050565b6115b3611b4a565b73ffffffffffffffffffffffffffffffffffffffff166115d16111a6565b73ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e90613706565b60405180910390fd5b600d5481111561166c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166390613626565b60405180910390fd5b6000611676610a43565b905060005b828110156116ab576116988482846116939190613944565b611f45565b80806116a390613b72565b91505061167b565b5081600d60008282546116be9190613a25565b92505081905550505050565b600b80546116d790613b0f565b80601f016020809104026020016040519081016040528092919081815260200182805461170390613b0f565b80156117505780601f1061172557610100808354040283529160200191611750565b820191906000526020600020905b81548152906001019060200180831161173357829003601f168201915b505050505081565b6060600061176583611066565b905060008167ffffffffffffffff8111156117a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156117d75781602001602082028036833780820191505090505b50905060005b82811015611847576117ef8582610ab6565b828281518110611828577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061183f90613b72565b9150506117dd565b508092505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d5481565b6118f4611b4a565b73ffffffffffffffffffffffffffffffffffffffff166119126111a6565b73ffffffffffffffffffffffffffffffffffffffff1614611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f90613706565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90613586565b60405180910390fd5b6119e181611f63565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ac757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ad75750611ad6826122c4565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611bc583610fb4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c1682611ade565b611c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4c90613606565b60405180910390fd5b6000611c6083610fb4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ccf57508373ffffffffffffffffffffffffffffffffffffffff16611cb7846108a0565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ce05750611cdf8185611852565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d0982610fb4565b73ffffffffffffffffffffffffffffffffffffffff1614611d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5690613726565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc6906135c6565b60405180910390fd5b611dda83838361232e565b611de5600082611b52565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e359190613a25565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e8c9190613944565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611f5f828260405180602001604052806000815250612442565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612034848484611ce9565b6120408484848461249d565b61207f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207690613566565b60405180910390fd5b50505050565b6060600b805461209490613b0f565b80601f01602080910402602001604051908101604052809291908181526020018280546120c090613b0f565b801561210d5780601f106120e25761010080835404028352916020019161210d565b820191906000526020600020905b8154815290600101906020018083116120f057829003601f168201915b5050505050905090565b6060600082141561215f576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122bf565b600082905060005b6000821461219157808061217a90613b72565b915050600a8261218a919061399a565b9150612167565b60008167ffffffffffffffff8111156121d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156122055781602001600182028036833780820191505090505b5090505b600085146122b85760018261221e9190613a25565b9150600a8561222d9190613bbb565b60306122399190613944565b60f81b818381518110612275577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122b1919061399a565b9450612209565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6123398383836119f7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561237c5761237781612634565b6123bb565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123ba576123b9838261267d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123fe576123f9816127ea565b61243d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461243c5761243b828261292d565b5b5b505050565b61244c83836129ac565b612459600084848461249d565b612498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248f90613566565b60405180910390fd5b505050565b60006124be8473ffffffffffffffffffffffffffffffffffffffff166119e4565b15612627578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124e7611b4a565b8786866040518563ffffffff1660e01b8152600401612509949392919061349b565b602060405180830381600087803b15801561252357600080fd5b505af192505050801561255457506040513d601f19601f820116820180604052508101906125519190612f4f565b60015b6125d7573d8060008114612584576040519150601f19603f3d011682016040523d82523d6000602084013e612589565b606091505b506000815114156125cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c690613566565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061262c565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161268a84611066565b6126949190613a25565b9050600060076000848152602001908152602001600020549050818114612779576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127fe9190613a25565b9050600060096000848152602001908152602001600020549050600060088381548110612854577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061289c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612911577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061293883611066565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a13906136c6565b60405180910390fd5b612a2581611ade565b15612a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5c906135a6565b60405180910390fd5b612a716000838361232e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ac19190613944565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612b8690613b0f565b90600052602060002090601f016020900481019282612ba85760008555612bef565b82601f10612bc157805160ff1916838001178555612bef565b82800160010185558215612bef579182015b82811115612bee578251825591602001919060010190612bd3565b5b509050612bfc9190612c00565b5090565b5b80821115612c19576000816000905550600101612c01565b5090565b6000612c30612c2b84613866565b613841565b905082815260208101848484011115612c4857600080fd5b612c53848285613acd565b509392505050565b6000612c6e612c6984613897565b613841565b905082815260208101848484011115612c8657600080fd5b612c91848285613acd565b509392505050565b600081359050612ca8816142ee565b92915050565b600081359050612cbd81614305565b92915050565b600081359050612cd28161431c565b92915050565b600081519050612ce78161431c565b92915050565b600082601f830112612cfe57600080fd5b8135612d0e848260208601612c1d565b91505092915050565b600082601f830112612d2857600080fd5b8135612d38848260208601612c5b565b91505092915050565b600081359050612d5081614333565b92915050565b600060208284031215612d6857600080fd5b6000612d7684828501612c99565b91505092915050565b60008060408385031215612d9257600080fd5b6000612da085828601612c99565b9250506020612db185828601612c99565b9150509250929050565b600080600060608486031215612dd057600080fd5b6000612dde86828701612c99565b9350506020612def86828701612c99565b9250506040612e0086828701612d41565b9150509250925092565b60008060008060808587031215612e2057600080fd5b6000612e2e87828801612c99565b9450506020612e3f87828801612c99565b9350506040612e5087828801612d41565b925050606085013567ffffffffffffffff811115612e6d57600080fd5b612e7987828801612ced565b91505092959194509250565b60008060408385031215612e9857600080fd5b6000612ea685828601612c99565b9250506020612eb785828601612cae565b9150509250929050565b60008060408385031215612ed457600080fd5b6000612ee285828601612c99565b9250506020612ef385828601612d41565b9150509250929050565b600060208284031215612f0f57600080fd5b6000612f1d84828501612cae565b91505092915050565b600060208284031215612f3857600080fd5b6000612f4684828501612cc3565b91505092915050565b600060208284031215612f6157600080fd5b6000612f6f84828501612cd8565b91505092915050565b600060208284031215612f8a57600080fd5b600082013567ffffffffffffffff811115612fa457600080fd5b612fb084828501612d17565b91505092915050565b600060208284031215612fcb57600080fd5b6000612fd984828501612d41565b91505092915050565b6000612fee838361343e565b60208301905092915050565b61300381613a59565b82525050565b6000613014826138d8565b61301e8185613906565b9350613029836138c8565b8060005b8381101561305a5781516130418882612fe2565b975061304c836138f9565b92505060018101905061302d565b5085935050505092915050565b61307081613a6b565b82525050565b6000613081826138e3565b61308b8185613917565b935061309b818560208601613adc565b6130a481613ca8565b840191505092915050565b60006130ba826138ee565b6130c48185613928565b93506130d4818560208601613adc565b6130dd81613ca8565b840191505092915050565b60006130f3826138ee565b6130fd8185613939565b935061310d818560208601613adc565b80840191505092915050565b6000613126602b83613928565b915061313182613cb9565b604082019050919050565b6000613149603283613928565b915061315482613d08565b604082019050919050565b600061316c602683613928565b915061317782613d57565b604082019050919050565b600061318f601c83613928565b915061319a82613da6565b602082019050919050565b60006131b2602483613928565b91506131bd82613dcf565b604082019050919050565b60006131d5601983613928565b91506131e082613e1e565b602082019050919050565b60006131f8602c83613928565b915061320382613e47565b604082019050919050565b600061321b602b83613928565b915061322682613e96565b604082019050919050565b600061323e603883613928565b915061324982613ee5565b604082019050919050565b6000613261602a83613928565b915061326c82613f34565b604082019050919050565b6000613284602983613928565b915061328f82613f83565b604082019050919050565b60006132a7601c83613928565b91506132b282613fd2565b602082019050919050565b60006132ca602083613928565b91506132d582613ffb565b602082019050919050565b60006132ed602c83613928565b91506132f882614024565b604082019050919050565b6000613310602083613928565b915061331b82614073565b602082019050919050565b6000613333602983613928565b915061333e8261409c565b604082019050919050565b6000613356602f83613928565b9150613361826140eb565b604082019050919050565b6000613379601383613928565b91506133848261413a565b602082019050919050565b600061339c602183613928565b91506133a782614163565b604082019050919050565b60006133bf602583613928565b91506133ca826141b2565b604082019050919050565b60006133e2603183613928565b91506133ed82614201565b604082019050919050565b6000613405602c83613928565b915061341082614250565b604082019050919050565b6000613428602383613928565b91506134338261429f565b604082019050919050565b61344781613ac3565b82525050565b61345681613ac3565b82525050565b600061346882856130e8565b915061347482846130e8565b91508190509392505050565b60006020820190506134956000830184612ffa565b92915050565b60006080820190506134b06000830187612ffa565b6134bd6020830186612ffa565b6134ca604083018561344d565b81810360608301526134dc8184613076565b905095945050505050565b600060208201905081810360008301526135018184613009565b905092915050565b600060208201905061351e6000830184613067565b92915050565b6000602082019050818103600083015261353e81846130af565b905092915050565b6000602082019050818103600083015261355f81613119565b9050919050565b6000602082019050818103600083015261357f8161313c565b9050919050565b6000602082019050818103600083015261359f8161315f565b9050919050565b600060208201905081810360008301526135bf81613182565b9050919050565b600060208201905081810360008301526135df816131a5565b9050919050565b600060208201905081810360008301526135ff816131c8565b9050919050565b6000602082019050818103600083015261361f816131eb565b9050919050565b6000602082019050818103600083015261363f8161320e565b9050919050565b6000602082019050818103600083015261365f81613231565b9050919050565b6000602082019050818103600083015261367f81613254565b9050919050565b6000602082019050818103600083015261369f81613277565b9050919050565b600060208201905081810360008301526136bf8161329a565b9050919050565b600060208201905081810360008301526136df816132bd565b9050919050565b600060208201905081810360008301526136ff816132e0565b9050919050565b6000602082019050818103600083015261371f81613303565b9050919050565b6000602082019050818103600083015261373f81613326565b9050919050565b6000602082019050818103600083015261375f81613349565b9050919050565b6000602082019050818103600083015261377f8161336c565b9050919050565b6000602082019050818103600083015261379f8161338f565b9050919050565b600060208201905081810360008301526137bf816133b2565b9050919050565b600060208201905081810360008301526137df816133d5565b9050919050565b600060208201905081810360008301526137ff816133f8565b9050919050565b6000602082019050818103600083015261381f8161341b565b9050919050565b600060208201905061383b600083018461344d565b92915050565b600061384b61385c565b90506138578282613b41565b919050565b6000604051905090565b600067ffffffffffffffff82111561388157613880613c79565b5b61388a82613ca8565b9050602081019050919050565b600067ffffffffffffffff8211156138b2576138b1613c79565b5b6138bb82613ca8565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061394f82613ac3565b915061395a83613ac3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561398f5761398e613bec565b5b828201905092915050565b60006139a582613ac3565b91506139b083613ac3565b9250826139c0576139bf613c1b565b5b828204905092915050565b60006139d682613ac3565b91506139e183613ac3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a1a57613a19613bec565b5b828202905092915050565b6000613a3082613ac3565b9150613a3b83613ac3565b925082821015613a4e57613a4d613bec565b5b828203905092915050565b6000613a6482613aa3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613afa578082015181840152602081019050613adf565b83811115613b09576000848401525b50505050565b60006002820490506001821680613b2757607f821691505b60208210811415613b3b57613b3a613c4a565b5b50919050565b613b4a82613ca8565b810181811067ffffffffffffffff82111715613b6957613b68613c79565b5b80604052505050565b6000613b7d82613ac3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bb057613baf613bec565b5b600182019050919050565b6000613bc682613ac3565b9150613bd183613ac3565b925082613be157613be0613c1b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f47696674207265736572766520657863656564656420776974682070726f766960008201527f64656420616d6f756e742e000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742065746865722070726f76696465642e00000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f53616c65206973206e6f74206163746976652e00000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f537570706c7920657863656564656420776974682070726f766964656420616d60008201527f6f756e742e000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f50726f766964656420616d6f756e742065786365656473206d696e74206c696d60008201527f69742e0000000000000000000000000000000000000000000000000000000000602082015250565b6142f781613a59565b811461430257600080fd5b50565b61430e81613a6b565b811461431957600080fd5b50565b61432581613a77565b811461433057600080fd5b50565b61433c81613ac3565b811461434757600080fd5b5056fea2646970667358221220e0d987f8d2648bcbe0679f5c3331abbbaf0746f0d7265c391b1324f9b8678d7964736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d635652367233514348526b3857676f656e6a4146517350443533517a58546b7a48574a4a7347354a365a43512f00000000000000000000

Deployed Bytecode

0x6080604052600436106101e35760003560e01c80636352211e11610102578063b88d4fde11610095578063d3b90b3011610064578063d3b90b30146106c6578063e985e9c514610703578063ee40494614610740578063f2fde38b1461076b576101e3565b8063b88d4fde1461060c578063c87b56dd14610635578063cbce4c9714610672578063cfc86f7b1461069b576101e3565b806391cca3db116100d157806391cca3db1461056457806395d89b411461058f578063a22cb465146105ba578063acec338a146105e3576101e3565b80636352211e146104a857806370a08231146104e5578063715018a6146105225780638da5cb5b14610539576101e3565b80632f745c591161017a57806343bc16121161014957806343bc1612146103ec5780634d615d23146104175780634f6ccce71461044257806355f804b31461047f576101e3565b80632f745c5914610360578063368004ed1461039d5780633ccfd60b146103b957806342842e0e146103c3576101e3565b806315945790116101b657806315945790146102b657806318160ddd146102e1578063235b6ea11461030c57806323b872dd14610337576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612f26565b610794565b60405161021c9190613509565b60405180910390f35b34801561023157600080fd5b5061023a61080e565b6040516102479190613524565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190612fb9565b6108a0565b6040516102849190613480565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190612ec1565b610925565b005b3480156102c257600080fd5b506102cb610a3d565b6040516102d89190613826565b60405180910390f35b3480156102ed57600080fd5b506102f6610a43565b6040516103039190613826565b60405180910390f35b34801561031857600080fd5b50610321610a50565b60405161032e9190613826565b60405180910390f35b34801561034357600080fd5b5061035e60048036038101906103599190612dbb565b610a56565b005b34801561036c57600080fd5b5061038760048036038101906103829190612ec1565b610ab6565b6040516103949190613826565b60405180910390f35b6103b760048036038101906103b29190612fb9565b610b5b565b005b6103c1610cde565b005b3480156103cf57600080fd5b506103ea60048036038101906103e59190612dbb565b610e2e565b005b3480156103f857600080fd5b50610401610e4e565b60405161040e9190613480565b60405180910390f35b34801561042357600080fd5b5061042c610e74565b6040516104399190613509565b60405180910390f35b34801561044e57600080fd5b5061046960048036038101906104649190612fb9565b610e87565b6040516104769190613826565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a19190612f78565b610f1e565b005b3480156104b457600080fd5b506104cf60048036038101906104ca9190612fb9565b610fb4565b6040516104dc9190613480565b60405180910390f35b3480156104f157600080fd5b5061050c60048036038101906105079190612d56565b611066565b6040516105199190613826565b60405180910390f35b34801561052e57600080fd5b5061053761111e565b005b34801561054557600080fd5b5061054e6111a6565b60405161055b9190613480565b60405180910390f35b34801561057057600080fd5b506105796111d0565b6040516105869190613480565b60405180910390f35b34801561059b57600080fd5b506105a46111f6565b6040516105b19190613524565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190612e85565b611288565b005b3480156105ef57600080fd5b5061060a60048036038101906106059190612efd565b611409565b005b34801561061857600080fd5b50610633600480360381019061062e9190612e0a565b6114a2565b005b34801561064157600080fd5b5061065c60048036038101906106579190612fb9565b611504565b6040516106699190613524565b60405180910390f35b34801561067e57600080fd5b5061069960048036038101906106949190612ec1565b6115ab565b005b3480156106a757600080fd5b506106b06116ca565b6040516106bd9190613524565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e89190612d56565b611758565b6040516106fa91906134e7565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190612d7f565b611852565b6040516107379190613509565b60405180910390f35b34801561074c57600080fd5b506107556118e6565b6040516107629190613826565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190612d56565b6118ec565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108075750610806826119fc565b5b9050919050565b60606000805461081d90613b0f565b80601f016020809104026020016040519081016040528092919081815260200182805461084990613b0f565b80156108965780601f1061086b57610100808354040283529160200191610896565b820191906000526020600020905b81548152906001019060200180831161087957829003601f168201915b5050505050905090565b60006108ab82611ade565b6108ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e1906136e6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061093082610fb4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099890613786565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109c0611b4a565b73ffffffffffffffffffffffffffffffffffffffff1614806109ef57506109ee816109e9611b4a565b611852565b5b610a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2590613646565b60405180910390fd5b610a388383611b52565b505050565b600f5481565b6000600880549050905090565b600e5481565b610a67610a61611b4a565b82611c0b565b610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d906137c6565b60405180910390fd5b610ab1838383611ce9565b505050565b6000610ac183611066565b8210610b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af990613546565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000610b65610a43565b9050600c60009054906101000a900460ff16610bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bad90613766565b60405180910390fd5b60158210610bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf090613806565b60405180910390fd5b81600e54610c0791906139cb565b341015610c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c40906136a6565b60405180910390fd5b600d54600f54610c599190613a25565b8282610c659190613944565b1115610ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9d906137a6565b60405180910390fd5b60005b82811015610cd957610cc6338284610cc19190613944565b611f45565b8080610cd190613b72565b915050610ca9565b505050565b610ce6611b4a565b73ffffffffffffffffffffffffffffffffffffffff16610d046111a6565b73ffffffffffffffffffffffffffffffffffffffff1614610d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5190613706565b60405180910390fd5b6000600247610d69919061399a565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610dcb57600080fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610e2b57600080fd5b50565b610e49838383604051806020016040528060008152506114a2565b505050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900460ff1681565b6000610e91610a43565b8210610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec9906137e6565b60405180910390fd5b60088281548110610f0c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610f26611b4a565b73ffffffffffffffffffffffffffffffffffffffff16610f446111a6565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190613706565b60405180910390fd5b80600b9080519060200190610fb0929190612b7a565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105490613686565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ce90613666565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611126611b4a565b73ffffffffffffffffffffffffffffffffffffffff166111446111a6565b73ffffffffffffffffffffffffffffffffffffffff161461119a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119190613706565b60405180910390fd5b6111a46000611f63565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606001805461120590613b0f565b80601f016020809104026020016040519081016040528092919081815260200182805461123190613b0f565b801561127e5780601f106112535761010080835404028352916020019161127e565b820191906000526020600020905b81548152906001019060200180831161126157829003601f168201915b5050505050905090565b611290611b4a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f5906135e6565b60405180910390fd5b806005600061130b611b4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166113b8611b4a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113fd9190613509565b60405180910390a35050565b611411611b4a565b73ffffffffffffffffffffffffffffffffffffffff1661142f6111a6565b73ffffffffffffffffffffffffffffffffffffffff1614611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90613706565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b6114b36114ad611b4a565b83611c0b565b6114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e9906137c6565b60405180910390fd5b6114fe84848484612029565b50505050565b606061150f82611ade565b61154e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154590613746565b60405180910390fd5b6000611558612085565b9050600081511161157857604051806020016040528060008152506115a3565b8061158284612117565b60405160200161159392919061345c565b6040516020818303038152906040525b915050919050565b6115b3611b4a565b73ffffffffffffffffffffffffffffffffffffffff166115d16111a6565b73ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e90613706565b60405180910390fd5b600d5481111561166c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166390613626565b60405180910390fd5b6000611676610a43565b905060005b828110156116ab576116988482846116939190613944565b611f45565b80806116a390613b72565b91505061167b565b5081600d60008282546116be9190613a25565b92505081905550505050565b600b80546116d790613b0f565b80601f016020809104026020016040519081016040528092919081815260200182805461170390613b0f565b80156117505780601f1061172557610100808354040283529160200191611750565b820191906000526020600020905b81548152906001019060200180831161173357829003601f168201915b505050505081565b6060600061176583611066565b905060008167ffffffffffffffff8111156117a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156117d75781602001602082028036833780820191505090505b50905060005b82811015611847576117ef8582610ab6565b828281518110611828577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061183f90613b72565b9150506117dd565b508092505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d5481565b6118f4611b4a565b73ffffffffffffffffffffffffffffffffffffffff166119126111a6565b73ffffffffffffffffffffffffffffffffffffffff1614611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f90613706565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90613586565b60405180910390fd5b6119e181611f63565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ac757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ad75750611ad6826122c4565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611bc583610fb4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c1682611ade565b611c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4c90613606565b60405180910390fd5b6000611c6083610fb4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ccf57508373ffffffffffffffffffffffffffffffffffffffff16611cb7846108a0565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ce05750611cdf8185611852565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d0982610fb4565b73ffffffffffffffffffffffffffffffffffffffff1614611d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5690613726565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc6906135c6565b60405180910390fd5b611dda83838361232e565b611de5600082611b52565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e359190613a25565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e8c9190613944565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611f5f828260405180602001604052806000815250612442565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612034848484611ce9565b6120408484848461249d565b61207f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207690613566565b60405180910390fd5b50505050565b6060600b805461209490613b0f565b80601f01602080910402602001604051908101604052809291908181526020018280546120c090613b0f565b801561210d5780601f106120e25761010080835404028352916020019161210d565b820191906000526020600020905b8154815290600101906020018083116120f057829003601f168201915b5050505050905090565b6060600082141561215f576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122bf565b600082905060005b6000821461219157808061217a90613b72565b915050600a8261218a919061399a565b9150612167565b60008167ffffffffffffffff8111156121d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156122055781602001600182028036833780820191505090505b5090505b600085146122b85760018261221e9190613a25565b9150600a8561222d9190613bbb565b60306122399190613944565b60f81b818381518110612275577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122b1919061399a565b9450612209565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6123398383836119f7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561237c5761237781612634565b6123bb565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123ba576123b9838261267d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123fe576123f9816127ea565b61243d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461243c5761243b828261292d565b5b5b505050565b61244c83836129ac565b612459600084848461249d565b612498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248f90613566565b60405180910390fd5b505050565b60006124be8473ffffffffffffffffffffffffffffffffffffffff166119e4565b15612627578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124e7611b4a565b8786866040518563ffffffff1660e01b8152600401612509949392919061349b565b602060405180830381600087803b15801561252357600080fd5b505af192505050801561255457506040513d601f19601f820116820180604052508101906125519190612f4f565b60015b6125d7573d8060008114612584576040519150601f19603f3d011682016040523d82523d6000602084013e612589565b606091505b506000815114156125cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c690613566565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061262c565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161268a84611066565b6126949190613a25565b9050600060076000848152602001908152602001600020549050818114612779576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127fe9190613a25565b9050600060096000848152602001908152602001600020549050600060088381548110612854577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061289c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612911577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061293883611066565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a13906136c6565b60405180910390fd5b612a2581611ade565b15612a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5c906135a6565b60405180910390fd5b612a716000838361232e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ac19190613944565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612b8690613b0f565b90600052602060002090601f016020900481019282612ba85760008555612bef565b82601f10612bc157805160ff1916838001178555612bef565b82800160010185558215612bef579182015b82811115612bee578251825591602001919060010190612bd3565b5b509050612bfc9190612c00565b5090565b5b80821115612c19576000816000905550600101612c01565b5090565b6000612c30612c2b84613866565b613841565b905082815260208101848484011115612c4857600080fd5b612c53848285613acd565b509392505050565b6000612c6e612c6984613897565b613841565b905082815260208101848484011115612c8657600080fd5b612c91848285613acd565b509392505050565b600081359050612ca8816142ee565b92915050565b600081359050612cbd81614305565b92915050565b600081359050612cd28161431c565b92915050565b600081519050612ce78161431c565b92915050565b600082601f830112612cfe57600080fd5b8135612d0e848260208601612c1d565b91505092915050565b600082601f830112612d2857600080fd5b8135612d38848260208601612c5b565b91505092915050565b600081359050612d5081614333565b92915050565b600060208284031215612d6857600080fd5b6000612d7684828501612c99565b91505092915050565b60008060408385031215612d9257600080fd5b6000612da085828601612c99565b9250506020612db185828601612c99565b9150509250929050565b600080600060608486031215612dd057600080fd5b6000612dde86828701612c99565b9350506020612def86828701612c99565b9250506040612e0086828701612d41565b9150509250925092565b60008060008060808587031215612e2057600080fd5b6000612e2e87828801612c99565b9450506020612e3f87828801612c99565b9350506040612e5087828801612d41565b925050606085013567ffffffffffffffff811115612e6d57600080fd5b612e7987828801612ced565b91505092959194509250565b60008060408385031215612e9857600080fd5b6000612ea685828601612c99565b9250506020612eb785828601612cae565b9150509250929050565b60008060408385031215612ed457600080fd5b6000612ee285828601612c99565b9250506020612ef385828601612d41565b9150509250929050565b600060208284031215612f0f57600080fd5b6000612f1d84828501612cae565b91505092915050565b600060208284031215612f3857600080fd5b6000612f4684828501612cc3565b91505092915050565b600060208284031215612f6157600080fd5b6000612f6f84828501612cd8565b91505092915050565b600060208284031215612f8a57600080fd5b600082013567ffffffffffffffff811115612fa457600080fd5b612fb084828501612d17565b91505092915050565b600060208284031215612fcb57600080fd5b6000612fd984828501612d41565b91505092915050565b6000612fee838361343e565b60208301905092915050565b61300381613a59565b82525050565b6000613014826138d8565b61301e8185613906565b9350613029836138c8565b8060005b8381101561305a5781516130418882612fe2565b975061304c836138f9565b92505060018101905061302d565b5085935050505092915050565b61307081613a6b565b82525050565b6000613081826138e3565b61308b8185613917565b935061309b818560208601613adc565b6130a481613ca8565b840191505092915050565b60006130ba826138ee565b6130c48185613928565b93506130d4818560208601613adc565b6130dd81613ca8565b840191505092915050565b60006130f3826138ee565b6130fd8185613939565b935061310d818560208601613adc565b80840191505092915050565b6000613126602b83613928565b915061313182613cb9565b604082019050919050565b6000613149603283613928565b915061315482613d08565b604082019050919050565b600061316c602683613928565b915061317782613d57565b604082019050919050565b600061318f601c83613928565b915061319a82613da6565b602082019050919050565b60006131b2602483613928565b91506131bd82613dcf565b604082019050919050565b60006131d5601983613928565b91506131e082613e1e565b602082019050919050565b60006131f8602c83613928565b915061320382613e47565b604082019050919050565b600061321b602b83613928565b915061322682613e96565b604082019050919050565b600061323e603883613928565b915061324982613ee5565b604082019050919050565b6000613261602a83613928565b915061326c82613f34565b604082019050919050565b6000613284602983613928565b915061328f82613f83565b604082019050919050565b60006132a7601c83613928565b91506132b282613fd2565b602082019050919050565b60006132ca602083613928565b91506132d582613ffb565b602082019050919050565b60006132ed602c83613928565b91506132f882614024565b604082019050919050565b6000613310602083613928565b915061331b82614073565b602082019050919050565b6000613333602983613928565b915061333e8261409c565b604082019050919050565b6000613356602f83613928565b9150613361826140eb565b604082019050919050565b6000613379601383613928565b91506133848261413a565b602082019050919050565b600061339c602183613928565b91506133a782614163565b604082019050919050565b60006133bf602583613928565b91506133ca826141b2565b604082019050919050565b60006133e2603183613928565b91506133ed82614201565b604082019050919050565b6000613405602c83613928565b915061341082614250565b604082019050919050565b6000613428602383613928565b91506134338261429f565b604082019050919050565b61344781613ac3565b82525050565b61345681613ac3565b82525050565b600061346882856130e8565b915061347482846130e8565b91508190509392505050565b60006020820190506134956000830184612ffa565b92915050565b60006080820190506134b06000830187612ffa565b6134bd6020830186612ffa565b6134ca604083018561344d565b81810360608301526134dc8184613076565b905095945050505050565b600060208201905081810360008301526135018184613009565b905092915050565b600060208201905061351e6000830184613067565b92915050565b6000602082019050818103600083015261353e81846130af565b905092915050565b6000602082019050818103600083015261355f81613119565b9050919050565b6000602082019050818103600083015261357f8161313c565b9050919050565b6000602082019050818103600083015261359f8161315f565b9050919050565b600060208201905081810360008301526135bf81613182565b9050919050565b600060208201905081810360008301526135df816131a5565b9050919050565b600060208201905081810360008301526135ff816131c8565b9050919050565b6000602082019050818103600083015261361f816131eb565b9050919050565b6000602082019050818103600083015261363f8161320e565b9050919050565b6000602082019050818103600083015261365f81613231565b9050919050565b6000602082019050818103600083015261367f81613254565b9050919050565b6000602082019050818103600083015261369f81613277565b9050919050565b600060208201905081810360008301526136bf8161329a565b9050919050565b600060208201905081810360008301526136df816132bd565b9050919050565b600060208201905081810360008301526136ff816132e0565b9050919050565b6000602082019050818103600083015261371f81613303565b9050919050565b6000602082019050818103600083015261373f81613326565b9050919050565b6000602082019050818103600083015261375f81613349565b9050919050565b6000602082019050818103600083015261377f8161336c565b9050919050565b6000602082019050818103600083015261379f8161338f565b9050919050565b600060208201905081810360008301526137bf816133b2565b9050919050565b600060208201905081810360008301526137df816133d5565b9050919050565b600060208201905081810360008301526137ff816133f8565b9050919050565b6000602082019050818103600083015261381f8161341b565b9050919050565b600060208201905061383b600083018461344d565b92915050565b600061384b61385c565b90506138578282613b41565b919050565b6000604051905090565b600067ffffffffffffffff82111561388157613880613c79565b5b61388a82613ca8565b9050602081019050919050565b600067ffffffffffffffff8211156138b2576138b1613c79565b5b6138bb82613ca8565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061394f82613ac3565b915061395a83613ac3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561398f5761398e613bec565b5b828201905092915050565b60006139a582613ac3565b91506139b083613ac3565b9250826139c0576139bf613c1b565b5b828204905092915050565b60006139d682613ac3565b91506139e183613ac3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a1a57613a19613bec565b5b828202905092915050565b6000613a3082613ac3565b9150613a3b83613ac3565b925082821015613a4e57613a4d613bec565b5b828203905092915050565b6000613a6482613aa3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613afa578082015181840152602081019050613adf565b83811115613b09576000848401525b50505050565b60006002820490506001821680613b2757607f821691505b60208210811415613b3b57613b3a613c4a565b5b50919050565b613b4a82613ca8565b810181811067ffffffffffffffff82111715613b6957613b68613c79565b5b80604052505050565b6000613b7d82613ac3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bb057613baf613bec565b5b600182019050919050565b6000613bc682613ac3565b9150613bd183613ac3565b925082613be157613be0613c1b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f47696674207265736572766520657863656564656420776974682070726f766960008201527f64656420616d6f756e742e000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742065746865722070726f76696465642e00000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f53616c65206973206e6f74206163746976652e00000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f537570706c7920657863656564656420776974682070726f766964656420616d60008201527f6f756e742e000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f50726f766964656420616d6f756e742065786365656473206d696e74206c696d60008201527f69742e0000000000000000000000000000000000000000000000000000000000602082015250565b6142f781613a59565b811461430257600080fd5b50565b61430e81613a6b565b811461431957600080fd5b50565b61432581613a77565b811461433057600080fd5b50565b61433c81613ac3565b811461434757600080fd5b5056fea2646970667358221220e0d987f8d2648bcbe0679f5c3331abbbaf0746f0d7265c391b1324f9b8678d7964736f6c63430008040033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d635652367233514348526b3857676f656e6a4146517350443533517a58546b7a48574a4a7347354a365a43512f00000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): ipfs://QmcVR6r3QCHRk8WgoenjAFQsPD53QzXTkzHWJJsG5J6ZCQ/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d635652367233514348526b3857676f656e6a4146517350
Arg [3] : 443533517a58546b7a48574a4a7347354a365a43512f00000000000000000000


Deployed Bytecode Sourcemap

43129:3110:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34560:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21449:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23008:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22531:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43415:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35200:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43375:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23898:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34868:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45266:686;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46052:184;;;:::i;:::-;;24308:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43472:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43311:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35390:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44099:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21143:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20873:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42361:94;;;;;;;;;;;;;:::i;:::-;;41710:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43543:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21618:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23301:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44265:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24564:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21793:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44831:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43258:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44427:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23667:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43343:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42610:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34560:224;34662:4;34701:35;34686:50;;;:11;:50;;;;:90;;;;34740:36;34764:11;34740:23;:36::i;:::-;34686:90;34679:97;;34560:224;;;:::o;21449:100::-;21503:13;21536:5;21529:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21449:100;:::o;23008:221::-;23084:7;23112:16;23120:7;23112;:16::i;:::-;23104:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23197:15;:24;23213:7;23197:24;;;;;;;;;;;;;;;;;;;;;23190:31;;23008:221;;;:::o;22531:411::-;22612:13;22628:23;22643:7;22628:14;:23::i;:::-;22612:39;;22676:5;22670:11;;:2;:11;;;;22662:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22770:5;22754:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22779:37;22796:5;22803:12;:10;:12::i;:::-;22779:16;:37::i;:::-;22754:62;22732:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22913:21;22922:2;22926:7;22913:8;:21::i;:::-;22531:411;;;:::o;43415:29::-;;;;:::o;35200:113::-;35261:7;35288:10;:17;;;;35281:24;;35200:113;:::o;43375:35::-;;;;:::o;23898:339::-;24093:41;24112:12;:10;:12::i;:::-;24126:7;24093:18;:41::i;:::-;24085:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24201:28;24211:4;24217:2;24221:7;24201:9;:28::i;:::-;23898:339;;;:::o;34868:256::-;34965:7;35001:23;35018:5;35001:16;:23::i;:::-;34993:5;:31;34985:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35090:12;:19;35103:5;35090:19;;;;;;;;;;;;;;;:26;35110:5;35090:26;;;;;;;;;;;;35083:33;;34868:256;;;;:::o;45266:686::-;45320:14;45337:13;:11;:13::i;:::-;45320:30;;45406:7;;;;;;;;;;;45397:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;45522:2;45512:7;:12;45503:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;45656:7;45647:6;;:16;;;;:::i;:::-;45634:9;:29;;45625:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;45806:6;;45796:7;;:16;;;;:::i;:::-;45785:7;45776:6;:16;;;;:::i;:::-;:36;;45767:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;45867:9;45863:84;45882:7;45878:1;:11;45863:84;;;45904:35;45915:10;45936:1;45927:6;:10;;;;:::i;:::-;45904:9;:35::i;:::-;45891:3;;;;;:::i;:::-;;;;45863:84;;;;45266:686;;:::o;46052:184::-;41941:12;:10;:12::i;:::-;41930:23;;:7;:5;:7::i;:::-;:23;;;41922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46104:13:::1;46144:1;46120:21;:25;;;;:::i;:::-;46104:41;;46170:6;;;;;;;;;;;46162:20;;:27;46183:5;46162:27;;;;;;;;;;;;;;;;;;;;;;;46154:36;;;::::0;::::1;;46213:3;;;;;;;;;;;46205:17;;:24;46223:5;46205:24;;;;;;;;;;;;;;;;;;;;;;;46197:33;;;::::0;::::1;;42001:1;46052:184::o:0;24308:185::-;24446:39;24463:4;24469:2;24473:7;24446:39;;;;;;;;;;;;:16;:39::i;:::-;24308:185;;;:::o;43472:66::-;;;;;;;;;;;;;:::o;43311:27::-;;;;;;;;;;;;;:::o;35390:233::-;35465:7;35501:30;:28;:30::i;:::-;35493:5;:38;35485:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35598:10;35609:5;35598:17;;;;;;;;;;;;;;;;;;;;;;;;35591:24;;35390:233;;;:::o;44099:96::-;41941:12;:10;:12::i;:::-;41930:23;;:7;:5;:7::i;:::-;:23;;;41922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44182:7:::1;44166:13;:23;;;;;;;;;;;;:::i;:::-;;44099:96:::0;:::o;21143:239::-;21215:7;21235:13;21251:7;:16;21259:7;21251:16;;;;;;;;;;;;;;;;;;;;;21235:32;;21303:1;21286:19;;:5;:19;;;;21278:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21369:5;21362:12;;;21143:239;;;:::o;20873:208::-;20945:7;20990:1;20973:19;;:5;:19;;;;20965:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21057:9;:16;21067:5;21057:16;;;;;;;;;;;;;;;;21050:23;;20873:208;;;:::o;42361:94::-;41941:12;:10;:12::i;:::-;41930:23;;:7;:5;:7::i;:::-;:23;;;41922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42426:21:::1;42444:1;42426:9;:21::i;:::-;42361:94::o:0;41710:87::-;41756:7;41783:6;;;;;;;;;;;41776:13;;41710:87;:::o;43543:63::-;;;;;;;;;;;;;:::o;21618:104::-;21674:13;21707:7;21700:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21618:104;:::o;23301:295::-;23416:12;:10;:12::i;:::-;23404:24;;:8;:24;;;;23396:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23516:8;23471:18;:32;23490:12;:10;:12::i;:::-;23471:32;;;;;;;;;;;;;;;:42;23504:8;23471:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23569:8;23540:48;;23555:12;:10;:12::i;:::-;23540:48;;;23579:8;23540:48;;;;;;:::i;:::-;;;;;;;;23301:295;;:::o;44265:79::-;41941:12;:10;:12::i;:::-;41930:23;;:7;:5;:7::i;:::-;:23;;;41922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44332:6:::1;44322:7;;:16;;;;;;;;;;;;;;;;;;44265:79:::0;:::o;24564:328::-;24739:41;24758:12;:10;:12::i;:::-;24772:7;24739:18;:41::i;:::-;24731:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24845:39;24859:4;24865:2;24869:7;24878:5;24845:13;:39::i;:::-;24564:328;;;;:::o;21793:334::-;21866:13;21900:16;21908:7;21900;:16::i;:::-;21892:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21981:21;22005:10;:8;:10::i;:::-;21981:34;;22057:1;22039:7;22033:21;:25;:86;;;;;;;;;;;;;;;;;22085:7;22094:18;:7;:16;:18::i;:::-;22068:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22033:86;22026:93;;;21793:334;;;:::o;44831:371::-;41941:12;:10;:12::i;:::-;41930:23;;:7;:5;:7::i;:::-;:23;;;41922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44992:6:::1;;44981:7;:17;;44973:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45055:14;45072:13;:11;:13::i;:::-;45055:30;;45098:9;45094:77;45113:7;45109:1;:11;45094:77;;;45135:28;45146:3;45160:1;45151:6;:10;;;;:::i;:::-;45135:9;:28::i;:::-;45122:3;;;;;:::i;:::-;;;;45094:77;;;;45189:7;45179:6;;:17;;;;;;;:::i;:::-;;;;;;;;42001:1;44831:371:::0;;:::o;43258:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44427:320::-;44490:16;44515:18;44536:17;44546:6;44536:9;:17::i;:::-;44515:38;;44562:25;44604:10;44590:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44562:53;;44626:9;44622:98;44641:10;44637:1;:14;44622:98;;;44682:30;44702:6;44710:1;44682:19;:30::i;:::-;44668:8;44677:1;44668:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;44653:3;;;;;:::i;:::-;;;;44622:98;;;;44733:8;44726:15;;;;44427:320;;;:::o;23667:164::-;23764:4;23788:18;:25;23807:5;23788:25;;;;;;;;;;;;;;;:35;23814:8;23788:35;;;;;;;;;;;;;;;;;;;;;;;;;23781:42;;23667:164;;;;:::o;43343:27::-;;;;:::o;42610:192::-;41941:12;:10;:12::i;:::-;41930:23;;:7;:5;:7::i;:::-;:23;;;41922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42719:1:::1;42699:22;;:8;:22;;;;42691:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42775:19;42785:8;42775:9;:19::i;:::-;42610:192:::0;:::o;8168:387::-;8228:4;8436:12;8503:7;8491:20;8483:28;;8546:1;8539:4;:8;8532:15;;;8168:387;;;:::o;32498:126::-;;;;:::o;20504:305::-;20606:4;20658:25;20643:40;;;:11;:40;;;;:105;;;;20715:33;20700:48;;;:11;:48;;;;20643:105;:158;;;;20765:36;20789:11;20765:23;:36::i;:::-;20643:158;20623:178;;20504:305;;;:::o;26402:127::-;26467:4;26519:1;26491:30;;:7;:16;26499:7;26491:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26484:37;;26402:127;;;:::o;15912:98::-;15965:7;15992:10;15985:17;;15912:98;:::o;30384:174::-;30486:2;30459:15;:24;30475:7;30459:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30542:7;30538:2;30504:46;;30513:23;30528:7;30513:14;:23::i;:::-;30504:46;;;;;;;;;;;;30384:174;;:::o;26696:348::-;26789:4;26814:16;26822:7;26814;:16::i;:::-;26806:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26890:13;26906:23;26921:7;26906:14;:23::i;:::-;26890:39;;26959:5;26948:16;;:7;:16;;;:51;;;;26992:7;26968:31;;:20;26980:7;26968:11;:20::i;:::-;:31;;;26948:51;:87;;;;27003:32;27020:5;27027:7;27003:16;:32::i;:::-;26948:87;26940:96;;;26696:348;;;;:::o;29688:578::-;29847:4;29820:31;;:23;29835:7;29820:14;:23::i;:::-;:31;;;29812:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29930:1;29916:16;;:2;:16;;;;29908:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29986:39;30007:4;30013:2;30017:7;29986:20;:39::i;:::-;30090:29;30107:1;30111:7;30090:8;:29::i;:::-;30151:1;30132:9;:15;30142:4;30132:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30180:1;30163:9;:13;30173:2;30163:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30211:2;30192:7;:16;30200:7;30192:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30250:7;30246:2;30231:27;;30240:4;30231:27;;;;;;;;;;;;29688:578;;;:::o;27386:110::-;27462:26;27472:2;27476:7;27462:26;;;;;;;;;;;;:9;:26::i;:::-;27386:110;;:::o;42810:173::-;42866:16;42885:6;;;;;;;;;;;42866:25;;42911:8;42902:6;;:17;;;;;;;;;;;;;;;;;;42966:8;42935:40;;42956:8;42935:40;;;;;;;;;;;;42810:173;;:::o;25774:315::-;25931:28;25941:4;25947:2;25951:7;25931:9;:28::i;:::-;25978:48;26001:4;26007:2;26011:7;26020:5;25978:22;:48::i;:::-;25970:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25774:315;;;;:::o;43922:108::-;43982:13;44011;44004:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43922:108;:::o;16443:723::-;16499:13;16729:1;16720:5;:10;16716:53;;;16747:10;;;;;;;;;;;;;;;;;;;;;16716:53;16779:12;16794:5;16779:20;;16810:14;16835:78;16850:1;16842:4;:9;16835:78;;16868:8;;;;;:::i;:::-;;;;16899:2;16891:10;;;;;:::i;:::-;;;16835:78;;;16923:19;16955:6;16945:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16923:39;;16973:154;16989:1;16980:5;:10;16973:154;;17017:1;17007:11;;;;;:::i;:::-;;;17084:2;17076:5;:10;;;;:::i;:::-;17063:2;:24;;;;:::i;:::-;17050:39;;17033:6;17040;17033:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17113:2;17104:11;;;;;:::i;:::-;;;16973:154;;;17151:6;17137:21;;;;;16443:723;;;;:::o;19004:157::-;19089:4;19128:25;19113:40;;;:11;:40;;;;19106:47;;19004:157;;;:::o;36236:589::-;36380:45;36407:4;36413:2;36417:7;36380:26;:45::i;:::-;36458:1;36442:18;;:4;:18;;;36438:187;;;36477:40;36509:7;36477:31;:40::i;:::-;36438:187;;;36547:2;36539:10;;:4;:10;;;36535:90;;36566:47;36599:4;36605:7;36566:32;:47::i;:::-;36535:90;36438:187;36653:1;36639:16;;:2;:16;;;36635:183;;;36672:45;36709:7;36672:36;:45::i;:::-;36635:183;;;36745:4;36739:10;;:2;:10;;;36735:83;;36766:40;36794:2;36798:7;36766:27;:40::i;:::-;36735:83;36635:183;36236:589;;;:::o;27723:321::-;27853:18;27859:2;27863:7;27853:5;:18::i;:::-;27904:54;27935:1;27939:2;27943:7;27952:5;27904:22;:54::i;:::-;27882:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27723:321;;;:::o;31123:803::-;31278:4;31299:15;:2;:13;;;:15::i;:::-;31295:624;;;31351:2;31335:36;;;31372:12;:10;:12::i;:::-;31386:4;31392:7;31401:5;31335:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31331:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31598:1;31581:6;:13;:18;31577:272;;;31624:60;;;;;;;;;;:::i;:::-;;;;;;;;31577:272;31799:6;31793:13;31784:6;31780:2;31776:15;31769:38;31331:533;31468:45;;;31458:55;;;:6;:55;;;;31451:62;;;;;31295:624;31903:4;31896:11;;31123:803;;;;;;;:::o;37548:164::-;37652:10;:17;;;;37625:15;:24;37641:7;37625:24;;;;;;;;;;;:44;;;;37680:10;37696:7;37680:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37548:164;:::o;38339:988::-;38605:22;38655:1;38630:22;38647:4;38630:16;:22::i;:::-;:26;;;;:::i;:::-;38605:51;;38667:18;38688:17;:26;38706:7;38688:26;;;;;;;;;;;;38667:47;;38835:14;38821:10;:28;38817:328;;38866:19;38888:12;:18;38901:4;38888:18;;;;;;;;;;;;;;;:34;38907:14;38888:34;;;;;;;;;;;;38866:56;;38972:11;38939:12;:18;38952:4;38939:18;;;;;;;;;;;;;;;:30;38958:10;38939:30;;;;;;;;;;;:44;;;;39089:10;39056:17;:30;39074:11;39056:30;;;;;;;;;;;:43;;;;38817:328;;39241:17;:26;39259:7;39241:26;;;;;;;;;;;39234:33;;;39285:12;:18;39298:4;39285:18;;;;;;;;;;;;;;;:34;39304:14;39285:34;;;;;;;;;;;39278:41;;;38339:988;;;;:::o;39622:1079::-;39875:22;39920:1;39900:10;:17;;;;:21;;;;:::i;:::-;39875:46;;39932:18;39953:15;:24;39969:7;39953:24;;;;;;;;;;;;39932:45;;40304:19;40326:10;40337:14;40326:26;;;;;;;;;;;;;;;;;;;;;;;;40304:48;;40390:11;40365:10;40376;40365:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;40501:10;40470:15;:28;40486:11;40470:28;;;;;;;;;;;:41;;;;40642:15;:24;40658:7;40642:24;;;;;;;;;;;40635:31;;;40677:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39622:1079;;;;:::o;37126:221::-;37211:14;37228:20;37245:2;37228:16;:20::i;:::-;37211:37;;37286:7;37259:12;:16;37272:2;37259:16;;;;;;;;;;;;;;;:24;37276:6;37259:24;;;;;;;;;;;:34;;;;37333:6;37304:17;:26;37322:7;37304:26;;;;;;;;;;;:35;;;;37126:221;;;:::o;28380:382::-;28474:1;28460:16;;:2;:16;;;;28452:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28533:16;28541:7;28533;:16::i;:::-;28532:17;28524:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28595:45;28624:1;28628:2;28632:7;28595:20;:45::i;:::-;28670:1;28653:9;:13;28663:2;28653:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28701:2;28682:7;:16;28690:7;28682:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28746:7;28742:2;28721:33;;28738:1;28721:33;;;;;;;;;;;;28380:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;1910:5;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;2068:6;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;2345:6;2353;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;2767:6;2775;2783;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;3343:6;3351;3359;3367;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;4128:6;4136;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;4538:6;4546;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:256::-;4939:6;4988:2;4976:9;4967:7;4963:23;4959:32;4956:2;;;5004:1;5001;4994:12;4956:2;5047:1;5072:50;5114:7;5105:6;5094:9;5090:22;5072:50;:::i;:::-;5062:60;;5018:114;4946:193;;;;:::o;5145:260::-;5203:6;5252:2;5240:9;5231:7;5227:23;5223:32;5220:2;;;5268:1;5265;5258:12;5220:2;5311:1;5336:52;5380:7;5371:6;5360:9;5356:22;5336:52;:::i;:::-;5326:62;;5282:116;5210:195;;;;:::o;5411:282::-;5480:6;5529:2;5517:9;5508:7;5504:23;5500:32;5497:2;;;5545:1;5542;5535:12;5497:2;5588:1;5613:63;5668:7;5659:6;5648:9;5644:22;5613:63;:::i;:::-;5603:73;;5559:127;5487:206;;;;:::o;5699:375::-;5768:6;5817:2;5805:9;5796:7;5792:23;5788:32;5785:2;;;5833:1;5830;5823:12;5785:2;5904:1;5893:9;5889:17;5876:31;5934:18;5926:6;5923:30;5920:2;;;5966:1;5963;5956:12;5920:2;5994:63;6049:7;6040:6;6029:9;6025:22;5994:63;:::i;:::-;5984:73;;5847:220;5775:299;;;;:::o;6080:262::-;6139:6;6188:2;6176:9;6167:7;6163:23;6159:32;6156:2;;;6204:1;6201;6194:12;6156:2;6247:1;6272:53;6317:7;6308:6;6297:9;6293:22;6272:53;:::i;:::-;6262:63;;6218:117;6146:196;;;;:::o;6348:179::-;6417:10;6438:46;6480:3;6472:6;6438:46;:::i;:::-;6516:4;6511:3;6507:14;6493:28;;6428:99;;;;:::o;6533:118::-;6620:24;6638:5;6620:24;:::i;:::-;6615:3;6608:37;6598:53;;:::o;6687:732::-;6806:3;6835:54;6883:5;6835:54;:::i;:::-;6905:86;6984:6;6979:3;6905:86;:::i;:::-;6898:93;;7015:56;7065:5;7015:56;:::i;:::-;7094:7;7125:1;7110:284;7135:6;7132:1;7129:13;7110:284;;;7211:6;7205:13;7238:63;7297:3;7282:13;7238:63;:::i;:::-;7231:70;;7324:60;7377:6;7324:60;:::i;:::-;7314:70;;7170:224;7157:1;7154;7150:9;7145:14;;7110:284;;;7114:14;7410:3;7403:10;;6811:608;;;;;;;:::o;7425:109::-;7506:21;7521:5;7506:21;:::i;:::-;7501:3;7494:34;7484:50;;:::o;7540:360::-;7626:3;7654:38;7686:5;7654:38;:::i;:::-;7708:70;7771:6;7766:3;7708:70;:::i;:::-;7701:77;;7787:52;7832:6;7827:3;7820:4;7813:5;7809:16;7787:52;:::i;:::-;7864:29;7886:6;7864:29;:::i;:::-;7859:3;7855:39;7848:46;;7630:270;;;;;:::o;7906:364::-;7994:3;8022:39;8055:5;8022:39;:::i;:::-;8077:71;8141:6;8136:3;8077:71;:::i;:::-;8070:78;;8157:52;8202:6;8197:3;8190:4;8183:5;8179:16;8157:52;:::i;:::-;8234:29;8256:6;8234:29;:::i;:::-;8229:3;8225:39;8218:46;;7998:272;;;;;:::o;8276:377::-;8382:3;8410:39;8443:5;8410:39;:::i;:::-;8465:89;8547:6;8542:3;8465:89;:::i;:::-;8458:96;;8563:52;8608:6;8603:3;8596:4;8589:5;8585:16;8563:52;:::i;:::-;8640:6;8635:3;8631:16;8624:23;;8386:267;;;;;:::o;8659:366::-;8801:3;8822:67;8886:2;8881:3;8822:67;:::i;:::-;8815:74;;8898:93;8987:3;8898:93;:::i;:::-;9016:2;9011:3;9007:12;9000:19;;8805:220;;;:::o;9031:366::-;9173:3;9194:67;9258:2;9253:3;9194:67;:::i;:::-;9187:74;;9270:93;9359:3;9270:93;:::i;:::-;9388:2;9383:3;9379:12;9372:19;;9177:220;;;:::o;9403:366::-;9545:3;9566:67;9630:2;9625:3;9566:67;:::i;:::-;9559:74;;9642:93;9731:3;9642:93;:::i;:::-;9760:2;9755:3;9751:12;9744:19;;9549:220;;;:::o;9775:366::-;9917:3;9938:67;10002:2;9997:3;9938:67;:::i;:::-;9931:74;;10014:93;10103:3;10014:93;:::i;:::-;10132:2;10127:3;10123:12;10116:19;;9921:220;;;:::o;10147:366::-;10289:3;10310:67;10374:2;10369:3;10310:67;:::i;:::-;10303:74;;10386:93;10475:3;10386:93;:::i;:::-;10504:2;10499:3;10495:12;10488:19;;10293:220;;;:::o;10519:366::-;10661:3;10682:67;10746:2;10741:3;10682:67;:::i;:::-;10675:74;;10758:93;10847:3;10758:93;:::i;:::-;10876:2;10871:3;10867:12;10860:19;;10665:220;;;:::o;10891:366::-;11033:3;11054:67;11118:2;11113:3;11054:67;:::i;:::-;11047:74;;11130:93;11219:3;11130:93;:::i;:::-;11248:2;11243:3;11239:12;11232:19;;11037:220;;;:::o;11263:366::-;11405:3;11426:67;11490:2;11485:3;11426:67;:::i;:::-;11419:74;;11502:93;11591:3;11502:93;:::i;:::-;11620:2;11615:3;11611:12;11604:19;;11409:220;;;:::o;11635:366::-;11777:3;11798:67;11862:2;11857:3;11798:67;:::i;:::-;11791:74;;11874:93;11963:3;11874:93;:::i;:::-;11992:2;11987:3;11983:12;11976:19;;11781:220;;;:::o;12007:366::-;12149:3;12170:67;12234:2;12229:3;12170:67;:::i;:::-;12163:74;;12246:93;12335:3;12246:93;:::i;:::-;12364:2;12359:3;12355:12;12348:19;;12153:220;;;:::o;12379:366::-;12521:3;12542:67;12606:2;12601:3;12542:67;:::i;:::-;12535:74;;12618:93;12707:3;12618:93;:::i;:::-;12736:2;12731:3;12727:12;12720:19;;12525:220;;;:::o;12751:366::-;12893:3;12914:67;12978:2;12973:3;12914:67;:::i;:::-;12907:74;;12990:93;13079:3;12990:93;:::i;:::-;13108:2;13103:3;13099:12;13092:19;;12897:220;;;:::o;13123:366::-;13265:3;13286:67;13350:2;13345:3;13286:67;:::i;:::-;13279:74;;13362:93;13451:3;13362:93;:::i;:::-;13480:2;13475:3;13471:12;13464:19;;13269:220;;;:::o;13495:366::-;13637:3;13658:67;13722:2;13717:3;13658:67;:::i;:::-;13651:74;;13734:93;13823:3;13734:93;:::i;:::-;13852:2;13847:3;13843:12;13836:19;;13641:220;;;:::o;13867:366::-;14009:3;14030:67;14094:2;14089:3;14030:67;:::i;:::-;14023:74;;14106:93;14195:3;14106:93;:::i;:::-;14224:2;14219:3;14215:12;14208:19;;14013:220;;;:::o;14239:366::-;14381:3;14402:67;14466:2;14461:3;14402:67;:::i;:::-;14395:74;;14478:93;14567:3;14478:93;:::i;:::-;14596:2;14591:3;14587:12;14580:19;;14385:220;;;:::o;14611:366::-;14753:3;14774:67;14838:2;14833:3;14774:67;:::i;:::-;14767:74;;14850:93;14939:3;14850:93;:::i;:::-;14968:2;14963:3;14959:12;14952:19;;14757:220;;;:::o;14983:366::-;15125:3;15146:67;15210:2;15205:3;15146:67;:::i;:::-;15139:74;;15222:93;15311:3;15222:93;:::i;:::-;15340:2;15335:3;15331:12;15324:19;;15129:220;;;:::o;15355:366::-;15497:3;15518:67;15582:2;15577:3;15518:67;:::i;:::-;15511:74;;15594:93;15683:3;15594:93;:::i;:::-;15712:2;15707:3;15703:12;15696:19;;15501:220;;;:::o;15727:366::-;15869:3;15890:67;15954:2;15949:3;15890:67;:::i;:::-;15883:74;;15966:93;16055:3;15966:93;:::i;:::-;16084:2;16079:3;16075:12;16068:19;;15873:220;;;:::o;16099:366::-;16241:3;16262:67;16326:2;16321:3;16262:67;:::i;:::-;16255:74;;16338:93;16427:3;16338:93;:::i;:::-;16456:2;16451:3;16447:12;16440:19;;16245:220;;;:::o;16471:366::-;16613:3;16634:67;16698:2;16693:3;16634:67;:::i;:::-;16627:74;;16710:93;16799:3;16710:93;:::i;:::-;16828:2;16823:3;16819:12;16812:19;;16617:220;;;:::o;16843:366::-;16985:3;17006:67;17070:2;17065:3;17006:67;:::i;:::-;16999:74;;17082:93;17171:3;17082:93;:::i;:::-;17200:2;17195:3;17191:12;17184:19;;16989:220;;;:::o;17215:108::-;17292:24;17310:5;17292:24;:::i;:::-;17287:3;17280:37;17270:53;;:::o;17329:118::-;17416:24;17434:5;17416:24;:::i;:::-;17411:3;17404:37;17394:53;;:::o;17453:435::-;17633:3;17655:95;17746:3;17737:6;17655:95;:::i;:::-;17648:102;;17767:95;17858:3;17849:6;17767:95;:::i;:::-;17760:102;;17879:3;17872:10;;17637:251;;;;;:::o;17894:222::-;17987:4;18025:2;18014:9;18010:18;18002:26;;18038:71;18106:1;18095:9;18091:17;18082:6;18038:71;:::i;:::-;17992:124;;;;:::o;18122:640::-;18317:4;18355:3;18344:9;18340:19;18332:27;;18369:71;18437:1;18426:9;18422:17;18413:6;18369:71;:::i;:::-;18450:72;18518:2;18507:9;18503:18;18494:6;18450:72;:::i;:::-;18532;18600:2;18589:9;18585:18;18576:6;18532:72;:::i;:::-;18651:9;18645:4;18641:20;18636:2;18625:9;18621:18;18614:48;18679:76;18750:4;18741:6;18679:76;:::i;:::-;18671:84;;18322:440;;;;;;;:::o;18768:373::-;18911:4;18949:2;18938:9;18934:18;18926:26;;18998:9;18992:4;18988:20;18984:1;18973:9;18969:17;18962:47;19026:108;19129:4;19120:6;19026:108;:::i;:::-;19018:116;;18916:225;;;;:::o;19147:210::-;19234:4;19272:2;19261:9;19257:18;19249:26;;19285:65;19347:1;19336:9;19332:17;19323:6;19285:65;:::i;:::-;19239:118;;;;:::o;19363:313::-;19476:4;19514:2;19503:9;19499:18;19491:26;;19563:9;19557:4;19553:20;19549:1;19538:9;19534:17;19527:47;19591:78;19664:4;19655:6;19591:78;:::i;:::-;19583:86;;19481:195;;;;:::o;19682:419::-;19848:4;19886:2;19875:9;19871:18;19863:26;;19935:9;19929:4;19925:20;19921:1;19910:9;19906:17;19899:47;19963:131;20089:4;19963:131;:::i;:::-;19955:139;;19853:248;;;:::o;20107:419::-;20273:4;20311:2;20300:9;20296:18;20288:26;;20360:9;20354:4;20350:20;20346:1;20335:9;20331:17;20324:47;20388:131;20514:4;20388:131;:::i;:::-;20380:139;;20278:248;;;:::o;20532:419::-;20698:4;20736:2;20725:9;20721:18;20713:26;;20785:9;20779:4;20775:20;20771:1;20760:9;20756:17;20749:47;20813:131;20939:4;20813:131;:::i;:::-;20805:139;;20703:248;;;:::o;20957:419::-;21123:4;21161:2;21150:9;21146:18;21138:26;;21210:9;21204:4;21200:20;21196:1;21185:9;21181:17;21174:47;21238:131;21364:4;21238:131;:::i;:::-;21230:139;;21128:248;;;:::o;21382:419::-;21548:4;21586:2;21575:9;21571:18;21563:26;;21635:9;21629:4;21625:20;21621:1;21610:9;21606:17;21599:47;21663:131;21789:4;21663:131;:::i;:::-;21655:139;;21553:248;;;:::o;21807:419::-;21973:4;22011:2;22000:9;21996:18;21988:26;;22060:9;22054:4;22050:20;22046:1;22035:9;22031:17;22024:47;22088:131;22214:4;22088:131;:::i;:::-;22080:139;;21978:248;;;:::o;22232:419::-;22398:4;22436:2;22425:9;22421:18;22413:26;;22485:9;22479:4;22475:20;22471:1;22460:9;22456:17;22449:47;22513:131;22639:4;22513:131;:::i;:::-;22505:139;;22403:248;;;:::o;22657:419::-;22823:4;22861:2;22850:9;22846:18;22838:26;;22910:9;22904:4;22900:20;22896:1;22885:9;22881:17;22874:47;22938:131;23064:4;22938:131;:::i;:::-;22930:139;;22828:248;;;:::o;23082:419::-;23248:4;23286:2;23275:9;23271:18;23263:26;;23335:9;23329:4;23325:20;23321:1;23310:9;23306:17;23299:47;23363:131;23489:4;23363:131;:::i;:::-;23355:139;;23253:248;;;:::o;23507:419::-;23673:4;23711:2;23700:9;23696:18;23688:26;;23760:9;23754:4;23750:20;23746:1;23735:9;23731:17;23724:47;23788:131;23914:4;23788:131;:::i;:::-;23780:139;;23678:248;;;:::o;23932:419::-;24098:4;24136:2;24125:9;24121:18;24113:26;;24185:9;24179:4;24175:20;24171:1;24160:9;24156:17;24149:47;24213:131;24339:4;24213:131;:::i;:::-;24205:139;;24103:248;;;:::o;24357:419::-;24523:4;24561:2;24550:9;24546:18;24538:26;;24610:9;24604:4;24600:20;24596:1;24585:9;24581:17;24574:47;24638:131;24764:4;24638:131;:::i;:::-;24630:139;;24528:248;;;:::o;24782:419::-;24948:4;24986:2;24975:9;24971:18;24963:26;;25035:9;25029:4;25025:20;25021:1;25010:9;25006:17;24999:47;25063:131;25189:4;25063:131;:::i;:::-;25055:139;;24953:248;;;:::o;25207:419::-;25373:4;25411:2;25400:9;25396:18;25388:26;;25460:9;25454:4;25450:20;25446:1;25435:9;25431:17;25424:47;25488:131;25614:4;25488:131;:::i;:::-;25480:139;;25378:248;;;:::o;25632:419::-;25798:4;25836:2;25825:9;25821:18;25813:26;;25885:9;25879:4;25875:20;25871:1;25860:9;25856:17;25849:47;25913:131;26039:4;25913:131;:::i;:::-;25905:139;;25803:248;;;:::o;26057:419::-;26223:4;26261:2;26250:9;26246:18;26238:26;;26310:9;26304:4;26300:20;26296:1;26285:9;26281:17;26274:47;26338:131;26464:4;26338:131;:::i;:::-;26330:139;;26228:248;;;:::o;26482:419::-;26648:4;26686:2;26675:9;26671:18;26663:26;;26735:9;26729:4;26725:20;26721:1;26710:9;26706:17;26699:47;26763:131;26889:4;26763:131;:::i;:::-;26755:139;;26653:248;;;:::o;26907:419::-;27073:4;27111:2;27100:9;27096:18;27088:26;;27160:9;27154:4;27150:20;27146:1;27135:9;27131:17;27124:47;27188:131;27314:4;27188:131;:::i;:::-;27180:139;;27078:248;;;:::o;27332:419::-;27498:4;27536:2;27525:9;27521:18;27513:26;;27585:9;27579:4;27575:20;27571:1;27560:9;27556:17;27549:47;27613:131;27739:4;27613:131;:::i;:::-;27605:139;;27503:248;;;:::o;27757:419::-;27923:4;27961:2;27950:9;27946:18;27938:26;;28010:9;28004:4;28000:20;27996:1;27985:9;27981:17;27974:47;28038:131;28164:4;28038:131;:::i;:::-;28030:139;;27928:248;;;:::o;28182:419::-;28348:4;28386:2;28375:9;28371:18;28363:26;;28435:9;28429:4;28425:20;28421:1;28410:9;28406:17;28399:47;28463:131;28589:4;28463:131;:::i;:::-;28455:139;;28353:248;;;:::o;28607:419::-;28773:4;28811:2;28800:9;28796:18;28788:26;;28860:9;28854:4;28850:20;28846:1;28835:9;28831:17;28824:47;28888:131;29014:4;28888:131;:::i;:::-;28880:139;;28778:248;;;:::o;29032:419::-;29198:4;29236:2;29225:9;29221:18;29213:26;;29285:9;29279:4;29275:20;29271:1;29260:9;29256:17;29249:47;29313:131;29439:4;29313:131;:::i;:::-;29305:139;;29203:248;;;:::o;29457:222::-;29550:4;29588:2;29577:9;29573:18;29565:26;;29601:71;29669:1;29658:9;29654:17;29645:6;29601:71;:::i;:::-;29555:124;;;;:::o;29685:129::-;29719:6;29746:20;;:::i;:::-;29736:30;;29775:33;29803:4;29795:6;29775:33;:::i;:::-;29726:88;;;:::o;29820:75::-;29853:6;29886:2;29880:9;29870:19;;29860:35;:::o;29901:307::-;29962:4;30052:18;30044:6;30041:30;30038:2;;;30074:18;;:::i;:::-;30038:2;30112:29;30134:6;30112:29;:::i;:::-;30104:37;;30196:4;30190;30186:15;30178:23;;29967:241;;;:::o;30214:308::-;30276:4;30366:18;30358:6;30355:30;30352:2;;;30388:18;;:::i;:::-;30352:2;30426:29;30448:6;30426:29;:::i;:::-;30418:37;;30510:4;30504;30500:15;30492:23;;30281:241;;;:::o;30528:132::-;30595:4;30618:3;30610:11;;30648:4;30643:3;30639:14;30631:22;;30600:60;;;:::o;30666:114::-;30733:6;30767:5;30761:12;30751:22;;30740:40;;;:::o;30786:98::-;30837:6;30871:5;30865:12;30855:22;;30844:40;;;:::o;30890:99::-;30942:6;30976:5;30970:12;30960:22;;30949:40;;;:::o;30995:113::-;31065:4;31097;31092:3;31088:14;31080:22;;31070:38;;;:::o;31114:184::-;31213:11;31247:6;31242:3;31235:19;31287:4;31282:3;31278:14;31263:29;;31225:73;;;;:::o;31304:168::-;31387:11;31421:6;31416:3;31409:19;31461:4;31456:3;31452:14;31437:29;;31399:73;;;;:::o;31478:169::-;31562:11;31596:6;31591:3;31584:19;31636:4;31631:3;31627:14;31612:29;;31574:73;;;;:::o;31653:148::-;31755:11;31792:3;31777:18;;31767:34;;;;:::o;31807:305::-;31847:3;31866:20;31884:1;31866:20;:::i;:::-;31861:25;;31900:20;31918:1;31900:20;:::i;:::-;31895:25;;32054:1;31986:66;31982:74;31979:1;31976:81;31973:2;;;32060:18;;:::i;:::-;31973:2;32104:1;32101;32097:9;32090:16;;31851:261;;;;:::o;32118:185::-;32158:1;32175:20;32193:1;32175:20;:::i;:::-;32170:25;;32209:20;32227:1;32209:20;:::i;:::-;32204:25;;32248:1;32238:2;;32253:18;;:::i;:::-;32238:2;32295:1;32292;32288:9;32283:14;;32160:143;;;;:::o;32309:348::-;32349:7;32372:20;32390:1;32372:20;:::i;:::-;32367:25;;32406:20;32424:1;32406:20;:::i;:::-;32401:25;;32594:1;32526:66;32522:74;32519:1;32516:81;32511:1;32504:9;32497:17;32493:105;32490:2;;;32601:18;;:::i;:::-;32490:2;32649:1;32646;32642:9;32631:20;;32357:300;;;;:::o;32663:191::-;32703:4;32723:20;32741:1;32723:20;:::i;:::-;32718:25;;32757:20;32775:1;32757:20;:::i;:::-;32752:25;;32796:1;32793;32790:8;32787:2;;;32801:18;;:::i;:::-;32787:2;32846:1;32843;32839:9;32831:17;;32708:146;;;;:::o;32860:96::-;32897:7;32926:24;32944:5;32926:24;:::i;:::-;32915:35;;32905:51;;;:::o;32962:90::-;32996:7;33039:5;33032:13;33025:21;33014:32;;33004:48;;;:::o;33058:149::-;33094:7;33134:66;33127:5;33123:78;33112:89;;33102:105;;;:::o;33213:126::-;33250:7;33290:42;33283:5;33279:54;33268:65;;33258:81;;;:::o;33345:77::-;33382:7;33411:5;33400:16;;33390:32;;;:::o;33428:154::-;33512:6;33507:3;33502;33489:30;33574:1;33565:6;33560:3;33556:16;33549:27;33479:103;;;:::o;33588:307::-;33656:1;33666:113;33680:6;33677:1;33674:13;33666:113;;;33765:1;33760:3;33756:11;33750:18;33746:1;33741:3;33737:11;33730:39;33702:2;33699:1;33695:10;33690:15;;33666:113;;;33797:6;33794:1;33791:13;33788:2;;;33877:1;33868:6;33863:3;33859:16;33852:27;33788:2;33637:258;;;;:::o;33901:320::-;33945:6;33982:1;33976:4;33972:12;33962:22;;34029:1;34023:4;34019:12;34050:18;34040:2;;34106:4;34098:6;34094:17;34084:27;;34040:2;34168;34160:6;34157:14;34137:18;34134:38;34131:2;;;34187:18;;:::i;:::-;34131:2;33952:269;;;;:::o;34227:281::-;34310:27;34332:4;34310:27;:::i;:::-;34302:6;34298:40;34440:6;34428:10;34425:22;34404:18;34392:10;34389:34;34386:62;34383:2;;;34451:18;;:::i;:::-;34383:2;34491:10;34487:2;34480:22;34270:238;;;:::o;34514:233::-;34553:3;34576:24;34594:5;34576:24;:::i;:::-;34567:33;;34622:66;34615:5;34612:77;34609:2;;;34692:18;;:::i;:::-;34609:2;34739:1;34732:5;34728:13;34721:20;;34557:190;;;:::o;34753:176::-;34785:1;34802:20;34820:1;34802:20;:::i;:::-;34797:25;;34836:20;34854:1;34836:20;:::i;:::-;34831:25;;34875:1;34865:2;;34880:18;;:::i;:::-;34865:2;34921:1;34918;34914:9;34909:14;;34787:142;;;;:::o;34935:180::-;34983:77;34980:1;34973:88;35080:4;35077:1;35070:15;35104:4;35101:1;35094:15;35121:180;35169:77;35166:1;35159:88;35266:4;35263:1;35256:15;35290:4;35287:1;35280:15;35307:180;35355:77;35352:1;35345:88;35452:4;35449:1;35442:15;35476:4;35473:1;35466:15;35493:180;35541:77;35538:1;35531:88;35638:4;35635:1;35628:15;35662:4;35659:1;35652:15;35679:102;35720:6;35771:2;35767:7;35762:2;35755:5;35751:14;35747:28;35737:38;;35727:54;;;:::o;35787:230::-;35927:34;35923:1;35915:6;35911:14;35904:58;35996:13;35991:2;35983:6;35979:15;35972:38;35893:124;:::o;36023:237::-;36163:34;36159:1;36151:6;36147:14;36140:58;36232:20;36227:2;36219:6;36215:15;36208:45;36129:131;:::o;36266:225::-;36406:34;36402:1;36394:6;36390:14;36383:58;36475:8;36470:2;36462:6;36458:15;36451:33;36372:119;:::o;36497:178::-;36637:30;36633:1;36625:6;36621:14;36614:54;36603:72;:::o;36681:223::-;36821:34;36817:1;36809:6;36805:14;36798:58;36890:6;36885:2;36877:6;36873:15;36866:31;36787:117;:::o;36910:175::-;37050:27;37046:1;37038:6;37034:14;37027:51;37016:69;:::o;37091:231::-;37231:34;37227:1;37219:6;37215:14;37208:58;37300:14;37295:2;37287:6;37283:15;37276:39;37197:125;:::o;37328:230::-;37468:34;37464:1;37456:6;37452:14;37445:58;37537:13;37532:2;37524:6;37520:15;37513:38;37434:124;:::o;37564:243::-;37704:34;37700:1;37692:6;37688:14;37681:58;37773:26;37768:2;37760:6;37756:15;37749:51;37670:137;:::o;37813:229::-;37953:34;37949:1;37941:6;37937:14;37930:58;38022:12;38017:2;38009:6;38005:15;37998:37;37919:123;:::o;38048:228::-;38188:34;38184:1;38176:6;38172:14;38165:58;38257:11;38252:2;38244:6;38240:15;38233:36;38154:122;:::o;38282:178::-;38422:30;38418:1;38410:6;38406:14;38399:54;38388:72;:::o;38466:182::-;38606:34;38602:1;38594:6;38590:14;38583:58;38572:76;:::o;38654:231::-;38794:34;38790:1;38782:6;38778:14;38771:58;38863:14;38858:2;38850:6;38846:15;38839:39;38760:125;:::o;38891:182::-;39031:34;39027:1;39019:6;39015:14;39008:58;38997:76;:::o;39079:228::-;39219:34;39215:1;39207:6;39203:14;39196:58;39288:11;39283:2;39275:6;39271:15;39264:36;39185:122;:::o;39313:234::-;39453:34;39449:1;39441:6;39437:14;39430:58;39522:17;39517:2;39509:6;39505:15;39498:42;39419:128;:::o;39553:169::-;39693:21;39689:1;39681:6;39677:14;39670:45;39659:63;:::o;39728:220::-;39868:34;39864:1;39856:6;39852:14;39845:58;39937:3;39932:2;39924:6;39920:15;39913:28;39834:114;:::o;39954:224::-;40094:34;40090:1;40082:6;40078:14;40071:58;40163:7;40158:2;40150:6;40146:15;40139:32;40060:118;:::o;40184:236::-;40324:34;40320:1;40312:6;40308:14;40301:58;40393:19;40388:2;40380:6;40376:15;40369:44;40290:130;:::o;40426:231::-;40566:34;40562:1;40554:6;40550:14;40543:58;40635:14;40630:2;40622:6;40618:15;40611:39;40532:125;:::o;40663:222::-;40803:34;40799:1;40791:6;40787:14;40780:58;40872:5;40867:2;40859:6;40855:15;40848:30;40769:116;:::o;40891:122::-;40964:24;40982:5;40964:24;:::i;:::-;40957:5;40954:35;40944:2;;41003:1;41000;40993:12;40944:2;40934:79;:::o;41019:116::-;41089:21;41104:5;41089:21;:::i;:::-;41082:5;41079:32;41069:2;;41125:1;41122;41115:12;41069:2;41059:76;:::o;41141:120::-;41213:23;41230:5;41213:23;:::i;:::-;41206:5;41203:34;41193:2;;41251:1;41248;41241:12;41193:2;41183:78;:::o;41267:122::-;41340:24;41358:5;41340:24;:::i;:::-;41333:5;41330:35;41320:2;;41379:1;41376;41369:12;41320:2;41310:79;:::o

Swarm Source

ipfs://e0d987f8d2648bcbe0679f5c3331abbbaf0746f0d7265c391b1324f9b8678d79
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.