Token Croturtles

Overview CRC721

Total Supply:
6,123 CT

Holders:
286 addresses
Balance
0 CT
0x3e9a40e07de62f15e4ab2db205065528d0707c34
Loading
[ Download CSV Export  ] 
Loading
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Croturtles

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-01
*/

// SPDX-License-Identifier: MIT

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
pragma solidity ^0.8.0;
/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

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

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

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, 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/extensions/IERC721Enumerable.sol
pragma solidity ^0.8.0;
/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 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/utils/introspection/ERC165.sol
pragma solidity ^0.8.0;
/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/utils/Strings.sol



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;

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

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

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


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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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



pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _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);
    }
}

// OpenZeppelin Contracts v4.4.1 (utils/escrow/Escrow.sol)
/**
 * @title Escrow
 * @dev Base escrow contract, holds funds designated for a payee until they
 * withdraw them.
 *
 * Intended usage: This contract (and derived escrow contracts) should be a
 * standalone contract, that only interacts with the contract that instantiated
 * it. That way, it is guaranteed that all Ether will be handled according to
 * the `Escrow` rules, and there is no need to check for payable functions or
 * transfers in the inheritance tree. The contract that uses the escrow as its
 * payment method should be its owner, and provide public methods redirecting
 * to the escrow's deposit and withdraw.
 */
contract Escrow is Ownable {
    using Address for address payable;

    event Deposited(address indexed payee, uint256 weiAmount);
    event Withdrawn(address indexed payee, uint256 weiAmount);

    mapping(address => uint256) private _deposits;

    function depositsOf(address payee) public view returns (uint256) {
        return _deposits[payee];
    }

    /**
     * @dev Stores the sent amount as credit to be withdrawn.
     * @param payee The destination address of the funds.
     */
    function deposit(address payee) public payable virtual onlyOwner {
        uint256 amount = msg.value;
        _deposits[payee] += amount;
        emit Deposited(payee, amount);
    }

    /**
     * @dev Withdraw accumulated balance for a payee, forwarding all gas to the
     * recipient.
     *
     * WARNING: Forwarding all gas opens the door to reentrancy vulnerabilities.
     * Make sure you trust the recipient, or are either following the
     * checks-effects-interactions pattern or using {ReentrancyGuard}.
     *
     * @param payee The address whose funds will be withdrawn and transferred to.
     */
    function withdraw(address payable payee) public virtual onlyOwner {
        uint256 payment = _deposits[payee];

        _deposits[payee] = 0;

        payee.sendValue(payment);

        emit Withdrawn(payee, payment);
    }
}

// OpenZeppelin Contracts v4.4.1 (security/PullPayment.sol)
/**
 * @dev Simple implementation of a
 * https://consensys.github.io/smart-contract-best-practices/recommendations/#favor-pull-over-push-for-external-calls[pull-payment]
 * strategy, where the paying contract doesn't interact directly with the
 * receiver account, which must withdraw its payments itself.
 *
 * Pull-payments are often considered the best practice when it comes to sending
 * Ether, security-wise. It prevents recipients from blocking execution, and
 * eliminates reentrancy concerns.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 *
 * To use, derive from the `PullPayment` contract, and use {_asyncTransfer}
 * instead of Solidity's `transfer` function. Payees can query their due
 * payments with {payments}, and retrieve them with {withdrawPayments}.
 */
abstract contract PullPayment {
    Escrow private immutable _escrow;

    constructor() {
        _escrow = new Escrow();
    }

    /**
     * @dev Withdraw accumulated payments, forwarding all gas to the recipient.
     *
     * Note that _any_ account can call this function, not just the `payee`.
     * This means that contracts unaware of the `PullPayment` protocol can still
     * receive funds this way, by having a separate account call
     * {withdrawPayments}.
     *
     * WARNING: Forwarding all gas opens the door to reentrancy vulnerabilities.
     * Make sure you trust the recipient, or are either following the
     * checks-effects-interactions pattern or using {ReentrancyGuard}.
     *
     * @param payee Whose payments will be withdrawn.
     */
    function withdrawPayments(address payable payee) public virtual {
        _escrow.withdraw(payee);
    }

    /**
     * @dev Returns the payments owed to an address.
     * @param dest The creditor's address.
     */
    function payments(address dest) public view returns (uint256) {
        return _escrow.depositsOf(dest);
    }

    /**
     * @dev Called by the payer to store the sent amount as credit to be pulled.
     * Funds sent in this way are stored in an intermediate {Escrow} contract, so
     * there is no danger of them being spent before withdrawal.
     *
     * @param dest The destination address of the funds.
     * @param amount The amount to transfer.
     */
    function _asyncTransfer(address dest, uint256 amount) internal virtual {
        _escrow.deposit{value: amount}(dest);
    }
}



pragma solidity >=0.7.0 <0.9.0;

interface NFTMasterchef {
    function getArrayTokenIDs(uint256 _pid, address _user) external view returns (uint256[] memory);
}
contract Croturtles is ERC721Enumerable, Ownable, PullPayment {

  IERC721 public foundingMember = IERC721(0xCc9a4c16261745812d0c5ce7f4B5Ac66A4cf943c);
  using Strings for uint256;
  using Counters for Counters.Counter;
  Counters.Counter public _tokenIdCounter;
  uint8 private currentChunkIndex;
  uint16[] internal order;
  string baseURI;
  address public revenueWallet = 0xDB72d7705a553ed71109796F504CCA2269AdA50b;
  uint256 public cost = 16 ether;
  uint256 public nftFMPrice = 14 ether;
  uint256 public Wlcost = 14 ether;
  uint256 public maxSupply = 6123;
  uint256 public maxMintAmount = 20;
  NFTMasterchef public nftStaking = NFTMasterchef(0x2941d0EF38d74a4941C4Fee75624b831898126A9);
  bool public paused = false;
  uint256 public cyborgswapFee = 50; // 5%
  address public cyborgswapWallet = 0x97E4ae563f5Ea9fe63DA7abaCaEE2C8Cd54C3FC0;
  
  uint16 public stakingPoolId = 0;
  mapping(address => uint256) private _allowList;

  uint256 public startPresaleTimestamp = 1662123600;
  uint256 public startAllTimestamp = 1662123600;
   
  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI
    
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
  }

  function setAllowList(address[] calldata addresses, uint256 numAllowedToMint) external onlyOwner {
    for (uint256 i = 0; i < addresses.length; i++) {
        _allowList[addresses[i]] = numAllowedToMint;
    }
}

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


  // public
  function mint(uint8 _mintAmount) public payable {
    uint256 supply = totalSupply();
    uint256 userPrice = mintCost(msg.sender);
    require(!paused);
    require(_mintAmount > 0);
    require(supply + _mintAmount <= maxSupply);
    
    if (msg.sender != owner()) {

        require(_mintAmount <= maxMintAmount);
        require (block.timestamp > startPresaleTimestamp, "Presale not started");

        if(block.timestamp < startAllTimestamp){
            require (userPrice == Wlcost || userPrice == nftFMPrice, "Presale ongoing");
        }

        require(msg.value >= userPrice * _mintAmount, "Cro value sent is not correct");
        uint256 amountFee = ((userPrice * _mintAmount) * cyborgswapFee) / 1000;

        if(userPrice == Wlcost){
            require(_mintAmount <= _allowList[msg.sender], "Exceeded max available to purchase");
            require(Wlcost * _mintAmount <= msg.value, "Cro value sent is not correct");
            _allowList[msg.sender] -= _mintAmount;
            require(msg.value >= Wlcost * _mintAmount);
        }
        else if(userPrice == cost){
            require(cost * _mintAmount <= msg.value, "Cro value sent is not correct");
            require(msg.value >= cost * _mintAmount); 
        }
        else if(userPrice == nftFMPrice){
            require(nftFMPrice * _mintAmount <= msg.value, "Cro value sent is not correct");
            require(msg.value >= nftFMPrice * _mintAmount); 
        }
        _asyncTransfer(revenueWallet, (userPrice * _mintAmount) - amountFee);
        _asyncTransfer(cyborgswapWallet, amountFee);
    }

    for (uint256 i = 1; i <= _mintAmount; i++) {
      uint256 tokenId = _tokenIdCounter.current();
      _safeMint(msg.sender, order[tokenId]);
      _tokenIdCounter.increment();
    }
  }

  function mintCost(address _address) public view  returns (uint256)  {
      uint256 userPrice = cost;
      
      if(foundingMember.balanceOf(_address) > 0){
           userPrice = nftFMPrice;
        }else if(nftStaking.getArrayTokenIDs(stakingPoolId, _address).length > 0){
            userPrice = nftFMPrice;
        }
        if(_allowList[_address] > 0){
            userPrice = Wlcost;
        }
        return userPrice;
  }

  function getLen() external view returns(uint) {
        return order.length;
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }

  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

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

  //onlyOwner
  function setSequnceChunk(uint8 _chunkIndex, uint16[] calldata _chunk) external onlyOwner {
        require(currentChunkIndex <= _chunkIndex, "chunkIndex exists");
        if (_chunkIndex == 0) {
            order = _chunk;
        } else {
            uint len = _chunk.length;
            for(uint i = 0; i < len; i ++) {
                order.push(_chunk[i]);
            }
        }
        currentChunkIndex = _chunkIndex + 1;
  }
  
  function setCost(uint256 _newCost) public onlyOwner {
    cost = _newCost;
  }

  function setWlCost(uint256 _newCost) public onlyOwner {
    Wlcost = _newCost;
  }

  function setFMCost(uint256 _newCost) public onlyOwner {
    nftFMPrice = _newCost;
  }

  function setCyborgswapFee(uint256 _cyborgswapFee) public onlyOwner {
    require (_cyborgswapFee <= 200, "Max Fee is 20%");
    cyborgswapFee = _cyborgswapFee;
  }

  function setStartPresaleTimestamp(uint256 _startPresaleTimestamp) public onlyOwner {
    require (block.timestamp < _startPresaleTimestamp, "no");
    startPresaleTimestamp = _startPresaleTimestamp;
  }
  
  function setStartAllTimestamp(uint256 _startAllTimestamp) public onlyOwner {
    require (block.timestamp < _startAllTimestamp, "no");
    startAllTimestamp = _startAllTimestamp;
  }

  function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
    maxMintAmount = _newmaxMintAmount;
  }

  function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
  }

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }
 
  function withdraw() public payable onlyOwner {
    (bool all, ) = payable(owner()).call{value: address(this).balance}("");
    require(all);
    
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","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":"Wlcost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenIdCounter","outputs":[{"internalType":"uint256","name":"_value","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":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cyborgswapFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cyborgswapWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"foundingMember","outputs":[{"internalType":"contract IERC721","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":[],"name":"getLen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintAmount","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"mintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftFMPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftStaking","outputs":[{"internalType":"contract NFTMasterchef","name":"","type":"address"}],"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dest","type":"address"}],"name":"payments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revenueWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"numAllowedToMint","type":"uint256"}],"name":"setAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cyborgswapFee","type":"uint256"}],"name":"setCyborgswapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setFMCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_chunkIndex","type":"uint8"},{"internalType":"uint16[]","name":"_chunk","type":"uint16[]"}],"name":"setSequnceChunk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startAllTimestamp","type":"uint256"}],"name":"setStartAllTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startPresaleTimestamp","type":"uint256"}],"name":"setStartPresaleTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setWlCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingPoolId","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startAllTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startPresaleTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"payee","type":"address"}],"name":"withdrawPayments","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405273cc9a4c16261745812d0c5ce7f4b5ac66a4cf943c600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073db72d7705a553ed71109796f504cca2269ada50b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555067de0b6b3a7640000060115567c249fdd32778000060125567c249fdd3277800006013556117eb6014556014601555732941d0ef38d74a4941c4fee75624b831898126a9601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601660146101000a81548160ff02191690831515021790555060326017557397e4ae563f5ea9fe63da7abacaee2c8cd54c3fc0601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601860146101000a81548161ffff021916908361ffff160217905550636311fe50601a55636311fe50601b55348015620001e257600080fd5b50604051620071e6380380620071e68339818101604052810190620002089190620005b9565b82828160009080519060200190620002229291906200047d565b5080600190805190602001906200023b9291906200047d565b5050506200025e62000252620002da60201b60201c565b620002e260201b60201c565b6040516200026c906200050e565b604051809103906000f08015801562000289573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050620002d181620003a860201b60201c565b50505062000879565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003b8620002da60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003de6200045360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000437576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200042e9062000699565b60405180910390fd5b80600f90805190602001906200044f9291906200047d565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200048b9062000761565b90600052602060002090601f016020900481019282620004af5760008555620004fb565b82601f10620004ca57805160ff1916838001178555620004fb565b82800160010185558215620004fb579182015b82811115620004fa578251825591602001919060010190620004dd565b5b5090506200050a91906200051c565b5090565b610d1680620064d083390190565b5b80821115620005375760008160009055506001016200051d565b5090565b6000620005526200054c84620006e4565b620006bb565b90508281526020810184848401111562000571576200057062000830565b5b6200057e8482856200072b565b509392505050565b600082601f8301126200059e576200059d6200082b565b5b8151620005b08482602086016200053b565b91505092915050565b600080600060608486031215620005d557620005d46200083a565b5b600084015167ffffffffffffffff811115620005f657620005f562000835565b5b620006048682870162000586565b935050602084015167ffffffffffffffff81111562000628576200062762000835565b5b620006368682870162000586565b925050604084015167ffffffffffffffff8111156200065a576200065962000835565b5b620006688682870162000586565b9150509250925092565b6000620006816020836200071a565b91506200068e8262000850565b602082019050919050565b60006020820190508181036000830152620006b48162000672565b9050919050565b6000620006c7620006da565b9050620006d5828262000797565b919050565b6000604051905090565b600067ffffffffffffffff821115620007025762000701620007fc565b5b6200070d826200083f565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200074b5780820151818401526020810190506200072e565b838111156200075b576000848401525b50505050565b600060028204905060018216806200077a57607f821691505b60208210811415620007915762000790620007cd565b5b50919050565b620007a2826200083f565b810181811067ffffffffffffffff82111715620007c457620007c3620007fc565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60805160601c615c2a620008a6600039600081816113c4015281816127d70152612fe20152615c2a6000f3fe6080604052600436106102ff5760003560e01c80636352211e11610190578063a46c8505116100dc578063c4408c8a11610095578063e2982c211161006f578063e2982c2114610b52578063e985e9c514610b8f578063f12f6d5d14610bcc578063f2fde38b14610bf5576102ff565b8063c4408c8a14610abf578063c87b56dd14610aea578063d5abeb0114610b27576102ff565b8063a46c8505146109c3578063ad72d288146109ee578063b6881c7d14610a17578063b6dfe05d14610a42578063b88d4fde14610a6b578063c342e17f14610a94576102ff565b8063800a38be116101495780638da5cb5b116101235780638da5cb5b1461091b578063907c5e191461094657806395d89b411461096f578063a22cb4651461099a576102ff565b8063800a38be1461089a57806384c4bd4b146108c55780638a17b5f0146108f0576102ff565b80636352211e146107995780636ecd2306146107d657806370a08231146107f2578063715018a61461082f5780637e23866b146108465780637f00c7a614610871576102ff565b80632f745c591161024f57806344478425116102085780634f6ccce7116101e25780634f6ccce7146106dd57806355f804b31461071a5780635b69368c146107435780635c975abb1461076e576102ff565b8063444784251461065e57806344a0d68a146106895780634a90be57146106b2576102ff565b80632f745c591461055f57806331b3eb941461059c5780633b3c523a146105c55780633ccfd60b146105ee57806342842e0e146105f8578063438b630014610621576102ff565b806313faede6116102bc578063237d21da11610296578063237d21da146104a5578063239c70ae146104ce57806323b872dd146104f95780632acc659e14610522576102ff565b806313faede61461042657806318160ddd146104515780631a85ad671461047c576102ff565b806301ffc9a71461030457806302329a29146103415780630457d16b1461036a57806306fdde0314610395578063081812fc146103c0578063095ea7b3146103fd575b600080fd5b34801561031057600080fd5b5061032b60048036038101906103269190614321565b610c1e565b6040516103389190614b11565b60405180910390f35b34801561034d57600080fd5b50610368600480360381019061036391906142f4565b610c98565b005b34801561037657600080fd5b5061037f610d31565b60405161038c9190614ee8565b60405180910390f35b3480156103a157600080fd5b506103aa610d37565b6040516103b79190614b62565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e291906143f1565b610dc9565b6040516103f49190614a6d565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f919061420b565b610e4e565b005b34801561043257600080fd5b5061043b610f66565b6040516104489190614ee8565b60405180910390f35b34801561045d57600080fd5b50610466610f6c565b6040516104739190614ee8565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e91906143f1565b610f79565b005b3480156104b157600080fd5b506104cc60048036038101906104c791906143f1565b611043565b005b3480156104da57600080fd5b506104e36110c9565b6040516104f09190614ee8565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b91906140f5565b6110cf565b005b34801561052e57600080fd5b506105496004803603810190610544919061405b565b61112f565b6040516105569190614ee8565b60405180910390f35b34801561056b57600080fd5b506105866004803603810190610581919061420b565b61131d565b6040516105939190614ee8565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be9190614088565b6113c2565b005b3480156105d157600080fd5b506105ec60048036038101906105e79190614478565b611450565b005b6105f661160d565b005b34801561060457600080fd5b5061061f600480360381019061061a91906140f5565b611709565b005b34801561062d57600080fd5b506106486004803603810190610643919061405b565b611729565b6040516106559190614aef565b60405180910390f35b34801561066a57600080fd5b506106736117d7565b6040516106809190614a6d565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab91906143f1565b6117fd565b005b3480156106be57600080fd5b506106c7611883565b6040516106d49190614ee8565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff91906143f1565b611890565b6040516107119190614ee8565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c919061437b565b611901565b005b34801561074f57600080fd5b50610758611997565b6040516107659190614ee8565b60405180910390f35b34801561077a57600080fd5b5061078361199d565b6040516107909190614b11565b60405180910390f35b3480156107a557600080fd5b506107c060048036038101906107bb91906143f1565b6119b0565b6040516107cd9190614a6d565b60405180910390f35b6107f060048036038101906107eb919061444b565b611a62565b005b3480156107fe57600080fd5b506108196004803603810190610814919061405b565b611f7f565b6040516108269190614ee8565b60405180910390f35b34801561083b57600080fd5b50610844612037565b005b34801561085257600080fd5b5061085b6120bf565b6040516108689190614b2c565b60405180910390f35b34801561087d57600080fd5b50610898600480360381019061089391906143f1565b6120e5565b005b3480156108a657600080fd5b506108af61216b565b6040516108bc9190614ee8565b60405180910390f35b3480156108d157600080fd5b506108da612171565b6040516108e79190614ee8565b60405180910390f35b3480156108fc57600080fd5b5061090561217d565b6040516109129190614a6d565b60405180910390f35b34801561092757600080fd5b506109306121a3565b60405161093d9190614a6d565b60405180910390f35b34801561095257600080fd5b5061096d600480360381019061096891906143f1565b6121cd565b005b34801561097b57600080fd5b50610984612295565b6040516109919190614b62565b60405180910390f35b3480156109a657600080fd5b506109c160048036038101906109bc91906141cb565b612327565b005b3480156109cf57600080fd5b506109d86124a8565b6040516109e59190614ea4565b60405180910390f35b3480156109fa57600080fd5b50610a156004803603810190610a1091906143f1565b6124bc565b005b348015610a2357600080fd5b50610a2c612584565b604051610a399190614ee8565b60405180910390f35b348015610a4e57600080fd5b50610a696004803603810190610a64919061424b565b61258a565b005b348015610a7757600080fd5b50610a926004803603810190610a8d9190614148565b612698565b005b348015610aa057600080fd5b50610aa96126fa565b604051610ab69190614ee8565b60405180910390f35b348015610acb57600080fd5b50610ad4612700565b604051610ae19190614b47565b60405180910390f35b348015610af657600080fd5b50610b116004803603810190610b0c91906143f1565b612726565b604051610b1e9190614b62565b60405180910390f35b348015610b3357600080fd5b50610b3c6127cd565b604051610b499190614ee8565b60405180910390f35b348015610b5e57600080fd5b50610b796004803603810190610b74919061405b565b6127d3565b604051610b869190614ee8565b60405180910390f35b348015610b9b57600080fd5b50610bb66004803603810190610bb191906140b5565b612885565b604051610bc39190614b11565b60405180910390f35b348015610bd857600080fd5b50610bf36004803603810190610bee91906143f1565b612919565b005b348015610c0157600080fd5b50610c1c6004803603810190610c17919061405b565b61299f565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c915750610c9082612a97565b5b9050919050565b610ca0612b79565b73ffffffffffffffffffffffffffffffffffffffff16610cbe6121a3565b73ffffffffffffffffffffffffffffffffffffffff1614610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b90614d84565b60405180910390fd5b80601660146101000a81548160ff02191690831515021790555050565b60135481565b606060008054610d46906152c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d72906152c6565b8015610dbf5780601f10610d9457610100808354040283529160200191610dbf565b820191906000526020600020905b815481529060010190602001808311610da257829003601f168201915b5050505050905090565b6000610dd482612b81565b610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a90614d64565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e59826119b0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190614e04565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ee9612b79565b73ffffffffffffffffffffffffffffffffffffffff161480610f185750610f1781610f12612b79565b612885565b5b610f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4e90614c84565b60405180910390fd5b610f618383612bed565b505050565b60115481565b6000600880549050905090565b610f81612b79565b73ffffffffffffffffffffffffffffffffffffffff16610f9f6121a3565b73ffffffffffffffffffffffffffffffffffffffff1614610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90614d84565b60405180910390fd5b60c8811115611039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103090614b84565b60405180910390fd5b8060178190555050565b61104b612b79565b73ffffffffffffffffffffffffffffffffffffffff166110696121a3565b73ffffffffffffffffffffffffffffffffffffffff16146110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b690614d84565b60405180910390fd5b8060128190555050565b60155481565b6110e06110da612b79565b82612ca6565b61111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690614e44565b60405180910390fd5b61112a838383612d84565b505050565b60008060115490506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016111949190614a6d565b60206040518083038186803b1580156111ac57600080fd5b505afa1580156111c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e4919061441e565b11156111f45760125490506112c6565b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a71896dc601860149054906101000a900461ffff16866040518363ffffffff1660e01b8152600401611263929190614ebf565b60006040518083038186803b15801561127b57600080fd5b505afa15801561128f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906112b891906142ab565b5111156112c55760125490505b5b6000601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156113145760135490505b80915050919050565b600061132883611f7f565b8210611369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136090614ba4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166351cff8d9826040518263ffffffff1660e01b815260040161141b9190614a88565b600060405180830381600087803b15801561143557600080fd5b505af1158015611449573d6000803e3d6000fd5b5050505050565b611458612b79565b73ffffffffffffffffffffffffffffffffffffffff166114766121a3565b73ffffffffffffffffffffffffffffffffffffffff16146114cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c390614d84565b60405180910390fd5b8260ff16600d60009054906101000a900460ff1660ff161115611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b90614e84565b60405180910390fd5b60008360ff161415611547578181600e9190611541929190613c23565b506115e1565b600082829050905060005b818110156115de57600e84848381811061156f5761156e61545f565b5b905060200201602081019061158491906143c4565b90806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff16021790555080806115d690615329565b915050611552565b50505b6001836115ee9190615093565b600d60006101000a81548160ff021916908360ff160217905550505050565b611615612b79565b73ffffffffffffffffffffffffffffffffffffffff166116336121a3565b73ffffffffffffffffffffffffffffffffffffffff1614611689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168090614d84565b60405180910390fd5b60006116936121a3565b73ffffffffffffffffffffffffffffffffffffffff16476040516116b690614a58565b60006040518083038185875af1925050503d80600081146116f3576040519150601f19603f3d011682016040523d82523d6000602084013e6116f8565b606091505b505090508061170657600080fd5b50565b61172483838360405180602001604052806000815250612698565b505050565b6060600061173683611f7f565b905060008167ffffffffffffffff8111156117545761175361548e565b5b6040519080825280602002602001820160405280156117825781602001602082028036833780820191505090505b50905060005b828110156117cc5761179a858261131d565b8282815181106117ad576117ac61545f565b5b60200260200101818152505080806117c490615329565b915050611788565b508092505050919050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611805612b79565b73ffffffffffffffffffffffffffffffffffffffff166118236121a3565b73ffffffffffffffffffffffffffffffffffffffff1614611879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187090614d84565b60405180910390fd5b8060118190555050565b6000600e80549050905090565b600061189a610f6c565b82106118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d290614e64565b60405180910390fd5b600882815481106118ef576118ee61545f565b5b90600052602060002001549050919050565b611909612b79565b73ffffffffffffffffffffffffffffffffffffffff166119276121a3565b73ffffffffffffffffffffffffffffffffffffffff161461197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197490614d84565b60405180910390fd5b80600f9080519060200190611993929190613cd1565b5050565b60125481565b601660149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5090614cc4565b60405180910390fd5b80915050919050565b6000611a6c610f6c565b90506000611a793361112f565b9050601660149054906101000a900460ff1615611a9557600080fd5b60008360ff1611611aa557600080fd5b6014548360ff1683611ab7919061503d565b1115611ac257600080fd5b611aca6121a3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ef7576015548360ff161115611b0e57600080fd5b601a544211611b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4990614d24565b60405180910390fd5b601b54421015611bad57601354811480611b6d575060125481145b611bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba390614de4565b60405180910390fd5b5b8260ff1681611bbc91906150fb565b341015611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf590614d04565b60405180910390fd5b60006103e86017548560ff1684611c1591906150fb565b611c1f91906150fb565b611c2991906150ca565b9050601354821415611d8857601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548460ff161115611cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb190614e24565b60405180910390fd5b348460ff16601354611ccc91906150fb565b1115611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490614d04565b60405180910390fd5b8360ff16601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d5f9190615155565b925050819055508360ff16601354611d7791906150fb565b341015611d8357600080fd5b611e84565b601154821415611e0757348460ff16601154611da491906150fb565b1115611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc90614d04565b60405180910390fd5b8360ff16601154611df691906150fb565b341015611e0257600080fd5b611e83565b601254821415611e8257348460ff16601254611e2391906150fb565b1115611e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5b90614d04565b60405180910390fd5b8360ff16601254611e7591906150fb565b341015611e8157600080fd5b5b5b5b611ec9601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828660ff1685611eba91906150fb565b611ec49190615155565b612fe0565b611ef5601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612fe0565b505b6000600190505b8360ff168111611f79576000611f14600c613070565b9050611f5b33600e8381548110611f2e57611f2d61545f565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1661307e565b611f65600c61309c565b508080611f7190615329565b915050611efe565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790614ca4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61203f612b79565b73ffffffffffffffffffffffffffffffffffffffff1661205d6121a3565b73ffffffffffffffffffffffffffffffffffffffff16146120b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120aa90614d84565b60405180910390fd5b6120bd60006130b2565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120ed612b79565b73ffffffffffffffffffffffffffffffffffffffff1661210b6121a3565b73ffffffffffffffffffffffffffffffffffffffff1614612161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215890614d84565b60405180910390fd5b8060158190555050565b601b5481565b600c8060000154905081565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6121d5612b79565b73ffffffffffffffffffffffffffffffffffffffff166121f36121a3565b73ffffffffffffffffffffffffffffffffffffffff1614612249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224090614d84565b60405180910390fd5b80421061228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290614ce4565b60405180910390fd5b80601b8190555050565b6060600180546122a4906152c6565b80601f01602080910402602001604051908101604052809291908181526020018280546122d0906152c6565b801561231d5780601f106122f25761010080835404028352916020019161231d565b820191906000526020600020905b81548152906001019060200180831161230057829003601f168201915b5050505050905090565b61232f612b79565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561239d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239490614c44565b60405180910390fd5b80600560006123aa612b79565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612457612b79565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161249c9190614b11565b60405180910390a35050565b601860149054906101000a900461ffff1681565b6124c4612b79565b73ffffffffffffffffffffffffffffffffffffffff166124e26121a3565b73ffffffffffffffffffffffffffffffffffffffff1614612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252f90614d84565b60405180910390fd5b80421061257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257190614ce4565b60405180910390fd5b80601a8190555050565b60175481565b612592612b79565b73ffffffffffffffffffffffffffffffffffffffff166125b06121a3565b73ffffffffffffffffffffffffffffffffffffffff1614612606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fd90614d84565b60405180910390fd5b60005b8383905081101561269257816019600086868581811061262c5761262b61545f565b5b9050602002016020810190612641919061405b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061268a90615329565b915050612609565b50505050565b6126a96126a3612b79565b83612ca6565b6126e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126df90614e44565b60405180910390fd5b6126f484848484613178565b50505050565b601a5481565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606061273182612b81565b612770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276790614dc4565b60405180910390fd5b600061277a6131d4565b9050600081511161279a57604051806020016040528060008152506127c5565b806127a484613266565b6040516020016127b5929190614a29565b6040516020818303038152906040525b915050919050565b60145481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e3a9db1a836040518263ffffffff1660e01b815260040161282e9190614a6d565b60206040518083038186803b15801561284657600080fd5b505afa15801561285a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287e919061441e565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612921612b79565b73ffffffffffffffffffffffffffffffffffffffff1661293f6121a3565b73ffffffffffffffffffffffffffffffffffffffff1614612995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298c90614d84565b60405180910390fd5b8060138190555050565b6129a7612b79565b73ffffffffffffffffffffffffffffffffffffffff166129c56121a3565b73ffffffffffffffffffffffffffffffffffffffff1614612a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1290614d84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8290614be4565b60405180910390fd5b612a94816130b2565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612b6257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612b725750612b71826133c7565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612c60836119b0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612cb182612b81565b612cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce790614c64565b60405180910390fd5b6000612cfb836119b0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612d6a57508373ffffffffffffffffffffffffffffffffffffffff16612d5284610dc9565b73ffffffffffffffffffffffffffffffffffffffff16145b80612d7b5750612d7a8185612885565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612da4826119b0565b73ffffffffffffffffffffffffffffffffffffffff1614612dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df190614da4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6190614c24565b60405180910390fd5b612e75838383613431565b612e80600082612bed565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ed09190615155565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f27919061503d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f340fa0182846040518363ffffffff1660e01b815260040161303a9190614a6d565b6000604051808303818588803b15801561305357600080fd5b505af1158015613067573d6000803e3d6000fd5b50505050505050565b600081600001549050919050565b613098828260405180602001604052806000815250613545565b5050565b6001816000016000828254019250508190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613183848484612d84565b61318f848484846135a0565b6131ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c590614bc4565b60405180910390fd5b50505050565b6060600f80546131e3906152c6565b80601f016020809104026020016040519081016040528092919081815260200182805461320f906152c6565b801561325c5780601f106132315761010080835404028352916020019161325c565b820191906000526020600020905b81548152906001019060200180831161323f57829003601f168201915b5050505050905090565b606060008214156132ae576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506133c2565b600082905060005b600082146132e05780806132c990615329565b915050600a826132d991906150ca565b91506132b6565b60008167ffffffffffffffff8111156132fc576132fb61548e565b5b6040519080825280601f01601f19166020018201604052801561332e5781602001600182028036833780820191505090505b5090505b600085146133bb576001826133479190615155565b9150600a856133569190615372565b6030613362919061503d565b60f81b8183815181106133785761337761545f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856133b491906150ca565b9450613332565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61343c838383613737565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561347f5761347a8161373c565b6134be565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146134bd576134bc8382613785565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613501576134fc816138f2565b613540565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461353f5761353e82826139c3565b5b5b505050565b61354f8383613a42565b61355c60008484846135a0565b61359b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359290614bc4565b60405180910390fd5b505050565b60006135c18473ffffffffffffffffffffffffffffffffffffffff16613c10565b1561372a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026135ea612b79565b8786866040518563ffffffff1660e01b815260040161360c9493929190614aa3565b602060405180830381600087803b15801561362657600080fd5b505af192505050801561365757506040513d601f19601f82011682018060405250810190613654919061434e565b60015b6136da573d8060008114613687576040519150601f19603f3d011682016040523d82523d6000602084013e61368c565b606091505b506000815114156136d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c990614bc4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061372f565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161379284611f7f565b61379c9190615155565b9050600060076000848152602001908152602001600020549050818114613881576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506139069190615155565b90506000600960008481526020019081526020016000205490506000600883815481106139365761393561545f565b5b9060005260206000200154905080600883815481106139585761395761545f565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806139a7576139a6615430565b5b6001900381819060005260206000200160009055905550505050565b60006139ce83611f7f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613aa990614d44565b60405180910390fd5b613abb81612b81565b15613afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af290614c04565b60405180910390fd5b613b0760008383613431565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b57919061503d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805482825590600052602060002090600f01601090048101928215613cc05791602002820160005b83821115613c9057833561ffff1683826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302613c4c565b8015613cbe5782816101000a81549061ffff0219169055600201602081600101049283019260010302613c90565b505b509050613ccd9190613d57565b5090565b828054613cdd906152c6565b90600052602060002090601f016020900481019282613cff5760008555613d46565b82601f10613d1857805160ff1916838001178555613d46565b82800160010185558215613d46579182015b82811115613d45578251825591602001919060010190613d2a565b5b509050613d539190613d57565b5090565b5b80821115613d70576000816000905550600101613d58565b5090565b6000613d87613d8284614f28565b614f03565b90508083825260208201905082856020860282011115613daa57613da96154c7565b5b60005b85811015613dda5781613dc08882614031565b845260208401935060208301925050600181019050613dad565b5050509392505050565b6000613df7613df284614f54565b614f03565b905082815260208101848484011115613e1357613e126154cc565b5b613e1e848285615284565b509392505050565b6000613e39613e3484614f85565b614f03565b905082815260208101848484011115613e5557613e546154cc565b5b613e60848285615284565b509392505050565b600081359050613e7781615b53565b92915050565b600081359050613e8c81615b6a565b92915050565b60008083601f840112613ea857613ea76154c2565b5b8235905067ffffffffffffffff811115613ec557613ec46154bd565b5b602083019150836020820283011115613ee157613ee06154c7565b5b9250929050565b60008083601f840112613efe57613efd6154c2565b5b8235905067ffffffffffffffff811115613f1b57613f1a6154bd565b5b602083019150836020820283011115613f3757613f366154c7565b5b9250929050565b600082601f830112613f5357613f526154c2565b5b8151613f63848260208601613d74565b91505092915050565b600081359050613f7b81615b81565b92915050565b600081359050613f9081615b98565b92915050565b600081519050613fa581615b98565b92915050565b600082601f830112613fc057613fbf6154c2565b5b8135613fd0848260208601613de4565b91505092915050565b600082601f830112613fee57613fed6154c2565b5b8135613ffe848260208601613e26565b91505092915050565b60008135905061401681615baf565b92915050565b60008135905061402b81615bc6565b92915050565b60008151905061404081615bc6565b92915050565b60008135905061405581615bdd565b92915050565b600060208284031215614071576140706154d6565b5b600061407f84828501613e68565b91505092915050565b60006020828403121561409e5761409d6154d6565b5b60006140ac84828501613e7d565b91505092915050565b600080604083850312156140cc576140cb6154d6565b5b60006140da85828601613e68565b92505060206140eb85828601613e68565b9150509250929050565b60008060006060848603121561410e5761410d6154d6565b5b600061411c86828701613e68565b935050602061412d86828701613e68565b925050604061413e8682870161401c565b9150509250925092565b60008060008060808587031215614162576141616154d6565b5b600061417087828801613e68565b945050602061418187828801613e68565b93505060406141928782880161401c565b925050606085013567ffffffffffffffff8111156141b3576141b26154d1565b5b6141bf87828801613fab565b91505092959194509250565b600080604083850312156141e2576141e16154d6565b5b60006141f085828601613e68565b925050602061420185828601613f6c565b9150509250929050565b60008060408385031215614222576142216154d6565b5b600061423085828601613e68565b92505060206142418582860161401c565b9150509250929050565b600080600060408486031215614264576142636154d6565b5b600084013567ffffffffffffffff811115614282576142816154d1565b5b61428e86828701613e92565b935093505060206142a18682870161401c565b9150509250925092565b6000602082840312156142c1576142c06154d6565b5b600082015167ffffffffffffffff8111156142df576142de6154d1565b5b6142eb84828501613f3e565b91505092915050565b60006020828403121561430a576143096154d6565b5b600061431884828501613f6c565b91505092915050565b600060208284031215614337576143366154d6565b5b600061434584828501613f81565b91505092915050565b600060208284031215614364576143636154d6565b5b600061437284828501613f96565b91505092915050565b600060208284031215614391576143906154d6565b5b600082013567ffffffffffffffff8111156143af576143ae6154d1565b5b6143bb84828501613fd9565b91505092915050565b6000602082840312156143da576143d96154d6565b5b60006143e884828501614007565b91505092915050565b600060208284031215614407576144066154d6565b5b60006144158482850161401c565b91505092915050565b600060208284031215614434576144336154d6565b5b600061444284828501614031565b91505092915050565b600060208284031215614461576144606154d6565b5b600061446f84828501614046565b91505092915050565b600080600060408486031215614491576144906154d6565b5b600061449f86828701614046565b935050602084013567ffffffffffffffff8111156144c0576144bf6154d1565b5b6144cc86828701613ee8565b92509250509250925092565b60006144e48383614a0b565b60208301905092915050565b6144f98161519b565b82525050565b61450881615189565b82525050565b600061451982614fc6565b6145238185614ff4565b935061452e83614fb6565b8060005b8381101561455f57815161454688826144d8565b975061455183614fe7565b925050600181019050614532565b5085935050505092915050565b614575816151ad565b82525050565b600061458682614fd1565b6145908185615005565b93506145a0818560208601615293565b6145a9816154db565b840191505092915050565b6145bd8161522a565b82525050565b6145cc8161523c565b82525050565b60006145dd82614fdc565b6145e78185615021565b93506145f7818560208601615293565b614600816154db565b840191505092915050565b600061461682614fdc565b6146208185615032565b9350614630818560208601615293565b80840191505092915050565b6000614649600e83615021565b9150614654826154ec565b602082019050919050565b600061466c602b83615021565b915061467782615515565b604082019050919050565b600061468f603283615021565b915061469a82615564565b604082019050919050565b60006146b2602683615021565b91506146bd826155b3565b604082019050919050565b60006146d5601c83615021565b91506146e082615602565b602082019050919050565b60006146f8602483615021565b91506147038261562b565b604082019050919050565b600061471b601983615021565b91506147268261567a565b602082019050919050565b600061473e602c83615021565b9150614749826156a3565b604082019050919050565b6000614761603883615021565b915061476c826156f2565b604082019050919050565b6000614784602a83615021565b915061478f82615741565b604082019050919050565b60006147a7602983615021565b91506147b282615790565b604082019050919050565b60006147ca600283615021565b91506147d5826157df565b602082019050919050565b60006147ed601d83615021565b91506147f882615808565b602082019050919050565b6000614810601383615021565b915061481b82615831565b602082019050919050565b6000614833602083615021565b915061483e8261585a565b602082019050919050565b6000614856602c83615021565b915061486182615883565b604082019050919050565b6000614879600583615032565b9150614884826158d2565b600582019050919050565b600061489c602083615021565b91506148a7826158fb565b602082019050919050565b60006148bf602983615021565b91506148ca82615924565b604082019050919050565b60006148e2602f83615021565b91506148ed82615973565b604082019050919050565b6000614905600f83615021565b9150614910826159c2565b602082019050919050565b6000614928602183615021565b9150614933826159eb565b604082019050919050565b600061494b602283615021565b915061495682615a3a565b604082019050919050565b600061496e600083615016565b915061497982615a89565b600082019050919050565b6000614991603183615021565b915061499c82615a8c565b604082019050919050565b60006149b4602c83615021565b91506149bf82615adb565b604082019050919050565b60006149d7601183615021565b91506149e282615b2a565b602082019050919050565b6149f6816151e5565b82525050565b614a0581615272565b82525050565b614a1481615213565b82525050565b614a2381615213565b82525050565b6000614a35828561460b565b9150614a41828461460b565b9150614a4c8261486c565b91508190509392505050565b6000614a6382614961565b9150819050919050565b6000602082019050614a8260008301846144ff565b92915050565b6000602082019050614a9d60008301846144f0565b92915050565b6000608082019050614ab860008301876144ff565b614ac560208301866144ff565b614ad26040830185614a1a565b8181036060830152614ae4818461457b565b905095945050505050565b60006020820190508181036000830152614b09818461450e565b905092915050565b6000602082019050614b26600083018461456c565b92915050565b6000602082019050614b4160008301846145b4565b92915050565b6000602082019050614b5c60008301846145c3565b92915050565b60006020820190508181036000830152614b7c81846145d2565b905092915050565b60006020820190508181036000830152614b9d8161463c565b9050919050565b60006020820190508181036000830152614bbd8161465f565b9050919050565b60006020820190508181036000830152614bdd81614682565b9050919050565b60006020820190508181036000830152614bfd816146a5565b9050919050565b60006020820190508181036000830152614c1d816146c8565b9050919050565b60006020820190508181036000830152614c3d816146eb565b9050919050565b60006020820190508181036000830152614c5d8161470e565b9050919050565b60006020820190508181036000830152614c7d81614731565b9050919050565b60006020820190508181036000830152614c9d81614754565b9050919050565b60006020820190508181036000830152614cbd81614777565b9050919050565b60006020820190508181036000830152614cdd8161479a565b9050919050565b60006020820190508181036000830152614cfd816147bd565b9050919050565b60006020820190508181036000830152614d1d816147e0565b9050919050565b60006020820190508181036000830152614d3d81614803565b9050919050565b60006020820190508181036000830152614d5d81614826565b9050919050565b60006020820190508181036000830152614d7d81614849565b9050919050565b60006020820190508181036000830152614d9d8161488f565b9050919050565b60006020820190508181036000830152614dbd816148b2565b9050919050565b60006020820190508181036000830152614ddd816148d5565b9050919050565b60006020820190508181036000830152614dfd816148f8565b9050919050565b60006020820190508181036000830152614e1d8161491b565b9050919050565b60006020820190508181036000830152614e3d8161493e565b9050919050565b60006020820190508181036000830152614e5d81614984565b9050919050565b60006020820190508181036000830152614e7d816149a7565b9050919050565b60006020820190508181036000830152614e9d816149ca565b9050919050565b6000602082019050614eb960008301846149ed565b92915050565b6000604082019050614ed460008301856149fc565b614ee160208301846144ff565b9392505050565b6000602082019050614efd6000830184614a1a565b92915050565b6000614f0d614f1e565b9050614f1982826152f8565b919050565b6000604051905090565b600067ffffffffffffffff821115614f4357614f4261548e565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f6f57614f6e61548e565b5b614f78826154db565b9050602081019050919050565b600067ffffffffffffffff821115614fa057614f9f61548e565b5b614fa9826154db565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061504882615213565b915061505383615213565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615088576150876153a3565b5b828201905092915050565b600061509e8261521d565b91506150a98361521d565b92508260ff038211156150bf576150be6153a3565b5b828201905092915050565b60006150d582615213565b91506150e083615213565b9250826150f0576150ef6153d2565b5b828204905092915050565b600061510682615213565b915061511183615213565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561514a576151496153a3565b5b828202905092915050565b600061516082615213565b915061516b83615213565b92508282101561517e5761517d6153a3565b5b828203905092915050565b6000615194826151f3565b9050919050565b60006151a6826151f3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006152358261524e565b9050919050565b60006152478261524e565b9050919050565b600061525982615260565b9050919050565b600061526b826151f3565b9050919050565b600061527d826151e5565b9050919050565b82818337600083830152505050565b60005b838110156152b1578082015181840152602081019050615296565b838111156152c0576000848401525b50505050565b600060028204905060018216806152de57607f821691505b602082108114156152f2576152f1615401565b5b50919050565b615301826154db565b810181811067ffffffffffffffff821117156153205761531f61548e565b5b80604052505050565b600061533482615213565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615367576153666153a3565b5b600182019050919050565b600061537d82615213565b915061538883615213565b925082615398576153976153d2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d61782046656520697320323025000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6e6f000000000000000000000000000000000000000000000000000000000000600082015250565b7f43726f2076616c75652073656e74206973206e6f7420636f7272656374000000600082015250565b7f50726573616c65206e6f74207374617274656400000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f50726573616c65206f6e676f696e670000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d617820617661696c61626c6520746f2070757263686160008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f6368756e6b496e64657820657869737473000000000000000000000000000000600082015250565b615b5c81615189565b8114615b6757600080fd5b50565b615b738161519b565b8114615b7e57600080fd5b50565b615b8a816151ad565b8114615b9557600080fd5b50565b615ba1816151b9565b8114615bac57600080fd5b50565b615bb8816151e5565b8114615bc357600080fd5b50565b615bcf81615213565b8114615bda57600080fd5b50565b615be68161521d565b8114615bf157600080fd5b5056fea26469706673582212203660d211744aa9621cd276dacb83d9806f992c2f0f610b73ab4efb65d135efcb64736f6c63430008070033608060405234801561001057600080fd5b5061002d61002261003260201b60201c565b61003a60201b60201c565b6100fe565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610c098061010d6000396000f3fe6080604052600436106100555760003560e01c806351cff8d91461005a578063715018a6146100835780638da5cb5b1461009a578063e3a9db1a146100c5578063f2fde38b14610102578063f340fa011461012b575b600080fd5b34801561006657600080fd5b50610081600480360381019061007c91906107f9565b610147565b005b34801561008f57600080fd5b506100986102c7565b005b3480156100a657600080fd5b506100af61034f565b6040516100bc9190610908565b60405180910390f35b3480156100d157600080fd5b506100ec60048036038101906100e791906107cc565b610378565b6040516100f991906109a3565b60405180910390f35b34801561010e57600080fd5b50610129600480360381019061012491906107cc565b6103c1565b005b610145600480360381019061014091906107cc565b6104b9565b005b61014f6105e2565b73ffffffffffffffffffffffffffffffffffffffff1661016d61034f565b73ffffffffffffffffffffffffffffffffffffffff16146101c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ba90610983565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610275818373ffffffffffffffffffffffffffffffffffffffff166105ea90919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040516102bb91906109a3565b60405180910390a25050565b6102cf6105e2565b73ffffffffffffffffffffffffffffffffffffffff166102ed61034f565b73ffffffffffffffffffffffffffffffffffffffff1614610343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033a90610983565b60405180910390fd5b61034d60006106de565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6103c96105e2565b73ffffffffffffffffffffffffffffffffffffffff166103e761034f565b73ffffffffffffffffffffffffffffffffffffffff161461043d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043490610983565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156104ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a490610923565b60405180910390fd5b6104b6816106de565b50565b6104c16105e2565b73ffffffffffffffffffffffffffffffffffffffff166104df61034f565b73ffffffffffffffffffffffffffffffffffffffff1614610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052c90610983565b60405180910390fd5b600034905080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461058991906109da565b925050819055508173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4826040516105d691906109a3565b60405180910390a25050565b600033905090565b8047101561062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490610963565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051610653906108f3565b60006040518083038185875af1925050503d8060008114610690576040519150601f19603f3d011682016040523d82523d6000602084013e610695565b606091505b50509050806106d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d090610943565b60405180910390fd5b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000813590506107b181610ba5565b92915050565b6000813590506107c681610bbc565b92915050565b6000602082840312156107e2576107e1610aad565b5b60006107f0848285016107a2565b91505092915050565b60006020828403121561080f5761080e610aad565b5b600061081d848285016107b7565b91505092915050565b61082f81610a30565b82525050565b60006108426026836109c9565b915061084d82610ab2565b604082019050919050565b6000610865603a836109c9565b915061087082610b01565b604082019050919050565b6000610888601d836109c9565b915061089382610b50565b602082019050919050565b60006108ab6020836109c9565b91506108b682610b79565b602082019050919050565b60006108ce6000836109be565b91506108d982610ba2565b600082019050919050565b6108ed81610a74565b82525050565b60006108fe826108c1565b9150819050919050565b600060208201905061091d6000830184610826565b92915050565b6000602082019050818103600083015261093c81610835565b9050919050565b6000602082019050818103600083015261095c81610858565b9050919050565b6000602082019050818103600083015261097c8161087b565b9050919050565b6000602082019050818103600083015261099c8161089e565b9050919050565b60006020820190506109b860008301846108e4565b92915050565b600081905092915050565b600082825260208201905092915050565b60006109e582610a74565b91506109f083610a74565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610a2557610a24610a7e565b5b828201905092915050565b6000610a3b82610a54565b9050919050565b6000610a4d82610a54565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b610bae81610a30565b8114610bb957600080fd5b50565b610bc581610a42565b8114610bd057600080fd5b5056fea26469706673582212202ad5de0a408108f70e8d4999e02e4aefad1ca964e4034bcef677260489a5dcf564736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a43726f747572746c65730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024354000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005668747470733a2f2f6368726f6e6f737761702e6d7970696e6174612e636c6f75642f697066732f516d586e507a44417a4a3170355a5544543853684a4c4c465779414561664e697262344a7957434a43374e7968372f00000000000000000000

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a43726f747572746c65730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024354000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005668747470733a2f2f6368726f6e6f737761702e6d7970696e6174612e636c6f75642f697066732f516d586e507a44417a4a3170355a5544543853684a4c4c465779414561664e697262344a7957434a43374e7968372f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Croturtles
Arg [1] : _symbol (string): CT
Arg [2] : _initBaseURI (string): https://chronoswap.mypinata.cloud/ipfs/QmXnPzDAzJ1p5ZUDT8ShJLLFWyAEafNirb4JyWCJC7Nyh7/

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [4] : 43726f747572746c657300000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 4354000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000056
Arg [8] : 68747470733a2f2f6368726f6e6f737761702e6d7970696e6174612e636c6f75
Arg [9] : 642f697066732f516d586e507a44417a4a3170355a5544543853684a4c4c4657
Arg [10] : 79414561664e697262344a7957434a43374e7968372f00000000000000000000


Deployed ByteCode Sourcemap

49422:6525:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36066:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55711:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49930:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23958:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25517:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25040:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49854:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36706:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54909:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54815:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50003:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26407:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52856:444;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36374:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48407:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54186:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55791:153;;;:::i;:::-;;26817:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53394:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49776:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54639:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53306:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36896:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55607:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49889:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50137:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23652:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51031:1819;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23382:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43855:94;;;;;;;;;;;;;:::i;:::-;;49491:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55485:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50440:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49649:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50212:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43204:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55294:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24127:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25810:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50297:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55081:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50168:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50671:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27073:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50386:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50041:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53748:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49967:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48637:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26176:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54725:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44104:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36066:224;36168:4;36207:35;36192:50;;;:11;:50;;;;:90;;;;36246:36;36270:11;36246:23;:36::i;:::-;36192:90;36185:97;;36066:224;;;:::o;55711:73::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55772:6:::1;55763;;:15;;;;;;;;;;;;;;;;;;55711:73:::0;:::o;49930:32::-;;;;:::o;23958:100::-;24012:13;24045:5;24038:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23958:100;:::o;25517:221::-;25593:7;25621:16;25629:7;25621;:16::i;:::-;25613:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25706:15;:24;25722:7;25706:24;;;;;;;;;;;;;;;;;;;;;25699:31;;25517:221;;;:::o;25040:411::-;25121:13;25137:23;25152:7;25137:14;:23::i;:::-;25121:39;;25185:5;25179:11;;:2;:11;;;;25171:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25279:5;25263:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25288:37;25305:5;25312:12;:10;:12::i;:::-;25288:16;:37::i;:::-;25263:62;25241:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25422:21;25431:2;25435:7;25422:8;:21::i;:::-;25110:341;25040:411;;:::o;49854:30::-;;;;:::o;36706:113::-;36767:7;36794:10;:17;;;;36787:24;;36706:113;:::o;54909:166::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55010:3:::1;54992:14;:21;;54983:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;55055:14;55039:13;:30;;;;54909:166:::0;:::o;54815:88::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54889:8:::1;54876:10;:21;;;;54815:88:::0;:::o;50003:33::-;;;;:::o;26407:339::-;26602:41;26621:12;:10;:12::i;:::-;26635:7;26602:18;:41::i;:::-;26594:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26710:28;26720:4;26726:2;26730:7;26710:9;:28::i;:::-;26407:339;;;:::o;52856:444::-;52914:7;52933:17;52953:4;;52933:24;;53014:1;52977:14;;;;;;;;;;;:24;;;53002:8;52977:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;52974:211;;;53042:10;;53030:22;;52974:211;;;53134:1;53072:10;;;;;;;;;;;:27;;;53100:13;;;;;;;;;;;53115:8;53072:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;:63;53069:116;;;53163:10;;53151:22;;53069:116;52974:211;53221:1;53198:10;:20;53209:8;53198:20;;;;;;;;;;;;;;;;:24;53195:73;;;53250:6;;53238:18;;53195:73;53285:9;53278:16;;;52856:444;;;:::o;36374:256::-;36471:7;36507:23;36524:5;36507:16;:23::i;:::-;36499:5;:31;36491:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36596:12;:19;36609:5;36596:19;;;;;;;;;;;;;;;:26;36616:5;36596:26;;;;;;;;;;;;36589:33;;36374:256;;;;:::o;48407:106::-;48482:7;:16;;;48499:5;48482:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48407:106;:::o;54186:445::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54315:11:::1;54294:32;;:17;;;;;;;;;;;:32;;;;54286:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;54378:1;54363:11;:16;;;54359:221;;;54404:6;;54396:5;:14;;;;;;;:::i;:::-;;54359:221;;;54443:8;54454:6;;:13;;54443:24;;54486:6;54482:87;54502:3;54498:1;:7;54482:87;;;54532:5;54543:6;;54550:1;54543:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;54532:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54507:4;;;;;:::i;:::-;;;;54482:87;;;;54428:152;54359:221;54624:1;54610:11;:15;;;;:::i;:::-;54590:17;;:35;;;;;;;;;;;;;;;;;;54186:445:::0;;;:::o;55791:153::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55844:8:::1;55866:7;:5;:7::i;:::-;55858:21;;55887;55858:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55843:70;;;55928:3;55920:12;;;::::0;::::1;;55836:108;55791:153::o:0;26817:185::-;26955:39;26972:4;26978:2;26982:7;26955:39;;;;;;;;;;;;:16;:39::i;:::-;26817:185;;;:::o;53394:348::-;53469:16;53497:23;53523:17;53533:6;53523:9;:17::i;:::-;53497:43;;53547:25;53589:15;53575:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53547:58;;53617:9;53612:103;53632:15;53628:1;:19;53612:103;;;53677:30;53697:6;53705:1;53677:19;:30::i;:::-;53663:8;53672:1;53663:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;53649:3;;;;;:::i;:::-;;;;53612:103;;;;53728:8;53721:15;;;;53394:348;;;:::o;49776:73::-;;;;;;;;;;;;;:::o;54639:80::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54705:8:::1;54698:4;:15;;;;54639:80:::0;:::o;53306:82::-;53346:4;53370:5;:12;;;;53363:19;;53306:82;:::o;36896:233::-;36971:7;37007:30;:28;:30::i;:::-;36999:5;:38;36991:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37104:10;37115:5;37104:17;;;;;;;;:::i;:::-;;;;;;;;;;37097:24;;36896:233;;;:::o;55607:98::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55688:11:::1;55678:7;:21;;;;;;;;;;;;:::i;:::-;;55607:98:::0;:::o;49889:36::-;;;;:::o;50137:26::-;;;;;;;;;;;;;:::o;23652:239::-;23724:7;23744:13;23760:7;:16;23768:7;23760:16;;;;;;;;;;;;;;;;;;;;;23744:32;;23812:1;23795:19;;:5;:19;;;;23787:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23878:5;23871:12;;;23652:239;;;:::o;51031:1819::-;51086:14;51103:13;:11;:13::i;:::-;51086:30;;51123:17;51143:20;51152:10;51143:8;:20::i;:::-;51123:40;;51179:6;;;;;;;;;;;51178:7;51170:16;;;;;;51215:1;51201:11;:15;;;51193:24;;;;;;51256:9;;51241:11;51232:20;;:6;:20;;;;:::i;:::-;:33;;51224:42;;;;;;51297:7;:5;:7::i;:::-;51283:21;;:10;:21;;;51279:1373;;51342:13;;51327:11;:28;;;;51319:37;;;;;;51394:21;;51376:15;:39;51367:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;51473:17;;51455:15;:35;51452:141;;;51528:6;;51515:9;:19;:46;;;;51551:10;;51538:9;:23;51515:46;51506:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;51452:141;51638:11;51626:23;;:9;:23;;;;:::i;:::-;51613:9;:36;;51605:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;51694:17;51760:4;51743:13;;51728:11;51716:23;;:9;:23;;;;:::i;:::-;51715:41;;;;:::i;:::-;51714:50;;;;:::i;:::-;51694:70;;51793:6;;51780:9;:19;51777:735;;;51838:10;:22;51849:10;51838:22;;;;;;;;;;;;;;;;51823:11;:37;;;;51815:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;51946:9;51931:11;51922:20;;:6;;:20;;;;:::i;:::-;:33;;51914:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;52030:11;52004:37;;:10;:22;52015:10;52004:22;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;52086:11;52077:20;;:6;;:20;;;;:::i;:::-;52064:9;:33;;52056:42;;;;;;51777:735;;;52141:4;;52128:9;:17;52125:387;;;52191:9;52176:11;52169:18;;:4;;:18;;;;:::i;:::-;:31;;52161:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;52277:11;52270:18;;:4;;:18;;;;:::i;:::-;52257:9;:31;;52249:40;;;;;;52125:387;;;52333:10;;52320:9;:23;52317:195;;;52395:9;52380:11;52367:24;;:10;;:24;;;;:::i;:::-;:37;;52359:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;52487:11;52474:24;;:10;;:24;;;;:::i;:::-;52461:9;:37;;52453:46;;;;;;52317:195;52125:387;51777:735;52522:68;52537:13;;;;;;;;;;;52580:9;52565:11;52553:23;;:9;:23;;;;:::i;:::-;52552:37;;;;:::i;:::-;52522:14;:68::i;:::-;52601:43;52616:16;;;;;;;;;;;52634:9;52601:14;:43::i;:::-;51306:1346;51279:1373;52665:9;52677:1;52665:13;;52660:185;52685:11;52680:16;;:1;:16;52660:185;;52712:15;52730:25;:15;:23;:25::i;:::-;52712:43;;52764:37;52774:10;52786:5;52792:7;52786:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52764:37;;:9;:37::i;:::-;52810:27;:15;:25;:27::i;:::-;52703:142;52698:3;;;;;:::i;:::-;;;;52660:185;;;;51079:1771;;51031:1819;:::o;23382:208::-;23454:7;23499:1;23482:19;;:5;:19;;;;23474:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23566:9;:16;23576:5;23566:16;;;;;;;;;;;;;;;;23559:23;;23382:208;;;:::o;43855:94::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43920:21:::1;43938:1;43920:9;:21::i;:::-;43855:94::o:0;49491:83::-;;;;;;;;;;;;;:::o;55485:116::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55578:17:::1;55562:13;:33;;;;55485:116:::0;:::o;50440:45::-;;;;:::o;49649:39::-;;;;;;;;;:::o;50212:76::-;;;;;;;;;;;;;:::o;43204:87::-;43250:7;43277:6;;;;;;;;;;;43270:13;;43204:87;:::o;55294:185::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55403:18:::1;55385:15;:36;55376:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;55455:18;55435:17;:38;;;;55294:185:::0;:::o;24127:104::-;24183:13;24216:7;24209:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24127:104;:::o;25810:295::-;25925:12;:10;:12::i;:::-;25913:24;;:8;:24;;;;25905:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26025:8;25980:18;:32;25999:12;:10;:12::i;:::-;25980:32;;;;;;;;;;;;;;;:42;26013:8;25980:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26078:8;26049:48;;26064:12;:10;:12::i;:::-;26049:48;;;26088:8;26049:48;;;;;;:::i;:::-;;;;;;;;25810:295;;:::o;50297:31::-;;;;;;;;;;;;;:::o;55081:205::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55198:22:::1;55180:15;:40;55171:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;55258:22;55234:21;:46;;;;55081:205:::0;:::o;50168:33::-;;;;:::o;50671:216::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50780:9:::1;50775:109;50799:9;;:16;;50795:1;:20;50775:109;;;50860:16;50833:10;:24;50844:9;;50854:1;50844:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;50833:24;;;;;;;;;;;;;;;:43;;;;50817:3;;;;;:::i;:::-;;;;50775:109;;;;50671:216:::0;;;:::o;27073:328::-;27248:41;27267:12;:10;:12::i;:::-;27281:7;27248:18;:41::i;:::-;27240:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27354:39;27368:4;27374:2;27378:7;27387:5;27354:13;:39::i;:::-;27073:328;;;;:::o;50386:49::-;;;;:::o;50041:91::-;;;;;;;;;;;;;:::o;53748:417::-;53846:13;53887:16;53895:7;53887;:16::i;:::-;53871:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;53977:28;54008:10;:8;:10::i;:::-;53977:41;;54063:1;54038:14;54032:28;:32;:127;;;;;;;;;;;;;;;;;54100:14;54116:18;:7;:16;:18::i;:::-;54083:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54032:127;54025:134;;;53748:417;;;:::o;49967:31::-;;;;:::o;48637:112::-;48690:7;48717;:18;;;48736:4;48717:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48710:31;;48637:112;;;:::o;26176:164::-;26273:4;26297:18;:25;26316:5;26297:25;;;;;;;;;;;;;;;:35;26323:8;26297:35;;;;;;;;;;;;;;;;;;;;;;;;;26290:42;;26176:164;;;;:::o;54725:84::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54795:8:::1;54786:6;:17;;;;54725:84:::0;:::o;44104:192::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44213:1:::1;44193:22;;:8;:22;;;;44185:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44269:19;44279:8;44269:9;:19::i;:::-;44104:192:::0;:::o;23013:305::-;23115:4;23167:25;23152:40;;;:11;:40;;;;:105;;;;23224:33;23209:48;;;:11;:48;;;;23152:105;:158;;;;23274:36;23298:11;23274:23;:36::i;:::-;23152:158;23132:178;;23013:305;;;:::o;21487:98::-;21540:7;21567:10;21560:17;;21487:98;:::o;28911:127::-;28976:4;29028:1;29000:30;;:7;:16;29008:7;29000:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28993:37;;28911:127;;;:::o;32893:174::-;32995:2;32968:15;:24;32984:7;32968:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33051:7;33047:2;33013:46;;33022:23;33037:7;33022:14;:23::i;:::-;33013:46;;;;;;;;;;;;32893:174;;:::o;29205:348::-;29298:4;29323:16;29331:7;29323;:16::i;:::-;29315:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29399:13;29415:23;29430:7;29415:14;:23::i;:::-;29399:39;;29468:5;29457:16;;:7;:16;;;:51;;;;29501:7;29477:31;;:20;29489:7;29477:11;:20::i;:::-;:31;;;29457:51;:87;;;;29512:32;29529:5;29536:7;29512:16;:32::i;:::-;29457:87;29449:96;;;29205:348;;;;:::o;32197:578::-;32356:4;32329:31;;:23;32344:7;32329:14;:23::i;:::-;:31;;;32321:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32439:1;32425:16;;:2;:16;;;;32417:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32495:39;32516:4;32522:2;32526:7;32495:20;:39::i;:::-;32599:29;32616:1;32620:7;32599:8;:29::i;:::-;32660:1;32641:9;:15;32651:4;32641:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32689:1;32672:9;:13;32682:2;32672:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32720:2;32701:7;:16;32709:7;32701:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32759:7;32755:2;32740:27;;32749:4;32740:27;;;;;;;;;;;;32197:578;;;:::o;49118:126::-;49200:7;:15;;;49223:6;49231:4;49200:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49118:126;;:::o;846:114::-;911:7;938;:14;;;931:21;;846:114;;;:::o;29895:110::-;29971:26;29981:2;29985:7;29971:26;;;;;;;;;;;;:9;:26::i;:::-;29895:110;;:::o;968:127::-;1075:1;1057:7;:14;;;:19;;;;;;;;;;;968:127;:::o;44304:173::-;44360:16;44379:6;;;;;;;;;;;44360:25;;44405:8;44396:6;;:17;;;;;;;;;;;;;;;;;;44460:8;44429:40;;44450:8;44429:40;;;;;;;;;;;;44349:128;44304:173;:::o;28283:315::-;28440:28;28450:4;28456:2;28460:7;28440:9;:28::i;:::-;28487:48;28510:4;28516:2;28520:7;28529:5;28487:22;:48::i;:::-;28479:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28283:315;;;;:::o;50908:102::-;50968:13;50997:7;50990:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50908:102;:::o;9319:723::-;9375:13;9605:1;9596:5;:10;9592:53;;;9623:10;;;;;;;;;;;;;;;;;;;;;9592:53;9655:12;9670:5;9655:20;;9686:14;9711:78;9726:1;9718:4;:9;9711:78;;9744:8;;;;;:::i;:::-;;;;9775:2;9767:10;;;;;:::i;:::-;;;9711:78;;;9799:19;9831:6;9821:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9799:39;;9849:154;9865:1;9856:5;:10;9849:154;;9893:1;9883:11;;;;;:::i;:::-;;;9960:2;9952:5;:10;;;;:::i;:::-;9939:2;:24;;;;:::i;:::-;9926:39;;9909:6;9916;9909:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9989:2;9980:11;;;;;:::i;:::-;;;9849:154;;;10027:6;10013:21;;;;;9319:723;;;;:::o;8844:157::-;8929:4;8968:25;8953:40;;;:11;:40;;;;8946:47;;8844:157;;;:::o;37742:589::-;37886:45;37913:4;37919:2;37923:7;37886:26;:45::i;:::-;37964:1;37948:18;;:4;:18;;;37944:187;;;37983:40;38015:7;37983:31;:40::i;:::-;37944:187;;;38053:2;38045:10;;:4;:10;;;38041:90;;38072:47;38105:4;38111:7;38072:32;:47::i;:::-;38041:90;37944:187;38159:1;38145:16;;:2;:16;;;38141:183;;;38178:45;38215:7;38178:36;:45::i;:::-;38141:183;;;38251:4;38245:10;;:2;:10;;;38241:83;;38272:40;38300:2;38304:7;38272:27;:40::i;:::-;38241:83;38141:183;37742:589;;;:::o;30232:321::-;30362:18;30368:2;30372:7;30362:5;:18::i;:::-;30413:54;30444:1;30448:2;30452:7;30461:5;30413:22;:54::i;:::-;30391:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;30232:321;;;:::o;33632:799::-;33787:4;33808:15;:2;:13;;;:15::i;:::-;33804:620;;;33860:2;33844:36;;;33881:12;:10;:12::i;:::-;33895:4;33901:7;33910:5;33844:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33840:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34103:1;34086:6;:13;:18;34082:272;;;34129:60;;;;;;;;;;:::i;:::-;;;;;;;;34082:272;34304:6;34298:13;34289:6;34285:2;34281:15;34274:38;33840:529;33977:41;;;33967:51;;;:6;:51;;;;33960:58;;;;;33804:620;34408:4;34401:11;;33632:799;;;;;;;:::o;35003:126::-;;;;:::o;39054:164::-;39158:10;:17;;;;39131:15;:24;39147:7;39131:24;;;;;;;;;;;:44;;;;39186:10;39202:7;39186:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39054:164;:::o;39845:988::-;40111:22;40161:1;40136:22;40153:4;40136:16;:22::i;:::-;:26;;;;:::i;:::-;40111:51;;40173:18;40194:17;:26;40212:7;40194:26;;;;;;;;;;;;40173:47;;40341:14;40327:10;:28;40323:328;;40372:19;40394:12;:18;40407:4;40394:18;;;;;;;;;;;;;;;:34;40413:14;40394:34;;;;;;;;;;;;40372:56;;40478:11;40445:12;:18;40458:4;40445:18;;;;;;;;;;;;;;;:30;40464:10;40445:30;;;;;;;;;;;:44;;;;40595:10;40562:17;:30;40580:11;40562:30;;;;;;;;;;;:43;;;;40357:294;40323:328;40747:17;:26;40765:7;40747:26;;;;;;;;;;;40740:33;;;40791:12;:18;40804:4;40791:18;;;;;;;;;;;;;;;:34;40810:14;40791:34;;;;;;;;;;;40784:41;;;39926:907;;39845:988;;:::o;41128:1079::-;41381:22;41426:1;41406:10;:17;;;;:21;;;;:::i;:::-;41381:46;;41438:18;41459:15;:24;41475:7;41459:24;;;;;;;;;;;;41438:45;;41810:19;41832:10;41843:14;41832:26;;;;;;;;:::i;:::-;;;;;;;;;;41810:48;;41896:11;41871:10;41882;41871:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42007:10;41976:15;:28;41992:11;41976:28;;;;;;;;;;;:41;;;;42148:15;:24;42164:7;42148:24;;;;;;;;;;;42141:31;;;42183:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41199:1008;;;41128:1079;:::o;38632:221::-;38717:14;38734:20;38751:2;38734:16;:20::i;:::-;38717:37;;38792:7;38765:12;:16;38778:2;38765:16;;;;;;;;;;;;;;;:24;38782:6;38765:24;;;;;;;;;;;:34;;;;38839:6;38810:17;:26;38828:7;38810:26;;;;;;;;;;;:35;;;;38706:147;38632:221;;:::o;30889:382::-;30983:1;30969:16;;:2;:16;;;;30961:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31042:16;31050:7;31042;:16::i;:::-;31041:17;31033:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31104:45;31133:1;31137:2;31141:7;31104:20;:45::i;:::-;31179:1;31162:9;:13;31172:2;31162:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31210:2;31191:7;:16;31199:7;31191:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31255:7;31251:2;31230:33;;31247:1;31230:33;;;;;;;;;;;;30889:382;;:::o;11844:387::-;11904:4;12112:12;12179:7;12167:20;12159:28;;12222:1;12215:4;:8;12208:15;;;11844:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:744:1:-;131:5;156:81;172:64;229:6;172:64;:::i;:::-;156:81;:::i;:::-;147:90;;257:5;286:6;279:5;272:21;320:4;313:5;309:16;302:23;;346:6;396:3;388:4;380:6;376:17;371:3;367:27;364:36;361:143;;;415:79;;:::i;:::-;361:143;528:1;513:249;538:6;535:1;532:13;513:249;;;606:3;635:48;679:3;667:10;635:48;:::i;:::-;630:3;623:61;713:4;708:3;704:14;697:21;;747:4;742:3;738:14;731:21;;573:189;560:1;557;553:9;548:14;;513:249;;;517:14;137:631;;24:744;;;;;:::o;774:410::-;851:5;876:65;892:48;933:6;892:48;:::i;:::-;876:65;:::i;:::-;867:74;;964:6;957:5;950:21;1002:4;995:5;991:16;1040:3;1031:6;1026:3;1022:16;1019:25;1016:112;;;1047:79;;:::i;:::-;1016:112;1137:41;1171:6;1166:3;1161;1137:41;:::i;:::-;857:327;774:410;;;;;:::o;1190:412::-;1268:5;1293:66;1309:49;1351:6;1309:49;:::i;:::-;1293:66;:::i;:::-;1284:75;;1382:6;1375:5;1368:21;1420:4;1413:5;1409:16;1458:3;1449:6;1444:3;1440:16;1437:25;1434:112;;;1465:79;;:::i;:::-;1434:112;1555:41;1589:6;1584:3;1579;1555:41;:::i;:::-;1274:328;1190:412;;;;;:::o;1608:139::-;1654:5;1692:6;1679:20;1670:29;;1708:33;1735:5;1708:33;:::i;:::-;1608:139;;;;:::o;1753:155::-;1807:5;1845:6;1832:20;1823:29;;1861:41;1896:5;1861:41;:::i;:::-;1753:155;;;;:::o;1931:568::-;2004:8;2014:6;2064:3;2057:4;2049:6;2045:17;2041:27;2031:122;;2072:79;;:::i;:::-;2031:122;2185:6;2172:20;2162:30;;2215:18;2207:6;2204:30;2201:117;;;2237:79;;:::i;:::-;2201:117;2351:4;2343:6;2339:17;2327:29;;2405:3;2397:4;2389:6;2385:17;2375:8;2371:32;2368:41;2365:128;;;2412:79;;:::i;:::-;2365:128;1931:568;;;;;:::o;2521:567::-;2593:8;2603:6;2653:3;2646:4;2638:6;2634:17;2630:27;2620:122;;2661:79;;:::i;:::-;2620:122;2774:6;2761:20;2751:30;;2804:18;2796:6;2793:30;2790:117;;;2826:79;;:::i;:::-;2790:117;2940:4;2932:6;2928:17;2916:29;;2994:3;2986:4;2978:6;2974:17;2964:8;2960:32;2957:41;2954:128;;;3001:79;;:::i;:::-;2954:128;2521:567;;;;;:::o;3111:385::-;3193:5;3242:3;3235:4;3227:6;3223:17;3219:27;3209:122;;3250:79;;:::i;:::-;3209:122;3360:6;3354:13;3385:105;3486:3;3478:6;3471:4;3463:6;3459:17;3385:105;:::i;:::-;3376:114;;3199:297;3111:385;;;;:::o;3502:133::-;3545:5;3583:6;3570:20;3561:29;;3599:30;3623:5;3599:30;:::i;:::-;3502:133;;;;:::o;3641:137::-;3686:5;3724:6;3711:20;3702:29;;3740:32;3766:5;3740:32;:::i;:::-;3641:137;;;;:::o;3784:141::-;3840:5;3871:6;3865:13;3856:22;;3887:32;3913:5;3887:32;:::i;:::-;3784:141;;;;:::o;3944:338::-;3999:5;4048:3;4041:4;4033:6;4029:17;4025:27;4015:122;;4056:79;;:::i;:::-;4015:122;4173:6;4160:20;4198:78;4272:3;4264:6;4257:4;4249:6;4245:17;4198:78;:::i;:::-;4189:87;;4005:277;3944:338;;;;:::o;4302:340::-;4358:5;4407:3;4400:4;4392:6;4388:17;4384:27;4374:122;;4415:79;;:::i;:::-;4374:122;4532:6;4519:20;4557:79;4632:3;4624:6;4617:4;4609:6;4605:17;4557:79;:::i;:::-;4548:88;;4364:278;4302:340;;;;:::o;4648:137::-;4693:5;4731:6;4718:20;4709:29;;4747:32;4773:5;4747:32;:::i;:::-;4648:137;;;;:::o;4791:139::-;4837:5;4875:6;4862:20;4853:29;;4891:33;4918:5;4891:33;:::i;:::-;4791:139;;;;:::o;4936:143::-;4993:5;5024:6;5018:13;5009:22;;5040:33;5067:5;5040:33;:::i;:::-;4936:143;;;;:::o;5085:135::-;5129:5;5167:6;5154:20;5145:29;;5183:31;5208:5;5183:31;:::i;:::-;5085:135;;;;:::o;5226:329::-;5285:6;5334:2;5322:9;5313:7;5309:23;5305:32;5302:119;;;5340:79;;:::i;:::-;5302:119;5460:1;5485:53;5530:7;5521:6;5510:9;5506:22;5485:53;:::i;:::-;5475:63;;5431:117;5226:329;;;;:::o;5561:345::-;5628:6;5677:2;5665:9;5656:7;5652:23;5648:32;5645:119;;;5683:79;;:::i;:::-;5645:119;5803:1;5828:61;5881:7;5872:6;5861:9;5857:22;5828:61;:::i;:::-;5818:71;;5774:125;5561:345;;;;:::o;5912:474::-;5980:6;5988;6037:2;6025:9;6016:7;6012:23;6008:32;6005:119;;;6043:79;;:::i;:::-;6005:119;6163:1;6188:53;6233:7;6224:6;6213:9;6209:22;6188:53;:::i;:::-;6178:63;;6134:117;6290:2;6316:53;6361:7;6352:6;6341:9;6337:22;6316:53;:::i;:::-;6306:63;;6261:118;5912:474;;;;;:::o;6392:619::-;6469:6;6477;6485;6534:2;6522:9;6513:7;6509:23;6505:32;6502:119;;;6540:79;;:::i;:::-;6502:119;6660:1;6685:53;6730:7;6721:6;6710:9;6706:22;6685:53;:::i;:::-;6675:63;;6631:117;6787:2;6813:53;6858:7;6849:6;6838:9;6834:22;6813:53;:::i;:::-;6803:63;;6758:118;6915:2;6941:53;6986:7;6977:6;6966:9;6962:22;6941:53;:::i;:::-;6931:63;;6886:118;6392:619;;;;;:::o;7017:943::-;7112:6;7120;7128;7136;7185:3;7173:9;7164:7;7160:23;7156:33;7153:120;;;7192:79;;:::i;:::-;7153:120;7312:1;7337:53;7382:7;7373:6;7362:9;7358:22;7337:53;:::i;:::-;7327:63;;7283:117;7439:2;7465:53;7510:7;7501:6;7490:9;7486:22;7465:53;:::i;:::-;7455:63;;7410:118;7567:2;7593:53;7638:7;7629:6;7618:9;7614:22;7593:53;:::i;:::-;7583:63;;7538:118;7723:2;7712:9;7708:18;7695:32;7754:18;7746:6;7743:30;7740:117;;;7776:79;;:::i;:::-;7740:117;7881:62;7935:7;7926:6;7915:9;7911:22;7881:62;:::i;:::-;7871:72;;7666:287;7017:943;;;;;;;:::o;7966:468::-;8031:6;8039;8088:2;8076:9;8067:7;8063:23;8059:32;8056:119;;;8094:79;;:::i;:::-;8056:119;8214:1;8239:53;8284:7;8275:6;8264:9;8260:22;8239:53;:::i;:::-;8229:63;;8185:117;8341:2;8367:50;8409:7;8400:6;8389:9;8385:22;8367:50;:::i;:::-;8357:60;;8312:115;7966:468;;;;;:::o;8440:474::-;8508:6;8516;8565:2;8553:9;8544:7;8540:23;8536:32;8533:119;;;8571:79;;:::i;:::-;8533:119;8691:1;8716:53;8761:7;8752:6;8741:9;8737:22;8716:53;:::i;:::-;8706:63;;8662:117;8818:2;8844:53;8889:7;8880:6;8869:9;8865:22;8844:53;:::i;:::-;8834:63;;8789:118;8440:474;;;;;:::o;8920:704::-;9015:6;9023;9031;9080:2;9068:9;9059:7;9055:23;9051:32;9048:119;;;9086:79;;:::i;:::-;9048:119;9234:1;9223:9;9219:17;9206:31;9264:18;9256:6;9253:30;9250:117;;;9286:79;;:::i;:::-;9250:117;9399:80;9471:7;9462:6;9451:9;9447:22;9399:80;:::i;:::-;9381:98;;;;9177:312;9528:2;9554:53;9599:7;9590:6;9579:9;9575:22;9554:53;:::i;:::-;9544:63;;9499:118;8920:704;;;;;:::o;9630:554::-;9725:6;9774:2;9762:9;9753:7;9749:23;9745:32;9742:119;;;9780:79;;:::i;:::-;9742:119;9921:1;9910:9;9906:17;9900:24;9951:18;9943:6;9940:30;9937:117;;;9973:79;;:::i;:::-;9937:117;10078:89;10159:7;10150:6;10139:9;10135:22;10078:89;:::i;:::-;10068:99;;9871:306;9630:554;;;;:::o;10190:323::-;10246:6;10295:2;10283:9;10274:7;10270:23;10266:32;10263:119;;;10301:79;;:::i;:::-;10263:119;10421:1;10446:50;10488:7;10479:6;10468:9;10464:22;10446:50;:::i;:::-;10436:60;;10392:114;10190:323;;;;:::o;10519:327::-;10577:6;10626:2;10614:9;10605:7;10601:23;10597:32;10594:119;;;10632:79;;:::i;:::-;10594:119;10752:1;10777:52;10821:7;10812:6;10801:9;10797:22;10777:52;:::i;:::-;10767:62;;10723:116;10519:327;;;;:::o;10852:349::-;10921:6;10970:2;10958:9;10949:7;10945:23;10941:32;10938:119;;;10976:79;;:::i;:::-;10938:119;11096:1;11121:63;11176:7;11167:6;11156:9;11152:22;11121:63;:::i;:::-;11111:73;;11067:127;10852:349;;;;:::o;11207:509::-;11276:6;11325:2;11313:9;11304:7;11300:23;11296:32;11293:119;;;11331:79;;:::i;:::-;11293:119;11479:1;11468:9;11464:17;11451:31;11509:18;11501:6;11498:30;11495:117;;;11531:79;;:::i;:::-;11495:117;11636:63;11691:7;11682:6;11671:9;11667:22;11636:63;:::i;:::-;11626:73;;11422:287;11207:509;;;;:::o;11722:327::-;11780:6;11829:2;11817:9;11808:7;11804:23;11800:32;11797:119;;;11835:79;;:::i;:::-;11797:119;11955:1;11980:52;12024:7;12015:6;12004:9;12000:22;11980:52;:::i;:::-;11970:62;;11926:116;11722:327;;;;:::o;12055:329::-;12114:6;12163:2;12151:9;12142:7;12138:23;12134:32;12131:119;;;12169:79;;:::i;:::-;12131:119;12289:1;12314:53;12359:7;12350:6;12339:9;12335:22;12314:53;:::i;:::-;12304:63;;12260:117;12055:329;;;;:::o;12390:351::-;12460:6;12509:2;12497:9;12488:7;12484:23;12480:32;12477:119;;;12515:79;;:::i;:::-;12477:119;12635:1;12660:64;12716:7;12707:6;12696:9;12692:22;12660:64;:::i;:::-;12650:74;;12606:128;12390:351;;;;:::o;12747:325::-;12804:6;12853:2;12841:9;12832:7;12828:23;12824:32;12821:119;;;12859:79;;:::i;:::-;12821:119;12979:1;13004:51;13047:7;13038:6;13027:9;13023:22;13004:51;:::i;:::-;12994:61;;12950:115;12747:325;;;;:::o;13078:698::-;13170:6;13178;13186;13235:2;13223:9;13214:7;13210:23;13206:32;13203:119;;;13241:79;;:::i;:::-;13203:119;13361:1;13386:51;13429:7;13420:6;13409:9;13405:22;13386:51;:::i;:::-;13376:61;;13332:115;13514:2;13503:9;13499:18;13486:32;13545:18;13537:6;13534:30;13531:117;;;13567:79;;:::i;:::-;13531:117;13680:79;13751:7;13742:6;13731:9;13727:22;13680:79;:::i;:::-;13662:97;;;;13457:312;13078:698;;;;;:::o;13782:179::-;13851:10;13872:46;13914:3;13906:6;13872:46;:::i;:::-;13950:4;13945:3;13941:14;13927:28;;13782:179;;;;:::o;13967:142::-;14070:32;14096:5;14070:32;:::i;:::-;14065:3;14058:45;13967:142;;:::o;14115:118::-;14202:24;14220:5;14202:24;:::i;:::-;14197:3;14190:37;14115:118;;:::o;14269:732::-;14388:3;14417:54;14465:5;14417:54;:::i;:::-;14487:86;14566:6;14561:3;14487:86;:::i;:::-;14480:93;;14597:56;14647:5;14597:56;:::i;:::-;14676:7;14707:1;14692:284;14717:6;14714:1;14711:13;14692:284;;;14793:6;14787:13;14820:63;14879:3;14864:13;14820:63;:::i;:::-;14813:70;;14906:60;14959:6;14906:60;:::i;:::-;14896:70;;14752:224;14739:1;14736;14732:9;14727:14;;14692:284;;;14696:14;14992:3;14985:10;;14393:608;;;14269:732;;;;:::o;15007:109::-;15088:21;15103:5;15088:21;:::i;:::-;15083:3;15076:34;15007:109;;:::o;15122:360::-;15208:3;15236:38;15268:5;15236:38;:::i;:::-;15290:70;15353:6;15348:3;15290:70;:::i;:::-;15283:77;;15369:52;15414:6;15409:3;15402:4;15395:5;15391:16;15369:52;:::i;:::-;15446:29;15468:6;15446:29;:::i;:::-;15441:3;15437:39;15430:46;;15212:270;15122:360;;;;:::o;15488:161::-;15590:52;15636:5;15590:52;:::i;:::-;15585:3;15578:65;15488:161;;:::o;15655:175::-;15764:59;15817:5;15764:59;:::i;:::-;15759:3;15752:72;15655:175;;:::o;15836:364::-;15924:3;15952:39;15985:5;15952:39;:::i;:::-;16007:71;16071:6;16066:3;16007:71;:::i;:::-;16000:78;;16087:52;16132:6;16127:3;16120:4;16113:5;16109:16;16087:52;:::i;:::-;16164:29;16186:6;16164:29;:::i;:::-;16159:3;16155:39;16148:46;;15928:272;15836:364;;;;:::o;16206:377::-;16312:3;16340:39;16373:5;16340:39;:::i;:::-;16395:89;16477:6;16472:3;16395:89;:::i;:::-;16388:96;;16493:52;16538:6;16533:3;16526:4;16519:5;16515:16;16493:52;:::i;:::-;16570:6;16565:3;16561:16;16554:23;;16316:267;16206:377;;;;:::o;16589:366::-;16731:3;16752:67;16816:2;16811:3;16752:67;:::i;:::-;16745:74;;16828:93;16917:3;16828:93;:::i;:::-;16946:2;16941:3;16937:12;16930:19;;16589:366;;;:::o;16961:::-;17103:3;17124:67;17188:2;17183:3;17124:67;:::i;:::-;17117:74;;17200:93;17289:3;17200:93;:::i;:::-;17318:2;17313:3;17309:12;17302:19;;16961:366;;;:::o;17333:::-;17475:3;17496:67;17560:2;17555:3;17496:67;:::i;:::-;17489:74;;17572:93;17661:3;17572:93;:::i;:::-;17690:2;17685:3;17681:12;17674:19;;17333:366;;;:::o;17705:::-;17847:3;17868:67;17932:2;17927:3;17868:67;:::i;:::-;17861:74;;17944:93;18033:3;17944:93;:::i;:::-;18062:2;18057:3;18053:12;18046:19;;17705:366;;;:::o;18077:::-;18219:3;18240:67;18304:2;18299:3;18240:67;:::i;:::-;18233:74;;18316:93;18405:3;18316:93;:::i;:::-;18434:2;18429:3;18425:12;18418:19;;18077:366;;;:::o;18449:::-;18591:3;18612:67;18676:2;18671:3;18612:67;:::i;:::-;18605:74;;18688:93;18777:3;18688:93;:::i;:::-;18806:2;18801:3;18797:12;18790:19;;18449:366;;;:::o;18821:::-;18963:3;18984:67;19048:2;19043:3;18984:67;:::i;:::-;18977:74;;19060:93;19149:3;19060:93;:::i;:::-;19178:2;19173:3;19169:12;19162:19;;18821:366;;;:::o;19193:::-;19335:3;19356:67;19420:2;19415:3;19356:67;:::i;:::-;19349:74;;19432:93;19521:3;19432:93;:::i;:::-;19550:2;19545:3;19541:12;19534:19;;19193:366;;;:::o;19565:::-;19707:3;19728:67;19792:2;19787:3;19728:67;:::i;:::-;19721:74;;19804:93;19893:3;19804:93;:::i;:::-;19922:2;19917:3;19913:12;19906:19;;19565:366;;;:::o;19937:::-;20079:3;20100:67;20164:2;20159:3;20100:67;:::i;:::-;20093:74;;20176:93;20265:3;20176:93;:::i;:::-;20294:2;20289:3;20285:12;20278:19;;19937:366;;;:::o;20309:::-;20451:3;20472:67;20536:2;20531:3;20472:67;:::i;:::-;20465:74;;20548:93;20637:3;20548:93;:::i;:::-;20666:2;20661:3;20657:12;20650:19;;20309:366;;;:::o;20681:365::-;20823:3;20844:66;20908:1;20903:3;20844:66;:::i;:::-;20837:73;;20919:93;21008:3;20919:93;:::i;:::-;21037:2;21032:3;21028:12;21021:19;;20681:365;;;:::o;21052:366::-;21194:3;21215:67;21279:2;21274:3;21215:67;:::i;:::-;21208:74;;21291:93;21380:3;21291:93;:::i;:::-;21409:2;21404:3;21400:12;21393:19;;21052:366;;;:::o;21424:::-;21566:3;21587:67;21651:2;21646:3;21587:67;:::i;:::-;21580:74;;21663:93;21752:3;21663:93;:::i;:::-;21781:2;21776:3;21772:12;21765:19;;21424:366;;;:::o;21796:::-;21938:3;21959:67;22023:2;22018:3;21959:67;:::i;:::-;21952:74;;22035:93;22124:3;22035:93;:::i;:::-;22153:2;22148:3;22144:12;22137:19;;21796:366;;;:::o;22168:::-;22310:3;22331:67;22395:2;22390:3;22331:67;:::i;:::-;22324:74;;22407:93;22496:3;22407:93;:::i;:::-;22525:2;22520:3;22516:12;22509:19;;22168:366;;;:::o;22540:400::-;22700:3;22721:84;22803:1;22798:3;22721:84;:::i;:::-;22714:91;;22814:93;22903:3;22814:93;:::i;:::-;22932:1;22927:3;22923:11;22916:18;;22540:400;;;:::o;22946:366::-;23088:3;23109:67;23173:2;23168:3;23109:67;:::i;:::-;23102:74;;23185:93;23274:3;23185:93;:::i;:::-;23303:2;23298:3;23294:12;23287:19;;22946:366;;;:::o;23318:::-;23460:3;23481:67;23545:2;23540:3;23481:67;:::i;:::-;23474:74;;23557:93;23646:3;23557:93;:::i;:::-;23675:2;23670:3;23666:12;23659:19;;23318:366;;;:::o;23690:::-;23832:3;23853:67;23917:2;23912:3;23853:67;:::i;:::-;23846:74;;23929:93;24018:3;23929:93;:::i;:::-;24047:2;24042:3;24038:12;24031:19;;23690:366;;;:::o;24062:::-;24204:3;24225:67;24289:2;24284:3;24225:67;:::i;:::-;24218:74;;24301:93;24390:3;24301:93;:::i;:::-;24419:2;24414:3;24410:12;24403:19;;24062:366;;;:::o;24434:::-;24576:3;24597:67;24661:2;24656:3;24597:67;:::i;:::-;24590:74;;24673:93;24762:3;24673:93;:::i;:::-;24791:2;24786:3;24782:12;24775:19;;24434:366;;;:::o;24806:::-;24948:3;24969:67;25033:2;25028:3;24969:67;:::i;:::-;24962:74;;25045:93;25134:3;25045:93;:::i;:::-;25163:2;25158:3;25154:12;25147:19;;24806:366;;;:::o;25178:398::-;25337:3;25358:83;25439:1;25434:3;25358:83;:::i;:::-;25351:90;;25450:93;25539:3;25450:93;:::i;:::-;25568:1;25563:3;25559:11;25552:18;;25178:398;;;:::o;25582:366::-;25724:3;25745:67;25809:2;25804:3;25745:67;:::i;:::-;25738:74;;25821:93;25910:3;25821:93;:::i;:::-;25939:2;25934:3;25930:12;25923:19;;25582:366;;;:::o;25954:::-;26096:3;26117:67;26181:2;26176:3;26117:67;:::i;:::-;26110:74;;26193:93;26282:3;26193:93;:::i;:::-;26311:2;26306:3;26302:12;26295:19;;25954:366;;;:::o;26326:::-;26468:3;26489:67;26553:2;26548:3;26489:67;:::i;:::-;26482:74;;26565:93;26654:3;26565:93;:::i;:::-;26683:2;26678:3;26674:12;26667:19;;26326:366;;;:::o;26698:115::-;26783:23;26800:5;26783:23;:::i;:::-;26778:3;26771:36;26698:115;;:::o;26819:129::-;26905:36;26935:5;26905:36;:::i;:::-;26900:3;26893:49;26819:129;;:::o;26954:108::-;27031:24;27049:5;27031:24;:::i;:::-;27026:3;27019:37;26954:108;;:::o;27068:118::-;27155:24;27173:5;27155:24;:::i;:::-;27150:3;27143:37;27068:118;;:::o;27192:701::-;27473:3;27495:95;27586:3;27577:6;27495:95;:::i;:::-;27488:102;;27607:95;27698:3;27689:6;27607:95;:::i;:::-;27600:102;;27719:148;27863:3;27719:148;:::i;:::-;27712:155;;27884:3;27877:10;;27192:701;;;;;:::o;27899:379::-;28083:3;28105:147;28248:3;28105:147;:::i;:::-;28098:154;;28269:3;28262:10;;27899:379;;;:::o;28284:222::-;28377:4;28415:2;28404:9;28400:18;28392:26;;28428:71;28496:1;28485:9;28481:17;28472:6;28428:71;:::i;:::-;28284:222;;;;:::o;28512:254::-;28621:4;28659:2;28648:9;28644:18;28636:26;;28672:87;28756:1;28745:9;28741:17;28732:6;28672:87;:::i;:::-;28512:254;;;;:::o;28772:640::-;28967:4;29005:3;28994:9;28990:19;28982:27;;29019:71;29087:1;29076:9;29072:17;29063:6;29019:71;:::i;:::-;29100:72;29168:2;29157:9;29153:18;29144:6;29100:72;:::i;:::-;29182;29250:2;29239:9;29235:18;29226:6;29182:72;:::i;:::-;29301:9;29295:4;29291:20;29286:2;29275:9;29271:18;29264:48;29329:76;29400:4;29391:6;29329:76;:::i;:::-;29321:84;;28772:640;;;;;;;:::o;29418:373::-;29561:4;29599:2;29588:9;29584:18;29576:26;;29648:9;29642:4;29638:20;29634:1;29623:9;29619:17;29612:47;29676:108;29779:4;29770:6;29676:108;:::i;:::-;29668:116;;29418:373;;;;:::o;29797:210::-;29884:4;29922:2;29911:9;29907:18;29899:26;;29935:65;29997:1;29986:9;29982:17;29973:6;29935:65;:::i;:::-;29797:210;;;;:::o;30013:252::-;30121:4;30159:2;30148:9;30144:18;30136:26;;30172:86;30255:1;30244:9;30240:17;30231:6;30172:86;:::i;:::-;30013:252;;;;:::o;30271:266::-;30386:4;30424:2;30413:9;30409:18;30401:26;;30437:93;30527:1;30516:9;30512:17;30503:6;30437:93;:::i;:::-;30271:266;;;;:::o;30543:313::-;30656:4;30694:2;30683:9;30679:18;30671:26;;30743:9;30737:4;30733:20;30729:1;30718:9;30714:17;30707:47;30771:78;30844:4;30835:6;30771:78;:::i;:::-;30763:86;;30543:313;;;;:::o;30862:419::-;31028:4;31066:2;31055:9;31051:18;31043:26;;31115:9;31109:4;31105:20;31101:1;31090:9;31086:17;31079:47;31143:131;31269:4;31143:131;:::i;:::-;31135:139;;30862:419;;;:::o;31287:::-;31453:4;31491:2;31480:9;31476:18;31468:26;;31540:9;31534:4;31530:20;31526:1;31515:9;31511:17;31504:47;31568:131;31694:4;31568:131;:::i;:::-;31560:139;;31287:419;;;:::o;31712:::-;31878:4;31916:2;31905:9;31901:18;31893:26;;31965:9;31959:4;31955:20;31951:1;31940:9;31936:17;31929:47;31993:131;32119:4;31993:131;:::i;:::-;31985:139;;31712:419;;;:::o;32137:::-;32303:4;32341:2;32330:9;32326:18;32318:26;;32390:9;32384:4;32380:20;32376:1;32365:9;32361:17;32354:47;32418:131;32544:4;32418:131;:::i;:::-;32410:139;;32137:419;;;:::o;32562:::-;32728:4;32766:2;32755:9;32751:18;32743:26;;32815:9;32809:4;32805:20;32801:1;32790:9;32786:17;32779:47;32843:131;32969:4;32843:131;:::i;:::-;32835:139;;32562:419;;;:::o;32987:::-;33153:4;33191:2;33180:9;33176:18;33168:26;;33240:9;33234:4;33230:20;33226:1;33215:9;33211:17;33204:47;33268:131;33394:4;33268:131;:::i;:::-;33260:139;;32987:419;;;:::o;33412:::-;33578:4;33616:2;33605:9;33601:18;33593:26;;33665:9;33659:4;33655:20;33651:1;33640:9;33636:17;33629:47;33693:131;33819:4;33693:131;:::i;:::-;33685:139;;33412:419;;;:::o;33837:::-;34003:4;34041:2;34030:9;34026:18;34018:26;;34090:9;34084:4;34080:20;34076:1;34065:9;34061:17;34054:47;34118:131;34244:4;34118:131;:::i;:::-;34110:139;;33837:419;;;:::o;34262:::-;34428:4;34466:2;34455:9;34451:18;34443:26;;34515:9;34509:4;34505:20;34501:1;34490:9;34486:17;34479:47;34543:131;34669:4;34543:131;:::i;:::-;34535:139;;34262:419;;;:::o;34687:::-;34853:4;34891:2;34880:9;34876:18;34868:26;;34940:9;34934:4;34930:20;34926:1;34915:9;34911:17;34904:47;34968:131;35094:4;34968:131;:::i;:::-;34960:139;;34687:419;;;:::o;35112:::-;35278:4;35316:2;35305:9;35301:18;35293:26;;35365:9;35359:4;35355:20;35351:1;35340:9;35336:17;35329:47;35393:131;35519:4;35393:131;:::i;:::-;35385:139;;35112:419;;;:::o;35537:::-;35703:4;35741:2;35730:9;35726:18;35718:26;;35790:9;35784:4;35780:20;35776:1;35765:9;35761:17;35754:47;35818:131;35944:4;35818:131;:::i;:::-;35810:139;;35537:419;;;:::o;35962:::-;36128:4;36166:2;36155:9;36151:18;36143:26;;36215:9;36209:4;36205:20;36201:1;36190:9;36186:17;36179:47;36243:131;36369:4;36243:131;:::i;:::-;36235:139;;35962:419;;;:::o;36387:::-;36553:4;36591:2;36580:9;36576:18;36568:26;;36640:9;36634:4;36630:20;36626:1;36615:9;36611:17;36604:47;36668:131;36794:4;36668:131;:::i;:::-;36660:139;;36387:419;;;:::o;36812:::-;36978:4;37016:2;37005:9;37001:18;36993:26;;37065:9;37059:4;37055:20;37051:1;37040:9;37036:17;37029:47;37093:131;37219:4;37093:131;:::i;:::-;37085:139;;36812:419;;;:::o;37237:::-;37403:4;37441:2;37430:9;37426:18;37418:26;;37490:9;37484:4;37480:20;37476:1;37465:9;37461:17;37454:47;37518:131;37644:4;37518:131;:::i;:::-;37510:139;;37237:419;;;:::o;37662:::-;37828:4;37866:2;37855:9;37851:18;37843:26;;37915:9;37909:4;37905:20;37901:1;37890:9;37886:17;37879:47;37943:131;38069:4;37943:131;:::i;:::-;37935:139;;37662:419;;;:::o;38087:::-;38253:4;38291:2;38280:9;38276:18;38268:26;;38340:9;38334:4;38330:20;38326:1;38315:9;38311:17;38304:47;38368:131;38494:4;38368:131;:::i;:::-;38360:139;;38087:419;;;:::o;38512:::-;38678:4;38716:2;38705:9;38701:18;38693:26;;38765:9;38759:4;38755:20;38751:1;38740:9;38736:17;38729:47;38793:131;38919:4;38793:131;:::i;:::-;38785:139;;38512:419;;;:::o;38937:::-;39103:4;39141:2;39130:9;39126:18;39118:26;;39190:9;39184:4;39180:20;39176:1;39165:9;39161:17;39154:47;39218:131;39344:4;39218:131;:::i;:::-;39210:139;;38937:419;;;:::o;39362:::-;39528:4;39566:2;39555:9;39551:18;39543:26;;39615:9;39609:4;39605:20;39601:1;39590:9;39586:17;39579:47;39643:131;39769:4;39643:131;:::i;:::-;39635:139;;39362:419;;;:::o;39787:::-;39953:4;39991:2;39980:9;39976:18;39968:26;;40040:9;40034:4;40030:20;40026:1;40015:9;40011:17;40004:47;40068:131;40194:4;40068:131;:::i;:::-;40060:139;;39787:419;;;:::o;40212:::-;40378:4;40416:2;40405:9;40401:18;40393:26;;40465:9;40459:4;40455:20;40451:1;40440:9;40436:17;40429:47;40493:131;40619:4;40493:131;:::i;:::-;40485:139;;40212:419;;;:::o;40637:::-;40803:4;40841:2;40830:9;40826:18;40818:26;;40890:9;40884:4;40880:20;40876:1;40865:9;40861:17;40854:47;40918:131;41044:4;40918:131;:::i;:::-;40910:139;;40637:419;;;:::o;41062:::-;41228:4;41266:2;41255:9;41251:18;41243:26;;41315:9;41309:4;41305:20;41301:1;41290:9;41286:17;41279:47;41343:131;41469:4;41343:131;:::i;:::-;41335:139;;41062:419;;;:::o;41487:218::-;41578:4;41616:2;41605:9;41601:18;41593:26;;41629:69;41695:1;41684:9;41680:17;41671:6;41629:69;:::i;:::-;41487:218;;;;:::o;41711:330::-;41831:4;41869:2;41858:9;41854:18;41846:26;;41882:70;41949:1;41938:9;41934:17;41925:6;41882:70;:::i;:::-;41962:72;42030:2;42019:9;42015:18;42006:6;41962:72;:::i;:::-;41711:330;;;;;:::o;42047:222::-;42140:4;42178:2;42167:9;42163:18;42155:26;;42191:71;42259:1;42248:9;42244:17;42235:6;42191:71;:::i;:::-;42047:222;;;;:::o;42275:129::-;42309:6;42336:20;;:::i;:::-;42326:30;;42365:33;42393:4;42385:6;42365:33;:::i;:::-;42275:129;;;:::o;42410:75::-;42443:6;42476:2;42470:9;42460:19;;42410:75;:::o;42491:311::-;42568:4;42658:18;42650:6;42647:30;42644:56;;;42680:18;;:::i;:::-;42644:56;42730:4;42722:6;42718:17;42710:25;;42790:4;42784;42780:15;42772:23;;42491:311;;;:::o;42808:307::-;42869:4;42959:18;42951:6;42948:30;42945:56;;;42981:18;;:::i;:::-;42945:56;43019:29;43041:6;43019:29;:::i;:::-;43011:37;;43103:4;43097;43093:15;43085:23;;42808:307;;;:::o;43121:308::-;43183:4;43273:18;43265:6;43262:30;43259:56;;;43295:18;;:::i;:::-;43259:56;43333:29;43355:6;43333:29;:::i;:::-;43325:37;;43417:4;43411;43407:15;43399:23;;43121:308;;;:::o;43435:132::-;43502:4;43525:3;43517:11;;43555:4;43550:3;43546:14;43538:22;;43435:132;;;:::o;43573:114::-;43640:6;43674:5;43668:12;43658:22;;43573:114;;;:::o;43693:98::-;43744:6;43778:5;43772:12;43762:22;;43693:98;;;:::o;43797:99::-;43849:6;43883:5;43877:12;43867:22;;43797:99;;;:::o;43902:113::-;43972:4;44004;43999:3;43995:14;43987:22;;43902:113;;;:::o;44021:184::-;44120:11;44154:6;44149:3;44142:19;44194:4;44189:3;44185:14;44170:29;;44021:184;;;;:::o;44211:168::-;44294:11;44328:6;44323:3;44316:19;44368:4;44363:3;44359:14;44344:29;;44211:168;;;;:::o;44385:147::-;44486:11;44523:3;44508:18;;44385:147;;;;:::o;44538:169::-;44622:11;44656:6;44651:3;44644:19;44696:4;44691:3;44687:14;44672:29;;44538:169;;;;:::o;44713:148::-;44815:11;44852:3;44837:18;;44713:148;;;;:::o;44867:305::-;44907:3;44926:20;44944:1;44926:20;:::i;:::-;44921:25;;44960:20;44978:1;44960:20;:::i;:::-;44955:25;;45114:1;45046:66;45042:74;45039:1;45036:81;45033:107;;;45120:18;;:::i;:::-;45033:107;45164:1;45161;45157:9;45150:16;;44867:305;;;;:::o;45178:237::-;45216:3;45235:18;45251:1;45235:18;:::i;:::-;45230:23;;45267:18;45283:1;45267:18;:::i;:::-;45262:23;;45357:1;45351:4;45347:12;45344:1;45341:19;45338:45;;;45363:18;;:::i;:::-;45338:45;45407:1;45404;45400:9;45393:16;;45178:237;;;;:::o;45421:185::-;45461:1;45478:20;45496:1;45478:20;:::i;:::-;45473:25;;45512:20;45530:1;45512:20;:::i;:::-;45507:25;;45551:1;45541:35;;45556:18;;:::i;:::-;45541:35;45598:1;45595;45591:9;45586:14;;45421:185;;;;:::o;45612:348::-;45652:7;45675:20;45693:1;45675:20;:::i;:::-;45670:25;;45709:20;45727:1;45709:20;:::i;:::-;45704:25;;45897:1;45829:66;45825:74;45822:1;45819:81;45814:1;45807:9;45800:17;45796:105;45793:131;;;45904:18;;:::i;:::-;45793:131;45952:1;45949;45945:9;45934:20;;45612:348;;;;:::o;45966:191::-;46006:4;46026:20;46044:1;46026:20;:::i;:::-;46021:25;;46060:20;46078:1;46060:20;:::i;:::-;46055:25;;46099:1;46096;46093:8;46090:34;;;46104:18;;:::i;:::-;46090:34;46149:1;46146;46142:9;46134:17;;45966:191;;;;:::o;46163:96::-;46200:7;46229:24;46247:5;46229:24;:::i;:::-;46218:35;;46163:96;;;:::o;46265:104::-;46310:7;46339:24;46357:5;46339:24;:::i;:::-;46328:35;;46265:104;;;:::o;46375:90::-;46409:7;46452:5;46445:13;46438:21;46427:32;;46375:90;;;:::o;46471:149::-;46507:7;46547:66;46540:5;46536:78;46525:89;;46471:149;;;:::o;46626:89::-;46662:7;46702:6;46695:5;46691:18;46680:29;;46626:89;;;:::o;46721:126::-;46758:7;46798:42;46791:5;46787:54;46776:65;;46721:126;;;:::o;46853:77::-;46890:7;46919:5;46908:16;;46853:77;;;:::o;46936:86::-;46971:7;47011:4;47004:5;47000:16;46989:27;;46936:86;;;:::o;47028:141::-;47093:9;47126:37;47157:5;47126:37;:::i;:::-;47113:50;;47028:141;;;:::o;47175:148::-;47247:9;47280:37;47311:5;47280:37;:::i;:::-;47267:50;;47175:148;;;:::o;47329:126::-;47379:9;47412:37;47443:5;47412:37;:::i;:::-;47399:50;;47329:126;;;:::o;47461:113::-;47511:9;47544:24;47562:5;47544:24;:::i;:::-;47531:37;;47461:113;;;:::o;47580:111::-;47629:9;47662:23;47679:5;47662:23;:::i;:::-;47649:36;;47580:111;;;:::o;47697:154::-;47781:6;47776:3;47771;47758:30;47843:1;47834:6;47829:3;47825:16;47818:27;47697:154;;;:::o;47857:307::-;47925:1;47935:113;47949:6;47946:1;47943:13;47935:113;;;48034:1;48029:3;48025:11;48019:18;48015:1;48010:3;48006:11;47999:39;47971:2;47968:1;47964:10;47959:15;;47935:113;;;48066:6;48063:1;48060:13;48057:101;;;48146:1;48137:6;48132:3;48128:16;48121:27;48057:101;47906:258;47857:307;;;:::o;48170:320::-;48214:6;48251:1;48245:4;48241:12;48231:22;;48298:1;48292:4;48288:12;48319:18;48309:81;;48375:4;48367:6;48363:17;48353:27;;48309:81;48437:2;48429:6;48426:14;48406:18;48403:38;48400:84;;;48456:18;;:::i;:::-;48400:84;48221:269;48170:320;;;:::o;48496:281::-;48579:27;48601:4;48579:27;:::i;:::-;48571:6;48567:40;48709:6;48697:10;48694:22;48673:18;48661:10;48658:34;48655:62;48652:88;;;48720:18;;:::i;:::-;48652:88;48760:10;48756:2;48749:22;48539:238;48496:281;;:::o;48783:233::-;48822:3;48845:24;48863:5;48845:24;:::i;:::-;48836:33;;48891:66;48884:5;48881:77;48878:103;;;48961:18;;:::i;:::-;48878:103;49008:1;49001:5;48997:13;48990:20;;48783:233;;;:::o;49022:176::-;49054:1;49071:20;49089:1;49071:20;:::i;:::-;49066:25;;49105:20;49123:1;49105:20;:::i;:::-;49100:25;;49144:1;49134:35;;49149:18;;:::i;:::-;49134:35;49190:1;49187;49183:9;49178:14;;49022:176;;;;:::o;49204:180::-;49252:77;49249:1;49242:88;49349:4;49346:1;49339:15;49373:4;49370:1;49363:15;49390:180;49438:77;49435:1;49428:88;49535:4;49532:1;49525:15;49559:4;49556:1;49549:15;49576:180;49624:77;49621:1;49614:88;49721:4;49718:1;49711:15;49745:4;49742:1;49735:15;49762:180;49810:77;49807:1;49800:88;49907:4;49904:1;49897:15;49931:4;49928:1;49921:15;49948:180;49996:77;49993:1;49986:88;50093:4;50090:1;50083:15;50117:4;50114:1;50107:15;50134:180;50182:77;50179:1;50172:88;50279:4;50276:1;50269:15;50303:4;50300:1;50293:15;50320:117;50429:1;50426;50419:12;50443:117;50552:1;50549;50542:12;50566:117;50675:1;50672;50665:12;50689:117;50798:1;50795;50788:12;50812:117;50921:1;50918;50911:12;50935:117;51044:1;51041;51034:12;51058:102;51099:6;51150:2;51146:7;51141:2;51134:5;51130:14;51126:28;51116:38;;51058:102;;;:::o;51166:164::-;51306:16;51302:1;51294:6;51290:14;51283:40;51166:164;:::o;51336:230::-;51476:34;51472:1;51464:6;51460:14;51453:58;51545:13;51540:2;51532:6;51528:15;51521:38;51336:230;:::o;51572:237::-;51712:34;51708:1;51700:6;51696:14;51689:58;51781:20;51776:2;51768:6;51764:15;51757:45;51572:237;:::o;51815:225::-;51955:34;51951:1;51943:6;51939:14;51932:58;52024:8;52019:2;52011:6;52007:15;52000:33;51815:225;:::o;52046:178::-;52186:30;52182:1;52174:6;52170:14;52163:54;52046:178;:::o;52230:223::-;52370:34;52366:1;52358:6;52354:14;52347:58;52439:6;52434:2;52426:6;52422:15;52415:31;52230:223;:::o;52459:175::-;52599:27;52595:1;52587:6;52583:14;52576:51;52459:175;:::o;52640:231::-;52780:34;52776:1;52768:6;52764:14;52757:58;52849:14;52844:2;52836:6;52832:15;52825:39;52640:231;:::o;52877:243::-;53017:34;53013:1;53005:6;53001:14;52994:58;53086:26;53081:2;53073:6;53069:15;53062:51;52877:243;:::o;53126:229::-;53266:34;53262:1;53254:6;53250:14;53243:58;53335:12;53330:2;53322:6;53318:15;53311:37;53126:229;:::o;53361:228::-;53501:34;53497:1;53489:6;53485:14;53478:58;53570:11;53565:2;53557:6;53553:15;53546:36;53361:228;:::o;53595:152::-;53735:4;53731:1;53723:6;53719:14;53712:28;53595:152;:::o;53753:179::-;53893:31;53889:1;53881:6;53877:14;53870:55;53753:179;:::o;53938:169::-;54078:21;54074:1;54066:6;54062:14;54055:45;53938:169;:::o;54113:182::-;54253:34;54249:1;54241:6;54237:14;54230:58;54113:182;:::o;54301:231::-;54441:34;54437:1;54429:6;54425:14;54418:58;54510:14;54505:2;54497:6;54493:15;54486:39;54301:231;:::o;54538:155::-;54678:7;54674:1;54666:6;54662:14;54655:31;54538:155;:::o;54699:182::-;54839:34;54835:1;54827:6;54823:14;54816:58;54699:182;:::o;54887:228::-;55027:34;55023:1;55015:6;55011:14;55004:58;55096:11;55091:2;55083:6;55079:15;55072:36;54887:228;:::o;55121:234::-;55261:34;55257:1;55249:6;55245:14;55238:58;55330:17;55325:2;55317:6;55313:15;55306:42;55121:234;:::o;55361:165::-;55501:17;55497:1;55489:6;55485:14;55478:41;55361:165;:::o;55532:220::-;55672:34;55668:1;55660:6;55656:14;55649:58;55741:3;55736:2;55728:6;55724:15;55717:28;55532:220;:::o;55758:221::-;55898:34;55894:1;55886:6;55882:14;55875:58;55967:4;55962:2;55954:6;55950:15;55943:29;55758:221;:::o;55985:114::-;;:::o;56105:236::-;56245:34;56241:1;56233:6;56229:14;56222:58;56314:19;56309:2;56301:6;56297:15;56290:44;56105:236;:::o;56347:231::-;56487:34;56483:1;56475:6;56471:14;56464:58;56556:14;56551:2;56543:6;56539:15;56532:39;56347:231;:::o;56584:167::-;56724:19;56720:1;56712:6;56708:14;56701:43;56584:167;:::o;56757:122::-;56830:24;56848:5;56830:24;:::i;:::-;56823:5;56820:35;56810:63;;56869:1;56866;56859:12;56810:63;56757:122;:::o;56885:138::-;56966:32;56992:5;56966:32;:::i;:::-;56959:5;56956:43;56946:71;;57013:1;57010;57003:12;56946:71;56885:138;:::o;57029:116::-;57099:21;57114:5;57099:21;:::i;:::-;57092:5;57089:32;57079:60;;57135:1;57132;57125:12;57079:60;57029:116;:::o;57151:120::-;57223:23;57240:5;57223:23;:::i;:::-;57216:5;57213:34;57203:62;;57261:1;57258;57251:12;57203:62;57151:120;:::o;57277:::-;57349:23;57366:5;57349:23;:::i;:::-;57342:5;57339:34;57329:62;;57387:1;57384;57377:12;57329:62;57277:120;:::o;57403:122::-;57476:24;57494:5;57476:24;:::i;:::-;57469:5;57466:35;57456:63;;57515:1;57512;57505:12;57456:63;57403:122;:::o;57531:118::-;57602:22;57618:5;57602:22;:::i;:::-;57595:5;57592:33;57582:61;;57639:1;57636;57629:12;57582:61;57531:118;:::o

Swarm Source

ipfs://2ad5de0a408108f70e8d4999e02e4aefad1ca964e4034bcef677260489a5dcf5
Loading