ERC-721
Overview
Max Total Supply
1,806 ISBX
Holders
461
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 ISBXLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Islabb
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-02 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/Strings.sol //IslaBBX-ISBX-2022-6-2-0x2cf4673b7925b70e26332c35e19562a0ba453b27 // 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/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts 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/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/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: islabb.sol // Created by HashLips // The Nerdy Coder Clones pragma solidity ^0.8.0; contract Islabb is ERC721Enumerable, Ownable { using Strings for uint256; // 是否准许nft开卖-开关 bool public _isSaleActive = false; // 初始化盲盒,等到一定时机可以随机开箱,变成true bool public _revealed = false; // 盲盒开关打开后,需要显示开箱的图片的base地址 string public baseURI; // 盲盒图片的meta,json地址,后文会提到 string public notRevealedUri; // 默认地址的扩展类型 string public baseExtension = ".json"; // 铸造Nft的价格 uint256 public cost = 0.06 ether; // nft的总数量 uint256 public maxSupply = 9999; // 铸造的钱包最多只能有一个nft数量 //uint256 public maxBalance = 1; // 一次mint的nft的数量 uint256 public maxMintAmount = 20; bool public paused = false; mapping(address => bool) public whitelisted; mapping(uint256 => string) private _tokenURIs; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory initNotRevealedUri ) ERC721( _name , _symbol ) { setBaseURI(_initBaseURI); setNotRevealedURI(initNotRevealedUri); //mint(msg.sender, 1); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); require(_isSaleActive, "Sale must be active to mint NicMetas"); if (msg.sender != owner()) { if(whitelisted[msg.sender] != true) { require(msg.value >= cost * _mintAmount); } } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (_revealed == false) { return notRevealedUri; } string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI. return string(abi.encodePacked(base, tokenId.toString(), baseExtension)); } //only owner function flipSaleActive() public onlyOwner { _isSaleActive = !_isSaleActive; } function flipReveal() public onlyOwner { _revealed = !_revealed; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function whitelistUser(address _user) public onlyOwner { whitelisted[_user] = true; } function removeWhitelistUser(address _user) public onlyOwner { whitelisted[_user] = false; } function withdraw() public payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleActive","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":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526000600a60146101000a81548160ff0219169083151502179055506000600a60156101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d908051906020019062000087929190620003bc565b5066d529ae9e860000600e5561270f600f5560146010556000601160006101000a81548160ff021916908315150217905550348015620000c657600080fd5b50604051620051f1380380620051f18339818101604052810190620000ec919062000609565b8383816000908051906020019062000106929190620003bc565b5080600190805190602001906200011f929190620003bc565b50505062000142620001366200016e60201b60201c565b6200017660201b60201c565b62000153826200023c60201b60201c565b6200016481620002e760201b60201c565b50505050620007de565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200024c6200016e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002726200039260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002cb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c29062000758565b60405180910390fd5b80600b9080519060200190620002e3929190620003bc565b5050565b620002f76200016e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200031d6200039260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000376576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036d9062000758565b60405180910390fd5b80600c90805190602001906200038e929190620003bc565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003ca90620007a9565b90600052602060002090601f016020900481019282620003ee57600085556200043a565b82601f106200040957805160ff19168380011785556200043a565b828001600101855582156200043a579182015b82811115620004395782518255916020019190600101906200041c565b5b5090506200044991906200044d565b5090565b5b80821115620004685760008160009055506001016200044e565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004d5826200048a565b810181811067ffffffffffffffff82111715620004f757620004f66200049b565b5b80604052505050565b60006200050c6200046c565b90506200051a8282620004ca565b919050565b600067ffffffffffffffff8211156200053d576200053c6200049b565b5b62000548826200048a565b9050602081019050919050565b60005b838110156200057557808201518184015260208101905062000558565b8381111562000585576000848401525b50505050565b6000620005a26200059c846200051f565b62000500565b905082815260208101848484011115620005c157620005c062000485565b5b620005ce84828562000555565b509392505050565b600082601f830112620005ee57620005ed62000480565b5b8151620006008482602086016200058b565b91505092915050565b6000806000806080858703121562000626576200062562000476565b5b600085015167ffffffffffffffff8111156200064757620006466200047b565b5b6200065587828801620005d6565b945050602085015167ffffffffffffffff8111156200067957620006786200047b565b5b6200068787828801620005d6565b935050604085015167ffffffffffffffff811115620006ab57620006aa6200047b565b5b620006b987828801620005d6565b925050606085015167ffffffffffffffff811115620006dd57620006dc6200047b565b5b620006eb87828801620005d6565b91505092959194509250565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000740602083620006f7565b91506200074d8262000708565b602082019050919050565b60006020820190508181036000830152620007738162000731565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007c257607f821691505b602082108103620007d857620007d76200077a565b5b50919050565b614a0380620007ee6000396000f3fe6080604052600436106102515760003560e01c80635c975abb11610139578063a22cb465116100b6578063d936547e1161007a578063d936547e14610884578063da3ef23f146108c1578063de8b51e1146108ea578063e985e9c514610901578063f2c4ce1e1461093e578063f2fde38b1461096757610251565b8063a22cb4651461079f578063b88d4fde146107c8578063c6682862146107f1578063c87b56dd1461081c578063d5abeb011461085957610251565b806370a08231116100fd57806370a08231146106cc578063715018a6146107095780637f00c7a6146107205780638da5cb5b1461074957806395d89b411461077457610251565b80635c975abb146105e35780636352211e1461060e5780636c0360eb1461064b5780636ebeac85146106765780637080d6fc146106a157610251565b80632f745c59116101d257806342842e0e1161019657806342842e0e146104c5578063438b6300146104ee57806344a0d68a1461052b5780634a4c560d146105545780634f6ccce71461057d57806355f804b3146105ba57610251565b80632f745c591461042257806330cc7ae01461045f5780633b84d9c6146104885780633ccfd60b1461049f57806340c10f19146104a957610251565b8063095ea7b311610219578063095ea7b31461034f57806313faede61461037857806318160ddd146103a3578063239c70ae146103ce57806323b872dd146103f957610251565b806301ffc9a71461025657806302329a291461029357806306fdde03146102bc578063081812fc146102e7578063081c8c4414610324575b600080fd5b34801561026257600080fd5b5061027d6004803603810190610278919061338f565b610990565b60405161028a91906133d7565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b5919061341e565b610a0a565b005b3480156102c857600080fd5b506102d1610aa3565b6040516102de91906134e4565b60405180910390f35b3480156102f357600080fd5b5061030e6004803603810190610309919061353c565b610b35565b60405161031b91906135aa565b60405180910390f35b34801561033057600080fd5b50610339610bba565b60405161034691906134e4565b60405180910390f35b34801561035b57600080fd5b50610376600480360381019061037191906135f1565b610c48565b005b34801561038457600080fd5b5061038d610d5f565b60405161039a9190613640565b60405180910390f35b3480156103af57600080fd5b506103b8610d65565b6040516103c59190613640565b60405180910390f35b3480156103da57600080fd5b506103e3610d72565b6040516103f09190613640565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b919061365b565b610d78565b005b34801561042e57600080fd5b50610449600480360381019061044491906135f1565b610dd8565b6040516104569190613640565b60405180910390f35b34801561046b57600080fd5b50610486600480360381019061048191906136ae565b610e7d565b005b34801561049457600080fd5b5061049d610f54565b005b6104a7610ffc565b005b6104c360048036038101906104be91906135f1565b6110b8565b005b3480156104d157600080fd5b506104ec60048036038101906104e7919061365b565b61124d565b005b3480156104fa57600080fd5b50610515600480360381019061051091906136ae565b61126d565b6040516105229190613799565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d919061353c565b61131b565b005b34801561056057600080fd5b5061057b600480360381019061057691906136ae565b6113a1565b005b34801561058957600080fd5b506105a4600480360381019061059f919061353c565b611478565b6040516105b19190613640565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc91906138f0565b6114e9565b005b3480156105ef57600080fd5b506105f861157f565b60405161060591906133d7565b60405180910390f35b34801561061a57600080fd5b506106356004803603810190610630919061353c565b611592565b60405161064291906135aa565b60405180910390f35b34801561065757600080fd5b50610660611643565b60405161066d91906134e4565b60405180910390f35b34801561068257600080fd5b5061068b6116d1565b60405161069891906133d7565b60405180910390f35b3480156106ad57600080fd5b506106b66116e4565b6040516106c391906133d7565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee91906136ae565b6116f7565b6040516107009190613640565b60405180910390f35b34801561071557600080fd5b5061071e6117ae565b005b34801561072c57600080fd5b506107476004803603810190610742919061353c565b611836565b005b34801561075557600080fd5b5061075e6118bc565b60405161076b91906135aa565b60405180910390f35b34801561078057600080fd5b506107896118e6565b60405161079691906134e4565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c19190613939565b611978565b005b3480156107d457600080fd5b506107ef60048036038101906107ea9190613a1a565b61198e565b005b3480156107fd57600080fd5b506108066119f0565b60405161081391906134e4565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e919061353c565b611a7e565b60405161085091906134e4565b60405180910390f35b34801561086557600080fd5b5061086e611ca0565b60405161087b9190613640565b60405180910390f35b34801561089057600080fd5b506108ab60048036038101906108a691906136ae565b611ca6565b6040516108b891906133d7565b60405180910390f35b3480156108cd57600080fd5b506108e860048036038101906108e391906138f0565b611cc6565b005b3480156108f657600080fd5b506108ff611d5c565b005b34801561090d57600080fd5b5061092860048036038101906109239190613a9d565b611e04565b60405161093591906133d7565b60405180910390f35b34801561094a57600080fd5b50610965600480360381019061096091906138f0565b611e98565b005b34801561097357600080fd5b5061098e600480360381019061098991906136ae565b611f2e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a035750610a0282612025565b5b9050919050565b610a12612107565b73ffffffffffffffffffffffffffffffffffffffff16610a306118bc565b73ffffffffffffffffffffffffffffffffffffffff1614610a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7d90613b29565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b606060008054610ab290613b78565b80601f0160208091040260200160405190810160405280929190818152602001828054610ade90613b78565b8015610b2b5780601f10610b0057610100808354040283529160200191610b2b565b820191906000526020600020905b815481529060010190602001808311610b0e57829003601f168201915b5050505050905090565b6000610b408261210f565b610b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7690613c1b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600c8054610bc790613b78565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf390613b78565b8015610c405780601f10610c1557610100808354040283529160200191610c40565b820191906000526020600020905b815481529060010190602001808311610c2357829003601f168201915b505050505081565b6000610c5382611592565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba90613cad565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ce2612107565b73ffffffffffffffffffffffffffffffffffffffff161480610d115750610d1081610d0b612107565b611e04565b5b610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4790613d3f565b60405180910390fd5b610d5a838361217b565b505050565b600e5481565b6000600880549050905090565b60105481565b610d89610d83612107565b82612234565b610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf90613dd1565b60405180910390fd5b610dd3838383612312565b505050565b6000610de3836116f7565b8210610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90613e63565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e85612107565b73ffffffffffffffffffffffffffffffffffffffff16610ea36118bc565b73ffffffffffffffffffffffffffffffffffffffff1614610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef090613b29565b60405180910390fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610f5c612107565b73ffffffffffffffffffffffffffffffffffffffff16610f7a6118bc565b73ffffffffffffffffffffffffffffffffffffffff1614610fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc790613b29565b60405180910390fd5b600a60159054906101000a900460ff1615600a60156101000a81548160ff021916908315150217905550565b611004612107565b73ffffffffffffffffffffffffffffffffffffffff166110226118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f90613b29565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506110b657600080fd5b565b60006110c2610d65565b9050601160009054906101000a900460ff16156110de57600080fd5b600082116110eb57600080fd5b6010548211156110fa57600080fd5b600f5482826111099190613eb2565b111561111457600080fd5b600a60149054906101000a900460ff16611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a90613f7a565b60405180910390fd5b61116b6118bc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112115760011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146112105781600e546112039190613f9a565b34101561120f57600080fd5b5b5b6000600190505b8281116112475761123484828461122f9190613eb2565b612578565b808061123f90613ff4565b915050611218565b50505050565b6112688383836040518060200160405280600081525061198e565b505050565b6060600061127a836116f7565b905060008167ffffffffffffffff811115611298576112976137c5565b5b6040519080825280602002602001820160405280156112c65781602001602082028036833780820191505090505b50905060005b82811015611310576112de8582610dd8565b8282815181106112f1576112f061403c565b5b602002602001018181525050808061130890613ff4565b9150506112cc565b508092505050919050565b611323612107565b73ffffffffffffffffffffffffffffffffffffffff166113416118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138e90613b29565b60405180910390fd5b80600e8190555050565b6113a9612107565b73ffffffffffffffffffffffffffffffffffffffff166113c76118bc565b73ffffffffffffffffffffffffffffffffffffffff161461141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490613b29565b60405180910390fd5b6001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611482610d65565b82106114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba906140dd565b60405180910390fd5b600882815481106114d7576114d661403c565b5b90600052602060002001549050919050565b6114f1612107565b73ffffffffffffffffffffffffffffffffffffffff1661150f6118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155c90613b29565b60405180910390fd5b80600b908051906020019061157b929190613280565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361163a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116319061416f565b60405180910390fd5b80915050919050565b600b805461165090613b78565b80601f016020809104026020016040519081016040528092919081815260200182805461167c90613b78565b80156116c95780601f1061169e576101008083540402835291602001916116c9565b820191906000526020600020905b8154815290600101906020018083116116ac57829003601f168201915b505050505081565b600a60159054906101000a900460ff1681565b600a60149054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e90614201565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117b6612107565b73ffffffffffffffffffffffffffffffffffffffff166117d46118bc565b73ffffffffffffffffffffffffffffffffffffffff161461182a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182190613b29565b60405180910390fd5b6118346000612596565b565b61183e612107565b73ffffffffffffffffffffffffffffffffffffffff1661185c6118bc565b73ffffffffffffffffffffffffffffffffffffffff16146118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a990613b29565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546118f590613b78565b80601f016020809104026020016040519081016040528092919081815260200182805461192190613b78565b801561196e5780601f106119435761010080835404028352916020019161196e565b820191906000526020600020905b81548152906001019060200180831161195157829003601f168201915b5050505050905090565b61198a611983612107565b838361265c565b5050565b61199f611999612107565b83612234565b6119de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d590613dd1565b60405180910390fd5b6119ea848484846127c8565b50505050565b600d80546119fd90613b78565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2990613b78565b8015611a765780601f10611a4b57610100808354040283529160200191611a76565b820191906000526020600020905b815481529060010190602001808311611a5957829003601f168201915b505050505081565b6060611a898261210f565b611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90614293565b60405180910390fd5b60001515600a60159054906101000a900460ff16151503611b7557600c8054611af090613b78565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1c90613b78565b8015611b695780601f10611b3e57610100808354040283529160200191611b69565b820191906000526020600020905b815481529060010190602001808311611b4c57829003601f168201915b50505050509050611c9b565b6000601360008481526020019081526020016000208054611b9590613b78565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc190613b78565b8015611c0e5780601f10611be357610100808354040283529160200191611c0e565b820191906000526020600020905b815481529060010190602001808311611bf157829003601f168201915b505050505090506000611c1f612824565b90506000815103611c34578192505050611c9b565b600082511115611c69578082604051602001611c519291906142ef565b60405160208183030381529060405292505050611c9b565b80611c73856128b6565b600d604051602001611c87939291906143a7565b604051602081830303815290604052925050505b919050565b600f5481565b60126020528060005260406000206000915054906101000a900460ff1681565b611cce612107565b73ffffffffffffffffffffffffffffffffffffffff16611cec6118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3990613b29565b60405180910390fd5b80600d9080519060200190611d58929190613280565b5050565b611d64612107565b73ffffffffffffffffffffffffffffffffffffffff16611d826118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcf90613b29565b60405180910390fd5b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ea0612107565b73ffffffffffffffffffffffffffffffffffffffff16611ebe6118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b90613b29565b60405180910390fd5b80600c9080519060200190611f2a929190613280565b5050565b611f36612107565b73ffffffffffffffffffffffffffffffffffffffff16611f546118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa190613b29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612019576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120109061444a565b60405180910390fd5b61202281612596565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120f057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061210057506120ff82612a16565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121ee83611592565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061223f8261210f565b61227e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612275906144dc565b60405180910390fd5b600061228983611592565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122cb57506122ca8185611e04565b5b8061230957508373ffffffffffffffffffffffffffffffffffffffff166122f184610b35565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661233282611592565b73ffffffffffffffffffffffffffffffffffffffff1614612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f9061456e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ee90614600565b60405180910390fd5b612402838383612a80565b61240d60008261217b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461245d9190614620565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124b49190613eb2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612573838383612b92565b505050565b612592828260405180602001604052806000815250612b97565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c1906146a0565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516127bb91906133d7565b60405180910390a3505050565b6127d3848484612312565b6127df84848484612bf2565b61281e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281590614732565b60405180910390fd5b50505050565b6060600b805461283390613b78565b80601f016020809104026020016040519081016040528092919081815260200182805461285f90613b78565b80156128ac5780601f10612881576101008083540402835291602001916128ac565b820191906000526020600020905b81548152906001019060200180831161288f57829003601f168201915b5050505050905090565b6060600082036128fd576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a11565b600082905060005b6000821461292f57808061291890613ff4565b915050600a826129289190614781565b9150612905565b60008167ffffffffffffffff81111561294b5761294a6137c5565b5b6040519080825280601f01601f19166020018201604052801561297d5781602001600182028036833780820191505090505b5090505b60008514612a0a576001826129969190614620565b9150600a856129a591906147b2565b60306129b19190613eb2565b60f81b8183815181106129c7576129c661403c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a039190614781565b9450612981565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612a8b838383612d79565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612acd57612ac881612d7e565b612b0c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b0b57612b0a8382612dc7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b4e57612b4981612f34565b612b8d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b8c57612b8b8282613005565b5b5b505050565b505050565b612ba18383613084565b612bae6000848484612bf2565b612bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be490614732565b60405180910390fd5b505050565b6000612c138473ffffffffffffffffffffffffffffffffffffffff1661325d565b15612d6c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c3c612107565b8786866040518563ffffffff1660e01b8152600401612c5e9493929190614838565b6020604051808303816000875af1925050508015612c9a57506040513d601f19601f82011682018060405250810190612c979190614899565b60015b612d1c573d8060008114612cca576040519150601f19603f3d011682016040523d82523d6000602084013e612ccf565b606091505b506000815103612d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0b90614732565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d71565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612dd4846116f7565b612dde9190614620565b9050600060076000848152602001908152602001600020549050818114612ec3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f489190614620565b9050600060096000848152602001908152602001600020549050600060088381548110612f7857612f7761403c565b5b906000526020600020015490508060088381548110612f9a57612f9961403c565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612fe957612fe86148c6565b5b6001900381819060005260206000200160009055905550505050565b6000613010836116f7565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ea90614941565b60405180910390fd5b6130fc8161210f565b1561313c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613133906149ad565b60405180910390fd5b61314860008383612a80565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131989190613eb2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461325960008383612b92565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461328c90613b78565b90600052602060002090601f0160209004810192826132ae57600085556132f5565b82601f106132c757805160ff19168380011785556132f5565b828001600101855582156132f5579182015b828111156132f45782518255916020019190600101906132d9565b5b5090506133029190613306565b5090565b5b8082111561331f576000816000905550600101613307565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61336c81613337565b811461337757600080fd5b50565b60008135905061338981613363565b92915050565b6000602082840312156133a5576133a461332d565b5b60006133b38482850161337a565b91505092915050565b60008115159050919050565b6133d1816133bc565b82525050565b60006020820190506133ec60008301846133c8565b92915050565b6133fb816133bc565b811461340657600080fd5b50565b600081359050613418816133f2565b92915050565b6000602082840312156134345761343361332d565b5b600061344284828501613409565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561348557808201518184015260208101905061346a565b83811115613494576000848401525b50505050565b6000601f19601f8301169050919050565b60006134b68261344b565b6134c08185613456565b93506134d0818560208601613467565b6134d98161349a565b840191505092915050565b600060208201905081810360008301526134fe81846134ab565b905092915050565b6000819050919050565b61351981613506565b811461352457600080fd5b50565b60008135905061353681613510565b92915050565b6000602082840312156135525761355161332d565b5b600061356084828501613527565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061359482613569565b9050919050565b6135a481613589565b82525050565b60006020820190506135bf600083018461359b565b92915050565b6135ce81613589565b81146135d957600080fd5b50565b6000813590506135eb816135c5565b92915050565b600080604083850312156136085761360761332d565b5b6000613616858286016135dc565b925050602061362785828601613527565b9150509250929050565b61363a81613506565b82525050565b60006020820190506136556000830184613631565b92915050565b6000806000606084860312156136745761367361332d565b5b6000613682868287016135dc565b9350506020613693868287016135dc565b92505060406136a486828701613527565b9150509250925092565b6000602082840312156136c4576136c361332d565b5b60006136d2848285016135dc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61371081613506565b82525050565b60006137228383613707565b60208301905092915050565b6000602082019050919050565b6000613746826136db565b61375081856136e6565b935061375b836136f7565b8060005b8381101561378c5781516137738882613716565b975061377e8361372e565b92505060018101905061375f565b5085935050505092915050565b600060208201905081810360008301526137b3818461373b565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137fd8261349a565b810181811067ffffffffffffffff8211171561381c5761381b6137c5565b5b80604052505050565b600061382f613323565b905061383b82826137f4565b919050565b600067ffffffffffffffff82111561385b5761385a6137c5565b5b6138648261349a565b9050602081019050919050565b82818337600083830152505050565b600061389361388e84613840565b613825565b9050828152602081018484840111156138af576138ae6137c0565b5b6138ba848285613871565b509392505050565b600082601f8301126138d7576138d66137bb565b5b81356138e7848260208601613880565b91505092915050565b6000602082840312156139065761390561332d565b5b600082013567ffffffffffffffff81111561392457613923613332565b5b613930848285016138c2565b91505092915050565b600080604083850312156139505761394f61332d565b5b600061395e858286016135dc565b925050602061396f85828601613409565b9150509250929050565b600067ffffffffffffffff821115613994576139936137c5565b5b61399d8261349a565b9050602081019050919050565b60006139bd6139b884613979565b613825565b9050828152602081018484840111156139d9576139d86137c0565b5b6139e4848285613871565b509392505050565b600082601f830112613a0157613a006137bb565b5b8135613a118482602086016139aa565b91505092915050565b60008060008060808587031215613a3457613a3361332d565b5b6000613a42878288016135dc565b9450506020613a53878288016135dc565b9350506040613a6487828801613527565b925050606085013567ffffffffffffffff811115613a8557613a84613332565b5b613a91878288016139ec565b91505092959194509250565b60008060408385031215613ab457613ab361332d565b5b6000613ac2858286016135dc565b9250506020613ad3858286016135dc565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b13602083613456565b9150613b1e82613add565b602082019050919050565b60006020820190508181036000830152613b4281613b06565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b9057607f821691505b602082108103613ba357613ba2613b49565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613c05602c83613456565b9150613c1082613ba9565b604082019050919050565b60006020820190508181036000830152613c3481613bf8565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c97602183613456565b9150613ca282613c3b565b604082019050919050565b60006020820190508181036000830152613cc681613c8a565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613d29603883613456565b9150613d3482613ccd565b604082019050919050565b60006020820190508181036000830152613d5881613d1c565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613dbb603183613456565b9150613dc682613d5f565b604082019050919050565b60006020820190508181036000830152613dea81613dae565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613e4d602b83613456565b9150613e5882613df1565b604082019050919050565b60006020820190508181036000830152613e7c81613e40565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ebd82613506565b9150613ec883613506565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613efd57613efc613e83565b5b828201905092915050565b7f53616c65206d7573742062652061637469766520746f206d696e74204e69634d60008201527f6574617300000000000000000000000000000000000000000000000000000000602082015250565b6000613f64602483613456565b9150613f6f82613f08565b604082019050919050565b60006020820190508181036000830152613f9381613f57565b9050919050565b6000613fa582613506565b9150613fb083613506565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fe957613fe8613e83565b5b828202905092915050565b6000613fff82613506565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361403157614030613e83565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006140c7602c83613456565b91506140d28261406b565b604082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614159602983613456565b9150614164826140fd565b604082019050919050565b600060208201905081810360008301526141888161414c565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006141eb602a83613456565b91506141f68261418f565b604082019050919050565b6000602082019050818103600083015261421a816141de565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b600061427d602f83613456565b915061428882614221565b604082019050919050565b600060208201905081810360008301526142ac81614270565b9050919050565b600081905092915050565b60006142c98261344b565b6142d381856142b3565b93506142e3818560208601613467565b80840191505092915050565b60006142fb82856142be565b915061430782846142be565b91508190509392505050565b60008190508160005260206000209050919050565b6000815461433581613b78565b61433f81866142b3565b9450600182166000811461435a576001811461436b5761439e565b60ff1983168652818601935061439e565b61437485614313565b60005b8381101561439657815481890152600182019150602081019050614377565b838801955050505b50505092915050565b60006143b382866142be565b91506143bf82856142be565b91506143cb8284614328565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614434602683613456565b915061443f826143d8565b604082019050919050565b6000602082019050818103600083015261446381614427565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006144c6602c83613456565b91506144d18261446a565b604082019050919050565b600060208201905081810360008301526144f5816144b9565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614558602583613456565b9150614563826144fc565b604082019050919050565b600060208201905081810360008301526145878161454b565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006145ea602483613456565b91506145f58261458e565b604082019050919050565b60006020820190508181036000830152614619816145dd565b9050919050565b600061462b82613506565b915061463683613506565b92508282101561464957614648613e83565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061468a601983613456565b915061469582614654565b602082019050919050565b600060208201905081810360008301526146b98161467d565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061471c603283613456565b9150614727826146c0565b604082019050919050565b6000602082019050818103600083015261474b8161470f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061478c82613506565b915061479783613506565b9250826147a7576147a6614752565b5b828204905092915050565b60006147bd82613506565b91506147c883613506565b9250826147d8576147d7614752565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061480a826147e3565b61481481856147ee565b9350614824818560208601613467565b61482d8161349a565b840191505092915050565b600060808201905061484d600083018761359b565b61485a602083018661359b565b6148676040830185613631565b818103606083015261487981846147ff565b905095945050505050565b60008151905061489381613363565b92915050565b6000602082840312156148af576148ae61332d565b5b60006148bd84828501614884565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061492b602083613456565b9150614936826148f5565b602082019050919050565b6000602082019050818103600083015261495a8161491e565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614997601c83613456565b91506149a282614961565b602082019050919050565b600060208201905081810360008301526149c68161498a565b905091905056fea2646970667358221220e7c6e7cc5352bc7dc24383474a34f2421e1af24033eb8b7230710c6c5cfd49c764736f6c634300080e0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000749736c614242580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044953425800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002068747470733a2f2f7777772e69736c6162622e636f6d2f6d657461646174612f000000000000000000000000000000000000000000000000000000000000002668747470733a2f2f7777772e69736c6162622e636f6d2f6d657461646174612f302e6a736f6e0000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102515760003560e01c80635c975abb11610139578063a22cb465116100b6578063d936547e1161007a578063d936547e14610884578063da3ef23f146108c1578063de8b51e1146108ea578063e985e9c514610901578063f2c4ce1e1461093e578063f2fde38b1461096757610251565b8063a22cb4651461079f578063b88d4fde146107c8578063c6682862146107f1578063c87b56dd1461081c578063d5abeb011461085957610251565b806370a08231116100fd57806370a08231146106cc578063715018a6146107095780637f00c7a6146107205780638da5cb5b1461074957806395d89b411461077457610251565b80635c975abb146105e35780636352211e1461060e5780636c0360eb1461064b5780636ebeac85146106765780637080d6fc146106a157610251565b80632f745c59116101d257806342842e0e1161019657806342842e0e146104c5578063438b6300146104ee57806344a0d68a1461052b5780634a4c560d146105545780634f6ccce71461057d57806355f804b3146105ba57610251565b80632f745c591461042257806330cc7ae01461045f5780633b84d9c6146104885780633ccfd60b1461049f57806340c10f19146104a957610251565b8063095ea7b311610219578063095ea7b31461034f57806313faede61461037857806318160ddd146103a3578063239c70ae146103ce57806323b872dd146103f957610251565b806301ffc9a71461025657806302329a291461029357806306fdde03146102bc578063081812fc146102e7578063081c8c4414610324575b600080fd5b34801561026257600080fd5b5061027d6004803603810190610278919061338f565b610990565b60405161028a91906133d7565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b5919061341e565b610a0a565b005b3480156102c857600080fd5b506102d1610aa3565b6040516102de91906134e4565b60405180910390f35b3480156102f357600080fd5b5061030e6004803603810190610309919061353c565b610b35565b60405161031b91906135aa565b60405180910390f35b34801561033057600080fd5b50610339610bba565b60405161034691906134e4565b60405180910390f35b34801561035b57600080fd5b50610376600480360381019061037191906135f1565b610c48565b005b34801561038457600080fd5b5061038d610d5f565b60405161039a9190613640565b60405180910390f35b3480156103af57600080fd5b506103b8610d65565b6040516103c59190613640565b60405180910390f35b3480156103da57600080fd5b506103e3610d72565b6040516103f09190613640565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b919061365b565b610d78565b005b34801561042e57600080fd5b50610449600480360381019061044491906135f1565b610dd8565b6040516104569190613640565b60405180910390f35b34801561046b57600080fd5b50610486600480360381019061048191906136ae565b610e7d565b005b34801561049457600080fd5b5061049d610f54565b005b6104a7610ffc565b005b6104c360048036038101906104be91906135f1565b6110b8565b005b3480156104d157600080fd5b506104ec60048036038101906104e7919061365b565b61124d565b005b3480156104fa57600080fd5b50610515600480360381019061051091906136ae565b61126d565b6040516105229190613799565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d919061353c565b61131b565b005b34801561056057600080fd5b5061057b600480360381019061057691906136ae565b6113a1565b005b34801561058957600080fd5b506105a4600480360381019061059f919061353c565b611478565b6040516105b19190613640565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc91906138f0565b6114e9565b005b3480156105ef57600080fd5b506105f861157f565b60405161060591906133d7565b60405180910390f35b34801561061a57600080fd5b506106356004803603810190610630919061353c565b611592565b60405161064291906135aa565b60405180910390f35b34801561065757600080fd5b50610660611643565b60405161066d91906134e4565b60405180910390f35b34801561068257600080fd5b5061068b6116d1565b60405161069891906133d7565b60405180910390f35b3480156106ad57600080fd5b506106b66116e4565b6040516106c391906133d7565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee91906136ae565b6116f7565b6040516107009190613640565b60405180910390f35b34801561071557600080fd5b5061071e6117ae565b005b34801561072c57600080fd5b506107476004803603810190610742919061353c565b611836565b005b34801561075557600080fd5b5061075e6118bc565b60405161076b91906135aa565b60405180910390f35b34801561078057600080fd5b506107896118e6565b60405161079691906134e4565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c19190613939565b611978565b005b3480156107d457600080fd5b506107ef60048036038101906107ea9190613a1a565b61198e565b005b3480156107fd57600080fd5b506108066119f0565b60405161081391906134e4565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e919061353c565b611a7e565b60405161085091906134e4565b60405180910390f35b34801561086557600080fd5b5061086e611ca0565b60405161087b9190613640565b60405180910390f35b34801561089057600080fd5b506108ab60048036038101906108a691906136ae565b611ca6565b6040516108b891906133d7565b60405180910390f35b3480156108cd57600080fd5b506108e860048036038101906108e391906138f0565b611cc6565b005b3480156108f657600080fd5b506108ff611d5c565b005b34801561090d57600080fd5b5061092860048036038101906109239190613a9d565b611e04565b60405161093591906133d7565b60405180910390f35b34801561094a57600080fd5b50610965600480360381019061096091906138f0565b611e98565b005b34801561097357600080fd5b5061098e600480360381019061098991906136ae565b611f2e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a035750610a0282612025565b5b9050919050565b610a12612107565b73ffffffffffffffffffffffffffffffffffffffff16610a306118bc565b73ffffffffffffffffffffffffffffffffffffffff1614610a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7d90613b29565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b606060008054610ab290613b78565b80601f0160208091040260200160405190810160405280929190818152602001828054610ade90613b78565b8015610b2b5780601f10610b0057610100808354040283529160200191610b2b565b820191906000526020600020905b815481529060010190602001808311610b0e57829003601f168201915b5050505050905090565b6000610b408261210f565b610b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7690613c1b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600c8054610bc790613b78565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf390613b78565b8015610c405780601f10610c1557610100808354040283529160200191610c40565b820191906000526020600020905b815481529060010190602001808311610c2357829003601f168201915b505050505081565b6000610c5382611592565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba90613cad565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ce2612107565b73ffffffffffffffffffffffffffffffffffffffff161480610d115750610d1081610d0b612107565b611e04565b5b610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4790613d3f565b60405180910390fd5b610d5a838361217b565b505050565b600e5481565b6000600880549050905090565b60105481565b610d89610d83612107565b82612234565b610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf90613dd1565b60405180910390fd5b610dd3838383612312565b505050565b6000610de3836116f7565b8210610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90613e63565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e85612107565b73ffffffffffffffffffffffffffffffffffffffff16610ea36118bc565b73ffffffffffffffffffffffffffffffffffffffff1614610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef090613b29565b60405180910390fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610f5c612107565b73ffffffffffffffffffffffffffffffffffffffff16610f7a6118bc565b73ffffffffffffffffffffffffffffffffffffffff1614610fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc790613b29565b60405180910390fd5b600a60159054906101000a900460ff1615600a60156101000a81548160ff021916908315150217905550565b611004612107565b73ffffffffffffffffffffffffffffffffffffffff166110226118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f90613b29565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506110b657600080fd5b565b60006110c2610d65565b9050601160009054906101000a900460ff16156110de57600080fd5b600082116110eb57600080fd5b6010548211156110fa57600080fd5b600f5482826111099190613eb2565b111561111457600080fd5b600a60149054906101000a900460ff16611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a90613f7a565b60405180910390fd5b61116b6118bc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112115760011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146112105781600e546112039190613f9a565b34101561120f57600080fd5b5b5b6000600190505b8281116112475761123484828461122f9190613eb2565b612578565b808061123f90613ff4565b915050611218565b50505050565b6112688383836040518060200160405280600081525061198e565b505050565b6060600061127a836116f7565b905060008167ffffffffffffffff811115611298576112976137c5565b5b6040519080825280602002602001820160405280156112c65781602001602082028036833780820191505090505b50905060005b82811015611310576112de8582610dd8565b8282815181106112f1576112f061403c565b5b602002602001018181525050808061130890613ff4565b9150506112cc565b508092505050919050565b611323612107565b73ffffffffffffffffffffffffffffffffffffffff166113416118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138e90613b29565b60405180910390fd5b80600e8190555050565b6113a9612107565b73ffffffffffffffffffffffffffffffffffffffff166113c76118bc565b73ffffffffffffffffffffffffffffffffffffffff161461141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490613b29565b60405180910390fd5b6001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611482610d65565b82106114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba906140dd565b60405180910390fd5b600882815481106114d7576114d661403c565b5b90600052602060002001549050919050565b6114f1612107565b73ffffffffffffffffffffffffffffffffffffffff1661150f6118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155c90613b29565b60405180910390fd5b80600b908051906020019061157b929190613280565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361163a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116319061416f565b60405180910390fd5b80915050919050565b600b805461165090613b78565b80601f016020809104026020016040519081016040528092919081815260200182805461167c90613b78565b80156116c95780601f1061169e576101008083540402835291602001916116c9565b820191906000526020600020905b8154815290600101906020018083116116ac57829003601f168201915b505050505081565b600a60159054906101000a900460ff1681565b600a60149054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e90614201565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117b6612107565b73ffffffffffffffffffffffffffffffffffffffff166117d46118bc565b73ffffffffffffffffffffffffffffffffffffffff161461182a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182190613b29565b60405180910390fd5b6118346000612596565b565b61183e612107565b73ffffffffffffffffffffffffffffffffffffffff1661185c6118bc565b73ffffffffffffffffffffffffffffffffffffffff16146118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a990613b29565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546118f590613b78565b80601f016020809104026020016040519081016040528092919081815260200182805461192190613b78565b801561196e5780601f106119435761010080835404028352916020019161196e565b820191906000526020600020905b81548152906001019060200180831161195157829003601f168201915b5050505050905090565b61198a611983612107565b838361265c565b5050565b61199f611999612107565b83612234565b6119de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d590613dd1565b60405180910390fd5b6119ea848484846127c8565b50505050565b600d80546119fd90613b78565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2990613b78565b8015611a765780601f10611a4b57610100808354040283529160200191611a76565b820191906000526020600020905b815481529060010190602001808311611a5957829003601f168201915b505050505081565b6060611a898261210f565b611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90614293565b60405180910390fd5b60001515600a60159054906101000a900460ff16151503611b7557600c8054611af090613b78565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1c90613b78565b8015611b695780601f10611b3e57610100808354040283529160200191611b69565b820191906000526020600020905b815481529060010190602001808311611b4c57829003601f168201915b50505050509050611c9b565b6000601360008481526020019081526020016000208054611b9590613b78565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc190613b78565b8015611c0e5780601f10611be357610100808354040283529160200191611c0e565b820191906000526020600020905b815481529060010190602001808311611bf157829003601f168201915b505050505090506000611c1f612824565b90506000815103611c34578192505050611c9b565b600082511115611c69578082604051602001611c519291906142ef565b60405160208183030381529060405292505050611c9b565b80611c73856128b6565b600d604051602001611c87939291906143a7565b604051602081830303815290604052925050505b919050565b600f5481565b60126020528060005260406000206000915054906101000a900460ff1681565b611cce612107565b73ffffffffffffffffffffffffffffffffffffffff16611cec6118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3990613b29565b60405180910390fd5b80600d9080519060200190611d58929190613280565b5050565b611d64612107565b73ffffffffffffffffffffffffffffffffffffffff16611d826118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcf90613b29565b60405180910390fd5b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ea0612107565b73ffffffffffffffffffffffffffffffffffffffff16611ebe6118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b90613b29565b60405180910390fd5b80600c9080519060200190611f2a929190613280565b5050565b611f36612107565b73ffffffffffffffffffffffffffffffffffffffff16611f546118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa190613b29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612019576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120109061444a565b60405180910390fd5b61202281612596565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120f057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061210057506120ff82612a16565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121ee83611592565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061223f8261210f565b61227e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612275906144dc565b60405180910390fd5b600061228983611592565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122cb57506122ca8185611e04565b5b8061230957508373ffffffffffffffffffffffffffffffffffffffff166122f184610b35565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661233282611592565b73ffffffffffffffffffffffffffffffffffffffff1614612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f9061456e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ee90614600565b60405180910390fd5b612402838383612a80565b61240d60008261217b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461245d9190614620565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124b49190613eb2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612573838383612b92565b505050565b612592828260405180602001604052806000815250612b97565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c1906146a0565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516127bb91906133d7565b60405180910390a3505050565b6127d3848484612312565b6127df84848484612bf2565b61281e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281590614732565b60405180910390fd5b50505050565b6060600b805461283390613b78565b80601f016020809104026020016040519081016040528092919081815260200182805461285f90613b78565b80156128ac5780601f10612881576101008083540402835291602001916128ac565b820191906000526020600020905b81548152906001019060200180831161288f57829003601f168201915b5050505050905090565b6060600082036128fd576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a11565b600082905060005b6000821461292f57808061291890613ff4565b915050600a826129289190614781565b9150612905565b60008167ffffffffffffffff81111561294b5761294a6137c5565b5b6040519080825280601f01601f19166020018201604052801561297d5781602001600182028036833780820191505090505b5090505b60008514612a0a576001826129969190614620565b9150600a856129a591906147b2565b60306129b19190613eb2565b60f81b8183815181106129c7576129c661403c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a039190614781565b9450612981565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612a8b838383612d79565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612acd57612ac881612d7e565b612b0c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b0b57612b0a8382612dc7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b4e57612b4981612f34565b612b8d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b8c57612b8b8282613005565b5b5b505050565b505050565b612ba18383613084565b612bae6000848484612bf2565b612bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be490614732565b60405180910390fd5b505050565b6000612c138473ffffffffffffffffffffffffffffffffffffffff1661325d565b15612d6c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c3c612107565b8786866040518563ffffffff1660e01b8152600401612c5e9493929190614838565b6020604051808303816000875af1925050508015612c9a57506040513d601f19601f82011682018060405250810190612c979190614899565b60015b612d1c573d8060008114612cca576040519150601f19603f3d011682016040523d82523d6000602084013e612ccf565b606091505b506000815103612d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0b90614732565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d71565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612dd4846116f7565b612dde9190614620565b9050600060076000848152602001908152602001600020549050818114612ec3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f489190614620565b9050600060096000848152602001908152602001600020549050600060088381548110612f7857612f7761403c565b5b906000526020600020015490508060088381548110612f9a57612f9961403c565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612fe957612fe86148c6565b5b6001900381819060005260206000200160009055905550505050565b6000613010836116f7565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ea90614941565b60405180910390fd5b6130fc8161210f565b1561313c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613133906149ad565b60405180910390fd5b61314860008383612a80565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131989190613eb2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461325960008383612b92565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461328c90613b78565b90600052602060002090601f0160209004810192826132ae57600085556132f5565b82601f106132c757805160ff19168380011785556132f5565b828001600101855582156132f5579182015b828111156132f45782518255916020019190600101906132d9565b5b5090506133029190613306565b5090565b5b8082111561331f576000816000905550600101613307565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61336c81613337565b811461337757600080fd5b50565b60008135905061338981613363565b92915050565b6000602082840312156133a5576133a461332d565b5b60006133b38482850161337a565b91505092915050565b60008115159050919050565b6133d1816133bc565b82525050565b60006020820190506133ec60008301846133c8565b92915050565b6133fb816133bc565b811461340657600080fd5b50565b600081359050613418816133f2565b92915050565b6000602082840312156134345761343361332d565b5b600061344284828501613409565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561348557808201518184015260208101905061346a565b83811115613494576000848401525b50505050565b6000601f19601f8301169050919050565b60006134b68261344b565b6134c08185613456565b93506134d0818560208601613467565b6134d98161349a565b840191505092915050565b600060208201905081810360008301526134fe81846134ab565b905092915050565b6000819050919050565b61351981613506565b811461352457600080fd5b50565b60008135905061353681613510565b92915050565b6000602082840312156135525761355161332d565b5b600061356084828501613527565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061359482613569565b9050919050565b6135a481613589565b82525050565b60006020820190506135bf600083018461359b565b92915050565b6135ce81613589565b81146135d957600080fd5b50565b6000813590506135eb816135c5565b92915050565b600080604083850312156136085761360761332d565b5b6000613616858286016135dc565b925050602061362785828601613527565b9150509250929050565b61363a81613506565b82525050565b60006020820190506136556000830184613631565b92915050565b6000806000606084860312156136745761367361332d565b5b6000613682868287016135dc565b9350506020613693868287016135dc565b92505060406136a486828701613527565b9150509250925092565b6000602082840312156136c4576136c361332d565b5b60006136d2848285016135dc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61371081613506565b82525050565b60006137228383613707565b60208301905092915050565b6000602082019050919050565b6000613746826136db565b61375081856136e6565b935061375b836136f7565b8060005b8381101561378c5781516137738882613716565b975061377e8361372e565b92505060018101905061375f565b5085935050505092915050565b600060208201905081810360008301526137b3818461373b565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137fd8261349a565b810181811067ffffffffffffffff8211171561381c5761381b6137c5565b5b80604052505050565b600061382f613323565b905061383b82826137f4565b919050565b600067ffffffffffffffff82111561385b5761385a6137c5565b5b6138648261349a565b9050602081019050919050565b82818337600083830152505050565b600061389361388e84613840565b613825565b9050828152602081018484840111156138af576138ae6137c0565b5b6138ba848285613871565b509392505050565b600082601f8301126138d7576138d66137bb565b5b81356138e7848260208601613880565b91505092915050565b6000602082840312156139065761390561332d565b5b600082013567ffffffffffffffff81111561392457613923613332565b5b613930848285016138c2565b91505092915050565b600080604083850312156139505761394f61332d565b5b600061395e858286016135dc565b925050602061396f85828601613409565b9150509250929050565b600067ffffffffffffffff821115613994576139936137c5565b5b61399d8261349a565b9050602081019050919050565b60006139bd6139b884613979565b613825565b9050828152602081018484840111156139d9576139d86137c0565b5b6139e4848285613871565b509392505050565b600082601f830112613a0157613a006137bb565b5b8135613a118482602086016139aa565b91505092915050565b60008060008060808587031215613a3457613a3361332d565b5b6000613a42878288016135dc565b9450506020613a53878288016135dc565b9350506040613a6487828801613527565b925050606085013567ffffffffffffffff811115613a8557613a84613332565b5b613a91878288016139ec565b91505092959194509250565b60008060408385031215613ab457613ab361332d565b5b6000613ac2858286016135dc565b9250506020613ad3858286016135dc565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b13602083613456565b9150613b1e82613add565b602082019050919050565b60006020820190508181036000830152613b4281613b06565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b9057607f821691505b602082108103613ba357613ba2613b49565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613c05602c83613456565b9150613c1082613ba9565b604082019050919050565b60006020820190508181036000830152613c3481613bf8565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c97602183613456565b9150613ca282613c3b565b604082019050919050565b60006020820190508181036000830152613cc681613c8a565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613d29603883613456565b9150613d3482613ccd565b604082019050919050565b60006020820190508181036000830152613d5881613d1c565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613dbb603183613456565b9150613dc682613d5f565b604082019050919050565b60006020820190508181036000830152613dea81613dae565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613e4d602b83613456565b9150613e5882613df1565b604082019050919050565b60006020820190508181036000830152613e7c81613e40565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ebd82613506565b9150613ec883613506565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613efd57613efc613e83565b5b828201905092915050565b7f53616c65206d7573742062652061637469766520746f206d696e74204e69634d60008201527f6574617300000000000000000000000000000000000000000000000000000000602082015250565b6000613f64602483613456565b9150613f6f82613f08565b604082019050919050565b60006020820190508181036000830152613f9381613f57565b9050919050565b6000613fa582613506565b9150613fb083613506565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fe957613fe8613e83565b5b828202905092915050565b6000613fff82613506565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361403157614030613e83565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006140c7602c83613456565b91506140d28261406b565b604082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614159602983613456565b9150614164826140fd565b604082019050919050565b600060208201905081810360008301526141888161414c565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006141eb602a83613456565b91506141f68261418f565b604082019050919050565b6000602082019050818103600083015261421a816141de565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b600061427d602f83613456565b915061428882614221565b604082019050919050565b600060208201905081810360008301526142ac81614270565b9050919050565b600081905092915050565b60006142c98261344b565b6142d381856142b3565b93506142e3818560208601613467565b80840191505092915050565b60006142fb82856142be565b915061430782846142be565b91508190509392505050565b60008190508160005260206000209050919050565b6000815461433581613b78565b61433f81866142b3565b9450600182166000811461435a576001811461436b5761439e565b60ff1983168652818601935061439e565b61437485614313565b60005b8381101561439657815481890152600182019150602081019050614377565b838801955050505b50505092915050565b60006143b382866142be565b91506143bf82856142be565b91506143cb8284614328565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614434602683613456565b915061443f826143d8565b604082019050919050565b6000602082019050818103600083015261446381614427565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006144c6602c83613456565b91506144d18261446a565b604082019050919050565b600060208201905081810360008301526144f5816144b9565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614558602583613456565b9150614563826144fc565b604082019050919050565b600060208201905081810360008301526145878161454b565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006145ea602483613456565b91506145f58261458e565b604082019050919050565b60006020820190508181036000830152614619816145dd565b9050919050565b600061462b82613506565b915061463683613506565b92508282101561464957614648613e83565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061468a601983613456565b915061469582614654565b602082019050919050565b600060208201905081810360008301526146b98161467d565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061471c603283613456565b9150614727826146c0565b604082019050919050565b6000602082019050818103600083015261474b8161470f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061478c82613506565b915061479783613506565b9250826147a7576147a6614752565b5b828204905092915050565b60006147bd82613506565b91506147c883613506565b9250826147d8576147d7614752565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061480a826147e3565b61481481856147ee565b9350614824818560208601613467565b61482d8161349a565b840191505092915050565b600060808201905061484d600083018761359b565b61485a602083018661359b565b6148676040830185613631565b818103606083015261487981846147ff565b905095945050505050565b60008151905061489381613363565b92915050565b6000602082840312156148af576148ae61332d565b5b60006148bd84828501614884565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061492b602083613456565b9150614936826148f5565b602082019050919050565b6000602082019050818103600083015261495a8161491e565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614997601c83613456565b91506149a282614961565b602082019050919050565b600060208201905081810360008301526149c68161498a565b905091905056fea2646970667358221220e7c6e7cc5352bc7dc24383474a34f2421e1af24033eb8b7230710c6c5cfd49c764736f6c634300080e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000749736c614242580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044953425800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002068747470733a2f2f7777772e69736c6162622e636f6d2f6d657461646174612f000000000000000000000000000000000000000000000000000000000000002668747470733a2f2f7777772e69736c6162622e636f6d2f6d657461646174612f302e6a736f6e0000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): IslaBBX
Arg [1] : _symbol (string): ISBX
Arg [2] : _initBaseURI (string): https://www.islabb.com/metadata/
Arg [3] : initNotRevealedUri (string): https://www.islabb.com/metadata/0.json
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [5] : 49736c6142425800000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4953425800000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [9] : 68747470733a2f2f7777772e69736c6162622e636f6d2f6d657461646174612f
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000026
Arg [11] : 68747470733a2f2f7777772e69736c6162622e636f6d2f6d657461646174612f
Arg [12] : 302e6a736f6e0000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
45717:4425:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39456:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49740:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26275:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27835:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46132:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27358:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46266:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40096:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46483:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28585:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39764:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49919:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49082:80;;;;;;;;;;;;;:::i;:::-;;50025:114;;;:::i;:::-;;47078:576;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28995:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47660:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49168:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49819:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40286:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49508:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46523:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25969:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46051:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45946:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45834:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25699:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4833:103;;;;;;;;;;;;;:::i;:::-;;49254:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4182:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26444:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28128:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29251:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46199:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48014:946;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46325:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46556:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49612:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48982:92;;;;;;;;;;;;;:::i;:::-;;28354:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49376:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5091:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39456:224;39558:4;39597:35;39582:50;;;:11;:50;;;;:90;;;;39636:36;39660:11;39636:23;:36::i;:::-;39582:90;39575:97;;39456:224;;;:::o;49740:73::-;4413:12;:10;:12::i;:::-;4402:23;;:7;:5;:7::i;:::-;:23;;;4394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49801:6:::1;49792;;:15;;;;;;;;;;;;;;;;;;49740:73:::0;:::o;26275:100::-;26329:13;26362:5;26355:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26275:100;:::o;27835:221::-;27911:7;27939:16;27947:7;27939;:16::i;:::-;27931:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28024:15;:24;28040:7;28024:24;;;;;;;;;;;;;;;;;;;;;28017:31;;27835:221;;;:::o;46132:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27358:411::-;27439:13;27455:23;27470:7;27455:14;:23::i;:::-;27439:39;;27503:5;27497:11;;:2;:11;;;27489:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27597:5;27581:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27606:37;27623:5;27630:12;:10;:12::i;:::-;27606:16;:37::i;:::-;27581:62;27559:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27740:21;27749:2;27753:7;27740:8;:21::i;:::-;27428:341;27358:411;;:::o;46266:32::-;;;;:::o;40096:113::-;40157:7;40184:10;:17;;;;40177:24;;40096:113;:::o;46483:33::-;;;;:::o;28585:339::-;28780:41;28799:12;:10;:12::i;:::-;28813:7;28780:18;:41::i;:::-;28772:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28888:28;28898:4;28904:2;28908:7;28888:9;:28::i;:::-;28585:339;;;:::o;39764:256::-;39861:7;39897:23;39914:5;39897:16;:23::i;:::-;39889:5;:31;39881:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39986:12;:19;39999:5;39986:19;;;;;;;;;;;;;;;:26;40006:5;39986:26;;;;;;;;;;;;39979:33;;39764:256;;;;:::o;49919:100::-;4413:12;:10;:12::i;:::-;4402:23;;:7;:5;:7::i;:::-;:23;;;4394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50008:5:::1;49987:11;:18;49999:5;49987:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;49919:100:::0;:::o;49082:80::-;4413:12;:10;:12::i;:::-;4402:23;;:7;:5;:7::i;:::-;:23;;;4394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49145:9:::1;;;;;;;;;;;49144:10;49132:9;;:22;;;;;;;;;;;;;;;;;;49082:80::o:0;50025:114::-;4413:12;:10;:12::i;:::-;4402:23;;:7;:5;:7::i;:::-;:23;;;4394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50093:10:::1;50085:24;;:47;50110:21;50085:47;;;;;;;;;;;;;;;;;;;;;;;50077:56;;;::::0;::::1;;50025:114::o:0;47078:576::-;47148:14;47165:13;:11;:13::i;:::-;47148:30;;47194:6;;;;;;;;;;;47193:7;47185:16;;;;;;47230:1;47216:11;:15;47208:24;;;;;;47262:13;;47247:11;:28;;47239:37;;;;;;47315:9;;47300:11;47291:6;:20;;;;:::i;:::-;:33;;47283:42;;;;;;47340:13;;;;;;;;;;;47332:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47427:7;:5;:7::i;:::-;47413:21;;:10;:21;;;47409:146;;47477:4;47450:31;;:11;:23;47462:10;47450:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;47447:101;;47524:11;47517:4;;:18;;;;:::i;:::-;47504:9;:31;;47496:40;;;;;;47447:101;47409:146;47568:9;47580:1;47568:13;;47563:86;47588:11;47583:1;:16;47563:86;;47615:26;47625:3;47639:1;47630:6;:10;;;;:::i;:::-;47615:9;:26::i;:::-;47601:3;;;;;:::i;:::-;;;;47563:86;;;;47141:513;47078:576;;:::o;28995:185::-;29133:39;29150:4;29156:2;29160:7;29133:39;;;;;;;;;;;;:16;:39::i;:::-;28995:185;;;:::o;47660:348::-;47735:16;47763:23;47789:17;47799:6;47789:9;:17::i;:::-;47763:43;;47813:25;47855:15;47841:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47813:58;;47883:9;47878:103;47898:15;47894:1;:19;47878:103;;;47943:30;47963:6;47971:1;47943:19;:30::i;:::-;47929:8;47938:1;47929:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;47915:3;;;;;:::i;:::-;;;;47878:103;;;;47994:8;47987:15;;;;47660:348;;;:::o;49168:80::-;4413:12;:10;:12::i;:::-;4402:23;;:7;:5;:7::i;:::-;:23;;;4394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49234:8:::1;49227:4;:15;;;;49168:80:::0;:::o;49819:93::-;4413:12;:10;:12::i;:::-;4402:23;;:7;:5;:7::i;:::-;:23;;;4394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49902:4:::1;49881:11;:18;49893:5;49881:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;49819:93:::0;:::o;40286:233::-;40361:7;40397:30;:28;:30::i;:::-;40389:5;:38;40381:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40494:10;40505:5;40494:17;;;;;;;;:::i;:::-;;;;;;;;;;40487:24;;40286:233;;;:::o;49508:98::-;4413:12;:10;:12::i;:::-;4402:23;;:7;:5;:7::i;:::-;:23;;;4394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49589:11:::1;49579:7;:21;;;;;;;;;;;;:::i;:::-;;49508:98:::0;:::o;46523:26::-;;;;;;;;;;;;;:::o;25969:239::-;26041:7;26061:13;26077:7;:16;26085:7;26077:16;;;;;;;;;;;;;;;;;;;;;26061:32;;26129:1;26112:19;;:5;:19;;;26104:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26195:5;26188:12;;;25969:239;;;:::o;46051:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45946:29::-;;;;;;;;;;;;;:::o;45834:33::-;;;;;;;;;;;;;:::o;25699:208::-;25771:7;25816:1;25799:19;;:5;:19;;;25791:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25883:9;:16;25893:5;25883:16;;;;;;;;;;;;;;;;25876:23;;25699:208;;;:::o;4833:103::-;4413:12;:10;:12::i;:::-;4402:23;;:7;:5;:7::i;:::-;:23;;;4394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4898:30:::1;4925:1;4898:18;:30::i;:::-;4833:103::o:0;49254:116::-;4413:12;:10;:12::i;:::-;4402:23;;:7;:5;:7::i;:::-;:23;;;4394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49347:17:::1;49331:13;:33;;;;49254:116:::0;:::o;4182:87::-;4228:7;4255:6;;;;;;;;;;;4248:13;;4182:87;:::o;26444:104::-;26500:13;26533:7;26526:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26444:104;:::o;28128:155::-;28223:52;28242:12;:10;:12::i;:::-;28256:8;28266;28223:18;:52::i;:::-;28128:155;;:::o;29251:328::-;29426:41;29445:12;:10;:12::i;:::-;29459:7;29426:18;:41::i;:::-;29418:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29532:39;29546:4;29552:2;29556:7;29565:5;29532:13;:39::i;:::-;29251:328;;;;:::o;46199:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48014:946::-;48112:13;48153:16;48161:7;48153;:16::i;:::-;48137:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;48260:5;48247:18;;:9;;;;;;;;;;;:18;;;48243:72;;48289:14;48282:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48243:72;48327:23;48353:10;:19;48364:7;48353:19;;;;;;;;;;;48327:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48383:18;48404:10;:8;:10::i;:::-;48383:31;;48512:1;48496:4;48490:18;:23;48486:72;;48537:9;48530:16;;;;;;48486:72;48688:1;48668:9;48662:23;:27;48658:108;;;48737:4;48743:9;48720:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48706:48;;;;;;48658:108;48911:4;48917:18;:7;:16;:18::i;:::-;48937:13;48894:57;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48867:85;;;;48014:946;;;;:::o;46325:31::-;;;;:::o;46556:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;49612:122::-;4413:12;:10;:12::i;:::-;4402:23;;:7;:5;:7::i;:::-;:23;;;4394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49711:17:::1;49695:13;:33;;;;;;;;;;;;:::i;:::-;;49612:122:::0;:::o;48982:92::-;4413:12;:10;:12::i;:::-;4402:23;;:7;:5;:7::i;:::-;:23;;;4394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49053:13:::1;;;;;;;;;;;49052:14;49036:13;;:30;;;;;;;;;;;;;;;;;;48982:92::o:0;28354:164::-;28451:4;28475:18;:25;28494:5;28475:25;;;;;;;;;;;;;;;:35;28501:8;28475:35;;;;;;;;;;;;;;;;;;;;;;;;;28468:42;;28354:164;;;;:::o;49376:126::-;4413:12;:10;:12::i;:::-;4402:23;;:7;:5;:7::i;:::-;:23;;;4394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49479:15:::1;49462:14;:32;;;;;;;;;;;;:::i;:::-;;49376:126:::0;:::o;5091:201::-;4413:12;:10;:12::i;:::-;4402:23;;:7;:5;:7::i;:::-;:23;;;4394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5200:1:::1;5180:22;;:8;:22;;::::0;5172:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5256:28;5275:8;5256:18;:28::i;:::-;5091:201:::0;:::o;25330:305::-;25432:4;25484:25;25469:40;;;:11;:40;;;;:105;;;;25541:33;25526:48;;;:11;:48;;;;25469:105;:158;;;;25591:36;25615:11;25591:23;:36::i;:::-;25469:158;25449:178;;25330:305;;;:::o;2906:98::-;2959:7;2986:10;2979:17;;2906:98;:::o;31089:127::-;31154:4;31206:1;31178:30;;:7;:16;31186:7;31178:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31171:37;;31089:127;;;:::o;35235:174::-;35337:2;35310:15;:24;35326:7;35310:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35393:7;35389:2;35355:46;;35364:23;35379:7;35364:14;:23::i;:::-;35355:46;;;;;;;;;;;;35235:174;;:::o;31383:348::-;31476:4;31501:16;31509:7;31501;:16::i;:::-;31493:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31577:13;31593:23;31608:7;31593:14;:23::i;:::-;31577:39;;31646:5;31635:16;;:7;:16;;;:52;;;;31655:32;31672:5;31679:7;31655:16;:32::i;:::-;31635:52;:87;;;;31715:7;31691:31;;:20;31703:7;31691:11;:20::i;:::-;:31;;;31635:87;31627:96;;;31383:348;;;;:::o;34492:625::-;34651:4;34624:31;;:23;34639:7;34624:14;:23::i;:::-;:31;;;34616:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34730:1;34716:16;;:2;:16;;;34708:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34786:39;34807:4;34813:2;34817:7;34786:20;:39::i;:::-;34890:29;34907:1;34911:7;34890:8;:29::i;:::-;34951:1;34932:9;:15;34942:4;34932:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34980:1;34963:9;:13;34973:2;34963:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35011:2;34992:7;:16;35000:7;34992:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35050:7;35046:2;35031:27;;35040:4;35031:27;;;;;;;;;;;;35071:38;35091:4;35097:2;35101:7;35071:19;:38::i;:::-;34492:625;;;:::o;32073:110::-;32149:26;32159:2;32163:7;32149:26;;;;;;;;;;;;:9;:26::i;:::-;32073:110;;:::o;5452:191::-;5526:16;5545:6;;;;;;;;;;;5526:25;;5571:8;5562:6;;:17;;;;;;;;;;;;;;;;;;5626:8;5595:40;;5616:8;5595:40;;;;;;;;;;;;5515:128;5452:191;:::o;35551:315::-;35706:8;35697:17;;:5;:17;;;35689:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35793:8;35755:18;:25;35774:5;35755:25;;;;;;;;;;;;;;;:35;35781:8;35755:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35839:8;35817:41;;35832:5;35817:41;;;35849:8;35817:41;;;;;;:::i;:::-;;;;;;;;35551:315;;;:::o;30461:::-;30618:28;30628:4;30634:2;30638:7;30618:9;:28::i;:::-;30665:48;30688:4;30694:2;30698:7;30707:5;30665:22;:48::i;:::-;30657:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30461:315;;;;:::o;46957:102::-;47017:13;47046:7;47039:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46957:102;:::o;468:723::-;524:13;754:1;745:5;:10;741:53;;772:10;;;;;;;;;;;;;;;;;;;;;741:53;804:12;819:5;804:20;;835:14;860:78;875:1;867:4;:9;860:78;;893:8;;;;;:::i;:::-;;;;924:2;916:10;;;;;:::i;:::-;;;860:78;;;948:19;980:6;970:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;948:39;;998:154;1014:1;1005:5;:10;998:154;;1042:1;1032:11;;;;;:::i;:::-;;;1109:2;1101:5;:10;;;;:::i;:::-;1088:2;:24;;;;:::i;:::-;1075:39;;1058:6;1065;1058:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1138:2;1129:11;;;;;:::i;:::-;;;998:154;;;1176:6;1162:21;;;;;468:723;;;;:::o;16989:157::-;17074:4;17113:25;17098:40;;;:11;:40;;;;17091:47;;16989:157;;;:::o;41132:589::-;41276:45;41303:4;41309:2;41313:7;41276:26;:45::i;:::-;41354:1;41338:18;;:4;:18;;;41334:187;;41373:40;41405:7;41373:31;:40::i;:::-;41334:187;;;41443:2;41435:10;;:4;:10;;;41431:90;;41462:47;41495:4;41501:7;41462:32;:47::i;:::-;41431:90;41334:187;41549:1;41535:16;;:2;:16;;;41531:183;;41568:45;41605:7;41568:36;:45::i;:::-;41531:183;;;41641:4;41635:10;;:2;:10;;;41631:83;;41662:40;41690:2;41694:7;41662:27;:40::i;:::-;41631:83;41531:183;41132:589;;;:::o;38313:125::-;;;;:::o;32410:321::-;32540:18;32546:2;32550:7;32540:5;:18::i;:::-;32591:54;32622:1;32626:2;32630:7;32639:5;32591:22;:54::i;:::-;32569:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32410:321;;;:::o;36431:799::-;36586:4;36607:15;:2;:13;;;:15::i;:::-;36603:620;;;36659:2;36643:36;;;36680:12;:10;:12::i;:::-;36694:4;36700:7;36709:5;36643:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36639:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36902:1;36885:6;:13;:18;36881:272;;36928:60;;;;;;;;;;:::i;:::-;;;;;;;;36881:272;37103:6;37097:13;37088:6;37084:2;37080:15;37073:38;36639:529;36776:41;;;36766:51;;;:6;:51;;;;36759:58;;;;;36603:620;37207:4;37200:11;;36431:799;;;;;;;:::o;37802:126::-;;;;:::o;42444:164::-;42548:10;:17;;;;42521:15;:24;42537:7;42521:24;;;;;;;;;;;:44;;;;42576:10;42592:7;42576:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42444:164;:::o;43235:988::-;43501:22;43551:1;43526:22;43543:4;43526:16;:22::i;:::-;:26;;;;:::i;:::-;43501:51;;43563:18;43584:17;:26;43602:7;43584:26;;;;;;;;;;;;43563:47;;43731:14;43717:10;:28;43713:328;;43762:19;43784:12;:18;43797:4;43784:18;;;;;;;;;;;;;;;:34;43803:14;43784:34;;;;;;;;;;;;43762:56;;43868:11;43835:12;:18;43848:4;43835:18;;;;;;;;;;;;;;;:30;43854:10;43835:30;;;;;;;;;;;:44;;;;43985:10;43952:17;:30;43970:11;43952:30;;;;;;;;;;;:43;;;;43747:294;43713:328;44137:17;:26;44155:7;44137:26;;;;;;;;;;;44130:33;;;44181:12;:18;44194:4;44181:18;;;;;;;;;;;;;;;:34;44200:14;44181:34;;;;;;;;;;;44174:41;;;43316:907;;43235:988;;:::o;44518:1079::-;44771:22;44816:1;44796:10;:17;;;;:21;;;;:::i;:::-;44771:46;;44828:18;44849:15;:24;44865:7;44849:24;;;;;;;;;;;;44828:45;;45200:19;45222:10;45233:14;45222:26;;;;;;;;:::i;:::-;;;;;;;;;;45200:48;;45286:11;45261:10;45272;45261:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45397:10;45366:15;:28;45382:11;45366:28;;;;;;;;;;;:41;;;;45538:15;:24;45554:7;45538:24;;;;;;;;;;;45531:31;;;45573:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44589:1008;;;44518:1079;:::o;42022:221::-;42107:14;42124:20;42141:2;42124:16;:20::i;:::-;42107:37;;42182:7;42155:12;:16;42168:2;42155:16;;;;;;;;;;;;;;;:24;42172:6;42155:24;;;;;;;;;;;:34;;;;42229:6;42200:17;:26;42218:7;42200:26;;;;;;;;;;;:35;;;;42096:147;42022:221;;:::o;33067:439::-;33161:1;33147:16;;:2;:16;;;33139:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33220:16;33228:7;33220;:16::i;:::-;33219:17;33211:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33282:45;33311:1;33315:2;33319:7;33282:20;:45::i;:::-;33357:1;33340:9;:13;33350:2;33340:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33388:2;33369:7;:16;33377:7;33369:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33433:7;33429:2;33408:33;;33425:1;33408:33;;;;;;;;;;;;33454:44;33482:1;33486:2;33490:7;33454:19;:44::i;:::-;33067:439;;:::o;6883:326::-;6943:4;7200:1;7178:7;:19;;;:23;7171:30;;6883:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;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;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:619::-;5957:6;5965;5973;6022:2;6010:9;6001:7;5997:23;5993:32;5990:119;;;6028:79;;:::i;:::-;5990:119;6148:1;6173:53;6218:7;6209:6;6198:9;6194:22;6173:53;:::i;:::-;6163:63;;6119:117;6275:2;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6246:118;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;5880:619;;;;;:::o;6505:329::-;6564:6;6613:2;6601:9;6592:7;6588:23;6584:32;6581:119;;;6619:79;;:::i;:::-;6581:119;6739:1;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6710:117;6505:329;;;;:::o;6840:114::-;6907:6;6941:5;6935:12;6925:22;;6840:114;;;:::o;6960:184::-;7059:11;7093:6;7088:3;7081:19;7133:4;7128:3;7124:14;7109:29;;6960:184;;;;:::o;7150:132::-;7217:4;7240:3;7232:11;;7270:4;7265:3;7261:14;7253:22;;7150:132;;;:::o;7288:108::-;7365:24;7383:5;7365:24;:::i;:::-;7360:3;7353:37;7288:108;;:::o;7402:179::-;7471:10;7492:46;7534:3;7526:6;7492:46;:::i;:::-;7570:4;7565:3;7561:14;7547:28;;7402:179;;;;:::o;7587:113::-;7657:4;7689;7684:3;7680:14;7672:22;;7587:113;;;:::o;7736:732::-;7855:3;7884:54;7932:5;7884:54;:::i;:::-;7954:86;8033:6;8028:3;7954:86;:::i;:::-;7947:93;;8064:56;8114:5;8064:56;:::i;:::-;8143:7;8174:1;8159:284;8184:6;8181:1;8178:13;8159:284;;;8260:6;8254:13;8287:63;8346:3;8331:13;8287:63;:::i;:::-;8280:70;;8373:60;8426:6;8373:60;:::i;:::-;8363:70;;8219:224;8206:1;8203;8199:9;8194:14;;8159:284;;;8163:14;8459:3;8452:10;;7860:608;;;7736:732;;;;:::o;8474:373::-;8617:4;8655:2;8644:9;8640:18;8632:26;;8704:9;8698:4;8694:20;8690:1;8679:9;8675:17;8668:47;8732:108;8835:4;8826:6;8732:108;:::i;:::-;8724:116;;8474:373;;;;:::o;8853:117::-;8962:1;8959;8952:12;8976:117;9085:1;9082;9075:12;9099:180;9147:77;9144:1;9137:88;9244:4;9241:1;9234:15;9268:4;9265:1;9258:15;9285:281;9368:27;9390:4;9368:27;:::i;:::-;9360:6;9356:40;9498:6;9486:10;9483:22;9462:18;9450:10;9447:34;9444:62;9441:88;;;9509:18;;:::i;:::-;9441:88;9549:10;9545:2;9538:22;9328:238;9285:281;;:::o;9572:129::-;9606:6;9633:20;;:::i;:::-;9623:30;;9662:33;9690:4;9682:6;9662:33;:::i;:::-;9572:129;;;:::o;9707:308::-;9769:4;9859:18;9851:6;9848:30;9845:56;;;9881:18;;:::i;:::-;9845:56;9919:29;9941:6;9919:29;:::i;:::-;9911:37;;10003:4;9997;9993:15;9985:23;;9707:308;;;:::o;10021:154::-;10105:6;10100:3;10095;10082:30;10167:1;10158:6;10153:3;10149:16;10142:27;10021:154;;;:::o;10181:412::-;10259:5;10284:66;10300:49;10342:6;10300:49;:::i;:::-;10284:66;:::i;:::-;10275:75;;10373:6;10366:5;10359:21;10411:4;10404:5;10400:16;10449:3;10440:6;10435:3;10431:16;10428:25;10425:112;;;10456:79;;:::i;:::-;10425:112;10546:41;10580:6;10575:3;10570;10546:41;:::i;:::-;10265:328;10181:412;;;;;:::o;10613:340::-;10669:5;10718:3;10711:4;10703:6;10699:17;10695:27;10685:122;;10726:79;;:::i;:::-;10685:122;10843:6;10830:20;10868:79;10943:3;10935:6;10928:4;10920:6;10916:17;10868:79;:::i;:::-;10859:88;;10675:278;10613:340;;;;:::o;10959:509::-;11028:6;11077:2;11065:9;11056:7;11052:23;11048:32;11045:119;;;11083:79;;:::i;:::-;11045:119;11231:1;11220:9;11216:17;11203:31;11261:18;11253:6;11250:30;11247:117;;;11283:79;;:::i;:::-;11247:117;11388:63;11443:7;11434:6;11423:9;11419:22;11388:63;:::i;:::-;11378:73;;11174:287;10959:509;;;;:::o;11474:468::-;11539:6;11547;11596:2;11584:9;11575:7;11571:23;11567:32;11564:119;;;11602:79;;:::i;:::-;11564:119;11722:1;11747:53;11792:7;11783:6;11772:9;11768:22;11747:53;:::i;:::-;11737:63;;11693:117;11849:2;11875:50;11917:7;11908:6;11897:9;11893:22;11875:50;:::i;:::-;11865:60;;11820:115;11474:468;;;;;:::o;11948:307::-;12009:4;12099:18;12091:6;12088:30;12085:56;;;12121:18;;:::i;:::-;12085:56;12159:29;12181:6;12159:29;:::i;:::-;12151:37;;12243:4;12237;12233:15;12225:23;;11948:307;;;:::o;12261:410::-;12338:5;12363:65;12379:48;12420:6;12379:48;:::i;:::-;12363:65;:::i;:::-;12354:74;;12451:6;12444:5;12437:21;12489:4;12482:5;12478:16;12527:3;12518:6;12513:3;12509:16;12506:25;12503:112;;;12534:79;;:::i;:::-;12503:112;12624:41;12658:6;12653:3;12648;12624:41;:::i;:::-;12344:327;12261:410;;;;;:::o;12690:338::-;12745:5;12794:3;12787:4;12779:6;12775:17;12771:27;12761:122;;12802:79;;:::i;:::-;12761:122;12919:6;12906:20;12944:78;13018:3;13010:6;13003:4;12995:6;12991:17;12944:78;:::i;:::-;12935:87;;12751:277;12690:338;;;;:::o;13034:943::-;13129:6;13137;13145;13153;13202:3;13190:9;13181:7;13177:23;13173:33;13170:120;;;13209:79;;:::i;:::-;13170:120;13329:1;13354:53;13399:7;13390:6;13379:9;13375:22;13354:53;:::i;:::-;13344:63;;13300:117;13456:2;13482:53;13527:7;13518:6;13507:9;13503:22;13482:53;:::i;:::-;13472:63;;13427:118;13584:2;13610:53;13655:7;13646:6;13635:9;13631:22;13610:53;:::i;:::-;13600:63;;13555:118;13740:2;13729:9;13725:18;13712:32;13771:18;13763:6;13760:30;13757:117;;;13793:79;;:::i;:::-;13757:117;13898:62;13952:7;13943:6;13932:9;13928:22;13898:62;:::i;:::-;13888:72;;13683:287;13034:943;;;;;;;:::o;13983:474::-;14051:6;14059;14108:2;14096:9;14087:7;14083:23;14079:32;14076:119;;;14114:79;;:::i;:::-;14076:119;14234:1;14259:53;14304:7;14295:6;14284:9;14280:22;14259:53;:::i;:::-;14249:63;;14205:117;14361:2;14387:53;14432:7;14423:6;14412:9;14408:22;14387:53;:::i;:::-;14377:63;;14332:118;13983:474;;;;;:::o;14463:182::-;14603:34;14599:1;14591:6;14587:14;14580:58;14463:182;:::o;14651:366::-;14793:3;14814:67;14878:2;14873:3;14814:67;:::i;:::-;14807:74;;14890:93;14979:3;14890:93;:::i;:::-;15008:2;15003:3;14999:12;14992:19;;14651:366;;;:::o;15023:419::-;15189:4;15227:2;15216:9;15212:18;15204:26;;15276:9;15270:4;15266:20;15262:1;15251:9;15247:17;15240:47;15304:131;15430:4;15304:131;:::i;:::-;15296:139;;15023:419;;;:::o;15448:180::-;15496:77;15493:1;15486:88;15593:4;15590:1;15583:15;15617:4;15614:1;15607:15;15634:320;15678:6;15715:1;15709:4;15705:12;15695:22;;15762:1;15756:4;15752:12;15783:18;15773:81;;15839:4;15831:6;15827:17;15817:27;;15773:81;15901:2;15893:6;15890:14;15870:18;15867:38;15864:84;;15920:18;;:::i;:::-;15864:84;15685:269;15634:320;;;:::o;15960:231::-;16100:34;16096:1;16088:6;16084:14;16077:58;16169:14;16164:2;16156:6;16152:15;16145:39;15960:231;:::o;16197:366::-;16339:3;16360:67;16424:2;16419:3;16360:67;:::i;:::-;16353:74;;16436:93;16525:3;16436:93;:::i;:::-;16554:2;16549:3;16545:12;16538:19;;16197:366;;;:::o;16569:419::-;16735:4;16773:2;16762:9;16758:18;16750:26;;16822:9;16816:4;16812:20;16808:1;16797:9;16793:17;16786:47;16850:131;16976:4;16850:131;:::i;:::-;16842:139;;16569:419;;;:::o;16994:220::-;17134:34;17130:1;17122:6;17118:14;17111:58;17203:3;17198:2;17190:6;17186:15;17179:28;16994:220;:::o;17220:366::-;17362:3;17383:67;17447:2;17442:3;17383:67;:::i;:::-;17376:74;;17459:93;17548:3;17459:93;:::i;:::-;17577:2;17572:3;17568:12;17561:19;;17220:366;;;:::o;17592:419::-;17758:4;17796:2;17785:9;17781:18;17773:26;;17845:9;17839:4;17835:20;17831:1;17820:9;17816:17;17809:47;17873:131;17999:4;17873:131;:::i;:::-;17865:139;;17592:419;;;:::o;18017:243::-;18157:34;18153:1;18145:6;18141:14;18134:58;18226:26;18221:2;18213:6;18209:15;18202:51;18017:243;:::o;18266:366::-;18408:3;18429:67;18493:2;18488:3;18429:67;:::i;:::-;18422:74;;18505:93;18594:3;18505:93;:::i;:::-;18623:2;18618:3;18614:12;18607:19;;18266:366;;;:::o;18638:419::-;18804:4;18842:2;18831:9;18827:18;18819:26;;18891:9;18885:4;18881:20;18877:1;18866:9;18862:17;18855:47;18919:131;19045:4;18919:131;:::i;:::-;18911:139;;18638:419;;;:::o;19063:236::-;19203:34;19199:1;19191:6;19187:14;19180:58;19272:19;19267:2;19259:6;19255:15;19248:44;19063:236;:::o;19305:366::-;19447:3;19468:67;19532:2;19527:3;19468:67;:::i;:::-;19461:74;;19544:93;19633:3;19544:93;:::i;:::-;19662:2;19657:3;19653:12;19646:19;;19305:366;;;:::o;19677:419::-;19843:4;19881:2;19870:9;19866:18;19858:26;;19930:9;19924:4;19920:20;19916:1;19905:9;19901:17;19894:47;19958:131;20084:4;19958:131;:::i;:::-;19950:139;;19677:419;;;:::o;20102:230::-;20242:34;20238:1;20230:6;20226:14;20219:58;20311:13;20306:2;20298:6;20294:15;20287:38;20102:230;:::o;20338:366::-;20480:3;20501:67;20565:2;20560:3;20501:67;:::i;:::-;20494:74;;20577:93;20666:3;20577:93;:::i;:::-;20695:2;20690:3;20686:12;20679:19;;20338:366;;;:::o;20710:419::-;20876:4;20914:2;20903:9;20899:18;20891:26;;20963:9;20957:4;20953:20;20949:1;20938:9;20934:17;20927:47;20991:131;21117:4;20991:131;:::i;:::-;20983:139;;20710:419;;;:::o;21135:180::-;21183:77;21180:1;21173:88;21280:4;21277:1;21270:15;21304:4;21301:1;21294:15;21321:305;21361:3;21380:20;21398:1;21380:20;:::i;:::-;21375:25;;21414:20;21432:1;21414:20;:::i;:::-;21409:25;;21568:1;21500:66;21496:74;21493:1;21490:81;21487:107;;;21574:18;;:::i;:::-;21487:107;21618:1;21615;21611:9;21604:16;;21321:305;;;;:::o;21632:223::-;21772:34;21768:1;21760:6;21756:14;21749:58;21841:6;21836:2;21828:6;21824:15;21817:31;21632:223;:::o;21861:366::-;22003:3;22024:67;22088:2;22083:3;22024:67;:::i;:::-;22017:74;;22100:93;22189:3;22100:93;:::i;:::-;22218:2;22213:3;22209:12;22202:19;;21861:366;;;:::o;22233:419::-;22399:4;22437:2;22426:9;22422:18;22414:26;;22486:9;22480:4;22476:20;22472:1;22461:9;22457:17;22450:47;22514:131;22640:4;22514:131;:::i;:::-;22506:139;;22233:419;;;:::o;22658:348::-;22698:7;22721:20;22739:1;22721:20;:::i;:::-;22716:25;;22755:20;22773:1;22755:20;:::i;:::-;22750:25;;22943:1;22875:66;22871:74;22868:1;22865:81;22860:1;22853:9;22846:17;22842:105;22839:131;;;22950:18;;:::i;:::-;22839:131;22998:1;22995;22991:9;22980:20;;22658:348;;;;:::o;23012:233::-;23051:3;23074:24;23092:5;23074:24;:::i;:::-;23065:33;;23120:66;23113:5;23110:77;23107:103;;23190:18;;:::i;:::-;23107:103;23237:1;23230:5;23226:13;23219:20;;23012:233;;;:::o;23251:180::-;23299:77;23296:1;23289:88;23396:4;23393:1;23386:15;23420:4;23417:1;23410:15;23437:231;23577:34;23573:1;23565:6;23561:14;23554:58;23646:14;23641:2;23633:6;23629:15;23622:39;23437:231;:::o;23674:366::-;23816:3;23837:67;23901:2;23896:3;23837:67;:::i;:::-;23830:74;;23913:93;24002:3;23913:93;:::i;:::-;24031:2;24026:3;24022:12;24015:19;;23674:366;;;:::o;24046:419::-;24212:4;24250:2;24239:9;24235:18;24227:26;;24299:9;24293:4;24289:20;24285:1;24274:9;24270:17;24263:47;24327:131;24453:4;24327:131;:::i;:::-;24319:139;;24046:419;;;:::o;24471:228::-;24611:34;24607:1;24599:6;24595:14;24588:58;24680:11;24675:2;24667:6;24663:15;24656:36;24471:228;:::o;24705:366::-;24847:3;24868:67;24932:2;24927:3;24868:67;:::i;:::-;24861:74;;24944:93;25033:3;24944:93;:::i;:::-;25062:2;25057:3;25053:12;25046:19;;24705:366;;;:::o;25077:419::-;25243:4;25281:2;25270:9;25266:18;25258:26;;25330:9;25324:4;25320:20;25316:1;25305:9;25301:17;25294:47;25358:131;25484:4;25358:131;:::i;:::-;25350:139;;25077:419;;;:::o;25502:229::-;25642:34;25638:1;25630:6;25626:14;25619:58;25711:12;25706:2;25698:6;25694:15;25687:37;25502:229;:::o;25737:366::-;25879:3;25900:67;25964:2;25959:3;25900:67;:::i;:::-;25893:74;;25976:93;26065:3;25976:93;:::i;:::-;26094:2;26089:3;26085:12;26078:19;;25737:366;;;:::o;26109:419::-;26275:4;26313:2;26302:9;26298:18;26290:26;;26362:9;26356:4;26352:20;26348:1;26337:9;26333:17;26326:47;26390:131;26516:4;26390:131;:::i;:::-;26382:139;;26109:419;;;:::o;26534:234::-;26674:34;26670:1;26662:6;26658:14;26651:58;26743:17;26738:2;26730:6;26726:15;26719:42;26534:234;:::o;26774:366::-;26916:3;26937:67;27001:2;26996:3;26937:67;:::i;:::-;26930:74;;27013:93;27102:3;27013:93;:::i;:::-;27131:2;27126:3;27122:12;27115:19;;26774:366;;;:::o;27146:419::-;27312:4;27350:2;27339:9;27335:18;27327:26;;27399:9;27393:4;27389:20;27385:1;27374:9;27370:17;27363:47;27427:131;27553:4;27427:131;:::i;:::-;27419:139;;27146:419;;;:::o;27571:148::-;27673:11;27710:3;27695:18;;27571:148;;;;:::o;27725:377::-;27831:3;27859:39;27892:5;27859:39;:::i;:::-;27914:89;27996:6;27991:3;27914:89;:::i;:::-;27907:96;;28012:52;28057:6;28052:3;28045:4;28038:5;28034:16;28012:52;:::i;:::-;28089:6;28084:3;28080:16;28073:23;;27835:267;27725:377;;;;:::o;28108:435::-;28288:3;28310:95;28401:3;28392:6;28310:95;:::i;:::-;28303:102;;28422:95;28513:3;28504:6;28422:95;:::i;:::-;28415:102;;28534:3;28527:10;;28108:435;;;;;:::o;28549:141::-;28598:4;28621:3;28613:11;;28644:3;28641:1;28634:14;28678:4;28675:1;28665:18;28657:26;;28549:141;;;:::o;28720:845::-;28823:3;28860:5;28854:12;28889:36;28915:9;28889:36;:::i;:::-;28941:89;29023:6;29018:3;28941:89;:::i;:::-;28934:96;;29061:1;29050:9;29046:17;29077:1;29072:137;;;;29223:1;29218:341;;;;29039:520;;29072:137;29156:4;29152:9;29141;29137:25;29132:3;29125:38;29192:6;29187:3;29183:16;29176:23;;29072:137;;29218:341;29285:38;29317:5;29285:38;:::i;:::-;29345:1;29359:154;29373:6;29370:1;29367:13;29359:154;;;29447:7;29441:14;29437:1;29432:3;29428:11;29421:35;29497:1;29488:7;29484:15;29473:26;;29395:4;29392:1;29388:12;29383:17;;29359:154;;;29542:6;29537:3;29533:16;29526:23;;29225:334;;29039:520;;28827:738;;28720:845;;;;:::o;29571:589::-;29796:3;29818:95;29909:3;29900:6;29818:95;:::i;:::-;29811:102;;29930:95;30021:3;30012:6;29930:95;:::i;:::-;29923:102;;30042:92;30130:3;30121:6;30042:92;:::i;:::-;30035:99;;30151:3;30144:10;;29571:589;;;;;;:::o;30166:225::-;30306:34;30302:1;30294:6;30290:14;30283:58;30375:8;30370:2;30362:6;30358:15;30351:33;30166:225;:::o;30397:366::-;30539:3;30560:67;30624:2;30619:3;30560:67;:::i;:::-;30553:74;;30636:93;30725:3;30636:93;:::i;:::-;30754:2;30749:3;30745:12;30738:19;;30397:366;;;:::o;30769:419::-;30935:4;30973:2;30962:9;30958:18;30950:26;;31022:9;31016:4;31012:20;31008:1;30997:9;30993:17;30986:47;31050:131;31176:4;31050:131;:::i;:::-;31042:139;;30769:419;;;:::o;31194:231::-;31334:34;31330:1;31322:6;31318:14;31311:58;31403:14;31398:2;31390:6;31386:15;31379:39;31194:231;:::o;31431:366::-;31573:3;31594:67;31658:2;31653:3;31594:67;:::i;:::-;31587:74;;31670:93;31759:3;31670:93;:::i;:::-;31788:2;31783:3;31779:12;31772:19;;31431:366;;;:::o;31803:419::-;31969:4;32007:2;31996:9;31992:18;31984:26;;32056:9;32050:4;32046:20;32042:1;32031:9;32027:17;32020:47;32084:131;32210:4;32084:131;:::i;:::-;32076:139;;31803:419;;;:::o;32228:224::-;32368:34;32364:1;32356:6;32352:14;32345:58;32437:7;32432:2;32424:6;32420:15;32413:32;32228:224;:::o;32458:366::-;32600:3;32621:67;32685:2;32680:3;32621:67;:::i;:::-;32614:74;;32697:93;32786:3;32697:93;:::i;:::-;32815:2;32810:3;32806:12;32799:19;;32458:366;;;:::o;32830:419::-;32996:4;33034:2;33023:9;33019:18;33011:26;;33083:9;33077:4;33073:20;33069:1;33058:9;33054:17;33047:47;33111:131;33237:4;33111:131;:::i;:::-;33103:139;;32830:419;;;:::o;33255:223::-;33395:34;33391:1;33383:6;33379:14;33372:58;33464:6;33459:2;33451:6;33447:15;33440:31;33255:223;:::o;33484:366::-;33626:3;33647:67;33711:2;33706:3;33647:67;:::i;:::-;33640:74;;33723:93;33812:3;33723:93;:::i;:::-;33841:2;33836:3;33832:12;33825:19;;33484:366;;;:::o;33856:419::-;34022:4;34060:2;34049:9;34045:18;34037:26;;34109:9;34103:4;34099:20;34095:1;34084:9;34080:17;34073:47;34137:131;34263:4;34137:131;:::i;:::-;34129:139;;33856:419;;;:::o;34281:191::-;34321:4;34341:20;34359:1;34341:20;:::i;:::-;34336:25;;34375:20;34393:1;34375:20;:::i;:::-;34370:25;;34414:1;34411;34408:8;34405:34;;;34419:18;;:::i;:::-;34405:34;34464:1;34461;34457:9;34449:17;;34281:191;;;;:::o;34478:175::-;34618:27;34614:1;34606:6;34602:14;34595:51;34478:175;:::o;34659:366::-;34801:3;34822:67;34886:2;34881:3;34822:67;:::i;:::-;34815:74;;34898:93;34987:3;34898:93;:::i;:::-;35016:2;35011:3;35007:12;35000:19;;34659:366;;;:::o;35031:419::-;35197:4;35235:2;35224:9;35220:18;35212:26;;35284:9;35278:4;35274:20;35270:1;35259:9;35255:17;35248:47;35312:131;35438:4;35312:131;:::i;:::-;35304:139;;35031:419;;;:::o;35456:237::-;35596:34;35592:1;35584:6;35580:14;35573:58;35665:20;35660:2;35652:6;35648:15;35641:45;35456:237;:::o;35699:366::-;35841:3;35862:67;35926:2;35921:3;35862:67;:::i;:::-;35855:74;;35938:93;36027:3;35938:93;:::i;:::-;36056:2;36051:3;36047:12;36040:19;;35699:366;;;:::o;36071:419::-;36237:4;36275:2;36264:9;36260:18;36252:26;;36324:9;36318:4;36314:20;36310:1;36299:9;36295:17;36288:47;36352:131;36478:4;36352:131;:::i;:::-;36344:139;;36071:419;;;:::o;36496:180::-;36544:77;36541:1;36534:88;36641:4;36638:1;36631:15;36665:4;36662:1;36655:15;36682:185;36722:1;36739:20;36757:1;36739:20;:::i;:::-;36734:25;;36773:20;36791:1;36773:20;:::i;:::-;36768:25;;36812:1;36802:35;;36817:18;;:::i;:::-;36802:35;36859:1;36856;36852:9;36847:14;;36682:185;;;;:::o;36873:176::-;36905:1;36922:20;36940:1;36922:20;:::i;:::-;36917:25;;36956:20;36974:1;36956:20;:::i;:::-;36951:25;;36995:1;36985:35;;37000:18;;:::i;:::-;36985:35;37041:1;37038;37034:9;37029:14;;36873:176;;;;:::o;37055:98::-;37106:6;37140:5;37134:12;37124:22;;37055:98;;;:::o;37159:168::-;37242:11;37276:6;37271:3;37264:19;37316:4;37311:3;37307:14;37292:29;;37159:168;;;;:::o;37333:360::-;37419:3;37447:38;37479:5;37447:38;:::i;:::-;37501:70;37564:6;37559:3;37501:70;:::i;:::-;37494:77;;37580:52;37625:6;37620:3;37613:4;37606:5;37602:16;37580:52;:::i;:::-;37657:29;37679:6;37657:29;:::i;:::-;37652:3;37648:39;37641:46;;37423:270;37333:360;;;;:::o;37699:640::-;37894:4;37932:3;37921:9;37917:19;37909:27;;37946:71;38014:1;38003:9;37999:17;37990:6;37946:71;:::i;:::-;38027:72;38095:2;38084:9;38080:18;38071:6;38027:72;:::i;:::-;38109;38177:2;38166:9;38162:18;38153:6;38109:72;:::i;:::-;38228:9;38222:4;38218:20;38213:2;38202:9;38198:18;38191:48;38256:76;38327:4;38318:6;38256:76;:::i;:::-;38248:84;;37699:640;;;;;;;:::o;38345:141::-;38401:5;38432:6;38426:13;38417:22;;38448:32;38474:5;38448:32;:::i;:::-;38345:141;;;;:::o;38492:349::-;38561:6;38610:2;38598:9;38589:7;38585:23;38581:32;38578:119;;;38616:79;;:::i;:::-;38578:119;38736:1;38761:63;38816:7;38807:6;38796:9;38792:22;38761:63;:::i;:::-;38751:73;;38707:127;38492:349;;;;:::o;38847:180::-;38895:77;38892:1;38885:88;38992:4;38989:1;38982:15;39016:4;39013:1;39006:15;39033:182;39173:34;39169:1;39161:6;39157:14;39150:58;39033:182;:::o;39221:366::-;39363:3;39384:67;39448:2;39443:3;39384:67;:::i;:::-;39377:74;;39460:93;39549:3;39460:93;:::i;:::-;39578:2;39573:3;39569:12;39562:19;;39221:366;;;:::o;39593:419::-;39759:4;39797:2;39786:9;39782:18;39774:26;;39846:9;39840:4;39836:20;39832:1;39821:9;39817:17;39810:47;39874:131;40000:4;39874:131;:::i;:::-;39866:139;;39593:419;;;:::o;40018:178::-;40158:30;40154:1;40146:6;40142:14;40135:54;40018:178;:::o;40202:366::-;40344:3;40365:67;40429:2;40424:3;40365:67;:::i;:::-;40358:74;;40441:93;40530:3;40441:93;:::i;:::-;40559:2;40554:3;40550:12;40543:19;;40202:366;;;:::o;40574:419::-;40740:4;40778:2;40767:9;40763:18;40755:26;;40827:9;40821:4;40817:20;40813:1;40802:9;40798:17;40791:47;40855:131;40981:4;40855:131;:::i;:::-;40847:139;;40574:419;;;:::o
Swarm Source
ipfs://e7c6e7cc5352bc7dc24383474a34f2421e1af24033eb8b7230710c6c5cfd49c7
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.