ERC-721
Overview
Max Total Supply
4,094 Anthills
Holders
1,371
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 AnthillsLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AntNest
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-29 */ // SPDX-License-Identifier: MIT 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 `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (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/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (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/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (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`. * * 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; /** * @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 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (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/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (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/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (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() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: contracts/AntNest.sol pragma solidity ^0.8.0; interface IERC721A is IERC721, IERC721Metadata { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); } contract ERC721A is Context, ERC165, IERC721A { using Address for address; using Strings for uint256; // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @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 override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); 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 override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner) if(!isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _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 { _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 { _transfer(from, to, tokenId); if (to.isContract()) if(!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex < end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } error InvalidQueryRange(); /** * @title ERC721A Queryable * @dev ERC721A subclass with convenience query functions. */ abstract contract ERC721AQueryable is ERC721A { /** * @dev Returns the `TokenOwnership` struct at `tokenId` without reverting. * * If the `tokenId` is out of bounds: * - `addr` = `address(0)` * - `startTimestamp` = `0` * - `burned` = `false` * * If the `tokenId` is burned: * - `addr` = `<Address of owner before token was burned>` * - `startTimestamp` = `<Timestamp when token was burned>` * - `burned = `true` * * Otherwise: * - `addr` = `<Address of owner>` * - `startTimestamp` = `<Timestamp of start of ownership>` * - `burned = `false` */ function explicitOwnershipOf(uint256 tokenId) public view returns (TokenOwnership memory) { TokenOwnership memory ownership; if (tokenId < _startTokenId() || tokenId >= _currentIndex) { return ownership; } ownership = _ownerships[tokenId]; if (ownership.burned) { return ownership; } return _ownershipOf(tokenId); } /** * @dev Returns an array of `TokenOwnership` structs at `tokenIds` in order. * See {ERC721AQueryable-explicitOwnershipOf} */ function explicitOwnershipsOf(uint256[] memory tokenIds) external view returns (TokenOwnership[] memory) { unchecked { uint256 tokenIdsLength = tokenIds.length; TokenOwnership[] memory ownerships = new TokenOwnership[]( tokenIdsLength ); for (uint256 i; i != tokenIdsLength; ++i) { ownerships[i] = explicitOwnershipOf(tokenIds[i]); } return ownerships; } } /** * @dev Returns an array of token IDs owned by `owner`, * in the range [`start`, `stop`) * (i.e. `start <= tokenId < stop`). * * This function allows for tokens to be queried if the collection * grows too big for a single call of {ERC721AQueryable-tokensOfOwner}. * * Requirements: * * - `start` < `stop` */ function tokensOfOwnerIn( address owner, uint256 start, uint256 stop ) external view returns (uint256[] memory) { unchecked { if (start >= stop) revert InvalidQueryRange(); uint256 tokenIdsIdx; uint256 stopLimit = _currentIndex; // Set `start = max(start, _startTokenId())`. if (start < _startTokenId()) { start = _startTokenId(); } // Set `stop = min(stop, _currentIndex)`. if (stop > stopLimit) { stop = stopLimit; } uint256 tokenIdsMaxLength = balanceOf(owner); // Set `tokenIdsMaxLength = min(balanceOf(owner), stop - start)`, // to cater for cases where `balanceOf(owner)` is too big. if (start < stop) { uint256 rangeLength = stop - start; if (rangeLength < tokenIdsMaxLength) { tokenIdsMaxLength = rangeLength; } } else { tokenIdsMaxLength = 0; } uint256[] memory tokenIds = new uint256[](tokenIdsMaxLength); if (tokenIdsMaxLength == 0) { return tokenIds; } // We need to call `explicitOwnershipOf(start)`, // because the slot at `start` may not be initialized. TokenOwnership memory ownership = explicitOwnershipOf(start); address currOwnershipAddr; // If the starting slot exists (i.e. not burned), initialize `currOwnershipAddr`. // `ownership.address` will not be zero, as `start` is clamped to the valid token ID range. if (!ownership.burned) { currOwnershipAddr = ownership.addr; } for ( uint256 i = start; i != stop && tokenIdsIdx != tokenIdsMaxLength; ++i ) { ownership = _ownerships[i]; if (ownership.burned) { continue; } if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { tokenIds[tokenIdsIdx++] = i; } } // Downsize the array to fit. assembly { mstore(tokenIds, tokenIdsIdx) } return tokenIds; } } /** * @dev Returns an array of token IDs owned by `owner`. * * This function scans the ownership mapping and is O(totalSupply) in complexity. * It is meant to be called off-chain. * * See {ERC721AQueryable-tokensOfOwnerIn} for splitting the scan into * multiple smaller scans if the collection is large enough to cause * an out-of-gas error (10K pfp collections should be fine). */ function tokensOfOwner(address owner) external view returns (uint256[] memory) { unchecked { uint256 tokenIdsIdx; address currOwnershipAddr; uint256 tokenIdsLength = balanceOf(owner); uint256[] memory tokenIds = new uint256[](tokenIdsLength); TokenOwnership memory ownership; for ( uint256 i = _startTokenId(); tokenIdsIdx != tokenIdsLength; ++i ) { ownership = _ownerships[i]; if (ownership.burned) { continue; } if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { tokenIds[tokenIdsIdx++] = i; } } return tokenIds; } } } interface IAuth { function verifyA(address _address,string memory _sign) external view returns (bool); } contract AntNest is ERC721AQueryable,Ownable { using Strings for uint256; bool public active = true; bool public open = false; uint256 public openTime = 1664625600; uint256 public PublicTime = 1664643600; string baseURI; string public baseExtension = ".json"; string public NotRevealedUri = "https://cdn.antwars.xyz/meta/mh544853b692ca0061eb0d5526e7c/anthills.json"; uint256 public constant MAX_SUPPLY = 7777; uint256 public constant FREE_SUPPLY = 4000; uint256 public per_costMint = 5 ; uint256 public freeMint = 2 ; uint256 public price = 0.012 ether; IAuth private Auth; address AuthAddress = 0x0d8f9Ca3F884AC5D08928d37A1d8bcAA9fD6eCaD; uint256 public freeQuantity; uint256 public costQuantity; mapping(address => uint256) private _freeQuantity; mapping(uint256 => string) private _tokenURIs; address public OD = 0xE560AEB54B88B58d57D47fb8f3Cb4AF1646c86af; event CostLog(address indexed _from,uint256 indexed _amount, uint256 indexed _payment); constructor() ERC721A("Anthills", "") { Auth = IAuth(AuthAddress); setNotRevealedURI(NotRevealedUri); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (open == false) { return NotRevealedUri; } string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); if (bytes(base).length == 0) { return _tokenURI; } if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return string(abi.encodePacked(base, tokenId.toString(), baseExtension)); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { NotRevealedUri = _notRevealedURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setAuth(address _address) external onlyOwner { Auth = IAuth(_address); } function flipOpen() public onlyOwner { open = !open; } function flipActive() public onlyOwner { active = !active; } function costMinting(uint256 _amount) external payable{ require(active && block.timestamp >= openTime); require(_amount <= CostQuantity() && _amount <= per_costMint); require(_amount * price <= msg.value,"Not enough ether sent"); costQuantity += _amount; _safeMint(msg.sender, _amount); emit CostLog(msg.sender, _amount, msg.value); } function freeMinting(uint256 _amount, string memory _sign) external { require(active); require((Auth.verifyA(msg.sender, _sign) == true && block.timestamp >= openTime) || block.timestamp >= PublicTime,"Don't have permission to mint"); require(_amount <= FreeQuantity() && _amount <= freeMint, "Insufficient quantity"); _freeQuantity[msg.sender] += _amount; require(_freeQuantity[msg.sender] <= freeMint,"Exceeds max free mint"); freeQuantity += _amount; _safeMint(msg.sender, _amount); } function getTime() public view returns(uint256){ return block.timestamp; } function setOpenTimes(uint256 _openTime) public onlyOwner { openTime = _openTime; } function setPublicTime(uint256 _publicTime) public onlyOwner { PublicTime = _publicTime; } function setFreeMint(uint256 _amount) public onlyOwner { freeMint = _amount; } function setPrice(uint256 _amount) public onlyOwner { price = _amount; } function setPerCostMint(uint256 _amount) public onlyOwner { per_costMint = _amount; } function getFreeQuantity(address _to) public view returns(uint256){ return _freeQuantity[_to]; } function FreeQuantity() public view returns(uint256){ return FREE_SUPPLY - freeQuantity; } function CostQuantity() public view returns(uint256){ return MAX_SUPPLY - FREE_SUPPLY - costQuantity; } function setOD(address _address) public onlyOwner { OD = _address; } function withdraw() public onlyOwner { (bool success, ) = payable(OD).call{value: address(this).balance}(''); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"InvalidQueryRange","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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":"_from","type":"address"},{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_payment","type":"uint256"}],"name":"CostLog","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":"CostQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FREE_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FreeQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NotRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PublicTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"costMinting","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"costQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"explicitOwnershipOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct IERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"explicitOwnershipsOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct IERC721A.TokenOwnership[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"string","name":"_sign","type":"string"}],"name":"freeMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"getFreeQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"open","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"per_costMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setAuth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setOD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_openTime","type":"uint256"}],"name":"setOpenTimes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setPerCostMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicTime","type":"uint256"}],"name":"setPublicTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"stop","type":"uint256"}],"name":"tokensOfOwnerIn","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001600860146101000a81548160ff0219169083151502179055506000600860156101000a81548160ff0219169083151502179055506363382bc06009556363387210600a556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000979291906200050d565b506040518060800160405280604881526020016200521860489139600d9080519060200190620000c99291906200050d565b506005600e556002600f55662aa1efb94e0000601055730d8f9ca3f884ac5d08928d37a1d8bcaa9fd6ecad601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e560aeb54b88b58d57d47fb8f3cb4af1646c86af601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200019657600080fd5b506040518060400160405280600881526020017f416e7468696c6c73000000000000000000000000000000000000000000000000815250604051806020016040528060008152508160029080519060200190620001f59291906200050d565b5080600390805190602001906200020e9291906200050d565b506200021f6200035360201b60201c565b6000819055505050620002476200023b6200035860201b60201c565b6200036060201b60201c565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200034d600d8054620002bd9062000617565b80601f0160208091040260200160405190810160405280929190818152602001828054620002eb9062000617565b80156200033c5780601f1062000310576101008083540402835291602001916200033c565b820191906000526020600020905b8154815290600101906020018083116200031e57829003601f168201915b50505050506200042660201b60201c565b620006a5565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620004366200045260201b60201c565b80600d90805190602001906200044e9291906200050d565b5050565b620004626200035860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000488620004e360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004d890620005e4565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200051b9062000617565b90600052602060002090601f0160209004810192826200053f57600085556200058b565b82601f106200055a57805160ff19168380011785556200058b565b828001600101855582156200058b579182015b828111156200058a5782518255916020019190600101906200056d565b5b5090506200059a91906200059e565b5090565b5b80821115620005b95760008160009055506001016200059f565b5090565b6000620005cc60208362000606565b9150620005d9826200067c565b602082019050919050565b60006020820190508181036000830152620005ff81620005bd565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200063057607f821691505b602082108114156200064757620006466200064d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614b6380620006b56000396000f3fe6080604052600436106103355760003560e01c806379fa1eab116101ab578063b7b21f67116100f7578063da3ef23f11610095578063eecefa9b1161006f578063eecefa9b14610beb578063f2c4ce1e14610c14578063f2fde38b14610c3d578063fcfff16f14610c6657610335565b8063da3ef23f14610b5a578063dd8a2ff414610b83578063e985e9c514610bae57610335565b8063c6682862116100d1578063c668286214610a9c578063c87b56dd14610ac7578063cbf77bf114610b04578063d82f37bc14610b2f57610335565b8063b7b21f6714610a1a578063b88d4fde14610a36578063c23dc68f14610a5f57610335565b80639858cf1911610164578063a035b1fe1161013e578063a035b1fe14610970578063a22cb4651461099b578063a685e857146109c4578063b4256888146109ef57610335565b80639858cf19146108dd5780639858ea171461090857806399a2557a1461093357610335565b806379fa1eab146107df5780638462151c1461080a5780638da5cb5b1461084757806391b7f5ed1461087257806395d89b411461089b5780639752ecf7146108c657610335565b80633ada8b32116102855780635b70ea9f116102235780636352211e116101fd5780636352211e1461072557806370a082311461076257806370e093691461079f578063715018a6146107c857610335565b80635b70ea9f146106925780635bbb2177146106bd578063626c8f8e146106fa57610335565b8063434580f91161025f578063434580f9146105fc57806352d939e314610627578063557ed1ba1461063e57806355f804b31461066957610335565b80633ada8b32146105935780633ccfd60b146105bc57806342842e0e146105d357610335565b80630e18d2ab116102f257806323b872dd116102cc57806323b872dd146104ed57806328f8e904146105165780632b2e05c11461053f57806332cb6b0c1461056857610335565b80630e18d2ab1461045c578063150c5c261461049957806318160ddd146104c257610335565b806301ffc9a71461033a57806302fb0c5e1461037757806305dae7ac146103a257806306fdde03146103cb578063081812fc146103f6578063095ea7b314610433575b600080fd5b34801561034657600080fd5b50610361600480360381019061035c9190613c33565b610c91565b60405161036e91906142b7565b60405180910390f35b34801561038357600080fd5b5061038c610d73565b60405161039991906142b7565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613cd6565b610d86565b005b3480156103d757600080fd5b506103e0610d98565b6040516103ed91906142d2565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190613cd6565b610e2a565b60405161042a91906141dc565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190613b2a565b610ea6565b005b34801561046857600080fd5b50610483600480360381019061047e91906139a7565b610fab565b60405161049091906143ef565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613cd6565b610ff4565b005b3480156104ce57600080fd5b506104d7611006565b6040516104e491906143ef565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190613a14565b61101d565b005b34801561052257600080fd5b5061053d600480360381019061053891906139a7565b61102d565b005b34801561054b57600080fd5b50610566600480360381019061056191906139a7565b611079565b005b34801561057457600080fd5b5061057d6110c5565b60405161058a91906143ef565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190613d03565b6110cb565b005b3480156105c857600080fd5b506105d161134b565b005b3480156105df57600080fd5b506105fa60048036038101906105f59190613a14565b6113ee565b005b34801561060857600080fd5b5061061161140e565b60405161061e91906142d2565b60405180910390f35b34801561063357600080fd5b5061063c61149c565b005b34801561064a57600080fd5b506106536114d0565b60405161066091906143ef565b60405180910390f35b34801561067557600080fd5b50610690600480360381019061068b9190613c8d565b6114d8565b005b34801561069e57600080fd5b506106a76114fa565b6040516106b491906143ef565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190613bbd565b611500565b6040516106f19190614273565b60405180910390f35b34801561070657600080fd5b5061070f6115c1565b60405161071c91906143ef565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190613cd6565b6115c7565b60405161075991906141dc565b60405180910390f35b34801561076e57600080fd5b50610789600480360381019061078491906139a7565b6115dd565b60405161079691906143ef565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c19190613cd6565b6116ad565b005b3480156107d457600080fd5b506107dd6116bf565b005b3480156107eb57600080fd5b506107f46116d3565b60405161080191906141dc565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c91906139a7565b6116f9565b60405161083e9190614295565b60405180910390f35b34801561085357600080fd5b5061085c6118fb565b60405161086991906141dc565b60405180910390f35b34801561087e57600080fd5b5061089960048036038101906108949190613cd6565b611925565b005b3480156108a757600080fd5b506108b0611937565b6040516108bd91906142d2565b60405180910390f35b3480156108d257600080fd5b506108db6119c9565b005b3480156108e957600080fd5b506108f26119fd565b6040516108ff91906143ef565b60405180910390f35b34801561091457600080fd5b5061091d611a03565b60405161092a91906143ef565b60405180910390f35b34801561093f57600080fd5b5061095a60048036038101906109559190613b6a565b611a09565b6040516109679190614295565b60405180910390f35b34801561097c57600080fd5b50610985611cd0565b60405161099291906143ef565b60405180910390f35b3480156109a757600080fd5b506109c260048036038101906109bd9190613aea565b611cd6565b005b3480156109d057600080fd5b506109d9611e4e565b6040516109e691906143ef565b60405180910390f35b3480156109fb57600080fd5b50610a04611e72565b604051610a1191906143ef565b60405180910390f35b610a346004803603810190610a2f9190613cd6565b611e78565b005b348015610a4257600080fd5b50610a5d6004803603810190610a589190613a67565b611f7c565b005b348015610a6b57600080fd5b50610a866004803603810190610a819190613cd6565b611ff4565b604051610a9391906143d4565b60405180910390f35b348015610aa857600080fd5b50610ab1612111565b604051610abe91906142d2565b60405180910390f35b348015610ad357600080fd5b50610aee6004803603810190610ae99190613cd6565b61219f565b604051610afb91906142d2565b60405180910390f35b348015610b1057600080fd5b50610b196123c3565b604051610b2691906143ef565b60405180910390f35b348015610b3b57600080fd5b50610b446123c9565b604051610b5191906143ef565b60405180910390f35b348015610b6657600080fd5b50610b816004803603810190610b7c9190613c8d565b6123e0565b005b348015610b8f57600080fd5b50610b98612402565b604051610ba591906143ef565b60405180910390f35b348015610bba57600080fd5b50610bd56004803603810190610bd091906139d4565b612408565b604051610be291906142b7565b60405180910390f35b348015610bf757600080fd5b50610c126004803603810190610c0d9190613cd6565b61249c565b005b348015610c2057600080fd5b50610c3b6004803603810190610c369190613c8d565b6124ae565b005b348015610c4957600080fd5b50610c646004803603810190610c5f91906139a7565b6124d0565b005b348015610c7257600080fd5b50610c7b612554565b604051610c8891906142b7565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d5c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d6c5750610d6b82612567565b5b9050919050565b600860149054906101000a900460ff1681565b610d8e6125d1565b8060098190555050565b606060028054610da790614771565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd390614771565b8015610e205780601f10610df557610100808354040283529160200191610e20565b820191906000526020600020905b815481529060010190602001808311610e0357829003601f168201915b5050505050905090565b6000610e358261264f565b610e6b576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610eb1826115c7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f19576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f3861269d565b73ffffffffffffffffffffffffffffffffffffffff1614610f9b57610f6481610f5f61269d565b612408565b610f9a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610fa68383836126a5565b505050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ffc6125d1565b80600a8190555050565b6000611010612757565b6001546000540303905090565b61102883838361275c565b505050565b6110356125d1565b80601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6110816125d1565b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e6181565b600860149054906101000a900460ff166110e457600080fd5b60011515601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fcf3eeea33846040518363ffffffff1660e01b8152600401611145929190614243565b60206040518083038186803b15801561115d57600080fd5b505afa158015611171573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111959190613c06565b15151480156111a657506009544210155b806111b35750600a544210155b6111f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e990614314565b60405180910390fd5b6111fa6123c9565b821115801561120b5750600f548211155b61124a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611241906143b4565b60405180910390fd5b81601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112999190614592565b92505081905550600f54601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131b90614374565b60405180910390fd5b81601360008282546113369190614592565b925050819055506113473383612c12565b5050565b6113536125d1565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161139b906141c7565b60006040518083038185875af1925050503d80600081146113d8576040519150601f19603f3d011682016040523d82523d6000602084013e6113dd565b606091505b50509050806113eb57600080fd5b50565b61140983838360405180602001604052806000815250611f7c565b505050565b600d805461141b90614771565b80601f016020809104026020016040519081016040528092919081815260200182805461144790614771565b80156114945780601f1061146957610100808354040283529160200191611494565b820191906000526020600020905b81548152906001019060200180831161147757829003601f168201915b505050505081565b6114a46125d1565b600860149054906101000a900460ff1615600860146101000a81548160ff021916908315150217905550565b600042905090565b6114e06125d1565b80600b90805190602001906114f69291906136c5565b5050565b600f5481565b606060008251905060008167ffffffffffffffff8111156115245761152361490a565b5b60405190808252806020026020018201604052801561155d57816020015b61154a61374b565b8152602001906001900390816115425790505b50905060005b8281146115b65761158d8582815181106115805761157f6148db565b5b6020026020010151611ff4565b8282815181106115a05761159f6148db565b5b6020026020010181905250806001019050611563565b508092505050919050565b60135481565b60006115d282612c30565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611645576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6116b56125d1565b80600f8190555050565b6116c76125d1565b6116d16000612ebb565b565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000806000611709856115dd565b905060008167ffffffffffffffff8111156117275761172661490a565b5b6040519080825280602002602001820160405280156117555781602001602082028036833780820191505090505b50905061176061374b565b600061176a612757565b90505b8386146118ed57600460008281526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509150816040015115611846576118e2565b600073ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461188657816000015194505b8773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156118e157808387806001019850815181106118d4576118d36148db565b5b6020026020010181815250505b5b80600101905061176d565b508195505050505050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61192d6125d1565b8060108190555050565b60606003805461194690614771565b80601f016020809104026020016040519081016040528092919081815260200182805461197290614771565b80156119bf5780601f10611994576101008083540402835291602001916119bf565b820191906000526020600020905b8154815290600101906020018083116119a257829003601f168201915b5050505050905090565b6119d16125d1565b600860159054906101000a900460ff1615600860156101000a81548160ff021916908315150217905550565b610fa081565b60145481565b6060818310611a44576040517f32c1995a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000549050611a54612757565b851015611a6657611a63612757565b94505b80841115611a72578093505b6000611a7d876115dd565b905084861015611aa0576000868603905081811015611a9a578091505b50611aa5565b600090505b60008167ffffffffffffffff811115611ac157611ac061490a565b5b604051908082528060200260200182016040528015611aef5781602001602082028036833780820191505090505b5090506000821415611b075780945050505050611cc9565b6000611b1288611ff4565b905060008160400151611b2757816000015190505b60008990505b888114158015611b3d5750848714155b15611cbb57600460008281526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509250826040015115611c1457611cb0565b600073ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff1614611c5457826000015191505b8a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611caf5780848880600101995081518110611ca257611ca16148db565b5b6020026020010181815250505b5b806001019050611b2d565b508583528296505050505050505b9392505050565b60105481565b611cde61269d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d43576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611d5061269d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611dfd61269d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e4291906142b7565b60405180910390a35050565b6000601454610fa0611e61611e639190614673565b611e6d9190614673565b905090565b60095481565b600860149054906101000a900460ff168015611e9657506009544210155b611e9f57600080fd5b611ea7611e4e565b8111158015611eb85750600e548111155b611ec157600080fd5b3460105482611ed09190614619565b1115611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0890614394565b60405180910390fd5b8060146000828254611f239190614592565b92505081905550611f343382612c12565b34813373ffffffffffffffffffffffffffffffffffffffff167f9f3488b493b562d1056a2765237072a15ae05e985908667781eddf46305e9bff60405160405180910390a450565b611f8784848461275c565b611fa68373ffffffffffffffffffffffffffffffffffffffff16612f81565b15611fee57611fb784848484612fa4565b611fed576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611ffc61374b565b61200461374b565b61200c612757565b83108061201b57506000548310155b15612029578091505061210c565b600460008481526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151156120ff578091505061210c565b61210883612c30565b9150505b919050565b600c805461211e90614771565b80601f016020809104026020016040519081016040528092919081815260200182805461214a90614771565b80156121975780601f1061216c57610100808354040283529160200191612197565b820191906000526020600020905b81548152906001019060200180831161217a57829003601f168201915b505050505081565b60606121aa8261264f565b6121e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e090614354565b60405180910390fd5b60001515600860159054906101000a900460ff161515141561229757600d805461221290614771565b80601f016020809104026020016040519081016040528092919081815260200182805461223e90614771565b801561228b5780601f106122605761010080835404028352916020019161228b565b820191906000526020600020905b81548152906001019060200180831161226e57829003601f168201915b505050505090506123be565b60006016600084815260200190815260200160002080546122b790614771565b80601f01602080910402602001604051908101604052809291908181526020018280546122e390614771565b80156123305780601f1061230557610100808354040283529160200191612330565b820191906000526020600020905b81548152906001019060200180831161231357829003601f168201915b505050505090506000612341613104565b90506000815114156123575781925050506123be565b60008251111561238c578082604051602001612374929190614172565b604051602081830303815290604052925050506123be565b8061239685613196565b600c6040516020016123aa93929190614196565b604051602081830303815290604052925050505b919050565b600a5481565b6000601354610fa06123db9190614673565b905090565b6123e86125d1565b80600c90805190602001906123fe9291906136c5565b5050565b600e5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124a46125d1565b80600e8190555050565b6124b66125d1565b80600d90805190602001906124cc9291906136c5565b5050565b6124d86125d1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253f906142f4565b60405180910390fd5b61255181612ebb565b50565b600860159054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6125d961269d565b73ffffffffffffffffffffffffffffffffffffffff166125f76118fb565b73ffffffffffffffffffffffffffffffffffffffff161461264d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264490614334565b60405180910390fd5b565b60008161265a612757565b11158015612669575060005482105b8015612696575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061276782612c30565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127d2576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166127f361269d565b73ffffffffffffffffffffffffffffffffffffffff16148061282257506128218561281c61269d565b612408565b5b80612867575061283061269d565b73ffffffffffffffffffffffffffffffffffffffff1661284f84610e2a565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806128a0576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612907576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61291485858560016132f7565b612920600084876126a5565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ba0576000548214612b9f57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c0b85858560016132fd565b5050505050565b612c2c828260405180602001604052806000815250613303565b5050565b612c3861374b565b600082905080612c46612757565b11612e8457600054811015612e83576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612e8157600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d65578092505050612eb6565b5b600115612e8057818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e7b578092505050612eb6565b612d66565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fca61269d565b8786866040518563ffffffff1660e01b8152600401612fec94939291906141f7565b602060405180830381600087803b15801561300657600080fd5b505af192505050801561303757506040513d601f19601f820116820180604052508101906130349190613c60565b60015b6130b1573d8060008114613067576040519150601f19603f3d011682016040523d82523d6000602084013e61306c565b606091505b506000815114156130a9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600b805461311390614771565b80601f016020809104026020016040519081016040528092919081815260200182805461313f90614771565b801561318c5780601f106131615761010080835404028352916020019161318c565b820191906000526020600020905b81548152906001019060200180831161316f57829003601f168201915b5050505050905090565b606060008214156131de576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132f2565b600082905060005b600082146132105780806131f9906147d4565b915050600a8261320991906145e8565b91506131e6565b60008167ffffffffffffffff81111561322c5761322b61490a565b5b6040519080825280601f01601f19166020018201604052801561325e5781602001600182028036833780820191505090505b5090505b600085146132eb576001826132779190614673565b9150600a85613286919061481d565b60306132929190614592565b60f81b8183815181106132a8576132a76148db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132e491906145e8565b9450613262565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613370576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156133ab576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6133b860008583866132f7565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506135798673ffffffffffffffffffffffffffffffffffffffff16612f81565b1561363e575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135ee6000878480600101955087612fa4565b613624576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821061357f57826000541461363957600080fd5b6136a9565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821061363f575b8160008190555050506136bf60008583866132fd565b50505050565b8280546136d190614771565b90600052602060002090601f0160209004810192826136f3576000855561373a565b82601f1061370c57805160ff191683800117855561373a565b8280016001018555821561373a579182015b8281111561373957825182559160200191906001019061371e565b5b509050613747919061378e565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156137a757600081600090555060010161378f565b5090565b60006137be6137b98461442f565b61440a565b905080838252602082019050828560208602820111156137e1576137e061493e565b5b60005b8581101561381157816137f78882613992565b8452602084019350602083019250506001810190506137e4565b5050509392505050565b600061382e6138298461445b565b61440a565b90508281526020810184848401111561384a57613849614943565b5b61385584828561472f565b509392505050565b600061387061386b8461448c565b61440a565b90508281526020810184848401111561388c5761388b614943565b5b61389784828561472f565b509392505050565b6000813590506138ae81614ad1565b92915050565b600082601f8301126138c9576138c8614939565b5b81356138d98482602086016137ab565b91505092915050565b6000813590506138f181614ae8565b92915050565b60008151905061390681614ae8565b92915050565b60008135905061391b81614aff565b92915050565b60008151905061393081614aff565b92915050565b600082601f83011261394b5761394a614939565b5b813561395b84826020860161381b565b91505092915050565b600082601f83011261397957613978614939565b5b813561398984826020860161385d565b91505092915050565b6000813590506139a181614b16565b92915050565b6000602082840312156139bd576139bc61494d565b5b60006139cb8482850161389f565b91505092915050565b600080604083850312156139eb576139ea61494d565b5b60006139f98582860161389f565b9250506020613a0a8582860161389f565b9150509250929050565b600080600060608486031215613a2d57613a2c61494d565b5b6000613a3b8682870161389f565b9350506020613a4c8682870161389f565b9250506040613a5d86828701613992565b9150509250925092565b60008060008060808587031215613a8157613a8061494d565b5b6000613a8f8782880161389f565b9450506020613aa08782880161389f565b9350506040613ab187828801613992565b925050606085013567ffffffffffffffff811115613ad257613ad1614948565b5b613ade87828801613936565b91505092959194509250565b60008060408385031215613b0157613b0061494d565b5b6000613b0f8582860161389f565b9250506020613b20858286016138e2565b9150509250929050565b60008060408385031215613b4157613b4061494d565b5b6000613b4f8582860161389f565b9250506020613b6085828601613992565b9150509250929050565b600080600060608486031215613b8357613b8261494d565b5b6000613b918682870161389f565b9350506020613ba286828701613992565b9250506040613bb386828701613992565b9150509250925092565b600060208284031215613bd357613bd261494d565b5b600082013567ffffffffffffffff811115613bf157613bf0614948565b5b613bfd848285016138b4565b91505092915050565b600060208284031215613c1c57613c1b61494d565b5b6000613c2a848285016138f7565b91505092915050565b600060208284031215613c4957613c4861494d565b5b6000613c578482850161390c565b91505092915050565b600060208284031215613c7657613c7561494d565b5b6000613c8484828501613921565b91505092915050565b600060208284031215613ca357613ca261494d565b5b600082013567ffffffffffffffff811115613cc157613cc0614948565b5b613ccd84828501613964565b91505092915050565b600060208284031215613cec57613ceb61494d565b5b6000613cfa84828501613992565b91505092915050565b60008060408385031215613d1a57613d1961494d565b5b6000613d2885828601613992565b925050602083013567ffffffffffffffff811115613d4957613d48614948565b5b613d5585828601613964565b9150509250929050565b6000613d6b83836140c1565b60608301905092915050565b6000613d838383614145565b60208301905092915050565b613d98816146a7565b82525050565b613da7816146a7565b82525050565b6000613db8826144f2565b613dc28185614538565b9350613dcd836144bd565b8060005b83811015613dfe578151613de58882613d5f565b9750613df08361451e565b925050600181019050613dd1565b5085935050505092915050565b6000613e16826144fd565b613e208185614549565b9350613e2b836144cd565b8060005b83811015613e5c578151613e438882613d77565b9750613e4e8361452b565b925050600181019050613e2f565b5085935050505092915050565b613e72816146b9565b82525050565b613e81816146b9565b82525050565b6000613e9282614508565b613e9c818561455a565b9350613eac81856020860161473e565b613eb581614952565b840191505092915050565b6000613ecb82614513565b613ed58185614576565b9350613ee581856020860161473e565b613eee81614952565b840191505092915050565b6000613f0482614513565b613f0e8185614587565b9350613f1e81856020860161473e565b80840191505092915050565b60008154613f3781614771565b613f418186614587565b94506001821660008114613f5c5760018114613f6d57613fa0565b60ff19831686528186019350613fa0565b613f76856144dd565b60005b83811015613f9857815481890152600182019150602081019050613f79565b838801955050505b50505092915050565b6000613fb6602683614576565b9150613fc182614963565b604082019050919050565b6000613fd9601d83614576565b9150613fe4826149b2565b602082019050919050565b6000613ffc602083614576565b9150614007826149db565b602082019050919050565b600061401f602f83614576565b915061402a82614a04565b604082019050919050565b600061404260008361456b565b915061404d82614a53565b600082019050919050565b6000614065601583614576565b915061407082614a56565b602082019050919050565b6000614088601583614576565b915061409382614a7f565b602082019050919050565b60006140ab601583614576565b91506140b682614aa8565b602082019050919050565b6060820160008201516140d76000850182613d8f565b5060208201516140ea6020850182614163565b5060408201516140fd6040850182613e69565b50505050565b6060820160008201516141196000850182613d8f565b50602082015161412c6020850182614163565b50604082015161413f6040850182613e69565b50505050565b61414e81614711565b82525050565b61415d81614711565b82525050565b61416c8161471b565b82525050565b600061417e8285613ef9565b915061418a8284613ef9565b91508190509392505050565b60006141a28286613ef9565b91506141ae8285613ef9565b91506141ba8284613f2a565b9150819050949350505050565b60006141d282614035565b9150819050919050565b60006020820190506141f16000830184613d9e565b92915050565b600060808201905061420c6000830187613d9e565b6142196020830186613d9e565b6142266040830185614154565b81810360608301526142388184613e87565b905095945050505050565b60006040820190506142586000830185613d9e565b818103602083015261426a8184613ec0565b90509392505050565b6000602082019050818103600083015261428d8184613dad565b905092915050565b600060208201905081810360008301526142af8184613e0b565b905092915050565b60006020820190506142cc6000830184613e78565b92915050565b600060208201905081810360008301526142ec8184613ec0565b905092915050565b6000602082019050818103600083015261430d81613fa9565b9050919050565b6000602082019050818103600083015261432d81613fcc565b9050919050565b6000602082019050818103600083015261434d81613fef565b9050919050565b6000602082019050818103600083015261436d81614012565b9050919050565b6000602082019050818103600083015261438d81614058565b9050919050565b600060208201905081810360008301526143ad8161407b565b9050919050565b600060208201905081810360008301526143cd8161409e565b9050919050565b60006060820190506143e96000830184614103565b92915050565b60006020820190506144046000830184614154565b92915050565b6000614414614425565b905061442082826147a3565b919050565b6000604051905090565b600067ffffffffffffffff82111561444a5761444961490a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156144765761447561490a565b5b61447f82614952565b9050602081019050919050565b600067ffffffffffffffff8211156144a7576144a661490a565b5b6144b082614952565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061459d82614711565b91506145a883614711565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145dd576145dc61484e565b5b828201905092915050565b60006145f382614711565b91506145fe83614711565b92508261460e5761460d61487d565b5b828204905092915050565b600061462482614711565b915061462f83614711565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146685761466761484e565b5b828202905092915050565b600061467e82614711565b915061468983614711565b92508282101561469c5761469b61484e565b5b828203905092915050565b60006146b2826146f1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561475c578082015181840152602081019050614741565b8381111561476b576000848401525b50505050565b6000600282049050600182168061478957607f821691505b6020821081141561479d5761479c6148ac565b5b50919050565b6147ac82614952565b810181811067ffffffffffffffff821117156147cb576147ca61490a565b5b80604052505050565b60006147df82614711565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156148125761481161484e565b5b600182019050919050565b600061482882614711565b915061483383614711565b9250826148435761484261487d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f446f6e27742068617665207065726d697373696f6e20746f206d696e74000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f45786365656473206d61782066726565206d696e740000000000000000000000600082015250565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b7f496e73756666696369656e74207175616e746974790000000000000000000000600082015250565b614ada816146a7565b8114614ae557600080fd5b50565b614af1816146b9565b8114614afc57600080fd5b50565b614b08816146c5565b8114614b1357600080fd5b50565b614b1f81614711565b8114614b2a57600080fd5b5056fea264697066735822122040c3c27d9460f18a144d871f893e83d1ace8efed1c61a1c3296ce2f74cb5def864736f6c6343000807003368747470733a2f2f63646e2e616e74776172732e78797a2f6d6574612f6d683534343835336236393263613030363165623064353532366537632f616e7468696c6c732e6a736f6e
Deployed Bytecode
0x6080604052600436106103355760003560e01c806379fa1eab116101ab578063b7b21f67116100f7578063da3ef23f11610095578063eecefa9b1161006f578063eecefa9b14610beb578063f2c4ce1e14610c14578063f2fde38b14610c3d578063fcfff16f14610c6657610335565b8063da3ef23f14610b5a578063dd8a2ff414610b83578063e985e9c514610bae57610335565b8063c6682862116100d1578063c668286214610a9c578063c87b56dd14610ac7578063cbf77bf114610b04578063d82f37bc14610b2f57610335565b8063b7b21f6714610a1a578063b88d4fde14610a36578063c23dc68f14610a5f57610335565b80639858cf1911610164578063a035b1fe1161013e578063a035b1fe14610970578063a22cb4651461099b578063a685e857146109c4578063b4256888146109ef57610335565b80639858cf19146108dd5780639858ea171461090857806399a2557a1461093357610335565b806379fa1eab146107df5780638462151c1461080a5780638da5cb5b1461084757806391b7f5ed1461087257806395d89b411461089b5780639752ecf7146108c657610335565b80633ada8b32116102855780635b70ea9f116102235780636352211e116101fd5780636352211e1461072557806370a082311461076257806370e093691461079f578063715018a6146107c857610335565b80635b70ea9f146106925780635bbb2177146106bd578063626c8f8e146106fa57610335565b8063434580f91161025f578063434580f9146105fc57806352d939e314610627578063557ed1ba1461063e57806355f804b31461066957610335565b80633ada8b32146105935780633ccfd60b146105bc57806342842e0e146105d357610335565b80630e18d2ab116102f257806323b872dd116102cc57806323b872dd146104ed57806328f8e904146105165780632b2e05c11461053f57806332cb6b0c1461056857610335565b80630e18d2ab1461045c578063150c5c261461049957806318160ddd146104c257610335565b806301ffc9a71461033a57806302fb0c5e1461037757806305dae7ac146103a257806306fdde03146103cb578063081812fc146103f6578063095ea7b314610433575b600080fd5b34801561034657600080fd5b50610361600480360381019061035c9190613c33565b610c91565b60405161036e91906142b7565b60405180910390f35b34801561038357600080fd5b5061038c610d73565b60405161039991906142b7565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613cd6565b610d86565b005b3480156103d757600080fd5b506103e0610d98565b6040516103ed91906142d2565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190613cd6565b610e2a565b60405161042a91906141dc565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190613b2a565b610ea6565b005b34801561046857600080fd5b50610483600480360381019061047e91906139a7565b610fab565b60405161049091906143ef565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613cd6565b610ff4565b005b3480156104ce57600080fd5b506104d7611006565b6040516104e491906143ef565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190613a14565b61101d565b005b34801561052257600080fd5b5061053d600480360381019061053891906139a7565b61102d565b005b34801561054b57600080fd5b50610566600480360381019061056191906139a7565b611079565b005b34801561057457600080fd5b5061057d6110c5565b60405161058a91906143ef565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190613d03565b6110cb565b005b3480156105c857600080fd5b506105d161134b565b005b3480156105df57600080fd5b506105fa60048036038101906105f59190613a14565b6113ee565b005b34801561060857600080fd5b5061061161140e565b60405161061e91906142d2565b60405180910390f35b34801561063357600080fd5b5061063c61149c565b005b34801561064a57600080fd5b506106536114d0565b60405161066091906143ef565b60405180910390f35b34801561067557600080fd5b50610690600480360381019061068b9190613c8d565b6114d8565b005b34801561069e57600080fd5b506106a76114fa565b6040516106b491906143ef565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190613bbd565b611500565b6040516106f19190614273565b60405180910390f35b34801561070657600080fd5b5061070f6115c1565b60405161071c91906143ef565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190613cd6565b6115c7565b60405161075991906141dc565b60405180910390f35b34801561076e57600080fd5b50610789600480360381019061078491906139a7565b6115dd565b60405161079691906143ef565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c19190613cd6565b6116ad565b005b3480156107d457600080fd5b506107dd6116bf565b005b3480156107eb57600080fd5b506107f46116d3565b60405161080191906141dc565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c91906139a7565b6116f9565b60405161083e9190614295565b60405180910390f35b34801561085357600080fd5b5061085c6118fb565b60405161086991906141dc565b60405180910390f35b34801561087e57600080fd5b5061089960048036038101906108949190613cd6565b611925565b005b3480156108a757600080fd5b506108b0611937565b6040516108bd91906142d2565b60405180910390f35b3480156108d257600080fd5b506108db6119c9565b005b3480156108e957600080fd5b506108f26119fd565b6040516108ff91906143ef565b60405180910390f35b34801561091457600080fd5b5061091d611a03565b60405161092a91906143ef565b60405180910390f35b34801561093f57600080fd5b5061095a60048036038101906109559190613b6a565b611a09565b6040516109679190614295565b60405180910390f35b34801561097c57600080fd5b50610985611cd0565b60405161099291906143ef565b60405180910390f35b3480156109a757600080fd5b506109c260048036038101906109bd9190613aea565b611cd6565b005b3480156109d057600080fd5b506109d9611e4e565b6040516109e691906143ef565b60405180910390f35b3480156109fb57600080fd5b50610a04611e72565b604051610a1191906143ef565b60405180910390f35b610a346004803603810190610a2f9190613cd6565b611e78565b005b348015610a4257600080fd5b50610a5d6004803603810190610a589190613a67565b611f7c565b005b348015610a6b57600080fd5b50610a866004803603810190610a819190613cd6565b611ff4565b604051610a9391906143d4565b60405180910390f35b348015610aa857600080fd5b50610ab1612111565b604051610abe91906142d2565b60405180910390f35b348015610ad357600080fd5b50610aee6004803603810190610ae99190613cd6565b61219f565b604051610afb91906142d2565b60405180910390f35b348015610b1057600080fd5b50610b196123c3565b604051610b2691906143ef565b60405180910390f35b348015610b3b57600080fd5b50610b446123c9565b604051610b5191906143ef565b60405180910390f35b348015610b6657600080fd5b50610b816004803603810190610b7c9190613c8d565b6123e0565b005b348015610b8f57600080fd5b50610b98612402565b604051610ba591906143ef565b60405180910390f35b348015610bba57600080fd5b50610bd56004803603810190610bd091906139d4565b612408565b604051610be291906142b7565b60405180910390f35b348015610bf757600080fd5b50610c126004803603810190610c0d9190613cd6565b61249c565b005b348015610c2057600080fd5b50610c3b6004803603810190610c369190613c8d565b6124ae565b005b348015610c4957600080fd5b50610c646004803603810190610c5f91906139a7565b6124d0565b005b348015610c7257600080fd5b50610c7b612554565b604051610c8891906142b7565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d5c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d6c5750610d6b82612567565b5b9050919050565b600860149054906101000a900460ff1681565b610d8e6125d1565b8060098190555050565b606060028054610da790614771565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd390614771565b8015610e205780601f10610df557610100808354040283529160200191610e20565b820191906000526020600020905b815481529060010190602001808311610e0357829003601f168201915b5050505050905090565b6000610e358261264f565b610e6b576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610eb1826115c7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f19576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f3861269d565b73ffffffffffffffffffffffffffffffffffffffff1614610f9b57610f6481610f5f61269d565b612408565b610f9a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610fa68383836126a5565b505050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ffc6125d1565b80600a8190555050565b6000611010612757565b6001546000540303905090565b61102883838361275c565b505050565b6110356125d1565b80601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6110816125d1565b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e6181565b600860149054906101000a900460ff166110e457600080fd5b60011515601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fcf3eeea33846040518363ffffffff1660e01b8152600401611145929190614243565b60206040518083038186803b15801561115d57600080fd5b505afa158015611171573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111959190613c06565b15151480156111a657506009544210155b806111b35750600a544210155b6111f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e990614314565b60405180910390fd5b6111fa6123c9565b821115801561120b5750600f548211155b61124a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611241906143b4565b60405180910390fd5b81601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112999190614592565b92505081905550600f54601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131b90614374565b60405180910390fd5b81601360008282546113369190614592565b925050819055506113473383612c12565b5050565b6113536125d1565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161139b906141c7565b60006040518083038185875af1925050503d80600081146113d8576040519150601f19603f3d011682016040523d82523d6000602084013e6113dd565b606091505b50509050806113eb57600080fd5b50565b61140983838360405180602001604052806000815250611f7c565b505050565b600d805461141b90614771565b80601f016020809104026020016040519081016040528092919081815260200182805461144790614771565b80156114945780601f1061146957610100808354040283529160200191611494565b820191906000526020600020905b81548152906001019060200180831161147757829003601f168201915b505050505081565b6114a46125d1565b600860149054906101000a900460ff1615600860146101000a81548160ff021916908315150217905550565b600042905090565b6114e06125d1565b80600b90805190602001906114f69291906136c5565b5050565b600f5481565b606060008251905060008167ffffffffffffffff8111156115245761152361490a565b5b60405190808252806020026020018201604052801561155d57816020015b61154a61374b565b8152602001906001900390816115425790505b50905060005b8281146115b65761158d8582815181106115805761157f6148db565b5b6020026020010151611ff4565b8282815181106115a05761159f6148db565b5b6020026020010181905250806001019050611563565b508092505050919050565b60135481565b60006115d282612c30565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611645576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6116b56125d1565b80600f8190555050565b6116c76125d1565b6116d16000612ebb565b565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000806000611709856115dd565b905060008167ffffffffffffffff8111156117275761172661490a565b5b6040519080825280602002602001820160405280156117555781602001602082028036833780820191505090505b50905061176061374b565b600061176a612757565b90505b8386146118ed57600460008281526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509150816040015115611846576118e2565b600073ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461188657816000015194505b8773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156118e157808387806001019850815181106118d4576118d36148db565b5b6020026020010181815250505b5b80600101905061176d565b508195505050505050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61192d6125d1565b8060108190555050565b60606003805461194690614771565b80601f016020809104026020016040519081016040528092919081815260200182805461197290614771565b80156119bf5780601f10611994576101008083540402835291602001916119bf565b820191906000526020600020905b8154815290600101906020018083116119a257829003601f168201915b5050505050905090565b6119d16125d1565b600860159054906101000a900460ff1615600860156101000a81548160ff021916908315150217905550565b610fa081565b60145481565b6060818310611a44576040517f32c1995a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000549050611a54612757565b851015611a6657611a63612757565b94505b80841115611a72578093505b6000611a7d876115dd565b905084861015611aa0576000868603905081811015611a9a578091505b50611aa5565b600090505b60008167ffffffffffffffff811115611ac157611ac061490a565b5b604051908082528060200260200182016040528015611aef5781602001602082028036833780820191505090505b5090506000821415611b075780945050505050611cc9565b6000611b1288611ff4565b905060008160400151611b2757816000015190505b60008990505b888114158015611b3d5750848714155b15611cbb57600460008281526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509250826040015115611c1457611cb0565b600073ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff1614611c5457826000015191505b8a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611caf5780848880600101995081518110611ca257611ca16148db565b5b6020026020010181815250505b5b806001019050611b2d565b508583528296505050505050505b9392505050565b60105481565b611cde61269d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d43576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611d5061269d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611dfd61269d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e4291906142b7565b60405180910390a35050565b6000601454610fa0611e61611e639190614673565b611e6d9190614673565b905090565b60095481565b600860149054906101000a900460ff168015611e9657506009544210155b611e9f57600080fd5b611ea7611e4e565b8111158015611eb85750600e548111155b611ec157600080fd5b3460105482611ed09190614619565b1115611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0890614394565b60405180910390fd5b8060146000828254611f239190614592565b92505081905550611f343382612c12565b34813373ffffffffffffffffffffffffffffffffffffffff167f9f3488b493b562d1056a2765237072a15ae05e985908667781eddf46305e9bff60405160405180910390a450565b611f8784848461275c565b611fa68373ffffffffffffffffffffffffffffffffffffffff16612f81565b15611fee57611fb784848484612fa4565b611fed576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611ffc61374b565b61200461374b565b61200c612757565b83108061201b57506000548310155b15612029578091505061210c565b600460008481526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151156120ff578091505061210c565b61210883612c30565b9150505b919050565b600c805461211e90614771565b80601f016020809104026020016040519081016040528092919081815260200182805461214a90614771565b80156121975780601f1061216c57610100808354040283529160200191612197565b820191906000526020600020905b81548152906001019060200180831161217a57829003601f168201915b505050505081565b60606121aa8261264f565b6121e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e090614354565b60405180910390fd5b60001515600860159054906101000a900460ff161515141561229757600d805461221290614771565b80601f016020809104026020016040519081016040528092919081815260200182805461223e90614771565b801561228b5780601f106122605761010080835404028352916020019161228b565b820191906000526020600020905b81548152906001019060200180831161226e57829003601f168201915b505050505090506123be565b60006016600084815260200190815260200160002080546122b790614771565b80601f01602080910402602001604051908101604052809291908181526020018280546122e390614771565b80156123305780601f1061230557610100808354040283529160200191612330565b820191906000526020600020905b81548152906001019060200180831161231357829003601f168201915b505050505090506000612341613104565b90506000815114156123575781925050506123be565b60008251111561238c578082604051602001612374929190614172565b604051602081830303815290604052925050506123be565b8061239685613196565b600c6040516020016123aa93929190614196565b604051602081830303815290604052925050505b919050565b600a5481565b6000601354610fa06123db9190614673565b905090565b6123e86125d1565b80600c90805190602001906123fe9291906136c5565b5050565b600e5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124a46125d1565b80600e8190555050565b6124b66125d1565b80600d90805190602001906124cc9291906136c5565b5050565b6124d86125d1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253f906142f4565b60405180910390fd5b61255181612ebb565b50565b600860159054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6125d961269d565b73ffffffffffffffffffffffffffffffffffffffff166125f76118fb565b73ffffffffffffffffffffffffffffffffffffffff161461264d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264490614334565b60405180910390fd5b565b60008161265a612757565b11158015612669575060005482105b8015612696575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061276782612c30565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127d2576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166127f361269d565b73ffffffffffffffffffffffffffffffffffffffff16148061282257506128218561281c61269d565b612408565b5b80612867575061283061269d565b73ffffffffffffffffffffffffffffffffffffffff1661284f84610e2a565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806128a0576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612907576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61291485858560016132f7565b612920600084876126a5565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ba0576000548214612b9f57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c0b85858560016132fd565b5050505050565b612c2c828260405180602001604052806000815250613303565b5050565b612c3861374b565b600082905080612c46612757565b11612e8457600054811015612e83576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612e8157600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d65578092505050612eb6565b5b600115612e8057818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e7b578092505050612eb6565b612d66565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fca61269d565b8786866040518563ffffffff1660e01b8152600401612fec94939291906141f7565b602060405180830381600087803b15801561300657600080fd5b505af192505050801561303757506040513d601f19601f820116820180604052508101906130349190613c60565b60015b6130b1573d8060008114613067576040519150601f19603f3d011682016040523d82523d6000602084013e61306c565b606091505b506000815114156130a9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600b805461311390614771565b80601f016020809104026020016040519081016040528092919081815260200182805461313f90614771565b801561318c5780601f106131615761010080835404028352916020019161318c565b820191906000526020600020905b81548152906001019060200180831161316f57829003601f168201915b5050505050905090565b606060008214156131de576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132f2565b600082905060005b600082146132105780806131f9906147d4565b915050600a8261320991906145e8565b91506131e6565b60008167ffffffffffffffff81111561322c5761322b61490a565b5b6040519080825280601f01601f19166020018201604052801561325e5781602001600182028036833780820191505090505b5090505b600085146132eb576001826132779190614673565b9150600a85613286919061481d565b60306132929190614592565b60f81b8183815181106132a8576132a76148db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132e491906145e8565b9450613262565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613370576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156133ab576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6133b860008583866132f7565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506135798673ffffffffffffffffffffffffffffffffffffffff16612f81565b1561363e575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135ee6000878480600101955087612fa4565b613624576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821061357f57826000541461363957600080fd5b6136a9565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821061363f575b8160008190555050506136bf60008583866132fd565b50505050565b8280546136d190614771565b90600052602060002090601f0160209004810192826136f3576000855561373a565b82601f1061370c57805160ff191683800117855561373a565b8280016001018555821561373a579182015b8281111561373957825182559160200191906001019061371e565b5b509050613747919061378e565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156137a757600081600090555060010161378f565b5090565b60006137be6137b98461442f565b61440a565b905080838252602082019050828560208602820111156137e1576137e061493e565b5b60005b8581101561381157816137f78882613992565b8452602084019350602083019250506001810190506137e4565b5050509392505050565b600061382e6138298461445b565b61440a565b90508281526020810184848401111561384a57613849614943565b5b61385584828561472f565b509392505050565b600061387061386b8461448c565b61440a565b90508281526020810184848401111561388c5761388b614943565b5b61389784828561472f565b509392505050565b6000813590506138ae81614ad1565b92915050565b600082601f8301126138c9576138c8614939565b5b81356138d98482602086016137ab565b91505092915050565b6000813590506138f181614ae8565b92915050565b60008151905061390681614ae8565b92915050565b60008135905061391b81614aff565b92915050565b60008151905061393081614aff565b92915050565b600082601f83011261394b5761394a614939565b5b813561395b84826020860161381b565b91505092915050565b600082601f83011261397957613978614939565b5b813561398984826020860161385d565b91505092915050565b6000813590506139a181614b16565b92915050565b6000602082840312156139bd576139bc61494d565b5b60006139cb8482850161389f565b91505092915050565b600080604083850312156139eb576139ea61494d565b5b60006139f98582860161389f565b9250506020613a0a8582860161389f565b9150509250929050565b600080600060608486031215613a2d57613a2c61494d565b5b6000613a3b8682870161389f565b9350506020613a4c8682870161389f565b9250506040613a5d86828701613992565b9150509250925092565b60008060008060808587031215613a8157613a8061494d565b5b6000613a8f8782880161389f565b9450506020613aa08782880161389f565b9350506040613ab187828801613992565b925050606085013567ffffffffffffffff811115613ad257613ad1614948565b5b613ade87828801613936565b91505092959194509250565b60008060408385031215613b0157613b0061494d565b5b6000613b0f8582860161389f565b9250506020613b20858286016138e2565b9150509250929050565b60008060408385031215613b4157613b4061494d565b5b6000613b4f8582860161389f565b9250506020613b6085828601613992565b9150509250929050565b600080600060608486031215613b8357613b8261494d565b5b6000613b918682870161389f565b9350506020613ba286828701613992565b9250506040613bb386828701613992565b9150509250925092565b600060208284031215613bd357613bd261494d565b5b600082013567ffffffffffffffff811115613bf157613bf0614948565b5b613bfd848285016138b4565b91505092915050565b600060208284031215613c1c57613c1b61494d565b5b6000613c2a848285016138f7565b91505092915050565b600060208284031215613c4957613c4861494d565b5b6000613c578482850161390c565b91505092915050565b600060208284031215613c7657613c7561494d565b5b6000613c8484828501613921565b91505092915050565b600060208284031215613ca357613ca261494d565b5b600082013567ffffffffffffffff811115613cc157613cc0614948565b5b613ccd84828501613964565b91505092915050565b600060208284031215613cec57613ceb61494d565b5b6000613cfa84828501613992565b91505092915050565b60008060408385031215613d1a57613d1961494d565b5b6000613d2885828601613992565b925050602083013567ffffffffffffffff811115613d4957613d48614948565b5b613d5585828601613964565b9150509250929050565b6000613d6b83836140c1565b60608301905092915050565b6000613d838383614145565b60208301905092915050565b613d98816146a7565b82525050565b613da7816146a7565b82525050565b6000613db8826144f2565b613dc28185614538565b9350613dcd836144bd565b8060005b83811015613dfe578151613de58882613d5f565b9750613df08361451e565b925050600181019050613dd1565b5085935050505092915050565b6000613e16826144fd565b613e208185614549565b9350613e2b836144cd565b8060005b83811015613e5c578151613e438882613d77565b9750613e4e8361452b565b925050600181019050613e2f565b5085935050505092915050565b613e72816146b9565b82525050565b613e81816146b9565b82525050565b6000613e9282614508565b613e9c818561455a565b9350613eac81856020860161473e565b613eb581614952565b840191505092915050565b6000613ecb82614513565b613ed58185614576565b9350613ee581856020860161473e565b613eee81614952565b840191505092915050565b6000613f0482614513565b613f0e8185614587565b9350613f1e81856020860161473e565b80840191505092915050565b60008154613f3781614771565b613f418186614587565b94506001821660008114613f5c5760018114613f6d57613fa0565b60ff19831686528186019350613fa0565b613f76856144dd565b60005b83811015613f9857815481890152600182019150602081019050613f79565b838801955050505b50505092915050565b6000613fb6602683614576565b9150613fc182614963565b604082019050919050565b6000613fd9601d83614576565b9150613fe4826149b2565b602082019050919050565b6000613ffc602083614576565b9150614007826149db565b602082019050919050565b600061401f602f83614576565b915061402a82614a04565b604082019050919050565b600061404260008361456b565b915061404d82614a53565b600082019050919050565b6000614065601583614576565b915061407082614a56565b602082019050919050565b6000614088601583614576565b915061409382614a7f565b602082019050919050565b60006140ab601583614576565b91506140b682614aa8565b602082019050919050565b6060820160008201516140d76000850182613d8f565b5060208201516140ea6020850182614163565b5060408201516140fd6040850182613e69565b50505050565b6060820160008201516141196000850182613d8f565b50602082015161412c6020850182614163565b50604082015161413f6040850182613e69565b50505050565b61414e81614711565b82525050565b61415d81614711565b82525050565b61416c8161471b565b82525050565b600061417e8285613ef9565b915061418a8284613ef9565b91508190509392505050565b60006141a28286613ef9565b91506141ae8285613ef9565b91506141ba8284613f2a565b9150819050949350505050565b60006141d282614035565b9150819050919050565b60006020820190506141f16000830184613d9e565b92915050565b600060808201905061420c6000830187613d9e565b6142196020830186613d9e565b6142266040830185614154565b81810360608301526142388184613e87565b905095945050505050565b60006040820190506142586000830185613d9e565b818103602083015261426a8184613ec0565b90509392505050565b6000602082019050818103600083015261428d8184613dad565b905092915050565b600060208201905081810360008301526142af8184613e0b565b905092915050565b60006020820190506142cc6000830184613e78565b92915050565b600060208201905081810360008301526142ec8184613ec0565b905092915050565b6000602082019050818103600083015261430d81613fa9565b9050919050565b6000602082019050818103600083015261432d81613fcc565b9050919050565b6000602082019050818103600083015261434d81613fef565b9050919050565b6000602082019050818103600083015261436d81614012565b9050919050565b6000602082019050818103600083015261438d81614058565b9050919050565b600060208201905081810360008301526143ad8161407b565b9050919050565b600060208201905081810360008301526143cd8161409e565b9050919050565b60006060820190506143e96000830184614103565b92915050565b60006020820190506144046000830184614154565b92915050565b6000614414614425565b905061442082826147a3565b919050565b6000604051905090565b600067ffffffffffffffff82111561444a5761444961490a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156144765761447561490a565b5b61447f82614952565b9050602081019050919050565b600067ffffffffffffffff8211156144a7576144a661490a565b5b6144b082614952565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061459d82614711565b91506145a883614711565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145dd576145dc61484e565b5b828201905092915050565b60006145f382614711565b91506145fe83614711565b92508261460e5761460d61487d565b5b828204905092915050565b600061462482614711565b915061462f83614711565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146685761466761484e565b5b828202905092915050565b600061467e82614711565b915061468983614711565b92508282101561469c5761469b61484e565b5b828203905092915050565b60006146b2826146f1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561475c578082015181840152602081019050614741565b8381111561476b576000848401525b50505050565b6000600282049050600182168061478957607f821691505b6020821081141561479d5761479c6148ac565b5b50919050565b6147ac82614952565b810181811067ffffffffffffffff821117156147cb576147ca61490a565b5b80604052505050565b60006147df82614711565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156148125761481161484e565b5b600182019050919050565b600061482882614711565b915061483383614711565b9250826148435761484261487d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f446f6e27742068617665207065726d697373696f6e20746f206d696e74000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f45786365656473206d61782066726565206d696e740000000000000000000000600082015250565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b7f496e73756666696369656e74207175616e746974790000000000000000000000600082015250565b614ada816146a7565b8114614ae557600080fd5b50565b614af1816146b9565b8114614afc57600080fd5b50565b614b08816146c5565b8114614b1357600080fd5b50565b614b1f81614711565b8114614b2a57600080fd5b5056fea264697066735822122040c3c27d9460f18a144d871f893e83d1ace8efed1c61a1c3296ce2f74cb5def864736f6c63430008070033
Deployed Bytecode Sourcemap
53504:5978:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28259:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53591:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58354:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31374:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32878:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32440:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58878:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58459:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27499:312;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33743:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59234:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57015:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53929:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57681:569;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59325:152;;;;;;;;;;;;;:::i;:::-;;33984:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53813:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57194:74;;;;;;;;;;;;;:::i;:::-;;58258:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56758:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54070:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48477:523;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54250:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31182:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28628:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58571:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13836:103;;;;;;;;;;;;;:::i;:::-;;54432:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52403:980;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13188:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58672:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31543:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57118:68;;;;;;;;;;;;;:::i;:::-;;53978:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54285:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49390:2564;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54106:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33154:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59109:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53656:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57276:397;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34240:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47877:441;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53766:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55761:729;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53699:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58997:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56874:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54030:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33512:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58767:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56618:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14094:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53623:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28259:305;28361:4;28413:25;28398:40;;;:11;:40;;;;:105;;;;28470:33;28455:48;;;:11;:48;;;;28398:105;:158;;;;28520:36;28544:11;28520:23;:36::i;:::-;28398:158;28378:178;;28259:305;;;:::o;53591:25::-;;;;;;;;;;;;;:::o;58354:97::-;13074:13;:11;:13::i;:::-;58434:9:::1;58423:8;:20;;;;58354:97:::0;:::o;31374:100::-;31428:13;31461:5;31454:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31374:100;:::o;32878:204::-;32946:7;32971:16;32979:7;32971;:16::i;:::-;32966:64;;32996:34;;;;;;;;;;;;;;32966:64;33050:15;:24;33066:7;33050:24;;;;;;;;;;;;;;;;;;;;;33043:31;;32878:204;;;:::o;32440:372::-;32513:13;32529:24;32545:7;32529:15;:24::i;:::-;32513:40;;32574:5;32568:11;;:2;:11;;;32564:48;;;32588:24;;;;;;;;;;;;;;32564:48;32645:5;32629:21;;:12;:10;:12::i;:::-;:21;;;32625:139;;32656:37;32673:5;32680:12;:10;:12::i;:::-;32656:16;:37::i;:::-;32652:112;;32717:35;;;;;;;;;;;;;;32652:112;32625:139;32776:28;32785:2;32789:7;32798:5;32776:8;:28::i;:::-;32502:310;32440:372;;:::o;58878:110::-;58936:7;58962:13;:18;58976:3;58962:18;;;;;;;;;;;;;;;;58955:25;;58878:110;;;:::o;58459:104::-;13074:13;:11;:13::i;:::-;58544:11:::1;58531:10;:24;;;;58459:104:::0;:::o;27499:312::-;27552:7;27777:15;:13;:15::i;:::-;27762:12;;27746:13;;:28;:46;27739:53;;27499:312;:::o;33743:170::-;33877:28;33887:4;33893:2;33897:7;33877:9;:28::i;:::-;33743:170;;;:::o;59234:82::-;13074:13;:11;:13::i;:::-;59300:8:::1;59295:2;;:13;;;;;;;;;;;;;;;;;;59234:82:::0;:::o;57015:95::-;13074:13;:11;:13::i;:::-;57093:8:::1;57080:4;;:22;;;;;;;;;;;;;;;;;;57015:95:::0;:::o;53929:41::-;53966:4;53929:41;:::o;57681:569::-;57768:6;;;;;;;;;;;57760:15;;;;;;57830:4;57795:39;;:4;;;;;;;;;;;:12;;;57808:10;57820:5;57795:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;:71;;;;;57858:8;;57839:15;:27;;57795:71;57794:106;;;;57890:10;;57871:15;:29;;57794:106;57786:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;57963:14;:12;:14::i;:::-;57952:7;:25;;:49;;;;;57993:8;;57982:7;:19;;57952:49;57944:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;58069:7;58040:13;:25;58054:10;58040:25;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;58126:8;;58097:13;:25;58111:10;58097:25;;;;;;;;;;;;;;;;:37;;58089:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;58188:7;58172:12;;:23;;;;;;;:::i;:::-;;;;;;;;58208:30;58218:10;58230:7;58208:9;:30::i;:::-;57681:569;;:::o;59325:152::-;13074:13;:11;:13::i;:::-;59374:12:::1;59400:2;;;;;;;;;;;59392:16;;59416:21;59392:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59373:69;;;59461:7;59453:16;;;::::0;::::1;;59362:115;59325:152::o:0;33984:185::-;34122:39;34139:4;34145:2;34149:7;34122:39;;;;;;;;;;;;:16;:39::i;:::-;33984:185;;;:::o;53813:105::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;57194:74::-;13074:13;:11;:13::i;:::-;57254:6:::1;;;;;;;;;;;57253:7;57244:6;;:16;;;;;;;;;;;;;;;;;;57194:74::o:0;58258:88::-;58297:7;58323:15;58316:22;;58258:88;:::o;56758:104::-;13074:13;:11;:13::i;:::-;56843:11:::1;56833:7;:21;;;;;;;;;;;;:::i;:::-;;56758:104:::0;:::o;54070:27::-;;;;:::o;48477:523::-;48584:23;48650:22;48675:8;:15;48650:40;;48705:34;48781:14;48742:68;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;48705:105;;48830:9;48825:125;48846:14;48841:1;:19;48825:125;;48902:32;48922:8;48931:1;48922:11;;;;;;;;:::i;:::-;;;;;;;;48902:19;:32::i;:::-;48886:10;48897:1;48886:13;;;;;;;;:::i;:::-;;;;;;;:48;;;;48862:3;;;;;48825:125;;;;48971:10;48964:17;;;;48477:523;;;:::o;54250:27::-;;;;:::o;31182:125::-;31246:7;31273:21;31286:7;31273:12;:21::i;:::-;:26;;;31266:33;;31182:125;;;:::o;28628:206::-;28692:7;28733:1;28716:19;;:5;:19;;;28712:60;;;28744:28;;;;;;;;;;;;;;28712:60;28798:12;:19;28811:5;28798:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;28790:36;;28783:43;;28628:206;;;:::o;58571:92::-;13074:13;:11;:13::i;:::-;58648:7:::1;58637:8;:18;;;;58571:92:::0;:::o;13836:103::-;13074:13;:11;:13::i;:::-;13901:30:::1;13928:1;13901:18;:30::i;:::-;13836:103::o:0;54432:62::-;;;;;;;;;;;;;:::o;52403:980::-;52491:16;52550:19;52584:25;52624:22;52649:16;52659:5;52649:9;:16::i;:::-;52624:41;;52680:25;52722:14;52708:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52680:57;;52752:31;;:::i;:::-;52821:9;52833:15;:13;:15::i;:::-;52821:27;;52798:537;52882:14;52867:11;:29;52798:537;;52965:11;:14;52977:1;52965:14;;;;;;;;;;;52953:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53002:9;:16;;;52998:73;;;53043:8;;52998:73;53119:1;53093:28;;:9;:14;;;:28;;;53089:111;;53166:9;:14;;;53146:34;;53089:111;53243:5;53222:26;;:17;:26;;;53218:102;;;53299:1;53273:8;53282:13;;;;;;53273:23;;;;;;;;:::i;:::-;;;;;;;:27;;;;;53218:102;52798:537;52915:3;;;;;52798:537;;;;53356:8;53349:15;;;;;;;52403:980;;;:::o;13188:87::-;13234:7;13261:6;;;;;;;;;;;13254:13;;13188:87;:::o;58672:86::-;13074:13;:11;:13::i;:::-;58743:7:::1;58735:5;:15;;;;58672:86:::0;:::o;31543:104::-;31599:13;31632:7;31625:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31543:104;:::o;57118:68::-;13074:13;:11;:13::i;:::-;57174:4:::1;;;;;;;;;;;57173:5;57166:4;;:12;;;;;;;;;;;;;;;;;;57118:68::o:0;53978:42::-;54016:4;53978:42;:::o;54285:27::-;;;;:::o;49390:2564::-;49516:16;49583:4;49574:5;:13;49570:45;;49596:19;;;;;;;;;;;;;;49570:45;49630:19;49664:17;49684:13;;49664:33;;49783:15;:13;:15::i;:::-;49775:5;:23;49771:87;;;49827:15;:13;:15::i;:::-;49819:23;;49771:87;49938:9;49931:4;:16;49927:73;;;49975:9;49968:16;;49927:73;50014:25;50042:16;50052:5;50042:9;:16::i;:::-;50014:44;;50236:4;50228:5;:12;50224:278;;;50261:19;50290:5;50283:4;:12;50261:34;;50332:17;50318:11;:31;50314:111;;;50394:11;50374:31;;50314:111;50242:198;50224:278;;;50485:1;50465:21;;50224:278;50516:25;50558:17;50544:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50516:60;;50616:1;50595:17;:22;50591:78;;;50645:8;50638:15;;;;;;;;50591:78;50813:31;50847:26;50867:5;50847:19;:26::i;:::-;50813:60;;50888:25;51133:9;:16;;;51128:92;;51190:9;:14;;;51170:34;;51128:92;51257:9;51269:5;51257:17;;51234:543;51298:4;51293:1;:9;;:45;;;;;51321:17;51306:11;:32;;51293:45;51234:543;;;51407:11;:14;51419:1;51407:14;;;;;;;;;;;51395:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51444:9;:16;;;51440:73;;;51485:8;;51440:73;51561:1;51535:28;;:9;:14;;;:28;;;51531:111;;51608:9;:14;;;51588:34;;51531:111;51685:5;51664:26;;:17;:26;;;51660:102;;;51741:1;51715:8;51724:13;;;;;;51715:23;;;;;;;;:::i;:::-;;;;;;;:27;;;;;51660:102;51234:543;51357:3;;;;;51234:543;;;;51879:11;51869:8;51862:29;51927:8;51920:15;;;;;;;;49390:2564;;;;;;:::o;54106:34::-;;;;:::o;33154:287::-;33265:12;:10;:12::i;:::-;33253:24;;:8;:24;;;33249:54;;;33286:17;;;;;;;;;;;;;;33249:54;33361:8;33316:18;:32;33335:12;:10;:12::i;:::-;33316:32;;;;;;;;;;;;;;;:42;33349:8;33316:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33414:8;33385:48;;33400:12;:10;:12::i;:::-;33385:48;;;33424:8;33385:48;;;;;;:::i;:::-;;;;;;;;33154:287;;:::o;59109:117::-;59153:7;59206:12;;54016:4;53966;59179:24;;;;:::i;:::-;:39;;;;:::i;:::-;59172:46;;59109:117;:::o;53656:36::-;;;;:::o;57276:397::-;57349:6;;;;;;;;;;;:37;;;;;57378:8;;57359:15;:27;;57349:37;57341:46;;;;;;57417:14;:12;:14::i;:::-;57406:7;:25;;:52;;;;;57446:12;;57435:7;:23;;57406:52;57398:61;;;;;;57497:9;57488:5;;57478:7;:15;;;;:::i;:::-;:28;;57470:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;57560:7;57544:12;;:23;;;;;;;:::i;:::-;;;;;;;;57580:30;57590:10;57602:7;57580:9;:30::i;:::-;57655:9;57646:7;57634:10;57626:39;;;;;;;;;;;;57276:397;:::o;34240:370::-;34407:28;34417:4;34423:2;34427:7;34407:9;:28::i;:::-;34450:15;:2;:13;;;:15::i;:::-;34446:157;;;34471:56;34502:4;34508:2;34512:7;34521:5;34471:30;:56::i;:::-;34467:136;;34551:40;;;;;;;;;;;;;;34467:136;34446:157;34240:370;;;;:::o;47877:441::-;47971:21;;:::i;:::-;48010:31;;:::i;:::-;48066:15;:13;:15::i;:::-;48056:7;:25;:53;;;;48096:13;;48085:7;:24;;48056:53;48052:102;;;48133:9;48126:16;;;;;48052:102;48176:11;:20;48188:7;48176:20;;;;;;;;;;;48164:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48211:9;:16;;;48207:65;;;48251:9;48244:16;;;;;48207:65;48289:21;48302:7;48289:12;:21::i;:::-;48282:28;;;47877:441;;;;:::o;53766:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;55761:729::-;55834:13;55887:16;55895:7;55887;:16::i;:::-;55865:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;56001:5;55993:13;;:4;;;;;;;;;;;:13;;;55989:67;;;56030:14;56023:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55989:67;56068:23;56094:10;:19;56105:7;56094:19;;;;;;;;;;;56068:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56124:18;56145:10;:8;:10::i;:::-;56124:31;;56203:1;56187:4;56181:18;:23;56177:72;;;56228:9;56221:16;;;;;;56177:72;56299:1;56279:9;56273:23;:27;56269:108;;;56348:4;56354:9;56331:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56317:48;;;;;;56269:108;56441:4;56447:18;:7;:16;:18::i;:::-;56467:13;56424:57;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56397:85;;;;55761:729;;;;:::o;53699:38::-;;;;:::o;58997:104::-;59041:7;59081:12;;54016:4;59067:26;;;;:::i;:::-;59060:33;;58997:104;:::o;56874:133::-;13074:13;:11;:13::i;:::-;56982:17:::1;56966:13;:33;;;;;;;;;;;;:::i;:::-;;56874:133:::0;:::o;54030:31::-;;;;:::o;33512:164::-;33609:4;33633:18;:25;33652:5;33633:25;;;;;;;;;;;;;;;:35;33659:8;33633:35;;;;;;;;;;;;;;;;;;;;;;;;;33626:42;;33512:164;;;;:::o;58767:99::-;13074:13;:11;:13::i;:::-;58851:7:::1;58836:12;:22;;;;58767:99:::0;:::o;56618:126::-;13074:13;:11;:13::i;:::-;56721:15:::1;56704:14;:32;;;;;;;;;;;;:::i;:::-;;56618:126:::0;:::o;14094:201::-;13074:13;:11;:13::i;:::-;14203:1:::1;14183:22;;:8;:22;;;;14175:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14259:28;14278:8;14259:18;:28::i;:::-;14094:201:::0;:::o;53623:24::-;;;;;;;;;;;;;:::o;2712:157::-;2797:4;2836:25;2821:40;;;:11;:40;;;;2814:47;;2712:157;;;:::o;13353:132::-;13428:12;:10;:12::i;:::-;13417:23;;:7;:5;:7::i;:::-;:23;;;13409:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13353:132::o;34865:174::-;34922:4;34965:7;34946:15;:13;:15::i;:::-;:26;;:53;;;;;34986:13;;34976:7;:23;34946:53;:85;;;;;35004:11;:20;35016:7;35004:20;;;;;;;;;;;:27;;;;;;;;;;;;35003:28;34946:85;34939:92;;34865:174;;;:::o;11739:98::-;11792:7;11819:10;11812:17;;11739:98;:::o;44087:196::-;44229:2;44202:15;:24;44218:7;44202:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44267:7;44263:2;44247:28;;44256:5;44247:28;;;;;;;;;;;;44087:196;;;:::o;27273:92::-;27329:7;27273:92;:::o;39035:2130::-;39150:35;39188:21;39201:7;39188:12;:21::i;:::-;39150:59;;39248:4;39226:26;;:13;:18;;;:26;;;39222:67;;39261:28;;;;;;;;;;;;;;39222:67;39302:22;39344:4;39328:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;39365:36;39382:4;39388:12;:10;:12::i;:::-;39365:16;:36::i;:::-;39328:73;:126;;;;39442:12;:10;:12::i;:::-;39418:36;;:20;39430:7;39418:11;:20::i;:::-;:36;;;39328:126;39302:153;;39473:17;39468:66;;39499:35;;;;;;;;;;;;;;39468:66;39563:1;39549:16;;:2;:16;;;39545:52;;;39574:23;;;;;;;;;;;;;;39545:52;39610:43;39632:4;39638:2;39642:7;39651:1;39610:21;:43::i;:::-;39718:35;39735:1;39739:7;39748:4;39718:8;:35::i;:::-;40079:1;40049:12;:18;40062:4;40049:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40123:1;40095:12;:16;40108:2;40095:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40141:31;40175:11;:20;40187:7;40175:20;;;;;;;;;;;40141:54;;40226:2;40210:8;:13;;;:18;;;;;;;;;;;;;;;;;;40276:15;40243:8;:23;;;:49;;;;;;;;;;;;;;;;;;40544:19;40576:1;40566:7;:11;40544:33;;40592:31;40626:11;:24;40638:11;40626:24;;;;;;;;;;;40592:58;;40694:1;40669:27;;:8;:13;;;;;;;;;;;;:27;;;40665:384;;;40879:13;;40864:11;:28;40860:174;;40933:4;40917:8;:13;;;:20;;;;;;;;;;;;;;;;;;40986:13;:28;;;40960:8;:23;;;:54;;;;;;;;;;;;;;;;;;40860:174;40665:384;40024:1036;;;41096:7;41092:2;41077:27;;41086:4;41077:27;;;;;;;;;;;;41115:42;41136:4;41142:2;41146:7;41155:1;41115:20;:42::i;:::-;39139:2026;;39035:2130;;;:::o;35123:104::-;35192:27;35202:2;35206:8;35192:27;;;;;;;;;;;;:9;:27::i;:::-;35123:104;;:::o;30009:1111::-;30071:21;;:::i;:::-;30105:12;30120:7;30105:22;;30188:4;30169:15;:13;:15::i;:::-;:23;30165:888;;30205:13;;30198:4;:20;30194:859;;;30239:31;30273:11;:17;30285:4;30273:17;;;;;;;;;;;30239:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30314:9;:16;;;30309:729;;30385:1;30359:28;;:9;:14;;;:28;;;30355:101;;30423:9;30416:16;;;;;;30355:101;30758:261;30765:4;30758:261;;;30798:6;;;;;;;;30843:11;:17;30855:4;30843:17;;;;;;;;;;;30831:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30917:1;30891:28;;:9;:14;;;:28;;;30887:109;;30959:9;30952:16;;;;;;30887:109;30758:261;;;30309:729;30220:833;30194:859;30165:888;31081:31;;;;;;;;;;;;;;30009:1111;;;;:::o;14455:191::-;14529:16;14548:6;;;;;;;;;;;14529:25;;14574:8;14565:6;;:17;;;;;;;;;;;;;;;;;;14629:8;14598:40;;14619:8;14598:40;;;;;;;;;;;;14518:128;14455:191;:::o;15886:326::-;15946:4;16203:1;16181:7;:19;;;:23;16174:30;;15886:326;;;:::o;44775:667::-;44938:4;44975:2;44959:36;;;44996:12;:10;:12::i;:::-;45010:4;45016:7;45025:5;44959:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;44955:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45210:1;45193:6;:13;:18;45189:235;;;45239:40;;;;;;;;;;;;;;45189:235;45382:6;45376:13;45367:6;45363:2;45359:15;45352:38;44955:480;45088:45;;;45078:55;;;:6;:55;;;;45071:62;;;44775:667;;;;;;:::o;56498:108::-;56558:13;56591:7;56584:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56498:108;:::o;8993:723::-;9049:13;9279:1;9270:5;:10;9266:53;;;9297:10;;;;;;;;;;;;;;;;;;;;;9266:53;9329:12;9344:5;9329:20;;9360:14;9385:78;9400:1;9392:4;:9;9385:78;;9418:8;;;;;:::i;:::-;;;;9449:2;9441:10;;;;;:::i;:::-;;;9385:78;;;9473:19;9505:6;9495:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9473:39;;9523:154;9539:1;9530:5;:10;9523:154;;9567:1;9557:11;;;;;:::i;:::-;;;9634:2;9626:5;:10;;;;:::i;:::-;9613:2;:24;;;;:::i;:::-;9600:39;;9583:6;9590;9583:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9663:2;9654:11;;;;;:::i;:::-;;;9523:154;;;9701:6;9687:21;;;;;8993:723;;;;:::o;46090:159::-;;;;;:::o;46908:158::-;;;;;:::o;35600:1749::-;35723:20;35746:13;;35723:36;;35788:1;35774:16;;:2;:16;;;35770:48;;;35799:19;;;;;;;;;;;;;;35770:48;35845:1;35833:8;:13;35829:44;;;35855:18;;;;;;;;;;;;;;35829:44;35886:61;35916:1;35920:2;35924:12;35938:8;35886:21;:61::i;:::-;36259:8;36224:12;:16;36237:2;36224:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36323:8;36283:12;:16;36296:2;36283:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36382:2;36349:11;:25;36361:12;36349:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;36449:15;36399:11;:25;36411:12;36399:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;36482:20;36505:12;36482:35;;36532:11;36561:8;36546:12;:23;36532:37;;36590:15;:2;:13;;;:15::i;:::-;36586:631;;;36626:313;36682:12;36678:2;36657:38;;36674:1;36657:38;;;;;;;;;;;;36723:69;36762:1;36766:2;36770:14;;;;;;36786:5;36723:30;:69::i;:::-;36718:174;;36828:40;;;;;;;;;;;;;;36718:174;36934:3;36919:12;:18;36626:313;;37020:12;37003:13;;:29;36999:43;;37034:8;;;36999:43;36586:631;;;37083:119;37139:14;;;;;;37135:2;37114:40;;37131:1;37114:40;;;;;;;;;;;;37197:3;37182:12;:18;37083:119;;36586:631;37247:12;37231:13;:28;;;;36199:1072;;37281:60;37310:1;37314:2;37318:12;37332:8;37281:20;:60::i;:::-;35712:1637;35600:1749;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2317:5;2348:6;2342:13;2333:22;;2364:30;2388:5;2364:30;:::i;:::-;2263:137;;;;:::o;2406:::-;2451:5;2489:6;2476:20;2467:29;;2505:32;2531:5;2505:32;:::i;:::-;2406:137;;;;:::o;2549:141::-;2605:5;2636:6;2630:13;2621:22;;2652:32;2678:5;2652:32;:::i;:::-;2549:141;;;;:::o;2709:338::-;2764:5;2813:3;2806:4;2798:6;2794:17;2790:27;2780:122;;2821:79;;:::i;:::-;2780:122;2938:6;2925:20;2963:78;3037:3;3029:6;3022:4;3014:6;3010:17;2963:78;:::i;:::-;2954:87;;2770:277;2709:338;;;;:::o;3067:340::-;3123:5;3172:3;3165:4;3157:6;3153:17;3149:27;3139:122;;3180:79;;:::i;:::-;3139:122;3297:6;3284:20;3322:79;3397:3;3389:6;3382:4;3374:6;3370:17;3322:79;:::i;:::-;3313:88;;3129:278;3067:340;;;;:::o;3413:139::-;3459:5;3497:6;3484:20;3475:29;;3513:33;3540:5;3513:33;:::i;:::-;3413:139;;;;:::o;3558:329::-;3617:6;3666:2;3654:9;3645:7;3641:23;3637:32;3634:119;;;3672:79;;:::i;:::-;3634:119;3792:1;3817:53;3862:7;3853:6;3842:9;3838:22;3817:53;:::i;:::-;3807:63;;3763:117;3558:329;;;;:::o;3893:474::-;3961:6;3969;4018:2;4006:9;3997:7;3993:23;3989:32;3986:119;;;4024:79;;:::i;:::-;3986:119;4144:1;4169:53;4214:7;4205:6;4194:9;4190:22;4169:53;:::i;:::-;4159:63;;4115:117;4271:2;4297:53;4342:7;4333:6;4322:9;4318:22;4297:53;:::i;:::-;4287:63;;4242:118;3893:474;;;;;:::o;4373:619::-;4450:6;4458;4466;4515:2;4503:9;4494:7;4490:23;4486:32;4483:119;;;4521:79;;:::i;:::-;4483:119;4641:1;4666:53;4711:7;4702:6;4691:9;4687:22;4666:53;:::i;:::-;4656:63;;4612:117;4768:2;4794:53;4839:7;4830:6;4819:9;4815:22;4794:53;:::i;:::-;4784:63;;4739:118;4896:2;4922:53;4967:7;4958:6;4947:9;4943:22;4922:53;:::i;:::-;4912:63;;4867:118;4373:619;;;;;:::o;4998:943::-;5093:6;5101;5109;5117;5166:3;5154:9;5145:7;5141:23;5137:33;5134:120;;;5173:79;;:::i;:::-;5134:120;5293:1;5318:53;5363:7;5354:6;5343:9;5339:22;5318:53;:::i;:::-;5308:63;;5264:117;5420:2;5446:53;5491:7;5482:6;5471:9;5467:22;5446:53;:::i;:::-;5436:63;;5391:118;5548:2;5574:53;5619:7;5610:6;5599:9;5595:22;5574:53;:::i;:::-;5564:63;;5519:118;5704:2;5693:9;5689:18;5676:32;5735:18;5727:6;5724:30;5721:117;;;5757:79;;:::i;:::-;5721:117;5862:62;5916:7;5907:6;5896:9;5892:22;5862:62;:::i;:::-;5852:72;;5647:287;4998:943;;;;;;;:::o;5947:468::-;6012:6;6020;6069:2;6057:9;6048:7;6044:23;6040:32;6037:119;;;6075:79;;:::i;:::-;6037:119;6195:1;6220:53;6265:7;6256:6;6245:9;6241:22;6220:53;:::i;:::-;6210:63;;6166:117;6322:2;6348:50;6390:7;6381:6;6370:9;6366:22;6348:50;:::i;:::-;6338:60;;6293:115;5947:468;;;;;:::o;6421:474::-;6489:6;6497;6546:2;6534:9;6525:7;6521:23;6517:32;6514:119;;;6552:79;;:::i;:::-;6514:119;6672:1;6697:53;6742:7;6733:6;6722:9;6718:22;6697:53;:::i;:::-;6687:63;;6643:117;6799:2;6825:53;6870:7;6861:6;6850:9;6846:22;6825:53;:::i;:::-;6815:63;;6770:118;6421:474;;;;;:::o;6901:619::-;6978:6;6986;6994;7043:2;7031:9;7022:7;7018:23;7014:32;7011:119;;;7049:79;;:::i;:::-;7011:119;7169:1;7194:53;7239:7;7230:6;7219:9;7215:22;7194:53;:::i;:::-;7184:63;;7140:117;7296:2;7322:53;7367:7;7358:6;7347:9;7343:22;7322:53;:::i;:::-;7312:63;;7267:118;7424:2;7450:53;7495:7;7486:6;7475:9;7471:22;7450:53;:::i;:::-;7440:63;;7395:118;6901:619;;;;;:::o;7526:539::-;7610:6;7659:2;7647:9;7638:7;7634:23;7630:32;7627:119;;;7665:79;;:::i;:::-;7627:119;7813:1;7802:9;7798:17;7785:31;7843:18;7835:6;7832:30;7829:117;;;7865:79;;:::i;:::-;7829:117;7970:78;8040:7;8031:6;8020:9;8016:22;7970:78;:::i;:::-;7960:88;;7756:302;7526:539;;;;:::o;8071:345::-;8138:6;8187:2;8175:9;8166:7;8162:23;8158:32;8155:119;;;8193:79;;:::i;:::-;8155:119;8313:1;8338:61;8391:7;8382:6;8371:9;8367:22;8338:61;:::i;:::-;8328:71;;8284:125;8071:345;;;;:::o;8422:327::-;8480:6;8529:2;8517:9;8508:7;8504:23;8500:32;8497:119;;;8535:79;;:::i;:::-;8497:119;8655:1;8680:52;8724:7;8715:6;8704:9;8700:22;8680:52;:::i;:::-;8670:62;;8626:116;8422:327;;;;:::o;8755:349::-;8824:6;8873:2;8861:9;8852:7;8848:23;8844:32;8841:119;;;8879:79;;:::i;:::-;8841:119;8999:1;9024:63;9079:7;9070:6;9059:9;9055:22;9024:63;:::i;:::-;9014:73;;8970:127;8755:349;;;;:::o;9110:509::-;9179:6;9228:2;9216:9;9207:7;9203:23;9199:32;9196:119;;;9234:79;;:::i;:::-;9196:119;9382:1;9371:9;9367:17;9354:31;9412:18;9404:6;9401:30;9398:117;;;9434:79;;:::i;:::-;9398:117;9539:63;9594:7;9585:6;9574:9;9570:22;9539:63;:::i;:::-;9529:73;;9325:287;9110:509;;;;:::o;9625:329::-;9684:6;9733:2;9721:9;9712:7;9708:23;9704:32;9701:119;;;9739:79;;:::i;:::-;9701:119;9859:1;9884:53;9929:7;9920:6;9909:9;9905:22;9884:53;:::i;:::-;9874:63;;9830:117;9625:329;;;;:::o;9960:654::-;10038:6;10046;10095:2;10083:9;10074:7;10070:23;10066:32;10063:119;;;10101:79;;:::i;:::-;10063:119;10221:1;10246:53;10291:7;10282:6;10271:9;10267:22;10246:53;:::i;:::-;10236:63;;10192:117;10376:2;10365:9;10361:18;10348:32;10407:18;10399:6;10396:30;10393:117;;;10429:79;;:::i;:::-;10393:117;10534:63;10589:7;10580:6;10569:9;10565:22;10534:63;:::i;:::-;10524:73;;10319:288;9960:654;;;;;:::o;10620:303::-;10751:10;10772:108;10876:3;10868:6;10772:108;:::i;:::-;10912:4;10907:3;10903:14;10889:28;;10620:303;;;;:::o;10929:179::-;10998:10;11019:46;11061:3;11053:6;11019:46;:::i;:::-;11097:4;11092:3;11088:14;11074:28;;10929:179;;;;:::o;11114:108::-;11191:24;11209:5;11191:24;:::i;:::-;11186:3;11179:37;11114:108;;:::o;11228:118::-;11315:24;11333:5;11315:24;:::i;:::-;11310:3;11303:37;11228:118;;:::o;11428:980::-;11609:3;11638:85;11717:5;11638:85;:::i;:::-;11739:117;11849:6;11844:3;11739:117;:::i;:::-;11732:124;;11880:87;11961:5;11880:87;:::i;:::-;11990:7;12021:1;12006:377;12031:6;12028:1;12025:13;12006:377;;;12107:6;12101:13;12134:125;12255:3;12240:13;12134:125;:::i;:::-;12127:132;;12282:91;12366:6;12282:91;:::i;:::-;12272:101;;12066:317;12053:1;12050;12046:9;12041:14;;12006:377;;;12010:14;12399:3;12392:10;;11614:794;;;11428:980;;;;:::o;12444:732::-;12563:3;12592:54;12640:5;12592:54;:::i;:::-;12662:86;12741:6;12736:3;12662:86;:::i;:::-;12655:93;;12772:56;12822:5;12772:56;:::i;:::-;12851:7;12882:1;12867:284;12892:6;12889:1;12886:13;12867:284;;;12968:6;12962:13;12995:63;13054:3;13039:13;12995:63;:::i;:::-;12988:70;;13081:60;13134:6;13081:60;:::i;:::-;13071:70;;12927:224;12914:1;12911;12907:9;12902:14;;12867:284;;;12871:14;13167:3;13160:10;;12568:608;;;12444:732;;;;:::o;13182:99::-;13253:21;13268:5;13253:21;:::i;:::-;13248:3;13241:34;13182:99;;:::o;13287:109::-;13368:21;13383:5;13368:21;:::i;:::-;13363:3;13356:34;13287:109;;:::o;13402:360::-;13488:3;13516:38;13548:5;13516:38;:::i;:::-;13570:70;13633:6;13628:3;13570:70;:::i;:::-;13563:77;;13649:52;13694:6;13689:3;13682:4;13675:5;13671:16;13649:52;:::i;:::-;13726:29;13748:6;13726:29;:::i;:::-;13721:3;13717:39;13710:46;;13492:270;13402:360;;;;:::o;13768:364::-;13856:3;13884:39;13917:5;13884:39;:::i;:::-;13939:71;14003:6;13998:3;13939:71;:::i;:::-;13932:78;;14019:52;14064:6;14059:3;14052:4;14045:5;14041:16;14019:52;:::i;:::-;14096:29;14118:6;14096:29;:::i;:::-;14091:3;14087:39;14080:46;;13860:272;13768:364;;;;:::o;14138:377::-;14244:3;14272:39;14305:5;14272:39;:::i;:::-;14327:89;14409:6;14404:3;14327:89;:::i;:::-;14320:96;;14425:52;14470:6;14465:3;14458:4;14451:5;14447:16;14425:52;:::i;:::-;14502:6;14497:3;14493:16;14486:23;;14248:267;14138:377;;;;:::o;14545:845::-;14648:3;14685:5;14679:12;14714:36;14740:9;14714:36;:::i;:::-;14766:89;14848:6;14843:3;14766:89;:::i;:::-;14759:96;;14886:1;14875:9;14871:17;14902:1;14897:137;;;;15048:1;15043:341;;;;14864:520;;14897:137;14981:4;14977:9;14966;14962:25;14957:3;14950:38;15017:6;15012:3;15008:16;15001:23;;14897:137;;15043:341;15110:38;15142:5;15110:38;:::i;:::-;15170:1;15184:154;15198:6;15195:1;15192:13;15184:154;;;15272:7;15266:14;15262:1;15257:3;15253:11;15246:35;15322:1;15313:7;15309:15;15298:26;;15220:4;15217:1;15213:12;15208:17;;15184:154;;;15367:6;15362:3;15358:16;15351:23;;15050:334;;14864:520;;14652:738;;14545:845;;;;:::o;15396:366::-;15538:3;15559:67;15623:2;15618:3;15559:67;:::i;:::-;15552:74;;15635:93;15724:3;15635:93;:::i;:::-;15753:2;15748:3;15744:12;15737:19;;15396:366;;;:::o;15768:::-;15910:3;15931:67;15995:2;15990:3;15931:67;:::i;:::-;15924:74;;16007:93;16096:3;16007:93;:::i;:::-;16125:2;16120:3;16116:12;16109:19;;15768:366;;;:::o;16140:::-;16282:3;16303:67;16367:2;16362:3;16303:67;:::i;:::-;16296:74;;16379:93;16468:3;16379:93;:::i;:::-;16497:2;16492:3;16488:12;16481:19;;16140:366;;;:::o;16512:::-;16654:3;16675:67;16739:2;16734:3;16675:67;:::i;:::-;16668:74;;16751:93;16840:3;16751:93;:::i;:::-;16869:2;16864:3;16860:12;16853:19;;16512:366;;;:::o;16884:398::-;17043:3;17064:83;17145:1;17140:3;17064:83;:::i;:::-;17057:90;;17156:93;17245:3;17156:93;:::i;:::-;17274:1;17269:3;17265:11;17258:18;;16884:398;;;:::o;17288:366::-;17430:3;17451:67;17515:2;17510:3;17451:67;:::i;:::-;17444:74;;17527:93;17616:3;17527:93;:::i;:::-;17645:2;17640:3;17636:12;17629:19;;17288:366;;;:::o;17660:::-;17802:3;17823:67;17887:2;17882:3;17823:67;:::i;:::-;17816:74;;17899:93;17988:3;17899:93;:::i;:::-;18017:2;18012:3;18008:12;18001:19;;17660:366;;;:::o;18032:::-;18174:3;18195:67;18259:2;18254:3;18195:67;:::i;:::-;18188:74;;18271:93;18360:3;18271:93;:::i;:::-;18389:2;18384:3;18380:12;18373:19;;18032:366;;;:::o;18476:687::-;18625:4;18620:3;18616:14;18712:4;18705:5;18701:16;18695:23;18731:63;18788:4;18783:3;18779:14;18765:12;18731:63;:::i;:::-;18640:164;18896:4;18889:5;18885:16;18879:23;18915:61;18970:4;18965:3;18961:14;18947:12;18915:61;:::i;:::-;18814:172;19070:4;19063:5;19059:16;19053:23;19089:57;19140:4;19135:3;19131:14;19117:12;19089:57;:::i;:::-;18996:160;18594:569;18476:687;;:::o;19241:697::-;19400:4;19395:3;19391:14;19487:4;19480:5;19476:16;19470:23;19506:63;19563:4;19558:3;19554:14;19540:12;19506:63;:::i;:::-;19415:164;19671:4;19664:5;19660:16;19654:23;19690:61;19745:4;19740:3;19736:14;19722:12;19690:61;:::i;:::-;19589:172;19845:4;19838:5;19834:16;19828:23;19864:57;19915:4;19910:3;19906:14;19892:12;19864:57;:::i;:::-;19771:160;19369:569;19241:697;;:::o;19944:108::-;20021:24;20039:5;20021:24;:::i;:::-;20016:3;20009:37;19944:108;;:::o;20058:118::-;20145:24;20163:5;20145:24;:::i;:::-;20140:3;20133:37;20058:118;;:::o;20182:105::-;20257:23;20274:5;20257:23;:::i;:::-;20252:3;20245:36;20182:105;;:::o;20293:435::-;20473:3;20495:95;20586:3;20577:6;20495:95;:::i;:::-;20488:102;;20607:95;20698:3;20689:6;20607:95;:::i;:::-;20600:102;;20719:3;20712:10;;20293:435;;;;;:::o;20734:589::-;20959:3;20981:95;21072:3;21063:6;20981:95;:::i;:::-;20974:102;;21093:95;21184:3;21175:6;21093:95;:::i;:::-;21086:102;;21205:92;21293:3;21284:6;21205:92;:::i;:::-;21198:99;;21314:3;21307:10;;20734:589;;;;;;:::o;21329:379::-;21513:3;21535:147;21678:3;21535:147;:::i;:::-;21528:154;;21699:3;21692:10;;21329:379;;;:::o;21714:222::-;21807:4;21845:2;21834:9;21830:18;21822:26;;21858:71;21926:1;21915:9;21911:17;21902:6;21858:71;:::i;:::-;21714:222;;;;:::o;21942:640::-;22137:4;22175:3;22164:9;22160:19;22152:27;;22189:71;22257:1;22246:9;22242:17;22233:6;22189:71;:::i;:::-;22270:72;22338:2;22327:9;22323:18;22314:6;22270:72;:::i;:::-;22352;22420:2;22409:9;22405:18;22396:6;22352:72;:::i;:::-;22471:9;22465:4;22461:20;22456:2;22445:9;22441:18;22434:48;22499:76;22570:4;22561:6;22499:76;:::i;:::-;22491:84;;21942:640;;;;;;;:::o;22588:423::-;22729:4;22767:2;22756:9;22752:18;22744:26;;22780:71;22848:1;22837:9;22833:17;22824:6;22780:71;:::i;:::-;22898:9;22892:4;22888:20;22883:2;22872:9;22868:18;22861:48;22926:78;22999:4;22990:6;22926:78;:::i;:::-;22918:86;;22588:423;;;;;:::o;23017:497::-;23222:4;23260:2;23249:9;23245:18;23237:26;;23309:9;23303:4;23299:20;23295:1;23284:9;23280:17;23273:47;23337:170;23502:4;23493:6;23337:170;:::i;:::-;23329:178;;23017:497;;;;:::o;23520:373::-;23663:4;23701:2;23690:9;23686:18;23678:26;;23750:9;23744:4;23740:20;23736:1;23725:9;23721:17;23714:47;23778:108;23881:4;23872:6;23778:108;:::i;:::-;23770:116;;23520:373;;;;:::o;23899:210::-;23986:4;24024:2;24013:9;24009:18;24001:26;;24037:65;24099:1;24088:9;24084:17;24075:6;24037:65;:::i;:::-;23899:210;;;;:::o;24115:313::-;24228:4;24266:2;24255:9;24251:18;24243:26;;24315:9;24309:4;24305:20;24301:1;24290:9;24286:17;24279:47;24343:78;24416:4;24407:6;24343:78;:::i;:::-;24335:86;;24115:313;;;;:::o;24434:419::-;24600:4;24638:2;24627:9;24623:18;24615:26;;24687:9;24681:4;24677:20;24673:1;24662:9;24658:17;24651:47;24715:131;24841:4;24715:131;:::i;:::-;24707:139;;24434:419;;;:::o;24859:::-;25025:4;25063:2;25052:9;25048:18;25040:26;;25112:9;25106:4;25102:20;25098:1;25087:9;25083:17;25076:47;25140:131;25266:4;25140:131;:::i;:::-;25132:139;;24859:419;;;:::o;25284:::-;25450:4;25488:2;25477:9;25473:18;25465:26;;25537:9;25531:4;25527:20;25523:1;25512:9;25508:17;25501:47;25565:131;25691:4;25565:131;:::i;:::-;25557:139;;25284:419;;;:::o;25709:::-;25875:4;25913:2;25902:9;25898:18;25890:26;;25962:9;25956:4;25952:20;25948:1;25937:9;25933:17;25926:47;25990:131;26116:4;25990:131;:::i;:::-;25982:139;;25709:419;;;:::o;26134:::-;26300:4;26338:2;26327:9;26323:18;26315:26;;26387:9;26381:4;26377:20;26373:1;26362:9;26358:17;26351:47;26415:131;26541:4;26415:131;:::i;:::-;26407:139;;26134:419;;;:::o;26559:::-;26725:4;26763:2;26752:9;26748:18;26740:26;;26812:9;26806:4;26802:20;26798:1;26787:9;26783:17;26776:47;26840:131;26966:4;26840:131;:::i;:::-;26832:139;;26559:419;;;:::o;26984:::-;27150:4;27188:2;27177:9;27173:18;27165:26;;27237:9;27231:4;27227:20;27223:1;27212:9;27208:17;27201:47;27265:131;27391:4;27265:131;:::i;:::-;27257:139;;26984:419;;;:::o;27409:346::-;27564:4;27602:2;27591:9;27587:18;27579:26;;27615:133;27745:1;27734:9;27730:17;27721:6;27615:133;:::i;:::-;27409:346;;;;:::o;27761:222::-;27854:4;27892:2;27881:9;27877:18;27869:26;;27905:71;27973:1;27962:9;27958:17;27949:6;27905:71;:::i;:::-;27761:222;;;;:::o;27989:129::-;28023:6;28050:20;;:::i;:::-;28040:30;;28079:33;28107:4;28099:6;28079:33;:::i;:::-;27989:129;;;:::o;28124:75::-;28157:6;28190:2;28184:9;28174:19;;28124:75;:::o;28205:311::-;28282:4;28372:18;28364:6;28361:30;28358:56;;;28394:18;;:::i;:::-;28358:56;28444:4;28436:6;28432:17;28424:25;;28504:4;28498;28494:15;28486:23;;28205:311;;;:::o;28522:307::-;28583:4;28673:18;28665:6;28662:30;28659:56;;;28695:18;;:::i;:::-;28659:56;28733:29;28755:6;28733:29;:::i;:::-;28725:37;;28817:4;28811;28807:15;28799:23;;28522:307;;;:::o;28835:308::-;28897:4;28987:18;28979:6;28976:30;28973:56;;;29009:18;;:::i;:::-;28973:56;29047:29;29069:6;29047:29;:::i;:::-;29039:37;;29131:4;29125;29121:15;29113:23;;28835:308;;;:::o;29149:163::-;29247:4;29270:3;29262:11;;29300:4;29295:3;29291:14;29283:22;;29149:163;;;:::o;29318:132::-;29385:4;29408:3;29400:11;;29438:4;29433:3;29429:14;29421:22;;29318:132;;;:::o;29456:141::-;29505:4;29528:3;29520:11;;29551:3;29548:1;29541:14;29585:4;29582:1;29572:18;29564:26;;29456:141;;;:::o;29603:145::-;29701:6;29735:5;29729:12;29719:22;;29603:145;;;:::o;29754:114::-;29821:6;29855:5;29849:12;29839:22;;29754:114;;;:::o;29874:98::-;29925:6;29959:5;29953:12;29943:22;;29874:98;;;:::o;29978:99::-;30030:6;30064:5;30058:12;30048:22;;29978:99;;;:::o;30083:144::-;30184:4;30216;30211:3;30207:14;30199:22;;30083:144;;;:::o;30233:113::-;30303:4;30335;30330:3;30326:14;30318:22;;30233:113;;;:::o;30352:215::-;30482:11;30516:6;30511:3;30504:19;30556:4;30551:3;30547:14;30532:29;;30352:215;;;;:::o;30573:184::-;30672:11;30706:6;30701:3;30694:19;30746:4;30741:3;30737:14;30722:29;;30573:184;;;;:::o;30763:168::-;30846:11;30880:6;30875:3;30868:19;30920:4;30915:3;30911:14;30896:29;;30763:168;;;;:::o;30937:147::-;31038:11;31075:3;31060:18;;30937:147;;;;:::o;31090:169::-;31174:11;31208:6;31203:3;31196:19;31248:4;31243:3;31239:14;31224:29;;31090:169;;;;:::o;31265:148::-;31367:11;31404:3;31389:18;;31265:148;;;;:::o;31419:305::-;31459:3;31478:20;31496:1;31478:20;:::i;:::-;31473:25;;31512:20;31530:1;31512:20;:::i;:::-;31507:25;;31666:1;31598:66;31594:74;31591:1;31588:81;31585:107;;;31672:18;;:::i;:::-;31585:107;31716:1;31713;31709:9;31702:16;;31419:305;;;;:::o;31730:185::-;31770:1;31787:20;31805:1;31787:20;:::i;:::-;31782:25;;31821:20;31839:1;31821:20;:::i;:::-;31816:25;;31860:1;31850:35;;31865:18;;:::i;:::-;31850:35;31907:1;31904;31900:9;31895:14;;31730:185;;;;:::o;31921:348::-;31961:7;31984:20;32002:1;31984:20;:::i;:::-;31979:25;;32018:20;32036:1;32018:20;:::i;:::-;32013:25;;32206:1;32138:66;32134:74;32131:1;32128:81;32123:1;32116:9;32109:17;32105:105;32102:131;;;32213:18;;:::i;:::-;32102:131;32261:1;32258;32254:9;32243:20;;31921:348;;;;:::o;32275:191::-;32315:4;32335:20;32353:1;32335:20;:::i;:::-;32330:25;;32369:20;32387:1;32369:20;:::i;:::-;32364:25;;32408:1;32405;32402:8;32399:34;;;32413:18;;:::i;:::-;32399:34;32458:1;32455;32451:9;32443:17;;32275:191;;;;:::o;32472:96::-;32509:7;32538:24;32556:5;32538:24;:::i;:::-;32527:35;;32472:96;;;:::o;32574:90::-;32608:7;32651:5;32644:13;32637:21;32626:32;;32574:90;;;:::o;32670:149::-;32706:7;32746:66;32739:5;32735:78;32724:89;;32670:149;;;:::o;32825:126::-;32862:7;32902:42;32895:5;32891:54;32880:65;;32825:126;;;:::o;32957:77::-;32994:7;33023:5;33012:16;;32957:77;;;:::o;33040:101::-;33076:7;33116:18;33109:5;33105:30;33094:41;;33040:101;;;:::o;33147:154::-;33231:6;33226:3;33221;33208:30;33293:1;33284:6;33279:3;33275:16;33268:27;33147:154;;;:::o;33307:307::-;33375:1;33385:113;33399:6;33396:1;33393:13;33385:113;;;33484:1;33479:3;33475:11;33469:18;33465:1;33460:3;33456:11;33449:39;33421:2;33418:1;33414:10;33409:15;;33385:113;;;33516:6;33513:1;33510:13;33507:101;;;33596:1;33587:6;33582:3;33578:16;33571:27;33507:101;33356:258;33307:307;;;:::o;33620:320::-;33664:6;33701:1;33695:4;33691:12;33681:22;;33748:1;33742:4;33738:12;33769:18;33759:81;;33825:4;33817:6;33813:17;33803:27;;33759:81;33887:2;33879:6;33876:14;33856:18;33853:38;33850:84;;;33906:18;;:::i;:::-;33850:84;33671:269;33620:320;;;:::o;33946:281::-;34029:27;34051:4;34029:27;:::i;:::-;34021:6;34017:40;34159:6;34147:10;34144:22;34123:18;34111:10;34108:34;34105:62;34102:88;;;34170:18;;:::i;:::-;34102:88;34210:10;34206:2;34199:22;33989:238;33946:281;;:::o;34233:233::-;34272:3;34295:24;34313:5;34295:24;:::i;:::-;34286:33;;34341:66;34334:5;34331:77;34328:103;;;34411:18;;:::i;:::-;34328:103;34458:1;34451:5;34447:13;34440:20;;34233:233;;;:::o;34472:176::-;34504:1;34521:20;34539:1;34521:20;:::i;:::-;34516:25;;34555:20;34573:1;34555:20;:::i;:::-;34550:25;;34594:1;34584:35;;34599:18;;:::i;:::-;34584:35;34640:1;34637;34633:9;34628:14;;34472:176;;;;:::o;34654:180::-;34702:77;34699:1;34692:88;34799:4;34796:1;34789:15;34823:4;34820:1;34813:15;34840:180;34888:77;34885:1;34878:88;34985:4;34982:1;34975:15;35009:4;35006:1;34999:15;35026:180;35074:77;35071:1;35064:88;35171:4;35168:1;35161:15;35195:4;35192:1;35185:15;35212:180;35260:77;35257:1;35250:88;35357:4;35354:1;35347:15;35381:4;35378:1;35371:15;35398:180;35446:77;35443:1;35436:88;35543:4;35540:1;35533:15;35567:4;35564:1;35557:15;35584:117;35693:1;35690;35683:12;35707:117;35816:1;35813;35806:12;35830:117;35939:1;35936;35929:12;35953:117;36062:1;36059;36052:12;36076:117;36185:1;36182;36175:12;36199:102;36240:6;36291:2;36287:7;36282:2;36275:5;36271:14;36267:28;36257:38;;36199:102;;;:::o;36307:225::-;36447:34;36443:1;36435:6;36431:14;36424:58;36516:8;36511:2;36503:6;36499:15;36492:33;36307:225;:::o;36538:179::-;36678:31;36674:1;36666:6;36662:14;36655:55;36538:179;:::o;36723:182::-;36863:34;36859:1;36851:6;36847:14;36840:58;36723:182;:::o;36911:234::-;37051:34;37047:1;37039:6;37035:14;37028:58;37120:17;37115:2;37107:6;37103:15;37096:42;36911:234;:::o;37151:114::-;;:::o;37271:171::-;37411:23;37407:1;37399:6;37395:14;37388:47;37271:171;:::o;37448:::-;37588:23;37584:1;37576:6;37572:14;37565:47;37448:171;:::o;37625:::-;37765:23;37761:1;37753:6;37749:14;37742:47;37625:171;:::o;37802:122::-;37875:24;37893:5;37875:24;:::i;:::-;37868:5;37865:35;37855:63;;37914:1;37911;37904:12;37855:63;37802:122;:::o;37930:116::-;38000:21;38015:5;38000:21;:::i;:::-;37993:5;37990:32;37980:60;;38036:1;38033;38026:12;37980:60;37930:116;:::o;38052:120::-;38124:23;38141:5;38124:23;:::i;:::-;38117:5;38114:34;38104:62;;38162:1;38159;38152:12;38104:62;38052:120;:::o;38178:122::-;38251:24;38269:5;38251:24;:::i;:::-;38244:5;38241:35;38231:63;;38290:1;38287;38280:12;38231:63;38178:122;:::o
Swarm Source
ipfs://40c3c27d9460f18a144d871f893e83d1ace8efed1c61a1c3296ce2f74cb5def8
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.