Token BAD Founders Passport
Overview CRC721
Total Supply:
406 VIP
Holders:
222 addresses
Contract:
Balance
1 VIP
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FoundersVIP
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2023-03-12 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `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.6.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 be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev 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/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/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/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/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _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/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: contracts/FoundersVIP.sol /* B.A.D Baby Alien Division ------------------------- Artist/Founder - Hawtchkiss (@DanielBHotchkis) Community Lead/Founder - Legendd (@ImDarrenB1) ------------------------- Contract Dev: @MatthewPaquette */ pragma solidity ^0.8.0; contract FoundersVIP is ERC721Enumerable, Pausable, Ownable { using Counters for Counters.Counter; Counters.Counter private _mintCounter; // Maximum number of VIP Passes uint256 public _maxMintable = 550; uint256 public _VIPMintPrice = 2500 ether; uint256 public _VIPPresalePrice = 2000 ether; // Settings uint256 public _maxMintPerTX = 3; bool public _endPresale = false; //External Contracts IERC721Enumerable public immutable babyAlienContract; // Base URI for metadata string public _prefixURI; // Events event BurnToken(uint256 tokenID); event SetBaseURI(string newURI); event AirDrop(address[] indexed addrs); event ToggleMintActive(bool mint1Active); event Mint(address indexed addr, uint256 amount, uint256 price); event MintPresale(address indexed addr, uint256 amount, uint256 price); event ToggleTransferPause(bool paused); event UpdateTotalSupply(uint256 newSupply); event UpdatePrice(uint256 newPrice); event UpdatePresalePrice(uint256 newPrice); event UpdateMaxMint(uint256 newMax); event Withdraw(uint256 amount); event MultiAirDrop(address adder, uint256 drops); event ToggleRegMint(bool); constructor(IERC721Enumerable _babyAlienContract) ERC721("BAD Founders Passport", "VIP") { babyAlienContract = _babyAlienContract; } /////////////////// // URI Functions // /////////////////// function _baseURI() internal view override returns (string memory) { return _prefixURI; } function setBaseURI(string memory _uri) public onlyOwner { _prefixURI = _uri; emit SetBaseURI(_uri); } function airDrop(address[] memory addrs) public onlyOwner { require(addrs.length > 0, "airDrop: must specify at least one address"); for (uint256 i = 0; i < addrs.length; i++) { _mintItem(addrs[i]); } emit AirDrop(addrs); } function multiAirDrop(address addr, uint256 dropCount) public onlyOwner { require(dropCount > 0, "multiAirDrop: must air drop at least one item"); require(addr != address(0)); for (uint256 i = 0; i < dropCount; i++) { _mintCounter.increment(); uint256 id = _mintCounter.current(); _safeMint(addr, id); } emit MultiAirDrop(addr, dropCount); } function mint(uint256 amount) external payable whenNotPaused { uint256 currentMintCount = _mintCounter.current(); require(currentMintCount < _maxMintable, "mint: no vip passes left to mint"); require(currentMintCount + amount <= _maxMintable, "mint: not enough VIP passes available to mint that amount"); require(amount <= _maxMintPerTX, "mint: amount limit exceeded per transaction"); //Presale is on if (_endPresale == false) { require(babyAlienContract.balanceOf(msg.sender) >= 3, "mint: sender does not quality for presale, must wait for regular mint"); require(msg.value == amount * _VIPPresalePrice, "mint: value passed is not correct to mint that amount during presale"); } //Pre sale is over else { require(msg.value == amount * _VIPMintPrice, "mint: value passed is not correct to mint that amount"); } for (uint256 i = 0; i < amount; i++) { _mintItem(msg.sender); } emit Mint(msg.sender, amount, _VIPMintPrice); } function _mintItem(address to) internal { _mintCounter.increment(); uint256 id = _mintCounter.current(); _safeMint(to, id); } function burnToken(uint256 tokenId) external virtual { require(_isApprovedOrOwner(msg.sender, tokenId), "burnToken: caller is not owner nor approved"); _burn(tokenId); emit BurnToken(tokenId); } ////////////////////// // State management // ////////////////////// function toggleAllMintPause() external onlyOwner { paused() ? _unpause() : _pause(); emit ToggleTransferPause(paused()); } function toggleRegMint() external onlyOwner { _endPresale = !_endPresale; emit ToggleRegMint(_endPresale); } function updatePrice(uint256 newPrice) external onlyOwner { require(newPrice > 0, "updatePrice: new price must be greater than 0"); _VIPMintPrice = newPrice; emit UpdatePrice(newPrice); } function updatePresalePrice(uint256 newPrice) external onlyOwner { require(newPrice > 0, "updatePrice: new price must be greater than 0"); _VIPPresalePrice = newPrice; emit UpdatePresalePrice(newPrice); } function updateTotalSupply(uint256 newSupply) external onlyOwner { require(newSupply > 0, "updateTotalSupply: new supply must be greater than 0"); _maxMintable = newSupply; emit UpdateTotalSupply(newSupply); } function updateMaxMintPerTX(uint256 newMax) external onlyOwner { require(newMax > 0, "updateMaxMintPerTX: new Max Mint must be greater than 0"); _maxMintPerTX = newMax; emit UpdateMaxMint(newMax); } function withdraw() external onlyOwner { require(address(this).balance > 0, "withdraw: contract balance must be greater than 0"); uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); emit Withdraw(balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC721Enumerable","name":"_babyAlienContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"AirDrop","type":"event"},{"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":false,"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"BurnToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"MintPresale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adder","type":"address"},{"indexed":false,"internalType":"uint256","name":"drops","type":"uint256"}],"name":"MultiAirDrop","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"newURI","type":"string"}],"name":"SetBaseURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"mint1Active","type":"bool"}],"name":"ToggleMintActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"","type":"bool"}],"name":"ToggleRegMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"ToggleTransferPause","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdateMaxMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"UpdatePresalePrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"UpdatePrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"UpdateTotalSupply","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"_VIPMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_VIPPresalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_endPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxMintPerTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxMintable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_prefixURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"babyAlienContract","outputs":[{"internalType":"contract IERC721Enumerable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"dropCount","type":"uint256"}],"name":"multiAirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleAllMintPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleRegMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"updateMaxMintPerTX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"updatePresalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"updatePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"updateTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a0604052610226600c5568878678326eac900000600d55686c6b935b8bbd400000600e556003600f556000601060006101000a81548160ff0219169083151502179055503480156200005157600080fd5b5060405162005bbc38038062005bbc833981810160405281019062000077919062000325565b6040518060400160405280601581526020017f42414420466f756e646572732050617373706f727400000000000000000000008152506040518060400160405280600381526020017f56495000000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000fb9291906200025e565b508060019080519060200190620001149291906200025e565b5050506000600a60006101000a81548160ff02191690831515021790555062000152620001466200019060201b60201c565b6200019860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250505062000423565b600033905090565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200026c906200039f565b90600052602060002090601f016020900481019282620002905760008555620002dc565b82601f10620002ab57805160ff1916838001178555620002dc565b82800160010185558215620002dc579182015b82811115620002db578251825591602001919060010190620002be565b5b509050620002eb9190620002ef565b5090565b5b808211156200030a576000816000905550600101620002f0565b5090565b6000815190506200031f8162000409565b92915050565b6000602082840312156200033e576200033d62000404565b5b60006200034e848285016200030e565b91505092915050565b600062000364826200037f565b9050919050565b6000620003788262000357565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006002820490506001821680620003b857607f821691505b60208210811415620003cf57620003ce620003d5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b62000414816200036b565b81146200042057600080fd5b50565b60805160601c615773620004496000396000818161198e01526121d001526157736000f3fe60806040526004361061022f5760003560e01c80637b47ec1a1161012e578063b96bb226116100ab578063daa4d82c1161006f578063daa4d82c146107f1578063e80a35581461081a578063e985e9c514610845578063f2fde38b14610882578063fae1c729146108ab5761022f565b8063b96bb2261461071c578063c32b93a314610747578063c3afb9f51461075e578063c87b56dd14610789578063d146a803146107c65761022f565b806395d89b41116100f257806395d89b411461065a578063a0712d6814610685578063a22cb465146106a1578063a3e271e5146106ca578063b88d4fde146106f35761022f565b80637b47ec1a14610589578063882f6643146105b25780638d6cc56d146105db5780638da5cb5b1461060457806391860f781461062f5761022f565b80633aae7e4e116101bc5780635c975abb116101805780635c975abb146104a45780636352211e146104cf57806366d49bab1461050c57806370a0823114610535578063715018a6146105725761022f565b80633aae7e4e146103d35780633ccfd60b146103fe57806342842e0e146104155780634f6ccce71461043e57806355f804b31461047b5761022f565b8063095ea7b311610203578063095ea7b31461030257806318160ddd1461032b57806323b872dd14610356578063274a32d31461037f5780632f745c59146103965761022f565b8062b6849f1461023457806301ffc9a71461025d57806306fdde031461029a578063081812fc146102c5575b600080fd5b34801561024057600080fd5b5061025b60048036038101906102569190613b71565b6108d6565b005b34801561026957600080fd5b50610284600480360381019061027f9190613bba565b610a1e565b6040516102919190614369565b60405180910390f35b3480156102a657600080fd5b506102af610a98565b6040516102bc919061439f565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e79190613c5d565b610b2a565b6040516102f991906142d9565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190613b31565b610baf565b005b34801561033757600080fd5b50610340610cc7565b60405161034d91906147e1565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190613a1b565b610cd4565b005b34801561038b57600080fd5b50610394610d34565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190613b31565b610e12565b6040516103ca91906147e1565b60405180910390f35b3480156103df57600080fd5b506103e8610eb7565b6040516103f591906147e1565b60405180910390f35b34801561040a57600080fd5b50610413610ebd565b005b34801561042157600080fd5b5061043c60048036038101906104379190613a1b565b611002565b005b34801561044a57600080fd5b5061046560048036038101906104609190613c5d565b611022565b60405161047291906147e1565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d9190613c14565b611093565b005b3480156104b057600080fd5b506104b9611160565b6040516104c69190614369565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f19190613c5d565b611177565b60405161050391906142d9565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190613c5d565b611229565b005b34801561054157600080fd5b5061055c600480360381019061055791906139ae565b611329565b60405161056991906147e1565b60405180910390f35b34801561057e57600080fd5b506105876113e1565b005b34801561059557600080fd5b506105b060048036038101906105ab9190613c5d565b611469565b005b3480156105be57600080fd5b506105d960048036038101906105d49190613c5d565b6114f5565b005b3480156105e757600080fd5b5061060260048036038101906105fd9190613c5d565b6115f5565b005b34801561061057600080fd5b506106196116f5565b60405161062691906142d9565b60405180910390f35b34801561063b57600080fd5b5061064461171f565b604051610651919061439f565b60405180910390f35b34801561066657600080fd5b5061066f6117ad565b60405161067c919061439f565b60405180910390f35b61069f600480360381019061069a9190613c5d565b61183f565b005b3480156106ad57600080fd5b506106c860048036038101906106c39190613af1565b611b98565b005b3480156106d657600080fd5b506106f160048036038101906106ec9190613c5d565b611bae565b005b3480156106ff57600080fd5b5061071a60048036038101906107159190613a6e565b611cae565b005b34801561072857600080fd5b50610731611d10565b60405161073e91906147e1565b60405180910390f35b34801561075357600080fd5b5061075c611d16565b005b34801561076a57600080fd5b50610773611e04565b6040516107809190614369565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190613c5d565b611e17565b6040516107bd919061439f565b60405180910390f35b3480156107d257600080fd5b506107db611ebe565b6040516107e891906147e1565b60405180910390f35b3480156107fd57600080fd5b5061081860048036038101906108139190613b31565b611ec4565b005b34801561082657600080fd5b5061082f61203c565b60405161083c91906147e1565b60405180910390f35b34801561085157600080fd5b5061086c600480360381019061086791906139db565b612042565b6040516108799190614369565b60405180910390f35b34801561088e57600080fd5b506108a960048036038101906108a491906139ae565b6120d6565b005b3480156108b757600080fd5b506108c06121ce565b6040516108cd9190614384565b60405180910390f35b6108de6121f2565b73ffffffffffffffffffffffffffffffffffffffff166108fc6116f5565b73ffffffffffffffffffffffffffffffffffffffff1614610952576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610949906146a1565b60405180910390fd5b6000815111610996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098d90614401565b60405180910390fd5b60005b81518110156109d8576109c58282815181106109b8576109b7614ce8565b5b60200260200101516121fa565b80806109d090614bb2565b915050610999565b50806040516109e7919061429e565b60405180910390207fb9413d9dd40eadf97d2949c3c57a163bb454e537a8696520d52a74e0252011e960405160405180910390a250565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a915750610a9082612220565b5b9050919050565b606060008054610aa790614b4f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad390614b4f565b8015610b205780601f10610af557610100808354040283529160200191610b20565b820191906000526020600020905b815481529060010190602001808311610b0357829003601f168201915b5050505050905090565b6000610b3582612302565b610b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6b90614681565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bba82611177565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c22906146e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c4a6121f2565b73ffffffffffffffffffffffffffffffffffffffff161480610c795750610c7881610c736121f2565b612042565b5b610cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caf906145e1565b60405180910390fd5b610cc2838361236e565b505050565b6000600880549050905090565b610ce5610cdf6121f2565b82612427565b610d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1b90614741565b60405180910390fd5b610d2f838383612505565b505050565b610d3c6121f2565b73ffffffffffffffffffffffffffffffffffffffff16610d5a6116f5565b73ffffffffffffffffffffffffffffffffffffffff1614610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da7906146a1565b60405180910390fd5b610db8611160565b610dc957610dc461276c565b610dd2565b610dd161280f565b5b7f71aa6dbdf1045ea9e6926a7848dbdd98d55270c4fee88cbc77fd816ccc8d6d2f610dfb611160565b604051610e089190614369565b60405180910390a1565b6000610e1d83611329565b8210610e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5590614421565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600e5481565b610ec56121f2565b73ffffffffffffffffffffffffffffffffffffffff16610ee36116f5565b73ffffffffffffffffffffffffffffffffffffffff1614610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f30906146a1565b60405180910390fd5b60004711610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7390614701565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fc7573d6000803e3d6000fd5b507f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d81604051610ff791906147e1565b60405180910390a150565b61101d83838360405180602001604052806000815250611cae565b505050565b600061102c610cc7565b821061106d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106490614781565b60405180910390fd5b6008828154811061108157611080614ce8565b5b90600052602060002001549050919050565b61109b6121f2565b73ffffffffffffffffffffffffffffffffffffffff166110b96116f5565b73ffffffffffffffffffffffffffffffffffffffff161461110f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611106906146a1565b60405180910390fd5b806011908051906020019061112592919061370f565b507f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa81604051611155919061439f565b60405180910390a150565b6000600a60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121790614621565b60405180910390fd5b80915050919050565b6112316121f2565b73ffffffffffffffffffffffffffffffffffffffff1661124f6116f5565b73ffffffffffffffffffffffffffffffffffffffff16146112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c906146a1565b60405180910390fd5b600081116112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df906143e1565b60405180910390fd5b80600c819055507fee643f334779f1031decbee003f80a0bcb7ecdc24b6693539cf7447a66afba8a8160405161131e91906147e1565b60405180910390a150565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561139a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139190614601565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113e96121f2565b73ffffffffffffffffffffffffffffffffffffffff166114076116f5565b73ffffffffffffffffffffffffffffffffffffffff161461145d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611454906146a1565b60405180910390fd5b61146760006128b1565b565b6114733382612427565b6114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990614641565b60405180910390fd5b6114bb81612977565b7f066548819fc4bd1208ea1c8608597593134d5661f459c2ef75cad30918af5a33816040516114ea91906147e1565b60405180910390a150565b6114fd6121f2565b73ffffffffffffffffffffffffffffffffffffffff1661151b6116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611571576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611568906146a1565b60405180910390fd5b600081116115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab90614761565b60405180910390fd5b80600f819055507f10c8453bb7e69387bc7864680c3c203d96807b6763152560dbd9e265886b2911816040516115ea91906147e1565b60405180910390a150565b6115fd6121f2565b73ffffffffffffffffffffffffffffffffffffffff1661161b6116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611671576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611668906146a1565b60405180910390fd5b600081116116b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ab906145c1565b60405180910390fd5b80600d819055507f1a15ab7124a4e1ce00837351261771caf1691cd7d85ed3a0ac3157a1ee1a3805816040516116ea91906147e1565b60405180910390a150565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6011805461172c90614b4f565b80601f016020809104026020016040519081016040528092919081815260200182805461175890614b4f565b80156117a55780601f1061177a576101008083540402835291602001916117a5565b820191906000526020600020905b81548152906001019060200180831161178857829003601f168201915b505050505081565b6060600180546117bc90614b4f565b80601f01602080910402602001604051908101604052809291908181526020018280546117e890614b4f565b80156118355780601f1061180a57610100808354040283529160200191611835565b820191906000526020600020905b81548152906001019060200180831161181857829003601f168201915b5050505050905090565b611847611160565b15611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e906145a1565b60405180910390fd5b6000611893600b612a94565b9050600c5481106118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d090614721565b60405180910390fd5b600c5482826118e8919061494e565b1115611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192090614501565b60405180910390fd5b600f5482111561196e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611965906144e1565b60405180910390fd5b60001515601060009054906101000a900460ff1615151415611aca5760037f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016119e591906142d9565b60206040518083038186803b1580156119fd57600080fd5b505afa158015611a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a359190613c8a565b1015611a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6d906147a1565b60405180910390fd5b600e5482611a8491906149d5565b3414611ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abc90614521565b60405180910390fd5b611b1a565b600d5482611ad891906149d5565b3414611b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b10906147c1565b60405180910390fd5b5b60005b82811015611b4157611b2e336121fa565b8080611b3990614bb2565b915050611b1d565b503373ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f83600d54604051611b8c9291906147fc565b60405180910390a25050565b611baa611ba36121f2565b8383612aa2565b5050565b611bb66121f2565b73ffffffffffffffffffffffffffffffffffffffff16611bd46116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c21906146a1565b60405180910390fd5b60008111611c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c64906145c1565b60405180910390fd5b80600e819055507f41f27932b14eeb7cdddd91a97a581179ced157406838bf38b9c13fd1cdc2a4be81604051611ca391906147e1565b60405180910390a150565b611cbf611cb96121f2565b83612427565b611cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf590614741565b60405180910390fd5b611d0a84848484612c0f565b50505050565b600d5481565b611d1e6121f2565b73ffffffffffffffffffffffffffffffffffffffff16611d3c6116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d89906146a1565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff0219169083151502179055507f9559e97d5fcb66d157fb9706d6ec28a0b878e4ffacaf681c9e00777495437475601060009054906101000a900460ff16604051611dfa9190614369565b60405180910390a1565b601060009054906101000a900460ff1681565b6060611e2282612302565b611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e58906146c1565b60405180910390fd5b6000611e6b612c6b565b90506000815111611e8b5760405180602001604052806000815250611eb6565b80611e9584612cfd565b604051602001611ea69291906142b5565b6040516020818303038152906040525b915050919050565b600f5481565b611ecc6121f2565b73ffffffffffffffffffffffffffffffffffffffff16611eea6116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f37906146a1565b60405180910390fd5b60008111611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a906144c1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fbd57600080fd5b60005b81811015611ffe57611fd2600b612e5e565b6000611fde600b612a94565b9050611fea8482612e74565b508080611ff690614bb2565b915050611fc0565b507f31850b90c262ba12465a840ca2afb77539f32ff13a040c6e78c59734f7c328308282604051612030929190614340565b60405180910390a15050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120de6121f2565b73ffffffffffffffffffffffffffffffffffffffff166120fc6116f5565b73ffffffffffffffffffffffffffffffffffffffff1614612152576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612149906146a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b990614461565b60405180910390fd5b6121cb816128b1565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b600033905090565b612204600b612e5e565b6000612210600b612a94565b905061221c8282612e74565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122eb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806122fb57506122fa82612e92565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123e183611177565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061243282612302565b612471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246890614581565b60405180910390fd5b600061247c83611177565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124be57506124bd8185612042565b5b806124fc57508373ffffffffffffffffffffffffffffffffffffffff166124e484610b2a565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661252582611177565b73ffffffffffffffffffffffffffffffffffffffff161461257b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257290614481565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e290614541565b60405180910390fd5b6125f6838383612efc565b61260160008261236e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126519190614a2f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126a8919061494e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612767838383613010565b505050565b612774611160565b156127b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ab906145a1565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586127f86121f2565b60405161280591906142d9565b60405180910390a1565b612817611160565b612856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284d906143c1565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61289a6121f2565b6040516128a791906142d9565b60405180910390a1565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061298282611177565b905061299081600084612efc565b61299b60008361236e565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129eb9190614a2f565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a9081600084613010565b5050565b600081600001549050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0890614561565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c029190614369565b60405180910390a3505050565b612c1a848484612505565b612c2684848484613015565b612c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5c90614441565b60405180910390fd5b50505050565b606060118054612c7a90614b4f565b80601f0160208091040260200160405190810160405280929190818152602001828054612ca690614b4f565b8015612cf35780601f10612cc857610100808354040283529160200191612cf3565b820191906000526020600020905b815481529060010190602001808311612cd657829003601f168201915b5050505050905090565b60606000821415612d45576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e59565b600082905060005b60008214612d77578080612d6090614bb2565b915050600a82612d7091906149a4565b9150612d4d565b60008167ffffffffffffffff811115612d9357612d92614d17565b5b6040519080825280601f01601f191660200182016040528015612dc55781602001600182028036833780820191505090505b5090505b60008514612e5257600182612dde9190614a2f565b9150600a85612ded9190614bfb565b6030612df9919061494e565b60f81b818381518110612e0f57612e0e614ce8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e4b91906149a4565b9450612dc9565b8093505050505b919050565b6001816000016000828254019250508190555050565b612e8e8282604051806020016040528060008152506131ac565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612f07838383613207565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f4a57612f458161320c565b612f89565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f8857612f878382613255565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fcc57612fc7816133c2565b61300b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461300a576130098282613493565b5b5b505050565b505050565b60006130368473ffffffffffffffffffffffffffffffffffffffff16613512565b1561319f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261305f6121f2565b8786866040518563ffffffff1660e01b815260040161308194939291906142f4565b602060405180830381600087803b15801561309b57600080fd5b505af19250505080156130cc57506040513d601f19601f820116820180604052508101906130c99190613be7565b60015b61314f573d80600081146130fc576040519150601f19603f3d011682016040523d82523d6000602084013e613101565b606091505b50600081511415613147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313e90614441565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131a4565b600190505b949350505050565b6131b68383613535565b6131c36000848484613015565b613202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f990614441565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161326284611329565b61326c9190614a2f565b9050600060076000848152602001908152602001600020549050818114613351576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506133d69190614a2f565b905060006009600084815260200190815260200160002054905060006008838154811061340657613405614ce8565b5b90600052602060002001549050806008838154811061342857613427614ce8565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061347757613476614cb9565b5b6001900381819060005260206000200160009055905550505050565b600061349e83611329565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359c90614661565b60405180910390fd5b6135ae81612302565b156135ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e5906144a1565b60405180910390fd5b6135fa60008383612efc565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461364a919061494e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461370b60008383613010565b5050565b82805461371b90614b4f565b90600052602060002090601f01602090048101928261373d5760008555613784565b82601f1061375657805160ff1916838001178555613784565b82800160010185558215613784579182015b82811115613783578251825591602001919060010190613768565b5b5090506137919190613795565b5090565b5b808211156137ae576000816000905550600101613796565b5090565b60006137c56137c08461484a565b614825565b905080838252602082019050828560208602820111156137e8576137e7614d4b565b5b60005b8581101561381857816137fe88826138a6565b8452602084019350602083019250506001810190506137eb565b5050509392505050565b600061383561383084614876565b614825565b90508281526020810184848401111561385157613850614d50565b5b61385c848285614b0d565b509392505050565b6000613877613872846148a7565b614825565b90508281526020810184848401111561389357613892614d50565b5b61389e848285614b0d565b509392505050565b6000813590506138b5816156e1565b92915050565b600082601f8301126138d0576138cf614d46565b5b81356138e08482602086016137b2565b91505092915050565b6000813590506138f8816156f8565b92915050565b60008135905061390d8161570f565b92915050565b6000815190506139228161570f565b92915050565b600082601f83011261393d5761393c614d46565b5b813561394d848260208601613822565b91505092915050565b600082601f83011261396b5761396a614d46565b5b813561397b848260208601613864565b91505092915050565b60008135905061399381615726565b92915050565b6000815190506139a881615726565b92915050565b6000602082840312156139c4576139c3614d5a565b5b60006139d2848285016138a6565b91505092915050565b600080604083850312156139f2576139f1614d5a565b5b6000613a00858286016138a6565b9250506020613a11858286016138a6565b9150509250929050565b600080600060608486031215613a3457613a33614d5a565b5b6000613a42868287016138a6565b9350506020613a53868287016138a6565b9250506040613a6486828701613984565b9150509250925092565b60008060008060808587031215613a8857613a87614d5a565b5b6000613a96878288016138a6565b9450506020613aa7878288016138a6565b9350506040613ab887828801613984565b925050606085013567ffffffffffffffff811115613ad957613ad8614d55565b5b613ae587828801613928565b91505092959194509250565b60008060408385031215613b0857613b07614d5a565b5b6000613b16858286016138a6565b9250506020613b27858286016138e9565b9150509250929050565b60008060408385031215613b4857613b47614d5a565b5b6000613b56858286016138a6565b9250506020613b6785828601613984565b9150509250929050565b600060208284031215613b8757613b86614d5a565b5b600082013567ffffffffffffffff811115613ba557613ba4614d55565b5b613bb1848285016138bb565b91505092915050565b600060208284031215613bd057613bcf614d5a565b5b6000613bde848285016138fe565b91505092915050565b600060208284031215613bfd57613bfc614d5a565b5b6000613c0b84828501613913565b91505092915050565b600060208284031215613c2a57613c29614d5a565b5b600082013567ffffffffffffffff811115613c4857613c47614d55565b5b613c5484828501613956565b91505092915050565b600060208284031215613c7357613c72614d5a565b5b6000613c8184828501613984565b91505092915050565b600060208284031215613ca057613c9f614d5a565b5b6000613cae84828501613999565b91505092915050565b6000613cc38383613cde565b60208301905092915050565b613cd881614a63565b82525050565b613ce781614a63565b82525050565b6000613cf8826148e8565b613d028185614916565b9350613d0d836148d8565b8060005b83811015613d3e578151613d258882613cb7565b9750613d3083614909565b925050600181019050613d11565b5085935050505092915050565b613d5481614a75565b82525050565b6000613d65826148f3565b613d6f8185614921565b9350613d7f818560208601614b1c565b613d8881614d5f565b840191505092915050565b613d9c81614ad7565b82525050565b6000613dad826148fe565b613db78185614932565b9350613dc7818560208601614b1c565b613dd081614d5f565b840191505092915050565b6000613de6826148fe565b613df08185614943565b9350613e00818560208601614b1c565b80840191505092915050565b6000613e19601483614932565b9150613e2482614d70565b602082019050919050565b6000613e3c603483614932565b9150613e4782614d99565b604082019050919050565b6000613e5f602a83614932565b9150613e6a82614de8565b604082019050919050565b6000613e82602b83614932565b9150613e8d82614e37565b604082019050919050565b6000613ea5603283614932565b9150613eb082614e86565b604082019050919050565b6000613ec8602683614932565b9150613ed382614ed5565b604082019050919050565b6000613eeb602583614932565b9150613ef682614f24565b604082019050919050565b6000613f0e601c83614932565b9150613f1982614f73565b602082019050919050565b6000613f31602d83614932565b9150613f3c82614f9c565b604082019050919050565b6000613f54602b83614932565b9150613f5f82614feb565b604082019050919050565b6000613f77603983614932565b9150613f828261503a565b604082019050919050565b6000613f9a604483614932565b9150613fa582615089565b606082019050919050565b6000613fbd602483614932565b9150613fc8826150fe565b604082019050919050565b6000613fe0601983614932565b9150613feb8261514d565b602082019050919050565b6000614003602c83614932565b915061400e82615176565b604082019050919050565b6000614026601083614932565b9150614031826151c5565b602082019050919050565b6000614049602d83614932565b9150614054826151ee565b604082019050919050565b600061406c603883614932565b91506140778261523d565b604082019050919050565b600061408f602a83614932565b915061409a8261528c565b604082019050919050565b60006140b2602983614932565b91506140bd826152db565b604082019050919050565b60006140d5602b83614932565b91506140e08261532a565b604082019050919050565b60006140f8602083614932565b915061410382615379565b602082019050919050565b600061411b602c83614932565b9150614126826153a2565b604082019050919050565b600061413e602083614932565b9150614149826153f1565b602082019050919050565b6000614161602f83614932565b915061416c8261541a565b604082019050919050565b6000614184602183614932565b915061418f82615469565b604082019050919050565b60006141a7603183614932565b91506141b2826154b8565b604082019050919050565b60006141ca602083614932565b91506141d582615507565b602082019050919050565b60006141ed603183614932565b91506141f882615530565b604082019050919050565b6000614210603783614932565b915061421b8261557f565b604082019050919050565b6000614233602c83614932565b915061423e826155ce565b604082019050919050565b6000614256604583614932565b91506142618261561d565b606082019050919050565b6000614279603583614932565b915061428482615692565b604082019050919050565b61429881614acd565b82525050565b60006142aa8284613ced565b915081905092915050565b60006142c18285613ddb565b91506142cd8284613ddb565b91508190509392505050565b60006020820190506142ee6000830184613ccf565b92915050565b60006080820190506143096000830187613ccf565b6143166020830186613ccf565b614323604083018561428f565b81810360608301526143358184613d5a565b905095945050505050565b60006040820190506143556000830185613ccf565b614362602083018461428f565b9392505050565b600060208201905061437e6000830184613d4b565b92915050565b60006020820190506143996000830184613d93565b92915050565b600060208201905081810360008301526143b98184613da2565b905092915050565b600060208201905081810360008301526143da81613e0c565b9050919050565b600060208201905081810360008301526143fa81613e2f565b9050919050565b6000602082019050818103600083015261441a81613e52565b9050919050565b6000602082019050818103600083015261443a81613e75565b9050919050565b6000602082019050818103600083015261445a81613e98565b9050919050565b6000602082019050818103600083015261447a81613ebb565b9050919050565b6000602082019050818103600083015261449a81613ede565b9050919050565b600060208201905081810360008301526144ba81613f01565b9050919050565b600060208201905081810360008301526144da81613f24565b9050919050565b600060208201905081810360008301526144fa81613f47565b9050919050565b6000602082019050818103600083015261451a81613f6a565b9050919050565b6000602082019050818103600083015261453a81613f8d565b9050919050565b6000602082019050818103600083015261455a81613fb0565b9050919050565b6000602082019050818103600083015261457a81613fd3565b9050919050565b6000602082019050818103600083015261459a81613ff6565b9050919050565b600060208201905081810360008301526145ba81614019565b9050919050565b600060208201905081810360008301526145da8161403c565b9050919050565b600060208201905081810360008301526145fa8161405f565b9050919050565b6000602082019050818103600083015261461a81614082565b9050919050565b6000602082019050818103600083015261463a816140a5565b9050919050565b6000602082019050818103600083015261465a816140c8565b9050919050565b6000602082019050818103600083015261467a816140eb565b9050919050565b6000602082019050818103600083015261469a8161410e565b9050919050565b600060208201905081810360008301526146ba81614131565b9050919050565b600060208201905081810360008301526146da81614154565b9050919050565b600060208201905081810360008301526146fa81614177565b9050919050565b6000602082019050818103600083015261471a8161419a565b9050919050565b6000602082019050818103600083015261473a816141bd565b9050919050565b6000602082019050818103600083015261475a816141e0565b9050919050565b6000602082019050818103600083015261477a81614203565b9050919050565b6000602082019050818103600083015261479a81614226565b9050919050565b600060208201905081810360008301526147ba81614249565b9050919050565b600060208201905081810360008301526147da8161426c565b9050919050565b60006020820190506147f6600083018461428f565b92915050565b6000604082019050614811600083018561428f565b61481e602083018461428f565b9392505050565b600061482f614840565b905061483b8282614b81565b919050565b6000604051905090565b600067ffffffffffffffff82111561486557614864614d17565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561489157614890614d17565b5b61489a82614d5f565b9050602081019050919050565b600067ffffffffffffffff8211156148c2576148c1614d17565b5b6148cb82614d5f565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061495982614acd565b915061496483614acd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561499957614998614c2c565b5b828201905092915050565b60006149af82614acd565b91506149ba83614acd565b9250826149ca576149c9614c5b565b5b828204905092915050565b60006149e082614acd565b91506149eb83614acd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a2457614a23614c2c565b5b828202905092915050565b6000614a3a82614acd565b9150614a4583614acd565b925082821015614a5857614a57614c2c565b5b828203905092915050565b6000614a6e82614aad565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614ae282614ae9565b9050919050565b6000614af482614afb565b9050919050565b6000614b0682614aad565b9050919050565b82818337600083830152505050565b60005b83811015614b3a578082015181840152602081019050614b1f565b83811115614b49576000848401525b50505050565b60006002820490506001821680614b6757607f821691505b60208210811415614b7b57614b7a614c8a565b5b50919050565b614b8a82614d5f565b810181811067ffffffffffffffff82111715614ba957614ba8614d17565b5b80604052505050565b6000614bbd82614acd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614bf057614bef614c2c565b5b600182019050919050565b6000614c0682614acd565b9150614c1183614acd565b925082614c2157614c20614c5b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f757064617465546f74616c537570706c793a206e657720737570706c79206d7560008201527f73742062652067726561746572207468616e2030000000000000000000000000602082015250565b7f61697244726f703a206d7573742073706563696679206174206c65617374206f60008201527f6e65206164647265737300000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d756c746941697244726f703a206d757374206169722064726f70206174206c60008201527f65617374206f6e65206974656d00000000000000000000000000000000000000602082015250565b7f6d696e743a20616d6f756e74206c696d6974206578636565646564207065722060008201527f7472616e73616374696f6e000000000000000000000000000000000000000000602082015250565b7f6d696e743a206e6f7420656e6f7567682056495020706173736573206176616960008201527f6c61626c6520746f206d696e74207468617420616d6f756e7400000000000000602082015250565b7f6d696e743a2076616c756520706173736564206973206e6f7420636f7272656360008201527f7420746f206d696e74207468617420616d6f756e7420647572696e672070726560208201527f73616c6500000000000000000000000000000000000000000000000000000000604082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f75706461746550726963653a206e6577207072696365206d757374206265206760008201527f726561746572207468616e203000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6275726e546f6b656e3a2063616c6c6572206973206e6f74206f776e6572206e60008201527f6f7220617070726f766564000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f77697468647261773a20636f6e74726163742062616c616e6365206d7573742060008201527f62652067726561746572207468616e2030000000000000000000000000000000602082015250565b7f6d696e743a206e6f2076697020706173736573206c65667420746f206d696e74600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f7570646174654d61784d696e7450657254583a206e6577204d6178204d696e7460008201527f206d7573742062652067726561746572207468616e2030000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f6d696e743a2073656e64657220646f6573206e6f74207175616c69747920666f60008201527f722070726573616c652c206d757374207761697420666f7220726567756c617260208201527f206d696e74000000000000000000000000000000000000000000000000000000604082015250565b7f6d696e743a2076616c756520706173736564206973206e6f7420636f7272656360008201527f7420746f206d696e74207468617420616d6f756e740000000000000000000000602082015250565b6156ea81614a63565b81146156f557600080fd5b50565b61570181614a75565b811461570c57600080fd5b50565b61571881614a81565b811461572357600080fd5b50565b61572f81614acd565b811461573a57600080fd5b5056fea2646970667358221220ac8117bc94f3cdbff46bd1d37183ba0e158b95eabcaf48384e5a42fc47dd21e764736f6c63430008070033000000000000000000000000b340c91182b9ff831bb36232cb3296ed306c79b2
Deployed Bytecode
0x60806040526004361061022f5760003560e01c80637b47ec1a1161012e578063b96bb226116100ab578063daa4d82c1161006f578063daa4d82c146107f1578063e80a35581461081a578063e985e9c514610845578063f2fde38b14610882578063fae1c729146108ab5761022f565b8063b96bb2261461071c578063c32b93a314610747578063c3afb9f51461075e578063c87b56dd14610789578063d146a803146107c65761022f565b806395d89b41116100f257806395d89b411461065a578063a0712d6814610685578063a22cb465146106a1578063a3e271e5146106ca578063b88d4fde146106f35761022f565b80637b47ec1a14610589578063882f6643146105b25780638d6cc56d146105db5780638da5cb5b1461060457806391860f781461062f5761022f565b80633aae7e4e116101bc5780635c975abb116101805780635c975abb146104a45780636352211e146104cf57806366d49bab1461050c57806370a0823114610535578063715018a6146105725761022f565b80633aae7e4e146103d35780633ccfd60b146103fe57806342842e0e146104155780634f6ccce71461043e57806355f804b31461047b5761022f565b8063095ea7b311610203578063095ea7b31461030257806318160ddd1461032b57806323b872dd14610356578063274a32d31461037f5780632f745c59146103965761022f565b8062b6849f1461023457806301ffc9a71461025d57806306fdde031461029a578063081812fc146102c5575b600080fd5b34801561024057600080fd5b5061025b60048036038101906102569190613b71565b6108d6565b005b34801561026957600080fd5b50610284600480360381019061027f9190613bba565b610a1e565b6040516102919190614369565b60405180910390f35b3480156102a657600080fd5b506102af610a98565b6040516102bc919061439f565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e79190613c5d565b610b2a565b6040516102f991906142d9565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190613b31565b610baf565b005b34801561033757600080fd5b50610340610cc7565b60405161034d91906147e1565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190613a1b565b610cd4565b005b34801561038b57600080fd5b50610394610d34565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190613b31565b610e12565b6040516103ca91906147e1565b60405180910390f35b3480156103df57600080fd5b506103e8610eb7565b6040516103f591906147e1565b60405180910390f35b34801561040a57600080fd5b50610413610ebd565b005b34801561042157600080fd5b5061043c60048036038101906104379190613a1b565b611002565b005b34801561044a57600080fd5b5061046560048036038101906104609190613c5d565b611022565b60405161047291906147e1565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d9190613c14565b611093565b005b3480156104b057600080fd5b506104b9611160565b6040516104c69190614369565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f19190613c5d565b611177565b60405161050391906142d9565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190613c5d565b611229565b005b34801561054157600080fd5b5061055c600480360381019061055791906139ae565b611329565b60405161056991906147e1565b60405180910390f35b34801561057e57600080fd5b506105876113e1565b005b34801561059557600080fd5b506105b060048036038101906105ab9190613c5d565b611469565b005b3480156105be57600080fd5b506105d960048036038101906105d49190613c5d565b6114f5565b005b3480156105e757600080fd5b5061060260048036038101906105fd9190613c5d565b6115f5565b005b34801561061057600080fd5b506106196116f5565b60405161062691906142d9565b60405180910390f35b34801561063b57600080fd5b5061064461171f565b604051610651919061439f565b60405180910390f35b34801561066657600080fd5b5061066f6117ad565b60405161067c919061439f565b60405180910390f35b61069f600480360381019061069a9190613c5d565b61183f565b005b3480156106ad57600080fd5b506106c860048036038101906106c39190613af1565b611b98565b005b3480156106d657600080fd5b506106f160048036038101906106ec9190613c5d565b611bae565b005b3480156106ff57600080fd5b5061071a60048036038101906107159190613a6e565b611cae565b005b34801561072857600080fd5b50610731611d10565b60405161073e91906147e1565b60405180910390f35b34801561075357600080fd5b5061075c611d16565b005b34801561076a57600080fd5b50610773611e04565b6040516107809190614369565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190613c5d565b611e17565b6040516107bd919061439f565b60405180910390f35b3480156107d257600080fd5b506107db611ebe565b6040516107e891906147e1565b60405180910390f35b3480156107fd57600080fd5b5061081860048036038101906108139190613b31565b611ec4565b005b34801561082657600080fd5b5061082f61203c565b60405161083c91906147e1565b60405180910390f35b34801561085157600080fd5b5061086c600480360381019061086791906139db565b612042565b6040516108799190614369565b60405180910390f35b34801561088e57600080fd5b506108a960048036038101906108a491906139ae565b6120d6565b005b3480156108b757600080fd5b506108c06121ce565b6040516108cd9190614384565b60405180910390f35b6108de6121f2565b73ffffffffffffffffffffffffffffffffffffffff166108fc6116f5565b73ffffffffffffffffffffffffffffffffffffffff1614610952576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610949906146a1565b60405180910390fd5b6000815111610996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098d90614401565b60405180910390fd5b60005b81518110156109d8576109c58282815181106109b8576109b7614ce8565b5b60200260200101516121fa565b80806109d090614bb2565b915050610999565b50806040516109e7919061429e565b60405180910390207fb9413d9dd40eadf97d2949c3c57a163bb454e537a8696520d52a74e0252011e960405160405180910390a250565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a915750610a9082612220565b5b9050919050565b606060008054610aa790614b4f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad390614b4f565b8015610b205780601f10610af557610100808354040283529160200191610b20565b820191906000526020600020905b815481529060010190602001808311610b0357829003601f168201915b5050505050905090565b6000610b3582612302565b610b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6b90614681565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bba82611177565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c22906146e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c4a6121f2565b73ffffffffffffffffffffffffffffffffffffffff161480610c795750610c7881610c736121f2565b612042565b5b610cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caf906145e1565b60405180910390fd5b610cc2838361236e565b505050565b6000600880549050905090565b610ce5610cdf6121f2565b82612427565b610d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1b90614741565b60405180910390fd5b610d2f838383612505565b505050565b610d3c6121f2565b73ffffffffffffffffffffffffffffffffffffffff16610d5a6116f5565b73ffffffffffffffffffffffffffffffffffffffff1614610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da7906146a1565b60405180910390fd5b610db8611160565b610dc957610dc461276c565b610dd2565b610dd161280f565b5b7f71aa6dbdf1045ea9e6926a7848dbdd98d55270c4fee88cbc77fd816ccc8d6d2f610dfb611160565b604051610e089190614369565b60405180910390a1565b6000610e1d83611329565b8210610e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5590614421565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600e5481565b610ec56121f2565b73ffffffffffffffffffffffffffffffffffffffff16610ee36116f5565b73ffffffffffffffffffffffffffffffffffffffff1614610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f30906146a1565b60405180910390fd5b60004711610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7390614701565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fc7573d6000803e3d6000fd5b507f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d81604051610ff791906147e1565b60405180910390a150565b61101d83838360405180602001604052806000815250611cae565b505050565b600061102c610cc7565b821061106d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106490614781565b60405180910390fd5b6008828154811061108157611080614ce8565b5b90600052602060002001549050919050565b61109b6121f2565b73ffffffffffffffffffffffffffffffffffffffff166110b96116f5565b73ffffffffffffffffffffffffffffffffffffffff161461110f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611106906146a1565b60405180910390fd5b806011908051906020019061112592919061370f565b507f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa81604051611155919061439f565b60405180910390a150565b6000600a60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121790614621565b60405180910390fd5b80915050919050565b6112316121f2565b73ffffffffffffffffffffffffffffffffffffffff1661124f6116f5565b73ffffffffffffffffffffffffffffffffffffffff16146112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c906146a1565b60405180910390fd5b600081116112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df906143e1565b60405180910390fd5b80600c819055507fee643f334779f1031decbee003f80a0bcb7ecdc24b6693539cf7447a66afba8a8160405161131e91906147e1565b60405180910390a150565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561139a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139190614601565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113e96121f2565b73ffffffffffffffffffffffffffffffffffffffff166114076116f5565b73ffffffffffffffffffffffffffffffffffffffff161461145d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611454906146a1565b60405180910390fd5b61146760006128b1565b565b6114733382612427565b6114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990614641565b60405180910390fd5b6114bb81612977565b7f066548819fc4bd1208ea1c8608597593134d5661f459c2ef75cad30918af5a33816040516114ea91906147e1565b60405180910390a150565b6114fd6121f2565b73ffffffffffffffffffffffffffffffffffffffff1661151b6116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611571576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611568906146a1565b60405180910390fd5b600081116115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab90614761565b60405180910390fd5b80600f819055507f10c8453bb7e69387bc7864680c3c203d96807b6763152560dbd9e265886b2911816040516115ea91906147e1565b60405180910390a150565b6115fd6121f2565b73ffffffffffffffffffffffffffffffffffffffff1661161b6116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611671576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611668906146a1565b60405180910390fd5b600081116116b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ab906145c1565b60405180910390fd5b80600d819055507f1a15ab7124a4e1ce00837351261771caf1691cd7d85ed3a0ac3157a1ee1a3805816040516116ea91906147e1565b60405180910390a150565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6011805461172c90614b4f565b80601f016020809104026020016040519081016040528092919081815260200182805461175890614b4f565b80156117a55780601f1061177a576101008083540402835291602001916117a5565b820191906000526020600020905b81548152906001019060200180831161178857829003601f168201915b505050505081565b6060600180546117bc90614b4f565b80601f01602080910402602001604051908101604052809291908181526020018280546117e890614b4f565b80156118355780601f1061180a57610100808354040283529160200191611835565b820191906000526020600020905b81548152906001019060200180831161181857829003601f168201915b5050505050905090565b611847611160565b15611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e906145a1565b60405180910390fd5b6000611893600b612a94565b9050600c5481106118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d090614721565b60405180910390fd5b600c5482826118e8919061494e565b1115611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192090614501565b60405180910390fd5b600f5482111561196e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611965906144e1565b60405180910390fd5b60001515601060009054906101000a900460ff1615151415611aca5760037f000000000000000000000000b340c91182b9ff831bb36232cb3296ed306c79b273ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016119e591906142d9565b60206040518083038186803b1580156119fd57600080fd5b505afa158015611a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a359190613c8a565b1015611a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6d906147a1565b60405180910390fd5b600e5482611a8491906149d5565b3414611ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abc90614521565b60405180910390fd5b611b1a565b600d5482611ad891906149d5565b3414611b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b10906147c1565b60405180910390fd5b5b60005b82811015611b4157611b2e336121fa565b8080611b3990614bb2565b915050611b1d565b503373ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f83600d54604051611b8c9291906147fc565b60405180910390a25050565b611baa611ba36121f2565b8383612aa2565b5050565b611bb66121f2565b73ffffffffffffffffffffffffffffffffffffffff16611bd46116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c21906146a1565b60405180910390fd5b60008111611c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c64906145c1565b60405180910390fd5b80600e819055507f41f27932b14eeb7cdddd91a97a581179ced157406838bf38b9c13fd1cdc2a4be81604051611ca391906147e1565b60405180910390a150565b611cbf611cb96121f2565b83612427565b611cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf590614741565b60405180910390fd5b611d0a84848484612c0f565b50505050565b600d5481565b611d1e6121f2565b73ffffffffffffffffffffffffffffffffffffffff16611d3c6116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d89906146a1565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff0219169083151502179055507f9559e97d5fcb66d157fb9706d6ec28a0b878e4ffacaf681c9e00777495437475601060009054906101000a900460ff16604051611dfa9190614369565b60405180910390a1565b601060009054906101000a900460ff1681565b6060611e2282612302565b611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e58906146c1565b60405180910390fd5b6000611e6b612c6b565b90506000815111611e8b5760405180602001604052806000815250611eb6565b80611e9584612cfd565b604051602001611ea69291906142b5565b6040516020818303038152906040525b915050919050565b600f5481565b611ecc6121f2565b73ffffffffffffffffffffffffffffffffffffffff16611eea6116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f37906146a1565b60405180910390fd5b60008111611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a906144c1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fbd57600080fd5b60005b81811015611ffe57611fd2600b612e5e565b6000611fde600b612a94565b9050611fea8482612e74565b508080611ff690614bb2565b915050611fc0565b507f31850b90c262ba12465a840ca2afb77539f32ff13a040c6e78c59734f7c328308282604051612030929190614340565b60405180910390a15050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120de6121f2565b73ffffffffffffffffffffffffffffffffffffffff166120fc6116f5565b73ffffffffffffffffffffffffffffffffffffffff1614612152576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612149906146a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b990614461565b60405180910390fd5b6121cb816128b1565b50565b7f000000000000000000000000b340c91182b9ff831bb36232cb3296ed306c79b281565b600033905090565b612204600b612e5e565b6000612210600b612a94565b905061221c8282612e74565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122eb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806122fb57506122fa82612e92565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123e183611177565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061243282612302565b612471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246890614581565b60405180910390fd5b600061247c83611177565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124be57506124bd8185612042565b5b806124fc57508373ffffffffffffffffffffffffffffffffffffffff166124e484610b2a565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661252582611177565b73ffffffffffffffffffffffffffffffffffffffff161461257b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257290614481565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e290614541565b60405180910390fd5b6125f6838383612efc565b61260160008261236e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126519190614a2f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126a8919061494e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612767838383613010565b505050565b612774611160565b156127b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ab906145a1565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586127f86121f2565b60405161280591906142d9565b60405180910390a1565b612817611160565b612856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284d906143c1565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61289a6121f2565b6040516128a791906142d9565b60405180910390a1565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061298282611177565b905061299081600084612efc565b61299b60008361236e565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129eb9190614a2f565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a9081600084613010565b5050565b600081600001549050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0890614561565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c029190614369565b60405180910390a3505050565b612c1a848484612505565b612c2684848484613015565b612c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5c90614441565b60405180910390fd5b50505050565b606060118054612c7a90614b4f565b80601f0160208091040260200160405190810160405280929190818152602001828054612ca690614b4f565b8015612cf35780601f10612cc857610100808354040283529160200191612cf3565b820191906000526020600020905b815481529060010190602001808311612cd657829003601f168201915b5050505050905090565b60606000821415612d45576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e59565b600082905060005b60008214612d77578080612d6090614bb2565b915050600a82612d7091906149a4565b9150612d4d565b60008167ffffffffffffffff811115612d9357612d92614d17565b5b6040519080825280601f01601f191660200182016040528015612dc55781602001600182028036833780820191505090505b5090505b60008514612e5257600182612dde9190614a2f565b9150600a85612ded9190614bfb565b6030612df9919061494e565b60f81b818381518110612e0f57612e0e614ce8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e4b91906149a4565b9450612dc9565b8093505050505b919050565b6001816000016000828254019250508190555050565b612e8e8282604051806020016040528060008152506131ac565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612f07838383613207565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f4a57612f458161320c565b612f89565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f8857612f878382613255565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fcc57612fc7816133c2565b61300b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461300a576130098282613493565b5b5b505050565b505050565b60006130368473ffffffffffffffffffffffffffffffffffffffff16613512565b1561319f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261305f6121f2565b8786866040518563ffffffff1660e01b815260040161308194939291906142f4565b602060405180830381600087803b15801561309b57600080fd5b505af19250505080156130cc57506040513d601f19601f820116820180604052508101906130c99190613be7565b60015b61314f573d80600081146130fc576040519150601f19603f3d011682016040523d82523d6000602084013e613101565b606091505b50600081511415613147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313e90614441565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131a4565b600190505b949350505050565b6131b68383613535565b6131c36000848484613015565b613202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f990614441565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161326284611329565b61326c9190614a2f565b9050600060076000848152602001908152602001600020549050818114613351576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506133d69190614a2f565b905060006009600084815260200190815260200160002054905060006008838154811061340657613405614ce8565b5b90600052602060002001549050806008838154811061342857613427614ce8565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061347757613476614cb9565b5b6001900381819060005260206000200160009055905550505050565b600061349e83611329565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359c90614661565b60405180910390fd5b6135ae81612302565b156135ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e5906144a1565b60405180910390fd5b6135fa60008383612efc565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461364a919061494e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461370b60008383613010565b5050565b82805461371b90614b4f565b90600052602060002090601f01602090048101928261373d5760008555613784565b82601f1061375657805160ff1916838001178555613784565b82800160010185558215613784579182015b82811115613783578251825591602001919060010190613768565b5b5090506137919190613795565b5090565b5b808211156137ae576000816000905550600101613796565b5090565b60006137c56137c08461484a565b614825565b905080838252602082019050828560208602820111156137e8576137e7614d4b565b5b60005b8581101561381857816137fe88826138a6565b8452602084019350602083019250506001810190506137eb565b5050509392505050565b600061383561383084614876565b614825565b90508281526020810184848401111561385157613850614d50565b5b61385c848285614b0d565b509392505050565b6000613877613872846148a7565b614825565b90508281526020810184848401111561389357613892614d50565b5b61389e848285614b0d565b509392505050565b6000813590506138b5816156e1565b92915050565b600082601f8301126138d0576138cf614d46565b5b81356138e08482602086016137b2565b91505092915050565b6000813590506138f8816156f8565b92915050565b60008135905061390d8161570f565b92915050565b6000815190506139228161570f565b92915050565b600082601f83011261393d5761393c614d46565b5b813561394d848260208601613822565b91505092915050565b600082601f83011261396b5761396a614d46565b5b813561397b848260208601613864565b91505092915050565b60008135905061399381615726565b92915050565b6000815190506139a881615726565b92915050565b6000602082840312156139c4576139c3614d5a565b5b60006139d2848285016138a6565b91505092915050565b600080604083850312156139f2576139f1614d5a565b5b6000613a00858286016138a6565b9250506020613a11858286016138a6565b9150509250929050565b600080600060608486031215613a3457613a33614d5a565b5b6000613a42868287016138a6565b9350506020613a53868287016138a6565b9250506040613a6486828701613984565b9150509250925092565b60008060008060808587031215613a8857613a87614d5a565b5b6000613a96878288016138a6565b9450506020613aa7878288016138a6565b9350506040613ab887828801613984565b925050606085013567ffffffffffffffff811115613ad957613ad8614d55565b5b613ae587828801613928565b91505092959194509250565b60008060408385031215613b0857613b07614d5a565b5b6000613b16858286016138a6565b9250506020613b27858286016138e9565b9150509250929050565b60008060408385031215613b4857613b47614d5a565b5b6000613b56858286016138a6565b9250506020613b6785828601613984565b9150509250929050565b600060208284031215613b8757613b86614d5a565b5b600082013567ffffffffffffffff811115613ba557613ba4614d55565b5b613bb1848285016138bb565b91505092915050565b600060208284031215613bd057613bcf614d5a565b5b6000613bde848285016138fe565b91505092915050565b600060208284031215613bfd57613bfc614d5a565b5b6000613c0b84828501613913565b91505092915050565b600060208284031215613c2a57613c29614d5a565b5b600082013567ffffffffffffffff811115613c4857613c47614d55565b5b613c5484828501613956565b91505092915050565b600060208284031215613c7357613c72614d5a565b5b6000613c8184828501613984565b91505092915050565b600060208284031215613ca057613c9f614d5a565b5b6000613cae84828501613999565b91505092915050565b6000613cc38383613cde565b60208301905092915050565b613cd881614a63565b82525050565b613ce781614a63565b82525050565b6000613cf8826148e8565b613d028185614916565b9350613d0d836148d8565b8060005b83811015613d3e578151613d258882613cb7565b9750613d3083614909565b925050600181019050613d11565b5085935050505092915050565b613d5481614a75565b82525050565b6000613d65826148f3565b613d6f8185614921565b9350613d7f818560208601614b1c565b613d8881614d5f565b840191505092915050565b613d9c81614ad7565b82525050565b6000613dad826148fe565b613db78185614932565b9350613dc7818560208601614b1c565b613dd081614d5f565b840191505092915050565b6000613de6826148fe565b613df08185614943565b9350613e00818560208601614b1c565b80840191505092915050565b6000613e19601483614932565b9150613e2482614d70565b602082019050919050565b6000613e3c603483614932565b9150613e4782614d99565b604082019050919050565b6000613e5f602a83614932565b9150613e6a82614de8565b604082019050919050565b6000613e82602b83614932565b9150613e8d82614e37565b604082019050919050565b6000613ea5603283614932565b9150613eb082614e86565b604082019050919050565b6000613ec8602683614932565b9150613ed382614ed5565b604082019050919050565b6000613eeb602583614932565b9150613ef682614f24565b604082019050919050565b6000613f0e601c83614932565b9150613f1982614f73565b602082019050919050565b6000613f31602d83614932565b9150613f3c82614f9c565b604082019050919050565b6000613f54602b83614932565b9150613f5f82614feb565b604082019050919050565b6000613f77603983614932565b9150613f828261503a565b604082019050919050565b6000613f9a604483614932565b9150613fa582615089565b606082019050919050565b6000613fbd602483614932565b9150613fc8826150fe565b604082019050919050565b6000613fe0601983614932565b9150613feb8261514d565b602082019050919050565b6000614003602c83614932565b915061400e82615176565b604082019050919050565b6000614026601083614932565b9150614031826151c5565b602082019050919050565b6000614049602d83614932565b9150614054826151ee565b604082019050919050565b600061406c603883614932565b91506140778261523d565b604082019050919050565b600061408f602a83614932565b915061409a8261528c565b604082019050919050565b60006140b2602983614932565b91506140bd826152db565b604082019050919050565b60006140d5602b83614932565b91506140e08261532a565b604082019050919050565b60006140f8602083614932565b915061410382615379565b602082019050919050565b600061411b602c83614932565b9150614126826153a2565b604082019050919050565b600061413e602083614932565b9150614149826153f1565b602082019050919050565b6000614161602f83614932565b915061416c8261541a565b604082019050919050565b6000614184602183614932565b915061418f82615469565b604082019050919050565b60006141a7603183614932565b91506141b2826154b8565b604082019050919050565b60006141ca602083614932565b91506141d582615507565b602082019050919050565b60006141ed603183614932565b91506141f882615530565b604082019050919050565b6000614210603783614932565b915061421b8261557f565b604082019050919050565b6000614233602c83614932565b915061423e826155ce565b604082019050919050565b6000614256604583614932565b91506142618261561d565b606082019050919050565b6000614279603583614932565b915061428482615692565b604082019050919050565b61429881614acd565b82525050565b60006142aa8284613ced565b915081905092915050565b60006142c18285613ddb565b91506142cd8284613ddb565b91508190509392505050565b60006020820190506142ee6000830184613ccf565b92915050565b60006080820190506143096000830187613ccf565b6143166020830186613ccf565b614323604083018561428f565b81810360608301526143358184613d5a565b905095945050505050565b60006040820190506143556000830185613ccf565b614362602083018461428f565b9392505050565b600060208201905061437e6000830184613d4b565b92915050565b60006020820190506143996000830184613d93565b92915050565b600060208201905081810360008301526143b98184613da2565b905092915050565b600060208201905081810360008301526143da81613e0c565b9050919050565b600060208201905081810360008301526143fa81613e2f565b9050919050565b6000602082019050818103600083015261441a81613e52565b9050919050565b6000602082019050818103600083015261443a81613e75565b9050919050565b6000602082019050818103600083015261445a81613e98565b9050919050565b6000602082019050818103600083015261447a81613ebb565b9050919050565b6000602082019050818103600083015261449a81613ede565b9050919050565b600060208201905081810360008301526144ba81613f01565b9050919050565b600060208201905081810360008301526144da81613f24565b9050919050565b600060208201905081810360008301526144fa81613f47565b9050919050565b6000602082019050818103600083015261451a81613f6a565b9050919050565b6000602082019050818103600083015261453a81613f8d565b9050919050565b6000602082019050818103600083015261455a81613fb0565b9050919050565b6000602082019050818103600083015261457a81613fd3565b9050919050565b6000602082019050818103600083015261459a81613ff6565b9050919050565b600060208201905081810360008301526145ba81614019565b9050919050565b600060208201905081810360008301526145da8161403c565b9050919050565b600060208201905081810360008301526145fa8161405f565b9050919050565b6000602082019050818103600083015261461a81614082565b9050919050565b6000602082019050818103600083015261463a816140a5565b9050919050565b6000602082019050818103600083015261465a816140c8565b9050919050565b6000602082019050818103600083015261467a816140eb565b9050919050565b6000602082019050818103600083015261469a8161410e565b9050919050565b600060208201905081810360008301526146ba81614131565b9050919050565b600060208201905081810360008301526146da81614154565b9050919050565b600060208201905081810360008301526146fa81614177565b9050919050565b6000602082019050818103600083015261471a8161419a565b9050919050565b6000602082019050818103600083015261473a816141bd565b9050919050565b6000602082019050818103600083015261475a816141e0565b9050919050565b6000602082019050818103600083015261477a81614203565b9050919050565b6000602082019050818103600083015261479a81614226565b9050919050565b600060208201905081810360008301526147ba81614249565b9050919050565b600060208201905081810360008301526147da8161426c565b9050919050565b60006020820190506147f6600083018461428f565b92915050565b6000604082019050614811600083018561428f565b61481e602083018461428f565b9392505050565b600061482f614840565b905061483b8282614b81565b919050565b6000604051905090565b600067ffffffffffffffff82111561486557614864614d17565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561489157614890614d17565b5b61489a82614d5f565b9050602081019050919050565b600067ffffffffffffffff8211156148c2576148c1614d17565b5b6148cb82614d5f565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061495982614acd565b915061496483614acd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561499957614998614c2c565b5b828201905092915050565b60006149af82614acd565b91506149ba83614acd565b9250826149ca576149c9614c5b565b5b828204905092915050565b60006149e082614acd565b91506149eb83614acd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a2457614a23614c2c565b5b828202905092915050565b6000614a3a82614acd565b9150614a4583614acd565b925082821015614a5857614a57614c2c565b5b828203905092915050565b6000614a6e82614aad565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614ae282614ae9565b9050919050565b6000614af482614afb565b9050919050565b6000614b0682614aad565b9050919050565b82818337600083830152505050565b60005b83811015614b3a578082015181840152602081019050614b1f565b83811115614b49576000848401525b50505050565b60006002820490506001821680614b6757607f821691505b60208210811415614b7b57614b7a614c8a565b5b50919050565b614b8a82614d5f565b810181811067ffffffffffffffff82111715614ba957614ba8614d17565b5b80604052505050565b6000614bbd82614acd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614bf057614bef614c2c565b5b600182019050919050565b6000614c0682614acd565b9150614c1183614acd565b925082614c2157614c20614c5b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f757064617465546f74616c537570706c793a206e657720737570706c79206d7560008201527f73742062652067726561746572207468616e2030000000000000000000000000602082015250565b7f61697244726f703a206d7573742073706563696679206174206c65617374206f60008201527f6e65206164647265737300000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d756c746941697244726f703a206d757374206169722064726f70206174206c60008201527f65617374206f6e65206974656d00000000000000000000000000000000000000602082015250565b7f6d696e743a20616d6f756e74206c696d6974206578636565646564207065722060008201527f7472616e73616374696f6e000000000000000000000000000000000000000000602082015250565b7f6d696e743a206e6f7420656e6f7567682056495020706173736573206176616960008201527f6c61626c6520746f206d696e74207468617420616d6f756e7400000000000000602082015250565b7f6d696e743a2076616c756520706173736564206973206e6f7420636f7272656360008201527f7420746f206d696e74207468617420616d6f756e7420647572696e672070726560208201527f73616c6500000000000000000000000000000000000000000000000000000000604082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f75706461746550726963653a206e6577207072696365206d757374206265206760008201527f726561746572207468616e203000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6275726e546f6b656e3a2063616c6c6572206973206e6f74206f776e6572206e60008201527f6f7220617070726f766564000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f77697468647261773a20636f6e74726163742062616c616e6365206d7573742060008201527f62652067726561746572207468616e2030000000000000000000000000000000602082015250565b7f6d696e743a206e6f2076697020706173736573206c65667420746f206d696e74600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f7570646174654d61784d696e7450657254583a206e6577204d6178204d696e7460008201527f206d7573742062652067726561746572207468616e2030000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f6d696e743a2073656e64657220646f6573206e6f74207175616c69747920666f60008201527f722070726573616c652c206d757374207761697420666f7220726567756c617260208201527f206d696e74000000000000000000000000000000000000000000000000000000604082015250565b7f6d696e743a2076616c756520706173736564206973206e6f7420636f7272656360008201527f7420746f206d696e74207468617420616d6f756e740000000000000000000000602082015250565b6156ea81614a63565b81146156f557600080fd5b50565b61570181614a75565b811461570c57600080fd5b50565b61571881614a81565b811461572357600080fd5b50565b61572f81614acd565b811461573a57600080fd5b5056fea2646970667358221220ac8117bc94f3cdbff46bd1d37183ba0e158b95eabcaf48384e5a42fc47dd21e764736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b340c91182b9ff831bb36232cb3296ed306c79b2
-----Decoded View---------------
Arg [0] : _babyAlienContract (address): 0xb340c91182b9ff831bb36232cb3296ed306c79b2
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b340c91182b9ff831bb36232cb3296ed306c79b2
Deployed ByteCode Sourcemap
49578:5609:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51324:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36823:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23642:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25202:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24725:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37463:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25952:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53649:146;;;;;;;;;;;;;:::i;:::-;;37131:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49858:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54906:278;;;;;;;;;;;;;:::i;:::-;;26362:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37653:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51191:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44103:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23336:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54416:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23066:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47002:103;;;;;;;;;;;;;:::i;:::-;;53327:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54667:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53942:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46351:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50126:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23811:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52051:1103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25495:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54171:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26618:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49810:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53803:131;;;;;;;;;;;;;:::i;:::-;;49968:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23986:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49929:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51611:432;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49770:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25721:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47260:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50034:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51324:279;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51416:1:::1;51401:5;:12;:16;51393:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;51481:9;51476:90;51500:5;:12;51496:1;:16;51476:90;;;51534:19;51544:5;51550:1;51544:8;;;;;;;;:::i;:::-;;;;;;;;51534:9;:19::i;:::-;51514:3;;;;;:::i;:::-;;;;51476:90;;;;51589:5;51581:14;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;51324:279:::0;:::o;36823:224::-;36925:4;36964:35;36949:50;;;:11;:50;;;;:90;;;;37003:36;37027:11;37003:23;:36::i;:::-;36949:90;36942:97;;36823:224;;;:::o;23642:100::-;23696:13;23729:5;23722:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23642:100;:::o;25202:221::-;25278:7;25306:16;25314:7;25306;:16::i;:::-;25298:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25391:15;:24;25407:7;25391:24;;;;;;;;;;;;;;;;;;;;;25384:31;;25202:221;;;:::o;24725:411::-;24806:13;24822:23;24837:7;24822:14;:23::i;:::-;24806:39;;24870:5;24864:11;;:2;:11;;;;24856:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24964:5;24948:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24973:37;24990:5;24997:12;:10;:12::i;:::-;24973:16;:37::i;:::-;24948:62;24926:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25107:21;25116:2;25120:7;25107:8;:21::i;:::-;24795:341;24725:411;;:::o;37463:113::-;37524:7;37551:10;:17;;;;37544:24;;37463:113;:::o;25952:339::-;26147:41;26166:12;:10;:12::i;:::-;26180:7;26147:18;:41::i;:::-;26139:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26255:28;26265:4;26271:2;26275:7;26255:9;:28::i;:::-;25952:339;;;:::o;53649:146::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53709:8:::1;:6;:8::i;:::-;:32;;53733:8;:6;:8::i;:::-;53709:32;;;53720:10;:8;:10::i;:::-;53709:32;53757:29;53777:8;:6;:8::i;:::-;53757:29;;;;;;:::i;:::-;;;;;;;;53649:146::o:0;37131:256::-;37228:7;37264:23;37281:5;37264:16;:23::i;:::-;37256:5;:31;37248:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37353:12;:19;37366:5;37353:19;;;;;;;;;;;;;;;:26;37373:5;37353:26;;;;;;;;;;;;37346:33;;37131:256;;;;:::o;49858:44::-;;;;:::o;54906:278::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54988:1:::1;54964:21;:25;54956:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;55055:15;55073:21;55055:39;;55114:10;55106:28;;:37;55135:7;55106:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;55159:17;55168:7;55159:17;;;;;;:::i;:::-;;;;;;;;54945:239;54906:278::o:0;26362:185::-;26500:39;26517:4;26523:2;26527:7;26500:39;;;;;;;;;;;;:16;:39::i;:::-;26362:185;;;:::o;37653:233::-;37728:7;37764:30;:28;:30::i;:::-;37756:5;:38;37748:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37861:10;37872:5;37861:17;;;;;;;;:::i;:::-;;;;;;;;;;37854:24;;37653:233;;;:::o;51191:125::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51272:4:::1;51259:10;:17;;;;;;;;;;;;:::i;:::-;;51292:16;51303:4;51292:16;;;;;;:::i;:::-;;;;;;;;51191:125:::0;:::o;44103:86::-;44150:4;44174:7;;;;;;;;;;;44167:14;;44103:86;:::o;23336:239::-;23408:7;23428:13;23444:7;:16;23452:7;23444:16;;;;;;;;;;;;;;;;;;;;;23428:32;;23496:1;23479:19;;:5;:19;;;;23471:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23562:5;23555:12;;;23336:239;;;:::o;54416:243::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54512:1:::1;54500:9;:13;54492:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;54597:9;54582:12;:24;;;;54623:28;54641:9;54623:28;;;;;;:::i;:::-;;;;;;;;54416:243:::0;:::o;23066:208::-;23138:7;23183:1;23166:19;;:5;:19;;;;23158:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23250:9;:16;23260:5;23250:16;;;;;;;;;;;;;;;;23243:23;;23066:208;;;:::o;47002:103::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47067:30:::1;47094:1;47067:18;:30::i;:::-;47002:103::o:0;53327:227::-;53399:39;53418:10;53430:7;53399:18;:39::i;:::-;53391:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;53498:14;53504:7;53498:5;:14::i;:::-;53528:18;53538:7;53528:18;;;;;;:::i;:::-;;;;;;;;53327:227;:::o;54667:231::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54758:1:::1;54749:6;:10;54741:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;54847:6;54831:13;:22;;;;54869:21;54883:6;54869:21;;;;;;:::i;:::-;;;;;;;;54667:231:::0;:::o;53942:221::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54030:1:::1;54019:8;:12;54011:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;54108:8;54092:13;:24;;;;54133:21;54145:8;54133:21;;;;;;:::i;:::-;;;;;;;;53942:221:::0;:::o;46351:87::-;46397:7;46424:6;;;;;;;;;;;46417:13;;46351:87;:::o;50126:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23811:104::-;23867:13;23900:7;23893:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23811:104;:::o;52051:1103::-;44429:8;:6;:8::i;:::-;44428:9;44420:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;52123:24:::1;52150:22;:12;:20;:22::i;:::-;52123:49;;52210:12;;52191:16;:31;52183:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;52307:12;;52297:6;52278:16;:25;;;;:::i;:::-;:41;;52270:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;52410:13;;52400:6;:23;;52392:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;52528:5;52513:20;;:11;;;;;;;;;;;:20;;;52509:485;;;52601:1;52558:17;:27;;;52586:10;52558:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;52550:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;52721:16;;52712:6;:25;;;;:::i;:::-;52699:9;:38;52691:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;52509:485;;;52910:13;;52901:6;:22;;;;:::i;:::-;52888:9;:35;52880:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;52509:485;53012:9;53007:85;53031:6;53027:1;:10;53007:85;;;53059:21;53069:10;53059:9;:21::i;:::-;53039:3;;;;;:::i;:::-;;;;53007:85;;;;53112:10;53107:39;;;53124:6;53132:13;;53107:39;;;;;;;:::i;:::-;;;;;;;;52112:1042;52051:1103:::0;:::o;25495:155::-;25590:52;25609:12;:10;:12::i;:::-;25623:8;25633;25590:18;:52::i;:::-;25495:155;;:::o;54171:237::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54266:1:::1;54255:8;:12;54247:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;54347:8;54328:16;:27;;;;54371:28;54390:8;54371:28;;;;;;:::i;:::-;;;;;;;;54171:237:::0;:::o;26618:328::-;26793:41;26812:12;:10;:12::i;:::-;26826:7;26793:18;:41::i;:::-;26785:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26899:39;26913:4;26919:2;26923:7;26932:5;26899:13;:39::i;:::-;26618:328;;;;:::o;49810:41::-;;;;:::o;53803:131::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53873:11:::1;;;;;;;;;;;53872:12;53858:11;;:26;;;;;;;;;;;;;;;;;;53900;53914:11;;;;;;;;;;;53900:26;;;;;;:::i;:::-;;;;;;;;53803:131::o:0;49968:31::-;;;;;;;;;;;;;:::o;23986:334::-;24059:13;24093:16;24101:7;24093;:16::i;:::-;24085:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24174:21;24198:10;:8;:10::i;:::-;24174:34;;24250:1;24232:7;24226:21;:25;:86;;;;;;;;;;;;;;;;;24278:7;24287:18;:7;:16;:18::i;:::-;24261:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24226:86;24219:93;;;23986:334;;;:::o;49929:32::-;;;;:::o;51611:432::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51714:1:::1;51702:9;:13;51694:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;51800:1;51784:18;;:4;:18;;;;51776:27;;;::::0;::::1;;51821:9;51816:175;51840:9;51836:1;:13;51816:175;;;51871:24;:12;:22;:24::i;:::-;51910:10;51923:22;:12;:20;:22::i;:::-;51910:35;;51960:19;51970:4;51976:2;51960:9;:19::i;:::-;51856:135;51851:3;;;;;:::i;:::-;;;;51816:175;;;;52006:29;52019:4;52025:9;52006:29;;;;;;;:::i;:::-;;;;;;;;51611:432:::0;;:::o;49770:33::-;;;;:::o;25721:164::-;25818:4;25842:18;:25;25861:5;25842:25;;;;;;;;;;;;;;;:35;25868:8;25842:35;;;;;;;;;;;;;;;;;;;;;;;;;25835:42;;25721:164;;;;:::o;47260:201::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47369:1:::1;47349:22;;:8;:22;;;;47341:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;47425:28;47444:8;47425:18;:28::i;:::-;47260:201:::0;:::o;50034:52::-;;;:::o;21076:98::-;21129:7;21156:10;21149:17;;21076:98;:::o;53162:157::-;53213:24;:12;:22;:24::i;:::-;53248:10;53261:22;:12;:20;:22::i;:::-;53248:35;;53294:17;53304:2;53308;53294:9;:17::i;:::-;53202:117;53162:157;:::o;22697:305::-;22799:4;22851:25;22836:40;;;:11;:40;;;;:105;;;;22908:33;22893:48;;;:11;:48;;;;22836:105;:158;;;;22958:36;22982:11;22958:23;:36::i;:::-;22836:158;22816:178;;22697:305;;;:::o;28456:127::-;28521:4;28573:1;28545:30;;:7;:16;28553:7;28545:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28538:37;;28456:127;;;:::o;32602:174::-;32704:2;32677:15;:24;32693:7;32677:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32760:7;32756:2;32722:46;;32731:23;32746:7;32731:14;:23::i;:::-;32722:46;;;;;;;;;;;;32602:174;;:::o;28750:348::-;28843:4;28868:16;28876:7;28868;:16::i;:::-;28860:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28944:13;28960:23;28975:7;28960:14;:23::i;:::-;28944:39;;29013:5;29002:16;;:7;:16;;;:52;;;;29022:32;29039:5;29046:7;29022:16;:32::i;:::-;29002:52;:87;;;;29082:7;29058:31;;:20;29070:7;29058:11;:20::i;:::-;:31;;;29002:87;28994:96;;;28750:348;;;;:::o;31859:625::-;32018:4;31991:31;;:23;32006:7;31991:14;:23::i;:::-;:31;;;31983:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32097:1;32083:16;;:2;:16;;;;32075:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32153:39;32174:4;32180:2;32184:7;32153:20;:39::i;:::-;32257:29;32274:1;32278:7;32257:8;:29::i;:::-;32318:1;32299:9;:15;32309:4;32299:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32347:1;32330:9;:13;32340:2;32330:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32378:2;32359:7;:16;32367:7;32359:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32417:7;32413:2;32398:27;;32407:4;32398:27;;;;;;;;;;;;32438:38;32458:4;32464:2;32468:7;32438:19;:38::i;:::-;31859:625;;;:::o;44903:118::-;44429:8;:6;:8::i;:::-;44428:9;44420:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;44973:4:::1;44963:7;;:14;;;;;;;;;;;;;;;;;;44993:20;45000:12;:10;:12::i;:::-;44993:20;;;;;;:::i;:::-;;;;;;;;44903:118::o:0;45162:120::-;44706:8;:6;:8::i;:::-;44698:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;45231:5:::1;45221:7;;:15;;;;;;;;;;;;;;;;;;45252:22;45261:12;:10;:12::i;:::-;45252:22;;;;;;:::i;:::-;;;;;;;;45162:120::o:0;47621:191::-;47695:16;47714:6;;;;;;;;;;;47695:25;;47740:8;47731:6;;:17;;;;;;;;;;;;;;;;;;47795:8;47764:40;;47785:8;47764:40;;;;;;;;;;;;47684:128;47621:191;:::o;31102:420::-;31162:13;31178:23;31193:7;31178:14;:23::i;:::-;31162:39;;31214:48;31235:5;31250:1;31254:7;31214:20;:48::i;:::-;31303:29;31320:1;31324:7;31303:8;:29::i;:::-;31365:1;31345:9;:16;31355:5;31345:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;31384:7;:16;31392:7;31384:16;;;;;;;;;;;;31377:23;;;;;;;;;;;31446:7;31442:1;31418:36;;31427:5;31418:36;;;;;;;;;;;;31467:47;31487:5;31502:1;31506:7;31467:19;:47::i;:::-;31151:371;31102:420;:::o;48691:114::-;48756:7;48783;:14;;;48776:21;;48691:114;;;:::o;32918:315::-;33073:8;33064:17;;:5;:17;;;;33056:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;33160:8;33122:18;:25;33141:5;33122:25;;;;;;;;;;;;;;;:35;33148:8;33122:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33206:8;33184:41;;33199:5;33184:41;;;33216:8;33184:41;;;;;;:::i;:::-;;;;;;;;32918:315;;;:::o;27828:::-;27985:28;27995:4;28001:2;28005:7;27985:9;:28::i;:::-;28032:48;28055:4;28061:2;28065:7;28074:5;28032:22;:48::i;:::-;28024:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27828:315;;;;:::o;51080:103::-;51132:13;51165:10;51158:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51080:103;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;48813:127::-;48920:1;48902:7;:14;;;:19;;;;;;;;;;;48813:127;:::o;29440:110::-;29516:26;29526:2;29530:7;29516:26;;;;;;;;;;;;:9;:26::i;:::-;29440:110;;:::o;13463:157::-;13548:4;13587:25;13572:40;;;:11;:40;;;;13565:47;;13463:157;;;:::o;38499:589::-;38643:45;38670:4;38676:2;38680:7;38643:26;:45::i;:::-;38721:1;38705:18;;:4;:18;;;38701:187;;;38740:40;38772:7;38740:31;:40::i;:::-;38701:187;;;38810:2;38802:10;;:4;:10;;;38798:90;;38829:47;38862:4;38868:7;38829:32;:47::i;:::-;38798:90;38701:187;38916:1;38902:16;;:2;:16;;;38898:183;;;38935:45;38972:7;38935:36;:45::i;:::-;38898:183;;;39008:4;39002:10;;:2;:10;;;38998:83;;39029:40;39057:2;39061:7;39029:27;:40::i;:::-;38998:83;38898:183;38499:589;;;:::o;35680:125::-;;;;:::o;33798:799::-;33953:4;33974:15;:2;:13;;;:15::i;:::-;33970:620;;;34026:2;34010:36;;;34047:12;:10;:12::i;:::-;34061:4;34067:7;34076:5;34010:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34006:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34269:1;34252:6;:13;:18;34248:272;;;34295:60;;;;;;;;;;:::i;:::-;;;;;;;;34248:272;34470:6;34464:13;34455:6;34451:2;34447:15;34440:38;34006:529;34143:41;;;34133:51;;;:6;:51;;;;34126:58;;;;;33970:620;34574:4;34567:11;;33798:799;;;;;;;:::o;29777:321::-;29907:18;29913:2;29917:7;29907:5;:18::i;:::-;29958:54;29989:1;29993:2;29997:7;30006:5;29958:22;:54::i;:::-;29936:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29777:321;;;:::o;35169:126::-;;;;:::o;39811:164::-;39915:10;:17;;;;39888:15;:24;39904:7;39888:24;;;;;;;;;;;:44;;;;39943:10;39959:7;39943:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39811:164;:::o;40602:988::-;40868:22;40918:1;40893:22;40910:4;40893:16;:22::i;:::-;:26;;;;:::i;:::-;40868:51;;40930:18;40951:17;:26;40969:7;40951:26;;;;;;;;;;;;40930:47;;41098:14;41084:10;:28;41080:328;;41129:19;41151:12;:18;41164:4;41151:18;;;;;;;;;;;;;;;:34;41170:14;41151:34;;;;;;;;;;;;41129:56;;41235:11;41202:12;:18;41215:4;41202:18;;;;;;;;;;;;;;;:30;41221:10;41202:30;;;;;;;;;;;:44;;;;41352:10;41319:17;:30;41337:11;41319:30;;;;;;;;;;;:43;;;;41114:294;41080:328;41504:17;:26;41522:7;41504:26;;;;;;;;;;;41497:33;;;41548:12;:18;41561:4;41548:18;;;;;;;;;;;;;;;:34;41567:14;41548:34;;;;;;;;;;;41541:41;;;40683:907;;40602:988;;:::o;41885:1079::-;42138:22;42183:1;42163:10;:17;;;;:21;;;;:::i;:::-;42138:46;;42195:18;42216:15;:24;42232:7;42216:24;;;;;;;;;;;;42195:45;;42567:19;42589:10;42600:14;42589:26;;;;;;;;:::i;:::-;;;;;;;;;;42567:48;;42653:11;42628:10;42639;42628:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42764:10;42733:15;:28;42749:11;42733:28;;;;;;;;;;;:41;;;;42905:15;:24;42921:7;42905:24;;;;;;;;;;;42898:31;;;42940:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41956:1008;;;41885:1079;:::o;39389:221::-;39474:14;39491:20;39508:2;39491:16;:20::i;:::-;39474:37;;39549:7;39522:12;:16;39535:2;39522:16;;;;;;;;;;;;;;;:24;39539:6;39522:24;;;;;;;;;;;:34;;;;39596:6;39567:17;:26;39585:7;39567:26;;;;;;;;;;;:35;;;;39463:147;39389:221;;:::o;3357:326::-;3417:4;3674:1;3652:7;:19;;;:23;3645:30;;3357:326;;;:::o;30434:439::-;30528:1;30514:16;;:2;:16;;;;30506:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30587:16;30595:7;30587;:16::i;:::-;30586:17;30578:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30649:45;30678:1;30682:2;30686:7;30649:20;:45::i;:::-;30724:1;30707:9;:13;30717:2;30707:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30755:2;30736:7;:16;30744:7;30736:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30800:7;30796:2;30775:33;;30792:1;30775:33;;;;;;;;;;;;30821:44;30849:1;30853:2;30857:7;30821:19;:44::i;:::-;30434:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::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::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:143::-;3472:5;3503:6;3497:13;3488:22;;3519:33;3546:5;3519:33;:::i;:::-;3415:143;;;;:::o;3564:329::-;3623:6;3672:2;3660:9;3651:7;3647:23;3643:32;3640:119;;;3678:79;;:::i;:::-;3640:119;3798:1;3823:53;3868:7;3859:6;3848:9;3844:22;3823:53;:::i;:::-;3813:63;;3769:117;3564:329;;;;:::o;3899:474::-;3967:6;3975;4024:2;4012:9;4003:7;3999:23;3995:32;3992:119;;;4030:79;;:::i;:::-;3992:119;4150:1;4175:53;4220:7;4211:6;4200:9;4196:22;4175:53;:::i;:::-;4165:63;;4121:117;4277:2;4303:53;4348:7;4339:6;4328:9;4324:22;4303:53;:::i;:::-;4293:63;;4248:118;3899:474;;;;;:::o;4379:619::-;4456:6;4464;4472;4521:2;4509:9;4500:7;4496:23;4492:32;4489:119;;;4527:79;;:::i;:::-;4489:119;4647:1;4672:53;4717:7;4708:6;4697:9;4693:22;4672:53;:::i;:::-;4662:63;;4618:117;4774:2;4800:53;4845:7;4836:6;4825:9;4821:22;4800:53;:::i;:::-;4790:63;;4745:118;4902:2;4928:53;4973:7;4964:6;4953:9;4949:22;4928:53;:::i;:::-;4918:63;;4873:118;4379:619;;;;;:::o;5004:943::-;5099:6;5107;5115;5123;5172:3;5160:9;5151:7;5147:23;5143:33;5140:120;;;5179:79;;:::i;:::-;5140:120;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5710:2;5699:9;5695:18;5682:32;5741:18;5733:6;5730:30;5727:117;;;5763:79;;:::i;:::-;5727:117;5868:62;5922:7;5913:6;5902:9;5898:22;5868:62;:::i;:::-;5858:72;;5653:287;5004:943;;;;;;;:::o;5953:468::-;6018:6;6026;6075:2;6063:9;6054:7;6050:23;6046:32;6043:119;;;6081:79;;:::i;:::-;6043:119;6201:1;6226:53;6271:7;6262:6;6251:9;6247:22;6226:53;:::i;:::-;6216:63;;6172:117;6328:2;6354:50;6396:7;6387:6;6376:9;6372:22;6354:50;:::i;:::-;6344:60;;6299:115;5953:468;;;;;:::o;6427:474::-;6495:6;6503;6552:2;6540:9;6531:7;6527:23;6523:32;6520:119;;;6558:79;;:::i;:::-;6520:119;6678:1;6703:53;6748:7;6739:6;6728:9;6724:22;6703:53;:::i;:::-;6693:63;;6649:117;6805:2;6831:53;6876:7;6867:6;6856:9;6852:22;6831:53;:::i;:::-;6821:63;;6776:118;6427:474;;;;;:::o;6907:539::-;6991:6;7040:2;7028:9;7019:7;7015:23;7011:32;7008:119;;;7046:79;;:::i;:::-;7008:119;7194:1;7183:9;7179:17;7166:31;7224:18;7216:6;7213:30;7210:117;;;7246:79;;:::i;:::-;7210:117;7351:78;7421:7;7412:6;7401:9;7397:22;7351:78;:::i;:::-;7341:88;;7137:302;6907:539;;;;:::o;7452:327::-;7510:6;7559:2;7547:9;7538:7;7534:23;7530:32;7527:119;;;7565:79;;:::i;:::-;7527:119;7685:1;7710:52;7754:7;7745:6;7734:9;7730:22;7710:52;:::i;:::-;7700:62;;7656:116;7452:327;;;;:::o;7785:349::-;7854:6;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:63;8109:7;8100:6;8089:9;8085:22;8054:63;:::i;:::-;8044:73;;8000:127;7785:349;;;;:::o;8140:509::-;8209:6;8258:2;8246:9;8237:7;8233:23;8229:32;8226:119;;;8264:79;;:::i;:::-;8226:119;8412:1;8401:9;8397:17;8384:31;8442:18;8434:6;8431:30;8428:117;;;8464:79;;:::i;:::-;8428:117;8569:63;8624:7;8615:6;8604:9;8600:22;8569:63;:::i;:::-;8559:73;;8355:287;8140:509;;;;:::o;8655:329::-;8714:6;8763:2;8751:9;8742:7;8738:23;8734:32;8731:119;;;8769:79;;:::i;:::-;8731:119;8889:1;8914:53;8959:7;8950:6;8939:9;8935:22;8914:53;:::i;:::-;8904:63;;8860:117;8655:329;;;;:::o;8990:351::-;9060:6;9109:2;9097:9;9088:7;9084:23;9080:32;9077:119;;;9115:79;;:::i;:::-;9077:119;9235:1;9260:64;9316:7;9307:6;9296:9;9292:22;9260:64;:::i;:::-;9250:74;;9206:128;8990:351;;;;:::o;9347:195::-;9424:10;9445:54;9495:3;9487:6;9445:54;:::i;:::-;9531:4;9526:3;9522:14;9508:28;;9347:195;;;;:::o;9548:118::-;9635:24;9653:5;9635:24;:::i;:::-;9630:3;9623:37;9548:118;;:::o;9672:116::-;9757:24;9775:5;9757:24;:::i;:::-;9752:3;9745:37;9672:116;;:::o;9824:776::-;9961:3;9990:54;10038:5;9990:54;:::i;:::-;10060:104;10157:6;10152:3;10060:104;:::i;:::-;10053:111;;10188:56;10238:5;10188:56;:::i;:::-;10267:7;10298:1;10283:292;10308:6;10305:1;10302:13;10283:292;;;10384:6;10378:13;10411:71;10478:3;10463:13;10411:71;:::i;:::-;10404:78;;10505:60;10558:6;10505:60;:::i;:::-;10495:70;;10343:232;10330:1;10327;10323:9;10318:14;;10283:292;;;10287:14;10591:3;10584:10;;9966:634;;;9824:776;;;;:::o;10606:109::-;10687:21;10702:5;10687:21;:::i;:::-;10682:3;10675:34;10606:109;;:::o;10721:360::-;10807:3;10835:38;10867:5;10835:38;:::i;:::-;10889:70;10952:6;10947:3;10889:70;:::i;:::-;10882:77;;10968:52;11013:6;11008:3;11001:4;10994:5;10990:16;10968:52;:::i;:::-;11045:29;11067:6;11045:29;:::i;:::-;11040:3;11036:39;11029:46;;10811:270;10721:360;;;;:::o;11087:181::-;11199:62;11255:5;11199:62;:::i;:::-;11194:3;11187:75;11087:181;;:::o;11274:364::-;11362:3;11390:39;11423:5;11390:39;:::i;:::-;11445:71;11509:6;11504:3;11445:71;:::i;:::-;11438:78;;11525:52;11570:6;11565:3;11558:4;11551:5;11547:16;11525:52;:::i;:::-;11602:29;11624:6;11602:29;:::i;:::-;11597:3;11593:39;11586:46;;11366:272;11274:364;;;;:::o;11644:377::-;11750:3;11778:39;11811:5;11778:39;:::i;:::-;11833:89;11915:6;11910:3;11833:89;:::i;:::-;11826:96;;11931:52;11976:6;11971:3;11964:4;11957:5;11953:16;11931:52;:::i;:::-;12008:6;12003:3;11999:16;11992:23;;11754:267;11644:377;;;;:::o;12027:366::-;12169:3;12190:67;12254:2;12249:3;12190:67;:::i;:::-;12183:74;;12266:93;12355:3;12266:93;:::i;:::-;12384:2;12379:3;12375:12;12368:19;;12027:366;;;:::o;12399:::-;12541:3;12562:67;12626:2;12621:3;12562:67;:::i;:::-;12555:74;;12638:93;12727:3;12638:93;:::i;:::-;12756:2;12751:3;12747:12;12740:19;;12399:366;;;:::o;12771:::-;12913:3;12934:67;12998:2;12993:3;12934:67;:::i;:::-;12927:74;;13010:93;13099:3;13010:93;:::i;:::-;13128:2;13123:3;13119:12;13112:19;;12771:366;;;:::o;13143:::-;13285:3;13306:67;13370:2;13365:3;13306:67;:::i;:::-;13299:74;;13382:93;13471:3;13382:93;:::i;:::-;13500:2;13495:3;13491:12;13484:19;;13143:366;;;:::o;13515:::-;13657:3;13678:67;13742:2;13737:3;13678:67;:::i;:::-;13671:74;;13754:93;13843:3;13754:93;:::i;:::-;13872:2;13867:3;13863:12;13856:19;;13515:366;;;:::o;13887:::-;14029:3;14050:67;14114:2;14109:3;14050:67;:::i;:::-;14043:74;;14126:93;14215:3;14126:93;:::i;:::-;14244:2;14239:3;14235:12;14228:19;;13887:366;;;:::o;14259:::-;14401:3;14422:67;14486:2;14481:3;14422:67;:::i;:::-;14415:74;;14498:93;14587:3;14498:93;:::i;:::-;14616:2;14611:3;14607:12;14600:19;;14259:366;;;:::o;14631:::-;14773:3;14794:67;14858:2;14853:3;14794:67;:::i;:::-;14787:74;;14870:93;14959:3;14870:93;:::i;:::-;14988:2;14983:3;14979:12;14972:19;;14631:366;;;:::o;15003:::-;15145:3;15166:67;15230:2;15225:3;15166:67;:::i;:::-;15159:74;;15242:93;15331:3;15242:93;:::i;:::-;15360:2;15355:3;15351:12;15344:19;;15003:366;;;:::o;15375:::-;15517:3;15538:67;15602:2;15597:3;15538:67;:::i;:::-;15531:74;;15614:93;15703:3;15614:93;:::i;:::-;15732:2;15727:3;15723:12;15716:19;;15375:366;;;:::o;15747:::-;15889:3;15910:67;15974:2;15969:3;15910:67;:::i;:::-;15903:74;;15986:93;16075:3;15986:93;:::i;:::-;16104:2;16099:3;16095:12;16088:19;;15747:366;;;:::o;16119:::-;16261:3;16282:67;16346:2;16341:3;16282:67;:::i;:::-;16275:74;;16358:93;16447:3;16358:93;:::i;:::-;16476:2;16471:3;16467:12;16460:19;;16119:366;;;:::o;16491:::-;16633:3;16654:67;16718:2;16713:3;16654:67;:::i;:::-;16647:74;;16730:93;16819:3;16730:93;:::i;:::-;16848:2;16843:3;16839:12;16832:19;;16491:366;;;:::o;16863:::-;17005:3;17026:67;17090:2;17085:3;17026:67;:::i;:::-;17019:74;;17102:93;17191:3;17102:93;:::i;:::-;17220:2;17215:3;17211:12;17204:19;;16863:366;;;:::o;17235:::-;17377:3;17398:67;17462:2;17457:3;17398:67;:::i;:::-;17391:74;;17474:93;17563:3;17474:93;:::i;:::-;17592:2;17587:3;17583:12;17576:19;;17235:366;;;:::o;17607:::-;17749:3;17770:67;17834:2;17829:3;17770:67;:::i;:::-;17763:74;;17846:93;17935:3;17846:93;:::i;:::-;17964:2;17959:3;17955:12;17948:19;;17607:366;;;:::o;17979:::-;18121:3;18142:67;18206:2;18201:3;18142:67;:::i;:::-;18135:74;;18218:93;18307:3;18218:93;:::i;:::-;18336:2;18331:3;18327:12;18320:19;;17979:366;;;:::o;18351:::-;18493:3;18514:67;18578:2;18573:3;18514:67;:::i;:::-;18507:74;;18590:93;18679:3;18590:93;:::i;:::-;18708:2;18703:3;18699:12;18692:19;;18351:366;;;:::o;18723:::-;18865:3;18886:67;18950:2;18945:3;18886:67;:::i;:::-;18879:74;;18962:93;19051:3;18962:93;:::i;:::-;19080:2;19075:3;19071:12;19064:19;;18723:366;;;:::o;19095:::-;19237:3;19258:67;19322:2;19317:3;19258:67;:::i;:::-;19251:74;;19334:93;19423:3;19334:93;:::i;:::-;19452:2;19447:3;19443:12;19436:19;;19095:366;;;:::o;19467:::-;19609:3;19630:67;19694:2;19689:3;19630:67;:::i;:::-;19623:74;;19706:93;19795:3;19706:93;:::i;:::-;19824:2;19819:3;19815:12;19808:19;;19467:366;;;:::o;19839:::-;19981:3;20002:67;20066:2;20061:3;20002:67;:::i;:::-;19995:74;;20078:93;20167:3;20078:93;:::i;:::-;20196:2;20191:3;20187:12;20180:19;;19839:366;;;:::o;20211:::-;20353:3;20374:67;20438:2;20433:3;20374:67;:::i;:::-;20367:74;;20450:93;20539:3;20450:93;:::i;:::-;20568:2;20563:3;20559:12;20552:19;;20211:366;;;:::o;20583:::-;20725:3;20746:67;20810:2;20805:3;20746:67;:::i;:::-;20739:74;;20822:93;20911:3;20822:93;:::i;:::-;20940:2;20935:3;20931:12;20924:19;;20583:366;;;:::o;20955:::-;21097:3;21118:67;21182:2;21177:3;21118:67;:::i;:::-;21111:74;;21194:93;21283:3;21194:93;:::i;:::-;21312:2;21307:3;21303:12;21296:19;;20955:366;;;:::o;21327:::-;21469:3;21490:67;21554:2;21549:3;21490:67;:::i;:::-;21483:74;;21566:93;21655:3;21566:93;:::i;:::-;21684:2;21679:3;21675:12;21668:19;;21327:366;;;:::o;21699:::-;21841:3;21862:67;21926:2;21921:3;21862:67;:::i;:::-;21855:74;;21938:93;22027:3;21938:93;:::i;:::-;22056:2;22051:3;22047:12;22040:19;;21699:366;;;:::o;22071:::-;22213:3;22234:67;22298:2;22293:3;22234:67;:::i;:::-;22227:74;;22310:93;22399:3;22310:93;:::i;:::-;22428:2;22423:3;22419:12;22412:19;;22071:366;;;:::o;22443:::-;22585:3;22606:67;22670:2;22665:3;22606:67;:::i;:::-;22599:74;;22682:93;22771:3;22682:93;:::i;:::-;22800:2;22795:3;22791:12;22784:19;;22443:366;;;:::o;22815:::-;22957:3;22978:67;23042:2;23037:3;22978:67;:::i;:::-;22971:74;;23054:93;23143:3;23054:93;:::i;:::-;23172:2;23167:3;23163:12;23156:19;;22815:366;;;:::o;23187:::-;23329:3;23350:67;23414:2;23409:3;23350:67;:::i;:::-;23343:74;;23426:93;23515:3;23426:93;:::i;:::-;23544:2;23539:3;23535:12;23528:19;;23187:366;;;:::o;23559:::-;23701:3;23722:67;23786:2;23781:3;23722:67;:::i;:::-;23715:74;;23798:93;23887:3;23798:93;:::i;:::-;23916:2;23911:3;23907:12;23900:19;;23559:366;;;:::o;23931:::-;24073:3;24094:67;24158:2;24153:3;24094:67;:::i;:::-;24087:74;;24170:93;24259:3;24170:93;:::i;:::-;24288:2;24283:3;24279:12;24272:19;;23931:366;;;:::o;24303:118::-;24390:24;24408:5;24390:24;:::i;:::-;24385:3;24378:37;24303:118;;:::o;24427:335::-;24589:3;24611:125;24732:3;24723:6;24611:125;:::i;:::-;24604:132;;24753:3;24746:10;;24427:335;;;;:::o;24768:435::-;24948:3;24970:95;25061:3;25052:6;24970:95;:::i;:::-;24963:102;;25082:95;25173:3;25164:6;25082:95;:::i;:::-;25075:102;;25194:3;25187:10;;24768:435;;;;;:::o;25209:222::-;25302:4;25340:2;25329:9;25325:18;25317:26;;25353:71;25421:1;25410:9;25406:17;25397:6;25353:71;:::i;:::-;25209:222;;;;:::o;25437:640::-;25632:4;25670:3;25659:9;25655:19;25647:27;;25684:71;25752:1;25741:9;25737:17;25728:6;25684:71;:::i;:::-;25765:72;25833:2;25822:9;25818:18;25809:6;25765:72;:::i;:::-;25847;25915:2;25904:9;25900:18;25891:6;25847:72;:::i;:::-;25966:9;25960:4;25956:20;25951:2;25940:9;25936:18;25929:48;25994:76;26065:4;26056:6;25994:76;:::i;:::-;25986:84;;25437:640;;;;;;;:::o;26083:332::-;26204:4;26242:2;26231:9;26227:18;26219:26;;26255:71;26323:1;26312:9;26308:17;26299:6;26255:71;:::i;:::-;26336:72;26404:2;26393:9;26389:18;26380:6;26336:72;:::i;:::-;26083:332;;;;;:::o;26421:210::-;26508:4;26546:2;26535:9;26531:18;26523:26;;26559:65;26621:1;26610:9;26606:17;26597:6;26559:65;:::i;:::-;26421:210;;;;:::o;26637:272::-;26755:4;26793:2;26782:9;26778:18;26770:26;;26806:96;26899:1;26888:9;26884:17;26875:6;26806:96;:::i;:::-;26637:272;;;;:::o;26915:313::-;27028:4;27066:2;27055:9;27051:18;27043:26;;27115:9;27109:4;27105:20;27101:1;27090:9;27086:17;27079:47;27143:78;27216:4;27207:6;27143:78;:::i;:::-;27135:86;;26915:313;;;;:::o;27234:419::-;27400:4;27438:2;27427:9;27423:18;27415:26;;27487:9;27481:4;27477:20;27473:1;27462:9;27458:17;27451:47;27515:131;27641:4;27515:131;:::i;:::-;27507:139;;27234:419;;;:::o;27659:::-;27825:4;27863:2;27852:9;27848:18;27840:26;;27912:9;27906:4;27902:20;27898:1;27887:9;27883:17;27876:47;27940:131;28066:4;27940:131;:::i;:::-;27932:139;;27659:419;;;:::o;28084:::-;28250:4;28288:2;28277:9;28273:18;28265:26;;28337:9;28331:4;28327:20;28323:1;28312:9;28308:17;28301:47;28365:131;28491:4;28365:131;:::i;:::-;28357:139;;28084:419;;;:::o;28509:::-;28675:4;28713:2;28702:9;28698:18;28690:26;;28762:9;28756:4;28752:20;28748:1;28737:9;28733:17;28726:47;28790:131;28916:4;28790:131;:::i;:::-;28782:139;;28509:419;;;:::o;28934:::-;29100:4;29138:2;29127:9;29123:18;29115:26;;29187:9;29181:4;29177:20;29173:1;29162:9;29158:17;29151:47;29215:131;29341:4;29215:131;:::i;:::-;29207:139;;28934:419;;;:::o;29359:::-;29525:4;29563:2;29552:9;29548:18;29540:26;;29612:9;29606:4;29602:20;29598:1;29587:9;29583:17;29576:47;29640:131;29766:4;29640:131;:::i;:::-;29632:139;;29359:419;;;:::o;29784:::-;29950:4;29988:2;29977:9;29973:18;29965:26;;30037:9;30031:4;30027:20;30023:1;30012:9;30008:17;30001:47;30065:131;30191:4;30065:131;:::i;:::-;30057:139;;29784:419;;;:::o;30209:::-;30375:4;30413:2;30402:9;30398:18;30390:26;;30462:9;30456:4;30452:20;30448:1;30437:9;30433:17;30426:47;30490:131;30616:4;30490:131;:::i;:::-;30482:139;;30209:419;;;:::o;30634:::-;30800:4;30838:2;30827:9;30823:18;30815:26;;30887:9;30881:4;30877:20;30873:1;30862:9;30858:17;30851:47;30915:131;31041:4;30915:131;:::i;:::-;30907:139;;30634:419;;;:::o;31059:::-;31225:4;31263:2;31252:9;31248:18;31240:26;;31312:9;31306:4;31302:20;31298:1;31287:9;31283:17;31276:47;31340:131;31466:4;31340:131;:::i;:::-;31332:139;;31059:419;;;:::o;31484:::-;31650:4;31688:2;31677:9;31673:18;31665:26;;31737:9;31731:4;31727:20;31723:1;31712:9;31708:17;31701:47;31765:131;31891:4;31765:131;:::i;:::-;31757:139;;31484:419;;;:::o;31909:::-;32075:4;32113:2;32102:9;32098:18;32090:26;;32162:9;32156:4;32152:20;32148:1;32137:9;32133:17;32126:47;32190:131;32316:4;32190:131;:::i;:::-;32182:139;;31909:419;;;:::o;32334:::-;32500:4;32538:2;32527:9;32523:18;32515:26;;32587:9;32581:4;32577:20;32573:1;32562:9;32558:17;32551:47;32615:131;32741:4;32615:131;:::i;:::-;32607:139;;32334:419;;;:::o;32759:::-;32925:4;32963:2;32952:9;32948:18;32940:26;;33012:9;33006:4;33002:20;32998:1;32987:9;32983:17;32976:47;33040:131;33166:4;33040:131;:::i;:::-;33032:139;;32759:419;;;:::o;33184:::-;33350:4;33388:2;33377:9;33373:18;33365:26;;33437:9;33431:4;33427:20;33423:1;33412:9;33408:17;33401:47;33465:131;33591:4;33465:131;:::i;:::-;33457:139;;33184:419;;;:::o;33609:::-;33775:4;33813:2;33802:9;33798:18;33790:26;;33862:9;33856:4;33852:20;33848:1;33837:9;33833:17;33826:47;33890:131;34016:4;33890:131;:::i;:::-;33882:139;;33609:419;;;:::o;34034:::-;34200:4;34238:2;34227:9;34223:18;34215:26;;34287:9;34281:4;34277:20;34273:1;34262:9;34258:17;34251:47;34315:131;34441:4;34315:131;:::i;:::-;34307:139;;34034:419;;;:::o;34459:::-;34625:4;34663:2;34652:9;34648:18;34640:26;;34712:9;34706:4;34702:20;34698:1;34687:9;34683:17;34676:47;34740:131;34866:4;34740:131;:::i;:::-;34732:139;;34459:419;;;:::o;34884:::-;35050:4;35088:2;35077:9;35073:18;35065:26;;35137:9;35131:4;35127:20;35123:1;35112:9;35108:17;35101:47;35165:131;35291:4;35165:131;:::i;:::-;35157:139;;34884:419;;;:::o;35309:::-;35475:4;35513:2;35502:9;35498:18;35490:26;;35562:9;35556:4;35552:20;35548:1;35537:9;35533:17;35526:47;35590:131;35716:4;35590:131;:::i;:::-;35582:139;;35309:419;;;:::o;35734:::-;35900:4;35938:2;35927:9;35923:18;35915:26;;35987:9;35981:4;35977:20;35973:1;35962:9;35958:17;35951:47;36015:131;36141:4;36015:131;:::i;:::-;36007:139;;35734:419;;;:::o;36159:::-;36325:4;36363:2;36352:9;36348:18;36340:26;;36412:9;36406:4;36402:20;36398:1;36387:9;36383:17;36376:47;36440:131;36566:4;36440:131;:::i;:::-;36432:139;;36159:419;;;:::o;36584:::-;36750:4;36788:2;36777:9;36773:18;36765:26;;36837:9;36831:4;36827:20;36823:1;36812:9;36808:17;36801:47;36865:131;36991:4;36865:131;:::i;:::-;36857:139;;36584:419;;;:::o;37009:::-;37175:4;37213:2;37202:9;37198:18;37190:26;;37262:9;37256:4;37252:20;37248:1;37237:9;37233:17;37226:47;37290:131;37416:4;37290:131;:::i;:::-;37282:139;;37009:419;;;:::o;37434:::-;37600:4;37638:2;37627:9;37623:18;37615:26;;37687:9;37681:4;37677:20;37673:1;37662:9;37658:17;37651:47;37715:131;37841:4;37715:131;:::i;:::-;37707:139;;37434:419;;;:::o;37859:::-;38025:4;38063:2;38052:9;38048:18;38040:26;;38112:9;38106:4;38102:20;38098:1;38087:9;38083:17;38076:47;38140:131;38266:4;38140:131;:::i;:::-;38132:139;;37859:419;;;:::o;38284:::-;38450:4;38488:2;38477:9;38473:18;38465:26;;38537:9;38531:4;38527:20;38523:1;38512:9;38508:17;38501:47;38565:131;38691:4;38565:131;:::i;:::-;38557:139;;38284:419;;;:::o;38709:::-;38875:4;38913:2;38902:9;38898:18;38890:26;;38962:9;38956:4;38952:20;38948:1;38937:9;38933:17;38926:47;38990:131;39116:4;38990:131;:::i;:::-;38982:139;;38709:419;;;:::o;39134:::-;39300:4;39338:2;39327:9;39323:18;39315:26;;39387:9;39381:4;39377:20;39373:1;39362:9;39358:17;39351:47;39415:131;39541:4;39415:131;:::i;:::-;39407:139;;39134:419;;;:::o;39559:::-;39725:4;39763:2;39752:9;39748:18;39740:26;;39812:9;39806:4;39802:20;39798:1;39787:9;39783:17;39776:47;39840:131;39966:4;39840:131;:::i;:::-;39832:139;;39559:419;;;:::o;39984:::-;40150:4;40188:2;40177:9;40173:18;40165:26;;40237:9;40231:4;40227:20;40223:1;40212:9;40208:17;40201:47;40265:131;40391:4;40265:131;:::i;:::-;40257:139;;39984:419;;;:::o;40409:::-;40575:4;40613:2;40602:9;40598:18;40590:26;;40662:9;40656:4;40652:20;40648:1;40637:9;40633:17;40626:47;40690:131;40816:4;40690:131;:::i;:::-;40682:139;;40409:419;;;:::o;40834:::-;41000:4;41038:2;41027:9;41023:18;41015:26;;41087:9;41081:4;41077:20;41073:1;41062:9;41058:17;41051:47;41115:131;41241:4;41115:131;:::i;:::-;41107:139;;40834:419;;;:::o;41259:222::-;41352:4;41390:2;41379:9;41375:18;41367:26;;41403:71;41471:1;41460:9;41456:17;41447:6;41403:71;:::i;:::-;41259:222;;;;:::o;41487:332::-;41608:4;41646:2;41635:9;41631:18;41623:26;;41659:71;41727:1;41716:9;41712:17;41703:6;41659:71;:::i;:::-;41740:72;41808:2;41797:9;41793:18;41784:6;41740:72;:::i;:::-;41487:332;;;;;:::o;41825:129::-;41859:6;41886:20;;:::i;:::-;41876:30;;41915:33;41943:4;41935:6;41915:33;:::i;:::-;41825:129;;;:::o;41960:75::-;41993:6;42026:2;42020:9;42010:19;;41960:75;:::o;42041:311::-;42118:4;42208:18;42200:6;42197:30;42194:56;;;42230:18;;:::i;:::-;42194:56;42280:4;42272:6;42268:17;42260:25;;42340:4;42334;42330:15;42322:23;;42041:311;;;:::o;42358:307::-;42419:4;42509:18;42501:6;42498:30;42495:56;;;42531:18;;:::i;:::-;42495:56;42569:29;42591:6;42569:29;:::i;:::-;42561:37;;42653:4;42647;42643:15;42635:23;;42358:307;;;:::o;42671:308::-;42733:4;42823:18;42815:6;42812:30;42809:56;;;42845:18;;:::i;:::-;42809:56;42883:29;42905:6;42883:29;:::i;:::-;42875:37;;42967:4;42961;42957:15;42949:23;;42671:308;;;:::o;42985:132::-;43052:4;43075:3;43067:11;;43105:4;43100:3;43096:14;43088:22;;42985:132;;;:::o;43123:114::-;43190:6;43224:5;43218:12;43208:22;;43123:114;;;:::o;43243:98::-;43294:6;43328:5;43322:12;43312:22;;43243:98;;;:::o;43347:99::-;43399:6;43433:5;43427:12;43417:22;;43347:99;;;:::o;43452:113::-;43522:4;43554;43549:3;43545:14;43537:22;;43452:113;;;:::o;43571:163::-;43688:11;43725:3;43710:18;;43571:163;;;;:::o;43740:168::-;43823:11;43857:6;43852:3;43845:19;43897:4;43892:3;43888:14;43873:29;;43740:168;;;;:::o;43914:169::-;43998:11;44032:6;44027:3;44020:19;44072:4;44067:3;44063:14;44048:29;;43914:169;;;;:::o;44089:148::-;44191:11;44228:3;44213:18;;44089:148;;;;:::o;44243:305::-;44283:3;44302:20;44320:1;44302:20;:::i;:::-;44297:25;;44336:20;44354:1;44336:20;:::i;:::-;44331:25;;44490:1;44422:66;44418:74;44415:1;44412:81;44409:107;;;44496:18;;:::i;:::-;44409:107;44540:1;44537;44533:9;44526:16;;44243:305;;;;:::o;44554:185::-;44594:1;44611:20;44629:1;44611:20;:::i;:::-;44606:25;;44645:20;44663:1;44645:20;:::i;:::-;44640:25;;44684:1;44674:35;;44689:18;;:::i;:::-;44674:35;44731:1;44728;44724:9;44719:14;;44554:185;;;;:::o;44745:348::-;44785:7;44808:20;44826:1;44808:20;:::i;:::-;44803:25;;44842:20;44860:1;44842:20;:::i;:::-;44837:25;;45030:1;44962:66;44958:74;44955:1;44952:81;44947:1;44940:9;44933:17;44929:105;44926:131;;;45037:18;;:::i;:::-;44926:131;45085:1;45082;45078:9;45067:20;;44745:348;;;;:::o;45099:191::-;45139:4;45159:20;45177:1;45159:20;:::i;:::-;45154:25;;45193:20;45211:1;45193:20;:::i;:::-;45188:25;;45232:1;45229;45226:8;45223:34;;;45237:18;;:::i;:::-;45223:34;45282:1;45279;45275:9;45267:17;;45099:191;;;;:::o;45296:96::-;45333:7;45362:24;45380:5;45362:24;:::i;:::-;45351:35;;45296:96;;;:::o;45398:90::-;45432:7;45475:5;45468:13;45461:21;45450:32;;45398:90;;;:::o;45494:149::-;45530:7;45570:66;45563:5;45559:78;45548:89;;45494:149;;;:::o;45649:126::-;45686:7;45726:42;45719:5;45715:54;45704:65;;45649:126;;;:::o;45781:77::-;45818:7;45847:5;45836:16;;45781:77;;;:::o;45864:151::-;45939:9;45972:37;46003:5;45972:37;:::i;:::-;45959:50;;45864:151;;;:::o;46021:126::-;46071:9;46104:37;46135:5;46104:37;:::i;:::-;46091:50;;46021:126;;;:::o;46153:113::-;46203:9;46236:24;46254:5;46236:24;:::i;:::-;46223:37;;46153:113;;;:::o;46272:154::-;46356:6;46351:3;46346;46333:30;46418:1;46409:6;46404:3;46400:16;46393:27;46272:154;;;:::o;46432:307::-;46500:1;46510:113;46524:6;46521:1;46518:13;46510:113;;;46609:1;46604:3;46600:11;46594:18;46590:1;46585:3;46581:11;46574:39;46546:2;46543:1;46539:10;46534:15;;46510:113;;;46641:6;46638:1;46635:13;46632:101;;;46721:1;46712:6;46707:3;46703:16;46696:27;46632:101;46481:258;46432:307;;;:::o;46745:320::-;46789:6;46826:1;46820:4;46816:12;46806:22;;46873:1;46867:4;46863:12;46894:18;46884:81;;46950:4;46942:6;46938:17;46928:27;;46884:81;47012:2;47004:6;47001:14;46981:18;46978:38;46975:84;;;47031:18;;:::i;:::-;46975:84;46796:269;46745:320;;;:::o;47071:281::-;47154:27;47176:4;47154:27;:::i;:::-;47146:6;47142:40;47284:6;47272:10;47269:22;47248:18;47236:10;47233:34;47230:62;47227:88;;;47295:18;;:::i;:::-;47227:88;47335:10;47331:2;47324:22;47114:238;47071:281;;:::o;47358:233::-;47397:3;47420:24;47438:5;47420:24;:::i;:::-;47411:33;;47466:66;47459:5;47456:77;47453:103;;;47536:18;;:::i;:::-;47453:103;47583:1;47576:5;47572:13;47565:20;;47358:233;;;:::o;47597:176::-;47629:1;47646:20;47664:1;47646:20;:::i;:::-;47641:25;;47680:20;47698:1;47680:20;:::i;:::-;47675:25;;47719:1;47709:35;;47724:18;;:::i;:::-;47709:35;47765:1;47762;47758:9;47753:14;;47597:176;;;;:::o;47779:180::-;47827:77;47824:1;47817:88;47924:4;47921:1;47914:15;47948:4;47945:1;47938:15;47965:180;48013:77;48010:1;48003:88;48110:4;48107:1;48100:15;48134:4;48131:1;48124:15;48151:180;48199:77;48196:1;48189:88;48296:4;48293:1;48286:15;48320:4;48317:1;48310:15;48337:180;48385:77;48382:1;48375:88;48482:4;48479:1;48472:15;48506:4;48503:1;48496:15;48523:180;48571:77;48568:1;48561:88;48668:4;48665:1;48658:15;48692:4;48689:1;48682:15;48709:180;48757:77;48754:1;48747:88;48854:4;48851:1;48844:15;48878:4;48875:1;48868:15;48895:117;49004:1;49001;48994:12;49018:117;49127:1;49124;49117:12;49141:117;49250:1;49247;49240:12;49264:117;49373:1;49370;49363:12;49387:117;49496:1;49493;49486:12;49510:102;49551:6;49602:2;49598:7;49593:2;49586:5;49582:14;49578:28;49568:38;;49510:102;;;:::o;49618:170::-;49758:22;49754:1;49746:6;49742:14;49735:46;49618:170;:::o;49794:239::-;49934:34;49930:1;49922:6;49918:14;49911:58;50003:22;49998:2;49990:6;49986:15;49979:47;49794:239;:::o;50039:229::-;50179:34;50175:1;50167:6;50163:14;50156:58;50248:12;50243:2;50235:6;50231:15;50224:37;50039:229;:::o;50274:230::-;50414:34;50410:1;50402:6;50398:14;50391:58;50483:13;50478:2;50470:6;50466:15;50459:38;50274:230;:::o;50510:237::-;50650:34;50646:1;50638:6;50634:14;50627:58;50719:20;50714:2;50706:6;50702:15;50695:45;50510:237;:::o;50753:225::-;50893:34;50889:1;50881:6;50877:14;50870:58;50962:8;50957:2;50949:6;50945:15;50938:33;50753:225;:::o;50984:224::-;51124:34;51120:1;51112:6;51108:14;51101:58;51193:7;51188:2;51180:6;51176:15;51169:32;50984:224;:::o;51214:178::-;51354:30;51350:1;51342:6;51338:14;51331:54;51214:178;:::o;51398:232::-;51538:34;51534:1;51526:6;51522:14;51515:58;51607:15;51602:2;51594:6;51590:15;51583:40;51398:232;:::o;51636:230::-;51776:34;51772:1;51764:6;51760:14;51753:58;51845:13;51840:2;51832:6;51828:15;51821:38;51636:230;:::o;51872:244::-;52012:34;52008:1;52000:6;51996:14;51989:58;52081:27;52076:2;52068:6;52064:15;52057:52;51872:244;:::o;52122:292::-;52262:34;52258:1;52250:6;52246:14;52239:58;52331:34;52326:2;52318:6;52314:15;52307:59;52400:6;52395:2;52387:6;52383:15;52376:31;52122:292;:::o;52420:223::-;52560:34;52556:1;52548:6;52544:14;52537:58;52629:6;52624:2;52616:6;52612:15;52605:31;52420:223;:::o;52649:175::-;52789:27;52785:1;52777:6;52773:14;52766:51;52649:175;:::o;52830:231::-;52970:34;52966:1;52958:6;52954:14;52947:58;53039:14;53034:2;53026:6;53022:15;53015:39;52830:231;:::o;53067:166::-;53207:18;53203:1;53195:6;53191:14;53184:42;53067:166;:::o;53239:232::-;53379:34;53375:1;53367:6;53363:14;53356:58;53448:15;53443:2;53435:6;53431:15;53424:40;53239:232;:::o;53477:243::-;53617:34;53613:1;53605:6;53601:14;53594:58;53686:26;53681:2;53673:6;53669:15;53662:51;53477:243;:::o;53726:229::-;53866:34;53862:1;53854:6;53850:14;53843:58;53935:12;53930:2;53922:6;53918:15;53911:37;53726:229;:::o;53961:228::-;54101:34;54097:1;54089:6;54085:14;54078:58;54170:11;54165:2;54157:6;54153:15;54146:36;53961:228;:::o;54195:230::-;54335:34;54331:1;54323:6;54319:14;54312:58;54404:13;54399:2;54391:6;54387:15;54380:38;54195:230;:::o;54431:182::-;54571:34;54567:1;54559:6;54555:14;54548:58;54431:182;:::o;54619:231::-;54759:34;54755:1;54747:6;54743:14;54736:58;54828:14;54823:2;54815:6;54811:15;54804:39;54619:231;:::o;54856:182::-;54996:34;54992:1;54984:6;54980:14;54973:58;54856:182;:::o;55044:234::-;55184:34;55180:1;55172:6;55168:14;55161:58;55253:17;55248:2;55240:6;55236:15;55229:42;55044:234;:::o;55284:220::-;55424:34;55420:1;55412:6;55408:14;55401:58;55493:3;55488:2;55480:6;55476:15;55469:28;55284:220;:::o;55510:236::-;55650:34;55646:1;55638:6;55634:14;55627:58;55719:19;55714:2;55706:6;55702:15;55695:44;55510:236;:::o;55752:182::-;55892:34;55888:1;55880:6;55876:14;55869:58;55752:182;:::o;55940:236::-;56080:34;56076:1;56068:6;56064:14;56057:58;56149:19;56144:2;56136:6;56132:15;56125:44;55940:236;:::o;56182:242::-;56322:34;56318:1;56310:6;56306:14;56299:58;56391:25;56386:2;56378:6;56374:15;56367:50;56182:242;:::o;56430:231::-;56570:34;56566:1;56558:6;56554:14;56547:58;56639:14;56634:2;56626:6;56622:15;56615:39;56430:231;:::o;56667:293::-;56807:34;56803:1;56795:6;56791:14;56784:58;56876:34;56871:2;56863:6;56859:15;56852:59;56945:7;56940:2;56932:6;56928:15;56921:32;56667:293;:::o;56966:240::-;57106:34;57102:1;57094:6;57090:14;57083:58;57175:23;57170:2;57162:6;57158:15;57151:48;56966:240;:::o;57212:122::-;57285:24;57303:5;57285:24;:::i;:::-;57278:5;57275:35;57265:63;;57324:1;57321;57314:12;57265:63;57212:122;:::o;57340:116::-;57410:21;57425:5;57410:21;:::i;:::-;57403:5;57400:32;57390:60;;57446:1;57443;57436:12;57390:60;57340:116;:::o;57462:120::-;57534:23;57551:5;57534:23;:::i;:::-;57527:5;57524:34;57514:62;;57572:1;57569;57562:12;57514:62;57462:120;:::o;57588:122::-;57661:24;57679:5;57661:24;:::i;:::-;57654:5;57651:35;57641:63;;57700:1;57697;57690:12;57641:63;57588:122;:::o
Swarm Source
ipfs://ac8117bc94f3cdbff46bd1d37183ba0e158b95eabcaf48384e5a42fc47dd21e7