ERC-721
Overview
Max Total Supply
2,519 SB
Holders
1,401
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 SBLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SHIBABEAST
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-24 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.0 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.0 (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.0 (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.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev 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 v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.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 `IERC721.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.0 (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.0 (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 v4.4.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`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.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 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.0 (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 v4.4.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 overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _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 || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev 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 {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Burnable.sol) pragma solidity ^0.8.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.0 (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: SHIBABEAST.sol // SHIBABEAST PROJECT // CODE BY SHIBABEAST | KING @kinginthecode pragma solidity ^0.8.11; // @name: SHIBABEAST // @symbol: SB // @desc: 8K HIGH-QUALITY, 6000 FASHION SHIBAS // @founder: https://twitter.com/SMITH_SHIBA // @artist: https://www.instagram.com/kreoarts/ // @dev: https://twitter.com/kinginthecode // @project: https://twitter.com/shibabeast_nft // @project: https://www.instagram.com/shibabeast_nft/ // @url: https://www.shiba-beast.io/ /* * * * * * * * * * * ███████╗██████╗ * * ██╔════╝██╔══██╗ * * ███████╗██████╔╝ * * ╚════██║██╔══██╗ * * ███████║██████╔╝ * * ╚══════╝╚═════╝ * * * * * * * * * * */ contract SHIBABEAST is ERC721Enumerable, Ownable, ReentrancyGuard { using Strings for uint256; using Counters for Counters.Counter; // ========== SB CONTRACT VARIABLES ========== bool public PAUSE = false; bool public REVEAL = false; uint256 public COST = 0.3 ether; uint256 public SUPPLY = 6000; string public REVEALED_URI; string public NOT_REVEALED_URI; Counters.Counter private _TOKEN_IDS; // ========== SB CONTRACT CONSTRUCTOR ========== constructor( string memory _INIT_REVEALED_URI, string memory _INIT_NOT_REVEALED_URI ) ERC721("SHIBABEAST", "SB") { SET_REVEALED_URI(_INIT_REVEALED_URI); SET_NOT_REVEALED_URI(_INIT_NOT_REVEALED_URI); SHIBABEAST_MINT(9); } // ========== SB CONTRACT URI RETURN ========== function _baseURI() internal view virtual override returns (string memory) { return REVEALED_URI; } // ========== SB CONTRACT MINTER ========== function SHIBABEAST_MINT(uint256 _MINT_AMOUNT) public payable nonReentrant { require(!PAUSE, "SHIBABEAST CONTRACT IS PAUSED"); uint256 MINTED_SUPPLY = totalSupply(); require(_MINT_AMOUNT > 0, "MINT AMOUNT SHOULD BE AT LEAST 1"); require(MINTED_SUPPLY + _MINT_AMOUNT <= SUPPLY, "MAX SUPPLY EXCEEDED"); if (msg.sender != owner()) { require(_MINT_AMOUNT <= 5, "MAX PER TRANSACTION EXCEEDED"); require(msg.value >= COST * _MINT_AMOUNT, "INSUFFICIENT FUNDS"); } uint256 _NEW_TOKEN_ID; for (uint256 i = 1; i <= _MINT_AMOUNT; i++) { _TOKEN_IDS.increment(); _NEW_TOKEN_ID = _TOKEN_IDS.current(); _safeMint(msg.sender, _NEW_TOKEN_ID); } } // ========== SB CONTRACT NFT RETURN ========== function tokenURI(uint256 TOKEN_ID) public view virtual override returns (string memory) { require(_exists(TOKEN_ID)); if(REVEAL == false) { return NOT_REVEALED_URI; } string memory CURRENT_BASE_URI = _baseURI(); return bytes(CURRENT_BASE_URI).length > 0 ? string(abi.encodePacked(CURRENT_BASE_URI, TOKEN_ID.toString())) : ""; } // ========== SB CONTRACT OWNER FUNCTIONS ========== function SET_REVEALED_URI(string memory _NEW_REVEALED_URI) public onlyOwner { REVEALED_URI = _NEW_REVEALED_URI; } function SET_NOT_REVEALED_URI(string memory _NEW_NOT_REVEALED_URI) public onlyOwner { NOT_REVEALED_URI = _NEW_NOT_REVEALED_URI; } function SET_SUPPLY(uint256 _NEW_SUPPLY) public onlyOwner { SUPPLY = _NEW_SUPPLY; } function SET_PAUSE(bool _NEW_PAUSE_STATE) public onlyOwner { PAUSE = _NEW_PAUSE_STATE; } function SET_REVEAL(bool _NEW_REVEAL_STATE) public onlyOwner { REVEAL = _NEW_REVEAL_STATE; } // ========== SB CONTRACT WITHDRAW ========== function WITHDRAW() public payable onlyOwner { uint256 _BALANCE = address(this).balance; uint256 _FOUNDER_BALANCE = _BALANCE * 14 / 100; uint256 _PARTNER_BALANCE = _BALANCE * 7 / 100; uint256 _CMUNITY_BALANCE = _BALANCE * 9 / 100; payable(0xb2016Edc04236866E81138B7aa68bd1Bcc2Cb4BD).transfer(_FOUNDER_BALANCE); /* == SB|KREOARTS ==== */ payable(0x889121F5D5D675874e4605218040F33198a16319).transfer(_FOUNDER_BALANCE); /* == SB|KING ======== */ payable(0x6129b64Ec39Fc57A1bf9fCf454334F1f7c448E30).transfer(_FOUNDER_BALANCE); /* == SB|SMITH ======= */ payable(0x5a3A7511fF72f72f1AA95f5Ff50F90C6BBa760C6).transfer(_FOUNDER_BALANCE); /* == SB|EVA ========= */ payable(0x56348105ec4F8bd3F1feABF584c6841C2ba25f1A).transfer(_FOUNDER_BALANCE); /* == SB|SONIA ======= */ payable(0xf2338226c18D6BDD3Fdf58EFb7b19E92F79F0d67).transfer(_FOUNDER_BALANCE); /* == SB|NITRO ======= */ payable(0xD8Aa5E8842b09d5B596D22F62C65e47b00F3E6E2).transfer(_PARTNER_BALANCE); /* == SB|KJ ========== */ payable(0x61c9651b626B0aed8476243D2d27F4cdd0D2d881).transfer(_CMUNITY_BALANCE); /* == SB|CMUNITY ===== */ } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_INIT_REVEALED_URI","type":"string"},{"internalType":"string","name":"_INIT_NOT_REVEALED_URI","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":"COST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NOT_REVEALED_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REVEAL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REVEALED_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_NEW_NOT_REVEALED_URI","type":"string"}],"name":"SET_NOT_REVEALED_URI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_NEW_PAUSE_STATE","type":"bool"}],"name":"SET_PAUSE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_NEW_REVEAL_STATE","type":"bool"}],"name":"SET_REVEAL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_NEW_REVEALED_URI","type":"string"}],"name":"SET_REVEALED_URI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_NEW_SUPPLY","type":"uint256"}],"name":"SET_SUPPLY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MINT_AMOUNT","type":"uint256"}],"name":"SHIBABEAST_MINT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WITHDRAW","outputs":[],"stateMutability":"payable","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":[{"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","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":"TOKEN_ID","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"}]
Contract Creation Code
60806040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550670429d069189e0000600d55611770600e553480156200005957600080fd5b50604051620061ff380380620061ff83398181016040528101906200007f9190620012d0565b6040518060400160405280600a81526020017f53484942414245415354000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f534200000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200010392919062001083565b5080600190805190602001906200011c92919062001083565b5050506200013f620001336200018360201b60201c565b6200018b60201b60201c565b6001600b8190555062000158826200025160201b60201c565b6200016981620002fc60201b60201c565b6200017b6009620003a760201b60201c565b505062001c71565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002616200018360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002876200065060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002d790620013b6565b60405180910390fd5b80600f9080519060200190620002f892919062001083565b5050565b6200030c6200018360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003326200065060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200038b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200038290620013b6565b60405180910390fd5b8060109080519060200190620003a392919062001083565b5050565b6002600b541415620003f0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003e79062001428565b60405180910390fd5b6002600b81905550600c60009054906101000a900460ff16156200044b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000442906200149a565b60405180910390fd5b60006200045d6200067a60201b60201c565b905060008211620004a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200049c906200150c565b60405180910390fd5b600e548282620004b6919062001567565b1115620004fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004f19062001614565b60405180910390fd5b6200050a6200065060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620005da57600582111562000584576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200057b9062001686565b60405180910390fd5b81600d54620005949190620016a8565b341015620005d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005d09062001759565b60405180910390fd5b5b600080600190505b83811162000642576200060160116200068760201b62001be01760201c565b6200061860116200069d60201b62001bf61760201c565b91506200062c3383620006ab60201b60201c565b808062000639906200177b565b915050620005e2565b5050506001600b8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b6001816000016000828254019250508190555050565b600081600001549050919050565b620006cd828260405180602001604052806000815250620006d160201b60201c565b5050565b620006e383836200073f60201b60201c565b620006f860008484846200092560201b60201c565b6200073a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000731906200183f565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620007b2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a990620018b1565b60405180910390fd5b620007c38162000acf60201b60201c565b1562000806576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007fd9062001923565b60405180910390fd5b6200081a6000838362000b3b60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200086c919062001567565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620009538473ffffffffffffffffffffffffffffffffffffffff1662000c8260201b62001c041760201c565b1562000ac2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620009856200018360201b60201c565b8786866040518563ffffffff1660e01b8152600401620009a99493929190620019f8565b6020604051808303816000875af1925050508015620009e857506040513d601f19601f82011682018060405250810190620009e5919062001aa9565b60015b62000a71573d806000811462000a1b576040519150601f19603f3d011682016040523d82523d6000602084013e62000a20565b606091505b5060008151141562000a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a60906200183f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000ac7565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000b5383838362000c9560201b62001c171760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000ba05762000b9a8162000c9a60201b60201c565b62000be8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000be75762000be6838262000ce360201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c355762000c2f8162000e6060201b60201c565b62000c7d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000c7c5762000c7b828262000f3c60201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000cfd8462000fc860201b620011611760201c565b62000d09919062001adb565b905060006007600084815260200190815260200160002054905081811462000def576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000e76919062001adb565b905060006009600084815260200190815260200160002054905060006008838154811062000ea95762000ea862001b16565b5b90600052602060002001549050806008838154811062000ece5762000ecd62001b16565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000f205762000f1f62001b45565b5b6001900381819060005260206000200160009055905550505050565b600062000f548362000fc860201b620011611760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200103c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010339062001bea565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b828054620010919062001c3b565b90600052602060002090601f016020900481019282620010b5576000855562001101565b82601f10620010d057805160ff191683800117855562001101565b8280016001018555821562001101579182015b8281111562001100578251825591602001919060010190620010e3565b5b50905062001110919062001114565b5090565b5b808211156200112f57600081600090555060010162001115565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200119c8262001151565b810181811067ffffffffffffffff82111715620011be57620011bd62001162565b5b80604052505050565b6000620011d362001133565b9050620011e1828262001191565b919050565b600067ffffffffffffffff82111562001204576200120362001162565b5b6200120f8262001151565b9050602081019050919050565b60005b838110156200123c5780820151818401526020810190506200121f565b838111156200124c576000848401525b50505050565b6000620012696200126384620011e6565b620011c7565b9050828152602081018484840111156200128857620012876200114c565b5b620012958482856200121c565b509392505050565b600082601f830112620012b557620012b462001147565b5b8151620012c784826020860162001252565b91505092915050565b60008060408385031215620012ea57620012e96200113d565b5b600083015167ffffffffffffffff8111156200130b576200130a62001142565b5b62001319858286016200129d565b925050602083015167ffffffffffffffff8111156200133d576200133c62001142565b5b6200134b858286016200129d565b9150509250929050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200139e60208362001355565b9150620013ab8262001366565b602082019050919050565b60006020820190508181036000830152620013d1816200138f565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600062001410601f8362001355565b91506200141d82620013d8565b602082019050919050565b60006020820190508181036000830152620014438162001401565b9050919050565b7f5348494241424541535420434f4e545241435420495320504155534544000000600082015250565b600062001482601d8362001355565b91506200148f826200144a565b602082019050919050565b60006020820190508181036000830152620014b58162001473565b9050919050565b7f4d494e5420414d4f554e542053484f554c44204245204154204c454153542031600082015250565b6000620014f460208362001355565b91506200150182620014bc565b602082019050919050565b600060208201905081810360008301526200152781620014e5565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062001574826200152e565b915062001581836200152e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620015b957620015b862001538565b5b828201905092915050565b7f4d415820535550504c5920455843454544454400000000000000000000000000600082015250565b6000620015fc60138362001355565b91506200160982620015c4565b602082019050919050565b600060208201905081810360008301526200162f81620015ed565b9050919050565b7f4d415820504552205452414e53414354494f4e20455843454544454400000000600082015250565b60006200166e601c8362001355565b91506200167b8262001636565b602082019050919050565b60006020820190508181036000830152620016a1816200165f565b9050919050565b6000620016b5826200152e565b9150620016c2836200152e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620016fe57620016fd62001538565b5b828202905092915050565b7f494e53554646494349454e542046554e44530000000000000000000000000000600082015250565b60006200174160128362001355565b91506200174e8262001709565b602082019050919050565b60006020820190508181036000830152620017748162001732565b9050919050565b600062001788826200152e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620017be57620017bd62001538565b5b600182019050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006200182760328362001355565b91506200183482620017c9565b604082019050919050565b600060208201905081810360008301526200185a8162001818565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006200189960208362001355565b9150620018a68262001861565b602082019050919050565b60006020820190508181036000830152620018cc816200188a565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006200190b601c8362001355565b91506200191882620018d3565b602082019050919050565b600060208201905081810360008301526200193e81620018fc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620019728262001945565b9050919050565b620019848162001965565b82525050565b62001995816200152e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000620019c4826200199b565b620019d08185620019a6565b9350620019e28185602086016200121c565b620019ed8162001151565b840191505092915050565b600060808201905062001a0f600083018762001979565b62001a1e602083018662001979565b62001a2d60408301856200198a565b818103606083015262001a418184620019b7565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62001a838162001a4c565b811462001a8f57600080fd5b50565b60008151905062001aa38162001a78565b92915050565b60006020828403121562001ac25762001ac16200113d565b5b600062001ad28482850162001a92565b91505092915050565b600062001ae8826200152e565b915062001af5836200152e565b92508282101562001b0b5762001b0a62001538565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600062001bd2602a8362001355565b915062001bdf8262001b74565b604082019050919050565b6000602082019050818103600083015262001c058162001bc3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062001c5457607f821691505b6020821081141562001c6b5762001c6a62001c0c565b5b50919050565b61457e8062001c816000396000f3fe6080604052600436106101e35760003560e01c8063893adbe111610102578063c50497ae11610095578063e65fad9711610064578063e65fad97146106c2578063e985e9c5146106ed578063ed99e1e21461072a578063f2fde38b14610755576101e3565b8063c50497ae14610615578063c87b56dd14610640578063cf1a53571461067d578063dc316e7c14610699576101e3565b8063a22cb465116100d1578063a22cb4651461056f578063a242e04f14610598578063b88d4fde146105c1578063bf8fbbd2146105ea576101e3565b8063893adbe1146104c55780638da5cb5b146104f057806395d89b411461051b578063a152d89914610546576101e3565b80632f745c591161017a5780636352211e116101495780636352211e1461040957806370a0823114610446578063715018a61461048357806382651bd01461049a576101e3565b80632f745c591461033d578063368fda591461037a57806342842e0e146103a35780634f6ccce7146103cc576101e3565b8063126f3c18116101b6578063126f3c18146102b657806316ba7197146102df57806318160ddd146102e957806323b872dd14610314576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612f49565b61077e565b60405161021c9190612f91565b60405180910390f35b34801561023157600080fd5b5061023a6107f8565b6040516102479190613045565b60405180910390f35b34801561025c57600080fd5b506102776004803603810190610272919061309d565b61088a565b604051610284919061310b565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190613152565b61090f565b005b3480156102c257600080fd5b506102dd60048036038101906102d891906131be565b610a27565b005b6102e7610ac0565b005b3480156102f557600080fd5b506102fe610e76565b60405161030b91906131fa565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190613215565b610e83565b005b34801561034957600080fd5b50610364600480360381019061035f9190613152565b610ee3565b60405161037191906131fa565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c919061339d565b610f88565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190613215565b61101e565b005b3480156103d857600080fd5b506103f360048036038101906103ee919061309d565b61103e565b60405161040091906131fa565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b919061309d565b6110af565b60405161043d919061310b565b60405180910390f35b34801561045257600080fd5b5061046d600480360381019061046891906133e6565b611161565b60405161047a91906131fa565b60405180910390f35b34801561048f57600080fd5b50610498611219565b005b3480156104a657600080fd5b506104af6112a1565b6040516104bc9190612f91565b60405180910390f35b3480156104d157600080fd5b506104da6112b4565b6040516104e79190613045565b60405180910390f35b3480156104fc57600080fd5b50610505611342565b604051610512919061310b565b60405180910390f35b34801561052757600080fd5b5061053061136c565b60405161053d9190613045565b60405180910390f35b34801561055257600080fd5b5061056d6004803603810190610568919061309d565b6113fe565b005b34801561057b57600080fd5b5061059660048036038101906105919190613413565b611484565b005b3480156105a457600080fd5b506105bf60048036038101906105ba919061339d565b61149a565b005b3480156105cd57600080fd5b506105e860048036038101906105e391906134f4565b611530565b005b3480156105f657600080fd5b506105ff611592565b60405161060c91906131fa565b60405180910390f35b34801561062157600080fd5b5061062a611598565b60405161063791906131fa565b60405180910390f35b34801561064c57600080fd5b506106676004803603810190610662919061309d565b61159e565b6040516106749190613045565b60405180910390f35b6106976004803603810190610692919061309d565b6116be565b005b3480156106a557600080fd5b506106c060048036038101906106bb91906131be565b61191a565b005b3480156106ce57600080fd5b506106d76119b3565b6040516106e49190612f91565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f9190613577565b6119c6565b6040516107219190612f91565b60405180910390f35b34801561073657600080fd5b5061073f611a5a565b60405161074c9190613045565b60405180910390f35b34801561076157600080fd5b5061077c600480360381019061077791906133e6565b611ae8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107f157506107f082611c1c565b5b9050919050565b606060008054610807906135e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610833906135e6565b80156108805780601f1061085557610100808354040283529160200191610880565b820191906000526020600020905b81548152906001019060200180831161086357829003601f168201915b5050505050905090565b600061089582611cfe565b6108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb9061368a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061091a826110af565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561098b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109829061371c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109aa611d6a565b73ffffffffffffffffffffffffffffffffffffffff1614806109d957506109d8816109d3611d6a565b6119c6565b5b610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f906137ae565b60405180910390fd5b610a228383611d72565b505050565b610a2f611d6a565b73ffffffffffffffffffffffffffffffffffffffff16610a4d611342565b73ffffffffffffffffffffffffffffffffffffffff1614610aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9a9061381a565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b610ac8611d6a565b73ffffffffffffffffffffffffffffffffffffffff16610ae6611342565b73ffffffffffffffffffffffffffffffffffffffff1614610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b339061381a565b60405180910390fd5b600047905060006064600e83610b529190613869565b610b5c91906138f2565b905060006064600784610b6f9190613869565b610b7991906138f2565b905060006064600985610b8c9190613869565b610b9691906138f2565b905073b2016edc04236866e81138b7aa68bd1bcc2cb4bd73ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610bf2573d6000803e3d6000fd5b5073889121f5d5d675874e4605218040f33198a1631973ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610c4d573d6000803e3d6000fd5b50736129b64ec39fc57a1bf9fcf454334f1f7c448e3073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610ca8573d6000803e3d6000fd5b50735a3a7511ff72f72f1aa95f5ff50f90c6bba760c673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610d03573d6000803e3d6000fd5b507356348105ec4f8bd3f1feabf584c6841c2ba25f1a73ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610d5e573d6000803e3d6000fd5b5073f2338226c18d6bdd3fdf58efb7b19e92f79f0d6773ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610db9573d6000803e3d6000fd5b5073d8aa5e8842b09d5b596d22f62c65e47b00f3e6e273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610e14573d6000803e3d6000fd5b507361c9651b626b0aed8476243d2d27f4cdd0d2d88173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e6f573d6000803e3d6000fd5b5050505050565b6000600880549050905090565b610e94610e8e611d6a565b82611e2b565b610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca90613995565b60405180910390fd5b610ede838383611f09565b505050565b6000610eee83611161565b8210610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690613a27565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f90611d6a565b73ffffffffffffffffffffffffffffffffffffffff16610fae611342565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb9061381a565b60405180910390fd5b806010908051906020019061101a929190612e3a565b5050565b61103983838360405180602001604052806000815250611530565b505050565b6000611048610e76565b8210611089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108090613ab9565b60405180910390fd5b6008828154811061109d5761109c613ad9565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f90613b7a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c990613c0c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611221611d6a565b73ffffffffffffffffffffffffffffffffffffffff1661123f611342565b73ffffffffffffffffffffffffffffffffffffffff1614611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c9061381a565b60405180910390fd5b61129f6000612165565b565b600c60019054906101000a900460ff1681565b600f80546112c1906135e6565b80601f01602080910402602001604051908101604052809291908181526020018280546112ed906135e6565b801561133a5780601f1061130f5761010080835404028352916020019161133a565b820191906000526020600020905b81548152906001019060200180831161131d57829003601f168201915b505050505081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461137b906135e6565b80601f01602080910402602001604051908101604052809291908181526020018280546113a7906135e6565b80156113f45780601f106113c9576101008083540402835291602001916113f4565b820191906000526020600020905b8154815290600101906020018083116113d757829003601f168201915b5050505050905090565b611406611d6a565b73ffffffffffffffffffffffffffffffffffffffff16611424611342565b73ffffffffffffffffffffffffffffffffffffffff161461147a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114719061381a565b60405180910390fd5b80600e8190555050565b61149661148f611d6a565b838361222b565b5050565b6114a2611d6a565b73ffffffffffffffffffffffffffffffffffffffff166114c0611342565b73ffffffffffffffffffffffffffffffffffffffff1614611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d9061381a565b60405180910390fd5b80600f908051906020019061152c929190612e3a565b5050565b61154161153b611d6a565b83611e2b565b611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157790613995565b60405180910390fd5b61158c84848484612398565b50505050565b600d5481565b600e5481565b60606115a982611cfe565b6115b257600080fd5b60001515600c60019054906101000a900460ff161515141561166057601080546115db906135e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611607906135e6565b80156116545780601f1061162957610100808354040283529160200191611654565b820191906000526020600020905b81548152906001019060200180831161163757829003601f168201915b505050505090506116b9565b600061166a6123f4565b9050600081511161168a57604051806020016040528060008152506116b5565b8061169484612486565b6040516020016116a5929190613c68565b6040516020818303038152906040525b9150505b919050565b6002600b541415611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90613cd8565b60405180910390fd5b6002600b81905550600c60009054906101000a900460ff161561175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175390613d44565b60405180910390fd5b6000611766610e76565b9050600082116117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a290613db0565b60405180910390fd5b600e5482826117ba9190613dd0565b11156117fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f290613e72565b60405180910390fd5b611803611342565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118ca576005821115611879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187090613ede565b60405180910390fd5b81600d546118879190613869565b3410156118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c090613f4a565b60405180910390fd5b5b600080600190505b83811161190c576118e36011611be0565b6118ed6011611bf6565b91506118f933836125e7565b808061190490613f6a565b9150506118d2565b5050506001600b8190555050565b611922611d6a565b73ffffffffffffffffffffffffffffffffffffffff16611940611342565b73ffffffffffffffffffffffffffffffffffffffff1614611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d9061381a565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b600c60009054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60108054611a67906135e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611a93906135e6565b8015611ae05780601f10611ab557610100808354040283529160200191611ae0565b820191906000526020600020905b815481529060010190602001808311611ac357829003601f168201915b505050505081565b611af0611d6a565b73ffffffffffffffffffffffffffffffffffffffff16611b0e611342565b73ffffffffffffffffffffffffffffffffffffffff1614611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b9061381a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcb90614025565b60405180910390fd5b611bdd81612165565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ce757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611cf75750611cf682612605565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611de5836110af565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e3682611cfe565b611e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6c906140b7565b60405180910390fd5b6000611e80836110af565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611eef57508373ffffffffffffffffffffffffffffffffffffffff16611ed78461088a565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f005750611eff81856119c6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f29826110af565b73ffffffffffffffffffffffffffffffffffffffff1614611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690614149565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe6906141db565b60405180910390fd5b611ffa83838361266f565b612005600082611d72565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461205591906141fb565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120ac9190613dd0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561229a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122919061427b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161238b9190612f91565b60405180910390a3505050565b6123a3848484611f09565b6123af84848484612783565b6123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e59061430d565b60405180910390fd5b50505050565b6060600f8054612403906135e6565b80601f016020809104026020016040519081016040528092919081815260200182805461242f906135e6565b801561247c5780601f106124515761010080835404028352916020019161247c565b820191906000526020600020905b81548152906001019060200180831161245f57829003601f168201915b5050505050905090565b606060008214156124ce576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125e2565b600082905060005b600082146125005780806124e990613f6a565b915050600a826124f991906138f2565b91506124d6565b60008167ffffffffffffffff81111561251c5761251b613272565b5b6040519080825280601f01601f19166020018201604052801561254e5781602001600182028036833780820191505090505b5090505b600085146125db5760018261256791906141fb565b9150600a85612576919061432d565b60306125829190613dd0565b60f81b81838151811061259857612597613ad9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125d491906138f2565b9450612552565b8093505050505b919050565b61260182826040518060200160405280600081525061290b565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61267a838383611c17565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126bd576126b881612966565b6126fc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126fb576126fa83826129af565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561273f5761273a81612b1c565b61277e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461277d5761277c8282612bed565b5b5b505050565b60006127a48473ffffffffffffffffffffffffffffffffffffffff16611c04565b156128fe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127cd611d6a565b8786866040518563ffffffff1660e01b81526004016127ef94939291906143b3565b6020604051808303816000875af192505050801561282b57506040513d601f19601f820116820180604052508101906128289190614414565b60015b6128ae573d806000811461285b576040519150601f19603f3d011682016040523d82523d6000602084013e612860565b606091505b506000815114156128a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289d9061430d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612903565b600190505b949350505050565b6129158383612c6c565b6129226000848484612783565b612961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129589061430d565b60405180910390fd5b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129bc84611161565b6129c691906141fb565b9050600060076000848152602001908152602001600020549050818114612aab576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b3091906141fb565b9050600060096000848152602001908152602001600020549050600060088381548110612b6057612b5f613ad9565b5b906000526020600020015490508060088381548110612b8257612b81613ad9565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612bd157612bd0614441565b5b6001900381819060005260206000200160009055905550505050565b6000612bf883611161565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd3906144bc565b60405180910390fd5b612ce581611cfe565b15612d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1c90614528565b60405180910390fd5b612d316000838361266f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d819190613dd0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612e46906135e6565b90600052602060002090601f016020900481019282612e685760008555612eaf565b82601f10612e8157805160ff1916838001178555612eaf565b82800160010185558215612eaf579182015b82811115612eae578251825591602001919060010190612e93565b5b509050612ebc9190612ec0565b5090565b5b80821115612ed9576000816000905550600101612ec1565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f2681612ef1565b8114612f3157600080fd5b50565b600081359050612f4381612f1d565b92915050565b600060208284031215612f5f57612f5e612ee7565b5b6000612f6d84828501612f34565b91505092915050565b60008115159050919050565b612f8b81612f76565b82525050565b6000602082019050612fa66000830184612f82565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fe6578082015181840152602081019050612fcb565b83811115612ff5576000848401525b50505050565b6000601f19601f8301169050919050565b600061301782612fac565b6130218185612fb7565b9350613031818560208601612fc8565b61303a81612ffb565b840191505092915050565b6000602082019050818103600083015261305f818461300c565b905092915050565b6000819050919050565b61307a81613067565b811461308557600080fd5b50565b60008135905061309781613071565b92915050565b6000602082840312156130b3576130b2612ee7565b5b60006130c184828501613088565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130f5826130ca565b9050919050565b613105816130ea565b82525050565b600060208201905061312060008301846130fc565b92915050565b61312f816130ea565b811461313a57600080fd5b50565b60008135905061314c81613126565b92915050565b6000806040838503121561316957613168612ee7565b5b60006131778582860161313d565b925050602061318885828601613088565b9150509250929050565b61319b81612f76565b81146131a657600080fd5b50565b6000813590506131b881613192565b92915050565b6000602082840312156131d4576131d3612ee7565b5b60006131e2848285016131a9565b91505092915050565b6131f481613067565b82525050565b600060208201905061320f60008301846131eb565b92915050565b60008060006060848603121561322e5761322d612ee7565b5b600061323c8682870161313d565b935050602061324d8682870161313d565b925050604061325e86828701613088565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132aa82612ffb565b810181811067ffffffffffffffff821117156132c9576132c8613272565b5b80604052505050565b60006132dc612edd565b90506132e882826132a1565b919050565b600067ffffffffffffffff82111561330857613307613272565b5b61331182612ffb565b9050602081019050919050565b82818337600083830152505050565b600061334061333b846132ed565b6132d2565b90508281526020810184848401111561335c5761335b61326d565b5b61336784828561331e565b509392505050565b600082601f83011261338457613383613268565b5b813561339484826020860161332d565b91505092915050565b6000602082840312156133b3576133b2612ee7565b5b600082013567ffffffffffffffff8111156133d1576133d0612eec565b5b6133dd8482850161336f565b91505092915050565b6000602082840312156133fc576133fb612ee7565b5b600061340a8482850161313d565b91505092915050565b6000806040838503121561342a57613429612ee7565b5b60006134388582860161313d565b9250506020613449858286016131a9565b9150509250929050565b600067ffffffffffffffff82111561346e5761346d613272565b5b61347782612ffb565b9050602081019050919050565b600061349761349284613453565b6132d2565b9050828152602081018484840111156134b3576134b261326d565b5b6134be84828561331e565b509392505050565b600082601f8301126134db576134da613268565b5b81356134eb848260208601613484565b91505092915050565b6000806000806080858703121561350e5761350d612ee7565b5b600061351c8782880161313d565b945050602061352d8782880161313d565b935050604061353e87828801613088565b925050606085013567ffffffffffffffff81111561355f5761355e612eec565b5b61356b878288016134c6565b91505092959194509250565b6000806040838503121561358e5761358d612ee7565b5b600061359c8582860161313d565b92505060206135ad8582860161313d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135fe57607f821691505b60208210811415613612576136116135b7565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613674602c83612fb7565b915061367f82613618565b604082019050919050565b600060208201905081810360008301526136a381613667565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613706602183612fb7565b9150613711826136aa565b604082019050919050565b60006020820190508181036000830152613735816136f9565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613798603883612fb7565b91506137a38261373c565b604082019050919050565b600060208201905081810360008301526137c78161378b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613804602083612fb7565b915061380f826137ce565b602082019050919050565b60006020820190508181036000830152613833816137f7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061387482613067565b915061387f83613067565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138b8576138b761383a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006138fd82613067565b915061390883613067565b925082613918576139176138c3565b5b828204905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061397f603183612fb7565b915061398a82613923565b604082019050919050565b600060208201905081810360008301526139ae81613972565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613a11602b83612fb7565b9150613a1c826139b5565b604082019050919050565b60006020820190508181036000830152613a4081613a04565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613aa3602c83612fb7565b9150613aae82613a47565b604082019050919050565b60006020820190508181036000830152613ad281613a96565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613b64602983612fb7565b9150613b6f82613b08565b604082019050919050565b60006020820190508181036000830152613b9381613b57565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613bf6602a83612fb7565b9150613c0182613b9a565b604082019050919050565b60006020820190508181036000830152613c2581613be9565b9050919050565b600081905092915050565b6000613c4282612fac565b613c4c8185613c2c565b9350613c5c818560208601612fc8565b80840191505092915050565b6000613c748285613c37565b9150613c808284613c37565b91508190509392505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613cc2601f83612fb7565b9150613ccd82613c8c565b602082019050919050565b60006020820190508181036000830152613cf181613cb5565b9050919050565b7f5348494241424541535420434f4e545241435420495320504155534544000000600082015250565b6000613d2e601d83612fb7565b9150613d3982613cf8565b602082019050919050565b60006020820190508181036000830152613d5d81613d21565b9050919050565b7f4d494e5420414d4f554e542053484f554c44204245204154204c454153542031600082015250565b6000613d9a602083612fb7565b9150613da582613d64565b602082019050919050565b60006020820190508181036000830152613dc981613d8d565b9050919050565b6000613ddb82613067565b9150613de683613067565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e1b57613e1a61383a565b5b828201905092915050565b7f4d415820535550504c5920455843454544454400000000000000000000000000600082015250565b6000613e5c601383612fb7565b9150613e6782613e26565b602082019050919050565b60006020820190508181036000830152613e8b81613e4f565b9050919050565b7f4d415820504552205452414e53414354494f4e20455843454544454400000000600082015250565b6000613ec8601c83612fb7565b9150613ed382613e92565b602082019050919050565b60006020820190508181036000830152613ef781613ebb565b9050919050565b7f494e53554646494349454e542046554e44530000000000000000000000000000600082015250565b6000613f34601283612fb7565b9150613f3f82613efe565b602082019050919050565b60006020820190508181036000830152613f6381613f27565b9050919050565b6000613f7582613067565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fa857613fa761383a565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061400f602683612fb7565b915061401a82613fb3565b604082019050919050565b6000602082019050818103600083015261403e81614002565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140a1602c83612fb7565b91506140ac82614045565b604082019050919050565b600060208201905081810360008301526140d081614094565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614133602983612fb7565b915061413e826140d7565b604082019050919050565b6000602082019050818103600083015261416281614126565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141c5602483612fb7565b91506141d082614169565b604082019050919050565b600060208201905081810360008301526141f4816141b8565b9050919050565b600061420682613067565b915061421183613067565b9250828210156142245761422361383a565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614265601983612fb7565b91506142708261422f565b602082019050919050565b6000602082019050818103600083015261429481614258565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006142f7603283612fb7565b91506143028261429b565b604082019050919050565b60006020820190508181036000830152614326816142ea565b9050919050565b600061433882613067565b915061434383613067565b925082614353576143526138c3565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006143858261435e565b61438f8185614369565b935061439f818560208601612fc8565b6143a881612ffb565b840191505092915050565b60006080820190506143c860008301876130fc565b6143d560208301866130fc565b6143e260408301856131eb565b81810360608301526143f4818461437a565b905095945050505050565b60008151905061440e81612f1d565b92915050565b60006020828403121561442a57614429612ee7565b5b6000614438848285016143ff565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006144a6602083612fb7565b91506144b182614470565b602082019050919050565b600060208201905081810360008301526144d581614499565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614512601c83612fb7565b915061451d826144dc565b602082019050919050565b6000602082019050818103600083015261454181614505565b905091905056fea26469706673582212200deb9f7422f703e09313463cc151c6355f6db7be14bc68c92fb4fe845674259064736f6c634300080b0033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004d68747470733a2f2f73622e6d7970696e6174612e636c6f75642f697066732f516d5066635359545168594d574e74317834396b5644414c583536475a6d756d4e6a44663572736e697233436e6d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d68747470733a2f2f73622e6d7970696e6174612e636c6f75642f697066732f516d5066635359545168594d574e74317834396b5644414c583536475a6d756d4e6a44663572736e697233436e6d00000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101e35760003560e01c8063893adbe111610102578063c50497ae11610095578063e65fad9711610064578063e65fad97146106c2578063e985e9c5146106ed578063ed99e1e21461072a578063f2fde38b14610755576101e3565b8063c50497ae14610615578063c87b56dd14610640578063cf1a53571461067d578063dc316e7c14610699576101e3565b8063a22cb465116100d1578063a22cb4651461056f578063a242e04f14610598578063b88d4fde146105c1578063bf8fbbd2146105ea576101e3565b8063893adbe1146104c55780638da5cb5b146104f057806395d89b411461051b578063a152d89914610546576101e3565b80632f745c591161017a5780636352211e116101495780636352211e1461040957806370a0823114610446578063715018a61461048357806382651bd01461049a576101e3565b80632f745c591461033d578063368fda591461037a57806342842e0e146103a35780634f6ccce7146103cc576101e3565b8063126f3c18116101b6578063126f3c18146102b657806316ba7197146102df57806318160ddd146102e957806323b872dd14610314576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612f49565b61077e565b60405161021c9190612f91565b60405180910390f35b34801561023157600080fd5b5061023a6107f8565b6040516102479190613045565b60405180910390f35b34801561025c57600080fd5b506102776004803603810190610272919061309d565b61088a565b604051610284919061310b565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190613152565b61090f565b005b3480156102c257600080fd5b506102dd60048036038101906102d891906131be565b610a27565b005b6102e7610ac0565b005b3480156102f557600080fd5b506102fe610e76565b60405161030b91906131fa565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190613215565b610e83565b005b34801561034957600080fd5b50610364600480360381019061035f9190613152565b610ee3565b60405161037191906131fa565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c919061339d565b610f88565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190613215565b61101e565b005b3480156103d857600080fd5b506103f360048036038101906103ee919061309d565b61103e565b60405161040091906131fa565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b919061309d565b6110af565b60405161043d919061310b565b60405180910390f35b34801561045257600080fd5b5061046d600480360381019061046891906133e6565b611161565b60405161047a91906131fa565b60405180910390f35b34801561048f57600080fd5b50610498611219565b005b3480156104a657600080fd5b506104af6112a1565b6040516104bc9190612f91565b60405180910390f35b3480156104d157600080fd5b506104da6112b4565b6040516104e79190613045565b60405180910390f35b3480156104fc57600080fd5b50610505611342565b604051610512919061310b565b60405180910390f35b34801561052757600080fd5b5061053061136c565b60405161053d9190613045565b60405180910390f35b34801561055257600080fd5b5061056d6004803603810190610568919061309d565b6113fe565b005b34801561057b57600080fd5b5061059660048036038101906105919190613413565b611484565b005b3480156105a457600080fd5b506105bf60048036038101906105ba919061339d565b61149a565b005b3480156105cd57600080fd5b506105e860048036038101906105e391906134f4565b611530565b005b3480156105f657600080fd5b506105ff611592565b60405161060c91906131fa565b60405180910390f35b34801561062157600080fd5b5061062a611598565b60405161063791906131fa565b60405180910390f35b34801561064c57600080fd5b506106676004803603810190610662919061309d565b61159e565b6040516106749190613045565b60405180910390f35b6106976004803603810190610692919061309d565b6116be565b005b3480156106a557600080fd5b506106c060048036038101906106bb91906131be565b61191a565b005b3480156106ce57600080fd5b506106d76119b3565b6040516106e49190612f91565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f9190613577565b6119c6565b6040516107219190612f91565b60405180910390f35b34801561073657600080fd5b5061073f611a5a565b60405161074c9190613045565b60405180910390f35b34801561076157600080fd5b5061077c600480360381019061077791906133e6565b611ae8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107f157506107f082611c1c565b5b9050919050565b606060008054610807906135e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610833906135e6565b80156108805780601f1061085557610100808354040283529160200191610880565b820191906000526020600020905b81548152906001019060200180831161086357829003601f168201915b5050505050905090565b600061089582611cfe565b6108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb9061368a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061091a826110af565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561098b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109829061371c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109aa611d6a565b73ffffffffffffffffffffffffffffffffffffffff1614806109d957506109d8816109d3611d6a565b6119c6565b5b610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f906137ae565b60405180910390fd5b610a228383611d72565b505050565b610a2f611d6a565b73ffffffffffffffffffffffffffffffffffffffff16610a4d611342565b73ffffffffffffffffffffffffffffffffffffffff1614610aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9a9061381a565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b610ac8611d6a565b73ffffffffffffffffffffffffffffffffffffffff16610ae6611342565b73ffffffffffffffffffffffffffffffffffffffff1614610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b339061381a565b60405180910390fd5b600047905060006064600e83610b529190613869565b610b5c91906138f2565b905060006064600784610b6f9190613869565b610b7991906138f2565b905060006064600985610b8c9190613869565b610b9691906138f2565b905073b2016edc04236866e81138b7aa68bd1bcc2cb4bd73ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610bf2573d6000803e3d6000fd5b5073889121f5d5d675874e4605218040f33198a1631973ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610c4d573d6000803e3d6000fd5b50736129b64ec39fc57a1bf9fcf454334f1f7c448e3073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610ca8573d6000803e3d6000fd5b50735a3a7511ff72f72f1aa95f5ff50f90c6bba760c673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610d03573d6000803e3d6000fd5b507356348105ec4f8bd3f1feabf584c6841c2ba25f1a73ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610d5e573d6000803e3d6000fd5b5073f2338226c18d6bdd3fdf58efb7b19e92f79f0d6773ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610db9573d6000803e3d6000fd5b5073d8aa5e8842b09d5b596d22f62c65e47b00f3e6e273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610e14573d6000803e3d6000fd5b507361c9651b626b0aed8476243d2d27f4cdd0d2d88173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e6f573d6000803e3d6000fd5b5050505050565b6000600880549050905090565b610e94610e8e611d6a565b82611e2b565b610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca90613995565b60405180910390fd5b610ede838383611f09565b505050565b6000610eee83611161565b8210610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690613a27565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f90611d6a565b73ffffffffffffffffffffffffffffffffffffffff16610fae611342565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb9061381a565b60405180910390fd5b806010908051906020019061101a929190612e3a565b5050565b61103983838360405180602001604052806000815250611530565b505050565b6000611048610e76565b8210611089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108090613ab9565b60405180910390fd5b6008828154811061109d5761109c613ad9565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f90613b7a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c990613c0c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611221611d6a565b73ffffffffffffffffffffffffffffffffffffffff1661123f611342565b73ffffffffffffffffffffffffffffffffffffffff1614611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c9061381a565b60405180910390fd5b61129f6000612165565b565b600c60019054906101000a900460ff1681565b600f80546112c1906135e6565b80601f01602080910402602001604051908101604052809291908181526020018280546112ed906135e6565b801561133a5780601f1061130f5761010080835404028352916020019161133a565b820191906000526020600020905b81548152906001019060200180831161131d57829003601f168201915b505050505081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461137b906135e6565b80601f01602080910402602001604051908101604052809291908181526020018280546113a7906135e6565b80156113f45780601f106113c9576101008083540402835291602001916113f4565b820191906000526020600020905b8154815290600101906020018083116113d757829003601f168201915b5050505050905090565b611406611d6a565b73ffffffffffffffffffffffffffffffffffffffff16611424611342565b73ffffffffffffffffffffffffffffffffffffffff161461147a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114719061381a565b60405180910390fd5b80600e8190555050565b61149661148f611d6a565b838361222b565b5050565b6114a2611d6a565b73ffffffffffffffffffffffffffffffffffffffff166114c0611342565b73ffffffffffffffffffffffffffffffffffffffff1614611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d9061381a565b60405180910390fd5b80600f908051906020019061152c929190612e3a565b5050565b61154161153b611d6a565b83611e2b565b611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157790613995565b60405180910390fd5b61158c84848484612398565b50505050565b600d5481565b600e5481565b60606115a982611cfe565b6115b257600080fd5b60001515600c60019054906101000a900460ff161515141561166057601080546115db906135e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611607906135e6565b80156116545780601f1061162957610100808354040283529160200191611654565b820191906000526020600020905b81548152906001019060200180831161163757829003601f168201915b505050505090506116b9565b600061166a6123f4565b9050600081511161168a57604051806020016040528060008152506116b5565b8061169484612486565b6040516020016116a5929190613c68565b6040516020818303038152906040525b9150505b919050565b6002600b541415611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90613cd8565b60405180910390fd5b6002600b81905550600c60009054906101000a900460ff161561175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175390613d44565b60405180910390fd5b6000611766610e76565b9050600082116117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a290613db0565b60405180910390fd5b600e5482826117ba9190613dd0565b11156117fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f290613e72565b60405180910390fd5b611803611342565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118ca576005821115611879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187090613ede565b60405180910390fd5b81600d546118879190613869565b3410156118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c090613f4a565b60405180910390fd5b5b600080600190505b83811161190c576118e36011611be0565b6118ed6011611bf6565b91506118f933836125e7565b808061190490613f6a565b9150506118d2565b5050506001600b8190555050565b611922611d6a565b73ffffffffffffffffffffffffffffffffffffffff16611940611342565b73ffffffffffffffffffffffffffffffffffffffff1614611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d9061381a565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b600c60009054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60108054611a67906135e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611a93906135e6565b8015611ae05780601f10611ab557610100808354040283529160200191611ae0565b820191906000526020600020905b815481529060010190602001808311611ac357829003601f168201915b505050505081565b611af0611d6a565b73ffffffffffffffffffffffffffffffffffffffff16611b0e611342565b73ffffffffffffffffffffffffffffffffffffffff1614611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b9061381a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcb90614025565b60405180910390fd5b611bdd81612165565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ce757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611cf75750611cf682612605565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611de5836110af565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e3682611cfe565b611e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6c906140b7565b60405180910390fd5b6000611e80836110af565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611eef57508373ffffffffffffffffffffffffffffffffffffffff16611ed78461088a565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f005750611eff81856119c6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f29826110af565b73ffffffffffffffffffffffffffffffffffffffff1614611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690614149565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe6906141db565b60405180910390fd5b611ffa83838361266f565b612005600082611d72565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461205591906141fb565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120ac9190613dd0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561229a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122919061427b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161238b9190612f91565b60405180910390a3505050565b6123a3848484611f09565b6123af84848484612783565b6123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e59061430d565b60405180910390fd5b50505050565b6060600f8054612403906135e6565b80601f016020809104026020016040519081016040528092919081815260200182805461242f906135e6565b801561247c5780601f106124515761010080835404028352916020019161247c565b820191906000526020600020905b81548152906001019060200180831161245f57829003601f168201915b5050505050905090565b606060008214156124ce576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125e2565b600082905060005b600082146125005780806124e990613f6a565b915050600a826124f991906138f2565b91506124d6565b60008167ffffffffffffffff81111561251c5761251b613272565b5b6040519080825280601f01601f19166020018201604052801561254e5781602001600182028036833780820191505090505b5090505b600085146125db5760018261256791906141fb565b9150600a85612576919061432d565b60306125829190613dd0565b60f81b81838151811061259857612597613ad9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125d491906138f2565b9450612552565b8093505050505b919050565b61260182826040518060200160405280600081525061290b565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61267a838383611c17565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126bd576126b881612966565b6126fc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126fb576126fa83826129af565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561273f5761273a81612b1c565b61277e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461277d5761277c8282612bed565b5b5b505050565b60006127a48473ffffffffffffffffffffffffffffffffffffffff16611c04565b156128fe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127cd611d6a565b8786866040518563ffffffff1660e01b81526004016127ef94939291906143b3565b6020604051808303816000875af192505050801561282b57506040513d601f19601f820116820180604052508101906128289190614414565b60015b6128ae573d806000811461285b576040519150601f19603f3d011682016040523d82523d6000602084013e612860565b606091505b506000815114156128a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289d9061430d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612903565b600190505b949350505050565b6129158383612c6c565b6129226000848484612783565b612961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129589061430d565b60405180910390fd5b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129bc84611161565b6129c691906141fb565b9050600060076000848152602001908152602001600020549050818114612aab576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b3091906141fb565b9050600060096000848152602001908152602001600020549050600060088381548110612b6057612b5f613ad9565b5b906000526020600020015490508060088381548110612b8257612b81613ad9565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612bd157612bd0614441565b5b6001900381819060005260206000200160009055905550505050565b6000612bf883611161565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd3906144bc565b60405180910390fd5b612ce581611cfe565b15612d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1c90614528565b60405180910390fd5b612d316000838361266f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d819190613dd0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612e46906135e6565b90600052602060002090601f016020900481019282612e685760008555612eaf565b82601f10612e8157805160ff1916838001178555612eaf565b82800160010185558215612eaf579182015b82811115612eae578251825591602001919060010190612e93565b5b509050612ebc9190612ec0565b5090565b5b80821115612ed9576000816000905550600101612ec1565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f2681612ef1565b8114612f3157600080fd5b50565b600081359050612f4381612f1d565b92915050565b600060208284031215612f5f57612f5e612ee7565b5b6000612f6d84828501612f34565b91505092915050565b60008115159050919050565b612f8b81612f76565b82525050565b6000602082019050612fa66000830184612f82565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fe6578082015181840152602081019050612fcb565b83811115612ff5576000848401525b50505050565b6000601f19601f8301169050919050565b600061301782612fac565b6130218185612fb7565b9350613031818560208601612fc8565b61303a81612ffb565b840191505092915050565b6000602082019050818103600083015261305f818461300c565b905092915050565b6000819050919050565b61307a81613067565b811461308557600080fd5b50565b60008135905061309781613071565b92915050565b6000602082840312156130b3576130b2612ee7565b5b60006130c184828501613088565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130f5826130ca565b9050919050565b613105816130ea565b82525050565b600060208201905061312060008301846130fc565b92915050565b61312f816130ea565b811461313a57600080fd5b50565b60008135905061314c81613126565b92915050565b6000806040838503121561316957613168612ee7565b5b60006131778582860161313d565b925050602061318885828601613088565b9150509250929050565b61319b81612f76565b81146131a657600080fd5b50565b6000813590506131b881613192565b92915050565b6000602082840312156131d4576131d3612ee7565b5b60006131e2848285016131a9565b91505092915050565b6131f481613067565b82525050565b600060208201905061320f60008301846131eb565b92915050565b60008060006060848603121561322e5761322d612ee7565b5b600061323c8682870161313d565b935050602061324d8682870161313d565b925050604061325e86828701613088565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132aa82612ffb565b810181811067ffffffffffffffff821117156132c9576132c8613272565b5b80604052505050565b60006132dc612edd565b90506132e882826132a1565b919050565b600067ffffffffffffffff82111561330857613307613272565b5b61331182612ffb565b9050602081019050919050565b82818337600083830152505050565b600061334061333b846132ed565b6132d2565b90508281526020810184848401111561335c5761335b61326d565b5b61336784828561331e565b509392505050565b600082601f83011261338457613383613268565b5b813561339484826020860161332d565b91505092915050565b6000602082840312156133b3576133b2612ee7565b5b600082013567ffffffffffffffff8111156133d1576133d0612eec565b5b6133dd8482850161336f565b91505092915050565b6000602082840312156133fc576133fb612ee7565b5b600061340a8482850161313d565b91505092915050565b6000806040838503121561342a57613429612ee7565b5b60006134388582860161313d565b9250506020613449858286016131a9565b9150509250929050565b600067ffffffffffffffff82111561346e5761346d613272565b5b61347782612ffb565b9050602081019050919050565b600061349761349284613453565b6132d2565b9050828152602081018484840111156134b3576134b261326d565b5b6134be84828561331e565b509392505050565b600082601f8301126134db576134da613268565b5b81356134eb848260208601613484565b91505092915050565b6000806000806080858703121561350e5761350d612ee7565b5b600061351c8782880161313d565b945050602061352d8782880161313d565b935050604061353e87828801613088565b925050606085013567ffffffffffffffff81111561355f5761355e612eec565b5b61356b878288016134c6565b91505092959194509250565b6000806040838503121561358e5761358d612ee7565b5b600061359c8582860161313d565b92505060206135ad8582860161313d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135fe57607f821691505b60208210811415613612576136116135b7565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613674602c83612fb7565b915061367f82613618565b604082019050919050565b600060208201905081810360008301526136a381613667565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613706602183612fb7565b9150613711826136aa565b604082019050919050565b60006020820190508181036000830152613735816136f9565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613798603883612fb7565b91506137a38261373c565b604082019050919050565b600060208201905081810360008301526137c78161378b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613804602083612fb7565b915061380f826137ce565b602082019050919050565b60006020820190508181036000830152613833816137f7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061387482613067565b915061387f83613067565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138b8576138b761383a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006138fd82613067565b915061390883613067565b925082613918576139176138c3565b5b828204905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061397f603183612fb7565b915061398a82613923565b604082019050919050565b600060208201905081810360008301526139ae81613972565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613a11602b83612fb7565b9150613a1c826139b5565b604082019050919050565b60006020820190508181036000830152613a4081613a04565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613aa3602c83612fb7565b9150613aae82613a47565b604082019050919050565b60006020820190508181036000830152613ad281613a96565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613b64602983612fb7565b9150613b6f82613b08565b604082019050919050565b60006020820190508181036000830152613b9381613b57565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613bf6602a83612fb7565b9150613c0182613b9a565b604082019050919050565b60006020820190508181036000830152613c2581613be9565b9050919050565b600081905092915050565b6000613c4282612fac565b613c4c8185613c2c565b9350613c5c818560208601612fc8565b80840191505092915050565b6000613c748285613c37565b9150613c808284613c37565b91508190509392505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613cc2601f83612fb7565b9150613ccd82613c8c565b602082019050919050565b60006020820190508181036000830152613cf181613cb5565b9050919050565b7f5348494241424541535420434f4e545241435420495320504155534544000000600082015250565b6000613d2e601d83612fb7565b9150613d3982613cf8565b602082019050919050565b60006020820190508181036000830152613d5d81613d21565b9050919050565b7f4d494e5420414d4f554e542053484f554c44204245204154204c454153542031600082015250565b6000613d9a602083612fb7565b9150613da582613d64565b602082019050919050565b60006020820190508181036000830152613dc981613d8d565b9050919050565b6000613ddb82613067565b9150613de683613067565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e1b57613e1a61383a565b5b828201905092915050565b7f4d415820535550504c5920455843454544454400000000000000000000000000600082015250565b6000613e5c601383612fb7565b9150613e6782613e26565b602082019050919050565b60006020820190508181036000830152613e8b81613e4f565b9050919050565b7f4d415820504552205452414e53414354494f4e20455843454544454400000000600082015250565b6000613ec8601c83612fb7565b9150613ed382613e92565b602082019050919050565b60006020820190508181036000830152613ef781613ebb565b9050919050565b7f494e53554646494349454e542046554e44530000000000000000000000000000600082015250565b6000613f34601283612fb7565b9150613f3f82613efe565b602082019050919050565b60006020820190508181036000830152613f6381613f27565b9050919050565b6000613f7582613067565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fa857613fa761383a565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061400f602683612fb7565b915061401a82613fb3565b604082019050919050565b6000602082019050818103600083015261403e81614002565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140a1602c83612fb7565b91506140ac82614045565b604082019050919050565b600060208201905081810360008301526140d081614094565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614133602983612fb7565b915061413e826140d7565b604082019050919050565b6000602082019050818103600083015261416281614126565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141c5602483612fb7565b91506141d082614169565b604082019050919050565b600060208201905081810360008301526141f4816141b8565b9050919050565b600061420682613067565b915061421183613067565b9250828210156142245761422361383a565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614265601983612fb7565b91506142708261422f565b602082019050919050565b6000602082019050818103600083015261429481614258565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006142f7603283612fb7565b91506143028261429b565b604082019050919050565b60006020820190508181036000830152614326816142ea565b9050919050565b600061433882613067565b915061434383613067565b925082614353576143526138c3565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006143858261435e565b61438f8185614369565b935061439f818560208601612fc8565b6143a881612ffb565b840191505092915050565b60006080820190506143c860008301876130fc565b6143d560208301866130fc565b6143e260408301856131eb565b81810360608301526143f4818461437a565b905095945050505050565b60008151905061440e81612f1d565b92915050565b60006020828403121561442a57614429612ee7565b5b6000614438848285016143ff565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006144a6602083612fb7565b91506144b182614470565b602082019050919050565b600060208201905081810360008301526144d581614499565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614512601c83612fb7565b915061451d826144dc565b602082019050919050565b6000602082019050818103600083015261454181614505565b905091905056fea26469706673582212200deb9f7422f703e09313463cc151c6355f6db7be14bc68c92fb4fe845674259064736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004d68747470733a2f2f73622e6d7970696e6174612e636c6f75642f697066732f516d5066635359545168594d574e74317834396b5644414c583536475a6d756d4e6a44663572736e697233436e6d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d68747470733a2f2f73622e6d7970696e6174612e636c6f75642f697066732f516d5066635359545168594d574e74317834396b5644414c583536475a6d756d4e6a44663572736e697233436e6d00000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _INIT_REVEALED_URI (string): https://sb.mypinata.cloud/ipfs/QmPfcSYTQhYMWNt1x49kVDALX56GZmumNjDf5rsnir3Cnm
Arg [1] : _INIT_NOT_REVEALED_URI (string): https://sb.mypinata.cloud/ipfs/QmPfcSYTQhYMWNt1x49kVDALX56GZmumNjDf5rsnir3Cnm
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 000000000000000000000000000000000000000000000000000000000000004d
Arg [3] : 68747470733a2f2f73622e6d7970696e6174612e636c6f75642f697066732f51
Arg [4] : 6d5066635359545168594d574e74317834396b5644414c583536475a6d756d4e
Arg [5] : 6a44663572736e697233436e6d00000000000000000000000000000000000000
Arg [6] : 000000000000000000000000000000000000000000000000000000000000004d
Arg [7] : 68747470733a2f2f73622e6d7970696e6174612e636c6f75642f697066732f51
Arg [8] : 6d5066635359545168594d574e74317834396b5644414c583536475a6d756d4e
Arg [9] : 6a44663572736e697233436e6d00000000000000000000000000000000000000
Deployed Bytecode Sourcemap
50313:3925:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43278:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29984:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31543:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31066:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52835:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53092:1143;;;:::i;:::-;;43918:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32293:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43586:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52595:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32703:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44108:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29678:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29408:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8954:103;;;;;;;;;;;;;:::i;:::-;;50536:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50636;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8303:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30153:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52738:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31836:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52468:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32959:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50567:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50603:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52039:367;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51266:716;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52937:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50506:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32062:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50667:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9212:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43278:224;43380:4;43419:35;43404:50;;;:11;:50;;;;:90;;;;43458:36;43482:11;43458:23;:36::i;:::-;43404:90;43397:97;;43278:224;;;:::o;29984:100::-;30038:13;30071:5;30064:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29984:100;:::o;31543:221::-;31619:7;31647:16;31655:7;31647;:16::i;:::-;31639:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31732:15;:24;31748:7;31732:24;;;;;;;;;;;;;;;;;;;;;31725:31;;31543:221;;;:::o;31066:411::-;31147:13;31163:23;31178:7;31163:14;:23::i;:::-;31147:39;;31211:5;31205:11;;:2;:11;;;;31197:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31305:5;31289:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31314:37;31331:5;31338:12;:10;:12::i;:::-;31314:16;:37::i;:::-;31289:62;31267:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;31448:21;31457:2;31461:7;31448:8;:21::i;:::-;31136:341;31066:411;;:::o;52835:96::-;8534:12;:10;:12::i;:::-;8523:23;;:7;:5;:7::i;:::-;:23;;;8515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52909:16:::1;52901:5;;:24;;;;;;;;;;;;;;;;;;52835:96:::0;:::o;53092:1143::-;8534:12;:10;:12::i;:::-;8523:23;;:7;:5;:7::i;:::-;:23;;;8515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53144:16:::1;53163:21;53144:40;;53191:24;53234:3;53229:2;53218:8;:13;;;;:::i;:::-;:19;;;;:::i;:::-;53191:46;;53244:24;53286:3;53282:1;53271:8;:12;;;;:::i;:::-;:18;;;;:::i;:::-;53244:45;;53296:24;53338:3;53334:1;53323:8;:12;;;;:::i;:::-;:18;;;;:::i;:::-;53296:45;;53356:42;53348:60;;:78;53409:16;53348:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53467:42;53459:60;;:78;53520:16;53459:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53578:42;53570:60;;:78;53631:16;53570:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53689:42;53681:60;;:78;53742:16;53681:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53800:42;53792:60;;:78;53853:16;53792:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53911:42;53903:60;;:78;53964:16;53903:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;54022:42;54014:60;;:78;54075:16;54014:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;54133:42;54125:60;;:78;54186:16;54125:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53137:1098;;;;53092:1143::o:0;43918:113::-;43979:7;44006:10;:17;;;;43999:24;;43918:113;:::o;32293:339::-;32488:41;32507:12;:10;:12::i;:::-;32521:7;32488:18;:41::i;:::-;32480:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32596:28;32606:4;32612:2;32616:7;32596:9;:28::i;:::-;32293:339;;;:::o;43586:256::-;43683:7;43719:23;43736:5;43719:16;:23::i;:::-;43711:5;:31;43703:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43808:12;:19;43821:5;43808:19;;;;;;;;;;;;;;;:26;43828:5;43808:26;;;;;;;;;;;;43801:33;;43586:256;;;;:::o;52595:137::-;8534:12;:10;:12::i;:::-;8523:23;;:7;:5;:7::i;:::-;:23;;;8515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52705:21:::1;52686:16;:40;;;;;;;;;;;;:::i;:::-;;52595:137:::0;:::o;32703:185::-;32841:39;32858:4;32864:2;32868:7;32841:39;;;;;;;;;;;;:16;:39::i;:::-;32703:185;;;:::o;44108:233::-;44183:7;44219:30;:28;:30::i;:::-;44211:5;:38;44203:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;44316:10;44327:5;44316:17;;;;;;;;:::i;:::-;;;;;;;;;;44309:24;;44108:233;;;:::o;29678:239::-;29750:7;29770:13;29786:7;:16;29794:7;29786:16;;;;;;;;;;;;;;;;;;;;;29770:32;;29838:1;29821:19;;:5;:19;;;;29813:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29904:5;29897:12;;;29678:239;;;:::o;29408:208::-;29480:7;29525:1;29508:19;;:5;:19;;;;29500:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29592:9;:16;29602:5;29592:16;;;;;;;;;;;;;;;;29585:23;;29408:208;;;:::o;8954:103::-;8534:12;:10;:12::i;:::-;8523:23;;:7;:5;:7::i;:::-;:23;;;8515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9019:30:::1;9046:1;9019:18;:30::i;:::-;8954:103::o:0;50536:26::-;;;;;;;;;;;;;:::o;50636:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8303:87::-;8349:7;8376:6;;;;;;;;;;;8369:13;;8303:87;:::o;30153:104::-;30209:13;30242:7;30235:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30153:104;:::o;52738:91::-;8534:12;:10;:12::i;:::-;8523:23;;:7;:5;:7::i;:::-;:23;;;8515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52812:11:::1;52803:6;:20;;;;52738:91:::0;:::o;31836:155::-;31931:52;31950:12;:10;:12::i;:::-;31964:8;31974;31931:18;:52::i;:::-;31836:155;;:::o;52468:121::-;8534:12;:10;:12::i;:::-;8523:23;;:7;:5;:7::i;:::-;:23;;;8515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52566:17:::1;52551:12;:32;;;;;;;;;;;;:::i;:::-;;52468:121:::0;:::o;32959:328::-;33134:41;33153:12;:10;:12::i;:::-;33167:7;33134:18;:41::i;:::-;33126:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33240:39;33254:4;33260:2;33264:7;33273:5;33240:13;:39::i;:::-;32959:328;;;;:::o;50567:31::-;;;;:::o;50603:28::-;;;;:::o;52039:367::-;52113:13;52143:17;52151:8;52143:7;:17::i;:::-;52135:26;;;;;;52183:5;52173:15;;:6;;;;;;;;;;;:15;;;52170:60;;;52206:16;52199:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52170:60;52238:30;52271:10;:8;:10::i;:::-;52238:43;;52328:1;52301:16;52295:30;:34;:105;;;;;;;;;;;;;;;;;52356:16;52374:19;:8;:17;:19::i;:::-;52339:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52295:105;52288:112;;;52039:367;;;;:::o;51266:716::-;1812:1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;51357:5:::1;;;;;;;;;;;51356:6;51348:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;51403:21;51427:13;:11;:13::i;:::-;51403:37;;51470:1;51455:12;:16;51447:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;51555:6;;51539:12;51523:13;:28;;;;:::i;:::-;:38;;51515:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;51612:7;:5;:7::i;:::-;51598:21;;:10;:21;;;51594:174;;51654:1;51638:12;:17;;51630:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;51725:12;51718:4;;:19;;;;:::i;:::-;51705:9;:32;;51697:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;51594:174;51776:21;51809:9:::0;51821:1:::1;51809:13;;51804:173;51829:12;51824:1;:17;51804:173;;51857:22;:10;:20;:22::i;:::-;51904:20;:10;:18;:20::i;:::-;51888:36;;51933;51943:10;51955:13;51933:9;:36::i;:::-;51843:3;;;;;:::i;:::-;;;;51804:173;;;;51341:641;;1768:1:::0;2722:7;:22;;;;51266:716;:::o;52937:100::-;8534:12;:10;:12::i;:::-;8523:23;;:7;:5;:7::i;:::-;:23;;;8515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53014:17:::1;53005:6;;:26;;;;;;;;;;;;;;;;;;52937:100:::0;:::o;50506:25::-;;;;;;;;;;;;;:::o;32062:164::-;32159:4;32183:18;:25;32202:5;32183:25;;;;;;;;;;;;;;;:35;32209:8;32183:35;;;;;;;;;;;;;;;;;;;;;;;;;32176:42;;32062:164;;;;:::o;50667:30::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9212:201::-;8534:12;:10;:12::i;:::-;8523:23;;:7;:5;:7::i;:::-;:23;;;8515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9321:1:::1;9301:22;;:8;:22;;;;9293:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9377:28;9396:8;9377:18;:28::i;:::-;9212:201:::0;:::o;3753:127::-;3860:1;3842:7;:14;;;:19;;;;;;;;;;;3753:127;:::o;3631:114::-;3696:7;3723;:14;;;3716:21;;3631:114;;;:::o;10591:387::-;10651:4;10859:12;10926:7;10914:20;10906:28;;10969:1;10962:4;:8;10955:15;;;10591:387;;;:::o;41346:126::-;;;;:::o;29039:305::-;29141:4;29193:25;29178:40;;;:11;:40;;;;:105;;;;29250:33;29235:48;;;:11;:48;;;;29178:105;:158;;;;29300:36;29324:11;29300:23;:36::i;:::-;29178:158;29158:178;;29039:305;;;:::o;34797:127::-;34862:4;34914:1;34886:30;;:7;:16;34894:7;34886:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34879:37;;34797:127;;;:::o;7027:98::-;7080:7;7107:10;7100:17;;7027:98;:::o;38779:174::-;38881:2;38854:15;:24;38870:7;38854:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38937:7;38933:2;38899:46;;38908:23;38923:7;38908:14;:23::i;:::-;38899:46;;;;;;;;;;;;38779:174;;:::o;35091:348::-;35184:4;35209:16;35217:7;35209;:16::i;:::-;35201:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35285:13;35301:23;35316:7;35301:14;:23::i;:::-;35285:39;;35354:5;35343:16;;:7;:16;;;:51;;;;35387:7;35363:31;;:20;35375:7;35363:11;:20::i;:::-;:31;;;35343:51;:87;;;;35398:32;35415:5;35422:7;35398:16;:32::i;:::-;35343:87;35335:96;;;35091:348;;;;:::o;38083:578::-;38242:4;38215:31;;:23;38230:7;38215:14;:23::i;:::-;:31;;;38207:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;38325:1;38311:16;;:2;:16;;;;38303:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38381:39;38402:4;38408:2;38412:7;38381:20;:39::i;:::-;38485:29;38502:1;38506:7;38485:8;:29::i;:::-;38546:1;38527:9;:15;38537:4;38527:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;38575:1;38558:9;:13;38568:2;38558:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38606:2;38587:7;:16;38595:7;38587:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38645:7;38641:2;38626:27;;38635:4;38626:27;;;;;;;;;;;;38083:578;;;:::o;9573:191::-;9647:16;9666:6;;;;;;;;;;;9647:25;;9692:8;9683:6;;:17;;;;;;;;;;;;;;;;;;9747:8;9716:40;;9737:8;9716:40;;;;;;;;;;;;9636:128;9573:191;:::o;39095:315::-;39250:8;39241:17;;:5;:17;;;;39233:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39337:8;39299:18;:25;39318:5;39299:25;;;;;;;;;;;;;;;:35;39325:8;39299:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39383:8;39361:41;;39376:5;39361:41;;;39393:8;39361:41;;;;;;:::i;:::-;;;;;;;;39095:315;;;:::o;34169:::-;34326:28;34336:4;34342:2;34346:7;34326:9;:28::i;:::-;34373:48;34396:4;34402:2;34406:7;34415:5;34373:22;:48::i;:::-;34365:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;34169:315;;;;:::o;51106:107::-;51166:13;51195:12;51188:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51106:107;:::o;4589:723::-;4645:13;4875:1;4866:5;:10;4862:53;;;4893:10;;;;;;;;;;;;;;;;;;;;;4862:53;4925:12;4940:5;4925:20;;4956:14;4981:78;4996:1;4988:4;:9;4981:78;;5014:8;;;;;:::i;:::-;;;;5045:2;5037:10;;;;;:::i;:::-;;;4981:78;;;5069:19;5101:6;5091:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5069:39;;5119:154;5135:1;5126:5;:10;5119:154;;5163:1;5153:11;;;;;:::i;:::-;;;5230:2;5222:5;:10;;;;:::i;:::-;5209:2;:24;;;;:::i;:::-;5196:39;;5179:6;5186;5179:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5259:2;5250:11;;;;;:::i;:::-;;;5119:154;;;5297:6;5283:21;;;;;4589:723;;;;:::o;35781:110::-;35857:26;35867:2;35871:7;35857:26;;;;;;;;;;;;:9;:26::i;:::-;35781:110;;:::o;20735:157::-;20820:4;20859:25;20844:40;;;:11;:40;;;;20837:47;;20735:157;;;:::o;44954:589::-;45098:45;45125:4;45131:2;45135:7;45098:26;:45::i;:::-;45176:1;45160:18;;:4;:18;;;45156:187;;;45195:40;45227:7;45195:31;:40::i;:::-;45156:187;;;45265:2;45257:10;;:4;:10;;;45253:90;;45284:47;45317:4;45323:7;45284:32;:47::i;:::-;45253:90;45156:187;45371:1;45357:16;;:2;:16;;;45353:183;;;45390:45;45427:7;45390:36;:45::i;:::-;45353:183;;;45463:4;45457:10;;:2;:10;;;45453:83;;45484:40;45512:2;45516:7;45484:27;:40::i;:::-;45453:83;45353:183;44954:589;;;:::o;39975:799::-;40130:4;40151:15;:2;:13;;;:15::i;:::-;40147:620;;;40203:2;40187:36;;;40224:12;:10;:12::i;:::-;40238:4;40244:7;40253:5;40187:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40183:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40446:1;40429:6;:13;:18;40425:272;;;40472:60;;;;;;;;;;:::i;:::-;;;;;;;;40425:272;40647:6;40641:13;40632:6;40628:2;40624:15;40617:38;40183:529;40320:41;;;40310:51;;;:6;:51;;;;40303:58;;;;;40147:620;40751:4;40744:11;;39975:799;;;;;;;:::o;36118:321::-;36248:18;36254:2;36258:7;36248:5;:18::i;:::-;36299:54;36330:1;36334:2;36338:7;36347:5;36299:22;:54::i;:::-;36277:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;36118:321;;;:::o;46266:164::-;46370:10;:17;;;;46343:15;:24;46359:7;46343:24;;;;;;;;;;;:44;;;;46398:10;46414:7;46398:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46266:164;:::o;47057:988::-;47323:22;47373:1;47348:22;47365:4;47348:16;:22::i;:::-;:26;;;;:::i;:::-;47323:51;;47385:18;47406:17;:26;47424:7;47406:26;;;;;;;;;;;;47385:47;;47553:14;47539:10;:28;47535:328;;47584:19;47606:12;:18;47619:4;47606:18;;;;;;;;;;;;;;;:34;47625:14;47606:34;;;;;;;;;;;;47584:56;;47690:11;47657:12;:18;47670:4;47657:18;;;;;;;;;;;;;;;:30;47676:10;47657:30;;;;;;;;;;;:44;;;;47807:10;47774:17;:30;47792:11;47774:30;;;;;;;;;;;:43;;;;47569:294;47535:328;47959:17;:26;47977:7;47959:26;;;;;;;;;;;47952:33;;;48003:12;:18;48016:4;48003:18;;;;;;;;;;;;;;;:34;48022:14;48003:34;;;;;;;;;;;47996:41;;;47138:907;;47057:988;;:::o;48340:1079::-;48593:22;48638:1;48618:10;:17;;;;:21;;;;:::i;:::-;48593:46;;48650:18;48671:15;:24;48687:7;48671:24;;;;;;;;;;;;48650:45;;49022:19;49044:10;49055:14;49044:26;;;;;;;;:::i;:::-;;;;;;;;;;49022:48;;49108:11;49083:10;49094;49083:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;49219:10;49188:15;:28;49204:11;49188:28;;;;;;;;;;;:41;;;;49360:15;:24;49376:7;49360:24;;;;;;;;;;;49353:31;;;49395:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48411:1008;;;48340:1079;:::o;45844:221::-;45929:14;45946:20;45963:2;45946:16;:20::i;:::-;45929:37;;46004:7;45977:12;:16;45990:2;45977:16;;;;;;;;;;;;;;;:24;45994:6;45977:24;;;;;;;;;;;:34;;;;46051:6;46022:17;:26;46040:7;46022:26;;;;;;;;;;;:35;;;;45918:147;45844:221;;:::o;36775:382::-;36869:1;36855:16;;:2;:16;;;;36847:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36928:16;36936:7;36928;:16::i;:::-;36927:17;36919:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36990:45;37019:1;37023:2;37027:7;36990:20;:45::i;:::-;37065:1;37048:9;:13;37058:2;37048:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37096:2;37077:7;:16;37085:7;37077:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37141:7;37137:2;37116:33;;37133:1;37116:33;;;;;;;;;;;;36775:382;;:::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:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:116::-;5008:21;5023:5;5008:21;:::i;:::-;5001:5;4998:32;4988:60;;5044:1;5041;5034:12;4988:60;4938:116;:::o;5060:133::-;5103:5;5141:6;5128:20;5119:29;;5157:30;5181:5;5157:30;:::i;:::-;5060:133;;;;:::o;5199:323::-;5255:6;5304:2;5292:9;5283:7;5279:23;5275:32;5272:119;;;5310:79;;:::i;:::-;5272:119;5430:1;5455:50;5497:7;5488:6;5477:9;5473:22;5455:50;:::i;:::-;5445:60;;5401:114;5199:323;;;;:::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:117::-;6614:1;6611;6604:12;6628:117;6737:1;6734;6727:12;6751:180;6799:77;6796:1;6789:88;6896:4;6893:1;6886:15;6920:4;6917:1;6910:15;6937:281;7020:27;7042:4;7020:27;:::i;:::-;7012:6;7008:40;7150:6;7138:10;7135:22;7114:18;7102:10;7099:34;7096:62;7093:88;;;7161:18;;:::i;:::-;7093:88;7201:10;7197:2;7190:22;6980:238;6937:281;;:::o;7224:129::-;7258:6;7285:20;;:::i;:::-;7275:30;;7314:33;7342:4;7334:6;7314:33;:::i;:::-;7224:129;;;:::o;7359:308::-;7421:4;7511:18;7503:6;7500:30;7497:56;;;7533:18;;:::i;:::-;7497:56;7571:29;7593:6;7571:29;:::i;:::-;7563:37;;7655:4;7649;7645:15;7637:23;;7359:308;;;:::o;7673:154::-;7757:6;7752:3;7747;7734:30;7819:1;7810:6;7805:3;7801:16;7794:27;7673:154;;;:::o;7833:412::-;7911:5;7936:66;7952:49;7994:6;7952:49;:::i;:::-;7936:66;:::i;:::-;7927:75;;8025:6;8018:5;8011:21;8063:4;8056:5;8052:16;8101:3;8092:6;8087:3;8083:16;8080:25;8077:112;;;8108:79;;:::i;:::-;8077:112;8198:41;8232:6;8227:3;8222;8198:41;:::i;:::-;7917:328;7833:412;;;;;:::o;8265:340::-;8321:5;8370:3;8363:4;8355:6;8351:17;8347:27;8337:122;;8378:79;;:::i;:::-;8337:122;8495:6;8482:20;8520:79;8595:3;8587:6;8580:4;8572:6;8568:17;8520:79;:::i;:::-;8511:88;;8327:278;8265:340;;;;:::o;8611:509::-;8680:6;8729:2;8717:9;8708:7;8704:23;8700:32;8697:119;;;8735:79;;:::i;:::-;8697:119;8883:1;8872:9;8868:17;8855:31;8913:18;8905:6;8902:30;8899:117;;;8935:79;;:::i;:::-;8899:117;9040:63;9095:7;9086:6;9075:9;9071:22;9040:63;:::i;:::-;9030:73;;8826:287;8611:509;;;;:::o;9126:329::-;9185:6;9234:2;9222:9;9213:7;9209:23;9205:32;9202:119;;;9240:79;;:::i;:::-;9202:119;9360:1;9385:53;9430:7;9421:6;9410:9;9406:22;9385:53;:::i;:::-;9375:63;;9331:117;9126:329;;;;:::o;9461:468::-;9526:6;9534;9583:2;9571:9;9562:7;9558:23;9554:32;9551:119;;;9589:79;;:::i;:::-;9551:119;9709:1;9734:53;9779:7;9770:6;9759:9;9755:22;9734:53;:::i;:::-;9724:63;;9680:117;9836:2;9862:50;9904:7;9895:6;9884:9;9880:22;9862:50;:::i;:::-;9852:60;;9807:115;9461:468;;;;;:::o;9935:307::-;9996:4;10086:18;10078:6;10075:30;10072:56;;;10108:18;;:::i;:::-;10072:56;10146:29;10168:6;10146:29;:::i;:::-;10138:37;;10230:4;10224;10220:15;10212:23;;9935:307;;;:::o;10248:410::-;10325:5;10350:65;10366:48;10407:6;10366:48;:::i;:::-;10350:65;:::i;:::-;10341:74;;10438:6;10431:5;10424:21;10476:4;10469:5;10465:16;10514:3;10505:6;10500:3;10496:16;10493:25;10490:112;;;10521:79;;:::i;:::-;10490:112;10611:41;10645:6;10640:3;10635;10611:41;:::i;:::-;10331:327;10248:410;;;;;:::o;10677:338::-;10732:5;10781:3;10774:4;10766:6;10762:17;10758:27;10748:122;;10789:79;;:::i;:::-;10748:122;10906:6;10893:20;10931:78;11005:3;10997:6;10990:4;10982:6;10978:17;10931:78;:::i;:::-;10922:87;;10738:277;10677:338;;;;:::o;11021:943::-;11116:6;11124;11132;11140;11189:3;11177:9;11168:7;11164:23;11160:33;11157:120;;;11196:79;;:::i;:::-;11157:120;11316:1;11341:53;11386:7;11377:6;11366:9;11362:22;11341:53;:::i;:::-;11331:63;;11287:117;11443:2;11469:53;11514:7;11505:6;11494:9;11490:22;11469:53;:::i;:::-;11459:63;;11414:118;11571:2;11597:53;11642:7;11633:6;11622:9;11618:22;11597:53;:::i;:::-;11587:63;;11542:118;11727:2;11716:9;11712:18;11699:32;11758:18;11750:6;11747:30;11744:117;;;11780:79;;:::i;:::-;11744:117;11885:62;11939:7;11930:6;11919:9;11915:22;11885:62;:::i;:::-;11875:72;;11670:287;11021:943;;;;;;;:::o;11970:474::-;12038:6;12046;12095:2;12083:9;12074:7;12070:23;12066:32;12063:119;;;12101:79;;:::i;:::-;12063:119;12221:1;12246:53;12291:7;12282:6;12271:9;12267:22;12246:53;:::i;:::-;12236:63;;12192:117;12348:2;12374:53;12419:7;12410:6;12399:9;12395:22;12374:53;:::i;:::-;12364:63;;12319:118;11970:474;;;;;:::o;12450:180::-;12498:77;12495:1;12488:88;12595:4;12592:1;12585:15;12619:4;12616:1;12609:15;12636:320;12680:6;12717:1;12711:4;12707:12;12697:22;;12764:1;12758:4;12754:12;12785:18;12775:81;;12841:4;12833:6;12829:17;12819:27;;12775:81;12903:2;12895:6;12892:14;12872:18;12869:38;12866:84;;;12922:18;;:::i;:::-;12866:84;12687:269;12636:320;;;:::o;12962:231::-;13102:34;13098:1;13090:6;13086:14;13079:58;13171:14;13166:2;13158:6;13154:15;13147:39;12962:231;:::o;13199:366::-;13341:3;13362:67;13426:2;13421:3;13362:67;:::i;:::-;13355:74;;13438:93;13527:3;13438:93;:::i;:::-;13556:2;13551:3;13547:12;13540:19;;13199:366;;;:::o;13571:419::-;13737:4;13775:2;13764:9;13760:18;13752:26;;13824:9;13818:4;13814:20;13810:1;13799:9;13795:17;13788:47;13852:131;13978:4;13852:131;:::i;:::-;13844:139;;13571:419;;;:::o;13996:220::-;14136:34;14132:1;14124:6;14120:14;14113:58;14205:3;14200:2;14192:6;14188:15;14181:28;13996:220;:::o;14222:366::-;14364:3;14385:67;14449:2;14444:3;14385:67;:::i;:::-;14378:74;;14461:93;14550:3;14461:93;:::i;:::-;14579:2;14574:3;14570:12;14563:19;;14222:366;;;:::o;14594:419::-;14760:4;14798:2;14787:9;14783:18;14775:26;;14847:9;14841:4;14837:20;14833:1;14822:9;14818:17;14811:47;14875:131;15001:4;14875:131;:::i;:::-;14867:139;;14594:419;;;:::o;15019:243::-;15159:34;15155:1;15147:6;15143:14;15136:58;15228:26;15223:2;15215:6;15211:15;15204:51;15019:243;:::o;15268:366::-;15410:3;15431:67;15495:2;15490:3;15431:67;:::i;:::-;15424:74;;15507:93;15596:3;15507:93;:::i;:::-;15625:2;15620:3;15616:12;15609:19;;15268:366;;;:::o;15640:419::-;15806:4;15844:2;15833:9;15829:18;15821:26;;15893:9;15887:4;15883:20;15879:1;15868:9;15864:17;15857:47;15921:131;16047:4;15921:131;:::i;:::-;15913:139;;15640:419;;;:::o;16065:182::-;16205:34;16201:1;16193:6;16189:14;16182:58;16065:182;:::o;16253:366::-;16395:3;16416:67;16480:2;16475:3;16416:67;:::i;:::-;16409:74;;16492:93;16581:3;16492:93;:::i;:::-;16610:2;16605:3;16601:12;16594:19;;16253:366;;;:::o;16625:419::-;16791:4;16829:2;16818:9;16814:18;16806:26;;16878:9;16872:4;16868:20;16864:1;16853:9;16849:17;16842:47;16906:131;17032:4;16906:131;:::i;:::-;16898:139;;16625:419;;;:::o;17050:180::-;17098:77;17095:1;17088:88;17195:4;17192:1;17185:15;17219:4;17216:1;17209:15;17236:348;17276:7;17299:20;17317:1;17299:20;:::i;:::-;17294:25;;17333:20;17351:1;17333:20;:::i;:::-;17328:25;;17521:1;17453:66;17449:74;17446:1;17443:81;17438:1;17431:9;17424:17;17420:105;17417:131;;;17528:18;;:::i;:::-;17417:131;17576:1;17573;17569:9;17558:20;;17236:348;;;;:::o;17590:180::-;17638:77;17635:1;17628:88;17735:4;17732:1;17725:15;17759:4;17756:1;17749:15;17776:185;17816:1;17833:20;17851:1;17833:20;:::i;:::-;17828:25;;17867:20;17885:1;17867:20;:::i;:::-;17862:25;;17906:1;17896:35;;17911:18;;:::i;:::-;17896:35;17953:1;17950;17946:9;17941:14;;17776:185;;;;:::o;17967:236::-;18107:34;18103:1;18095:6;18091:14;18084:58;18176:19;18171:2;18163:6;18159:15;18152:44;17967:236;:::o;18209:366::-;18351:3;18372:67;18436:2;18431:3;18372:67;:::i;:::-;18365:74;;18448:93;18537:3;18448:93;:::i;:::-;18566:2;18561:3;18557:12;18550:19;;18209:366;;;:::o;18581:419::-;18747:4;18785:2;18774:9;18770:18;18762:26;;18834:9;18828:4;18824:20;18820:1;18809:9;18805:17;18798:47;18862:131;18988:4;18862:131;:::i;:::-;18854:139;;18581:419;;;:::o;19006:230::-;19146:34;19142:1;19134:6;19130:14;19123:58;19215:13;19210:2;19202:6;19198:15;19191:38;19006:230;:::o;19242:366::-;19384:3;19405:67;19469:2;19464:3;19405:67;:::i;:::-;19398:74;;19481:93;19570:3;19481:93;:::i;:::-;19599:2;19594:3;19590:12;19583:19;;19242:366;;;:::o;19614:419::-;19780:4;19818:2;19807:9;19803:18;19795:26;;19867:9;19861:4;19857:20;19853:1;19842:9;19838:17;19831:47;19895:131;20021:4;19895:131;:::i;:::-;19887:139;;19614:419;;;:::o;20039:231::-;20179:34;20175:1;20167:6;20163:14;20156:58;20248:14;20243:2;20235:6;20231:15;20224:39;20039:231;:::o;20276:366::-;20418:3;20439:67;20503:2;20498:3;20439:67;:::i;:::-;20432:74;;20515:93;20604:3;20515:93;:::i;:::-;20633:2;20628:3;20624:12;20617:19;;20276:366;;;:::o;20648:419::-;20814:4;20852:2;20841:9;20837:18;20829:26;;20901:9;20895:4;20891:20;20887:1;20876:9;20872:17;20865:47;20929:131;21055:4;20929:131;:::i;:::-;20921:139;;20648:419;;;:::o;21073:180::-;21121:77;21118:1;21111:88;21218:4;21215:1;21208:15;21242:4;21239:1;21232:15;21259:228;21399:34;21395:1;21387:6;21383:14;21376:58;21468:11;21463:2;21455:6;21451:15;21444:36;21259:228;:::o;21493:366::-;21635:3;21656:67;21720:2;21715:3;21656:67;:::i;:::-;21649:74;;21732:93;21821:3;21732:93;:::i;:::-;21850:2;21845:3;21841:12;21834:19;;21493:366;;;:::o;21865:419::-;22031:4;22069:2;22058:9;22054:18;22046:26;;22118:9;22112:4;22108:20;22104:1;22093:9;22089:17;22082:47;22146:131;22272:4;22146:131;:::i;:::-;22138:139;;21865:419;;;:::o;22290:229::-;22430:34;22426:1;22418:6;22414:14;22407:58;22499:12;22494:2;22486:6;22482:15;22475:37;22290:229;:::o;22525:366::-;22667:3;22688:67;22752:2;22747:3;22688:67;:::i;:::-;22681:74;;22764:93;22853:3;22764:93;:::i;:::-;22882:2;22877:3;22873:12;22866:19;;22525:366;;;:::o;22897:419::-;23063:4;23101:2;23090:9;23086:18;23078:26;;23150:9;23144:4;23140:20;23136:1;23125:9;23121:17;23114:47;23178:131;23304:4;23178:131;:::i;:::-;23170:139;;22897:419;;;:::o;23322:148::-;23424:11;23461:3;23446:18;;23322:148;;;;:::o;23476:377::-;23582:3;23610:39;23643:5;23610:39;:::i;:::-;23665:89;23747:6;23742:3;23665:89;:::i;:::-;23658:96;;23763:52;23808:6;23803:3;23796:4;23789:5;23785:16;23763:52;:::i;:::-;23840:6;23835:3;23831:16;23824:23;;23586:267;23476:377;;;;:::o;23859:435::-;24039:3;24061:95;24152:3;24143:6;24061:95;:::i;:::-;24054:102;;24173:95;24264:3;24255:6;24173:95;:::i;:::-;24166:102;;24285:3;24278:10;;23859:435;;;;;:::o;24300:181::-;24440:33;24436:1;24428:6;24424:14;24417:57;24300:181;:::o;24487:366::-;24629:3;24650:67;24714:2;24709:3;24650:67;:::i;:::-;24643:74;;24726:93;24815:3;24726:93;:::i;:::-;24844:2;24839:3;24835:12;24828:19;;24487:366;;;:::o;24859:419::-;25025:4;25063:2;25052:9;25048:18;25040:26;;25112:9;25106:4;25102:20;25098:1;25087:9;25083:17;25076:47;25140:131;25266:4;25140:131;:::i;:::-;25132:139;;24859:419;;;:::o;25284:179::-;25424:31;25420:1;25412:6;25408:14;25401:55;25284:179;:::o;25469:366::-;25611:3;25632:67;25696:2;25691:3;25632:67;:::i;:::-;25625:74;;25708:93;25797:3;25708:93;:::i;:::-;25826:2;25821:3;25817:12;25810:19;;25469:366;;;:::o;25841:419::-;26007:4;26045:2;26034:9;26030:18;26022:26;;26094:9;26088:4;26084:20;26080:1;26069:9;26065:17;26058:47;26122:131;26248:4;26122:131;:::i;:::-;26114:139;;25841:419;;;:::o;26266:182::-;26406:34;26402:1;26394:6;26390:14;26383:58;26266:182;:::o;26454:366::-;26596:3;26617:67;26681:2;26676:3;26617:67;:::i;:::-;26610:74;;26693:93;26782:3;26693:93;:::i;:::-;26811:2;26806:3;26802:12;26795:19;;26454:366;;;:::o;26826:419::-;26992:4;27030:2;27019:9;27015:18;27007:26;;27079:9;27073:4;27069:20;27065:1;27054:9;27050:17;27043:47;27107:131;27233:4;27107:131;:::i;:::-;27099:139;;26826:419;;;:::o;27251:305::-;27291:3;27310:20;27328:1;27310:20;:::i;:::-;27305:25;;27344:20;27362:1;27344:20;:::i;:::-;27339:25;;27498:1;27430:66;27426:74;27423:1;27420:81;27417:107;;;27504:18;;:::i;:::-;27417:107;27548:1;27545;27541:9;27534:16;;27251:305;;;;:::o;27562:169::-;27702:21;27698:1;27690:6;27686:14;27679:45;27562:169;:::o;27737:366::-;27879:3;27900:67;27964:2;27959:3;27900:67;:::i;:::-;27893:74;;27976:93;28065:3;27976:93;:::i;:::-;28094:2;28089:3;28085:12;28078:19;;27737:366;;;:::o;28109:419::-;28275:4;28313:2;28302:9;28298:18;28290:26;;28362:9;28356:4;28352:20;28348:1;28337:9;28333:17;28326:47;28390:131;28516:4;28390:131;:::i;:::-;28382:139;;28109:419;;;:::o;28534:178::-;28674:30;28670:1;28662:6;28658:14;28651:54;28534:178;:::o;28718:366::-;28860:3;28881:67;28945:2;28940:3;28881:67;:::i;:::-;28874:74;;28957:93;29046:3;28957:93;:::i;:::-;29075:2;29070:3;29066:12;29059:19;;28718:366;;;:::o;29090:419::-;29256:4;29294:2;29283:9;29279:18;29271:26;;29343:9;29337:4;29333:20;29329:1;29318:9;29314:17;29307:47;29371:131;29497:4;29371:131;:::i;:::-;29363:139;;29090:419;;;:::o;29515:168::-;29655:20;29651:1;29643:6;29639:14;29632:44;29515:168;:::o;29689:366::-;29831:3;29852:67;29916:2;29911:3;29852:67;:::i;:::-;29845:74;;29928:93;30017:3;29928:93;:::i;:::-;30046:2;30041:3;30037:12;30030:19;;29689:366;;;:::o;30061:419::-;30227:4;30265:2;30254:9;30250:18;30242:26;;30314:9;30308:4;30304:20;30300:1;30289:9;30285:17;30278:47;30342:131;30468:4;30342:131;:::i;:::-;30334:139;;30061:419;;;:::o;30486:233::-;30525:3;30548:24;30566:5;30548:24;:::i;:::-;30539:33;;30594:66;30587:5;30584:77;30581:103;;;30664:18;;:::i;:::-;30581:103;30711:1;30704:5;30700:13;30693:20;;30486:233;;;:::o;30725:225::-;30865:34;30861:1;30853:6;30849:14;30842:58;30934:8;30929:2;30921:6;30917:15;30910:33;30725:225;:::o;30956:366::-;31098:3;31119:67;31183:2;31178:3;31119:67;:::i;:::-;31112:74;;31195:93;31284:3;31195:93;:::i;:::-;31313:2;31308:3;31304:12;31297:19;;30956:366;;;:::o;31328:419::-;31494:4;31532:2;31521:9;31517:18;31509:26;;31581:9;31575:4;31571:20;31567:1;31556:9;31552:17;31545:47;31609:131;31735:4;31609:131;:::i;:::-;31601:139;;31328:419;;;:::o;31753:231::-;31893:34;31889:1;31881:6;31877:14;31870:58;31962:14;31957:2;31949:6;31945:15;31938:39;31753:231;:::o;31990:366::-;32132:3;32153:67;32217:2;32212:3;32153:67;:::i;:::-;32146:74;;32229:93;32318:3;32229:93;:::i;:::-;32347:2;32342:3;32338:12;32331:19;;31990:366;;;:::o;32362:419::-;32528:4;32566:2;32555:9;32551:18;32543:26;;32615:9;32609:4;32605:20;32601:1;32590:9;32586:17;32579:47;32643:131;32769:4;32643:131;:::i;:::-;32635:139;;32362:419;;;:::o;32787:228::-;32927:34;32923:1;32915:6;32911:14;32904:58;32996:11;32991:2;32983:6;32979:15;32972:36;32787:228;:::o;33021:366::-;33163:3;33184:67;33248:2;33243:3;33184:67;:::i;:::-;33177:74;;33260:93;33349:3;33260:93;:::i;:::-;33378:2;33373:3;33369:12;33362:19;;33021:366;;;:::o;33393:419::-;33559:4;33597:2;33586:9;33582:18;33574:26;;33646:9;33640:4;33636:20;33632:1;33621:9;33617:17;33610:47;33674:131;33800:4;33674:131;:::i;:::-;33666:139;;33393:419;;;:::o;33818:223::-;33958:34;33954:1;33946:6;33942:14;33935:58;34027:6;34022:2;34014:6;34010:15;34003:31;33818:223;:::o;34047:366::-;34189:3;34210:67;34274:2;34269:3;34210:67;:::i;:::-;34203:74;;34286:93;34375:3;34286:93;:::i;:::-;34404:2;34399:3;34395:12;34388:19;;34047:366;;;:::o;34419:419::-;34585:4;34623:2;34612:9;34608:18;34600:26;;34672:9;34666:4;34662:20;34658:1;34647:9;34643:17;34636:47;34700:131;34826:4;34700:131;:::i;:::-;34692:139;;34419:419;;;:::o;34844:191::-;34884:4;34904:20;34922:1;34904:20;:::i;:::-;34899:25;;34938:20;34956:1;34938:20;:::i;:::-;34933:25;;34977:1;34974;34971:8;34968:34;;;34982:18;;:::i;:::-;34968:34;35027:1;35024;35020:9;35012:17;;34844:191;;;;:::o;35041:175::-;35181:27;35177:1;35169:6;35165:14;35158:51;35041:175;:::o;35222:366::-;35364:3;35385:67;35449:2;35444:3;35385:67;:::i;:::-;35378:74;;35461:93;35550:3;35461:93;:::i;:::-;35579:2;35574:3;35570:12;35563:19;;35222:366;;;:::o;35594:419::-;35760:4;35798:2;35787:9;35783:18;35775:26;;35847:9;35841:4;35837:20;35833:1;35822:9;35818:17;35811:47;35875:131;36001:4;35875:131;:::i;:::-;35867:139;;35594:419;;;:::o;36019:237::-;36159:34;36155:1;36147:6;36143:14;36136:58;36228:20;36223:2;36215:6;36211:15;36204:45;36019:237;:::o;36262:366::-;36404:3;36425:67;36489:2;36484:3;36425:67;:::i;:::-;36418:74;;36501:93;36590:3;36501:93;:::i;:::-;36619:2;36614:3;36610:12;36603:19;;36262:366;;;:::o;36634:419::-;36800:4;36838:2;36827:9;36823:18;36815:26;;36887:9;36881:4;36877:20;36873:1;36862:9;36858:17;36851:47;36915:131;37041:4;36915:131;:::i;:::-;36907:139;;36634:419;;;:::o;37059:176::-;37091:1;37108:20;37126:1;37108:20;:::i;:::-;37103:25;;37142:20;37160:1;37142:20;:::i;:::-;37137:25;;37181:1;37171:35;;37186:18;;:::i;:::-;37171:35;37227:1;37224;37220:9;37215:14;;37059:176;;;;:::o;37241:98::-;37292:6;37326:5;37320:12;37310:22;;37241:98;;;:::o;37345:168::-;37428:11;37462:6;37457:3;37450:19;37502:4;37497:3;37493:14;37478:29;;37345:168;;;;:::o;37519:360::-;37605:3;37633:38;37665:5;37633:38;:::i;:::-;37687:70;37750:6;37745:3;37687:70;:::i;:::-;37680:77;;37766:52;37811:6;37806:3;37799:4;37792:5;37788:16;37766:52;:::i;:::-;37843:29;37865:6;37843:29;:::i;:::-;37838:3;37834:39;37827:46;;37609:270;37519:360;;;;:::o;37885:640::-;38080:4;38118:3;38107:9;38103:19;38095:27;;38132:71;38200:1;38189:9;38185:17;38176:6;38132:71;:::i;:::-;38213:72;38281:2;38270:9;38266:18;38257:6;38213:72;:::i;:::-;38295;38363:2;38352:9;38348:18;38339:6;38295:72;:::i;:::-;38414:9;38408:4;38404:20;38399:2;38388:9;38384:18;38377:48;38442:76;38513:4;38504:6;38442:76;:::i;:::-;38434:84;;37885:640;;;;;;;:::o;38531:141::-;38587:5;38618:6;38612:13;38603:22;;38634:32;38660:5;38634:32;:::i;:::-;38531:141;;;;:::o;38678:349::-;38747:6;38796:2;38784:9;38775:7;38771:23;38767:32;38764:119;;;38802:79;;:::i;:::-;38764:119;38922:1;38947:63;39002:7;38993:6;38982:9;38978:22;38947:63;:::i;:::-;38937:73;;38893:127;38678:349;;;;:::o;39033:180::-;39081:77;39078:1;39071:88;39178:4;39175:1;39168:15;39202:4;39199:1;39192:15;39219:182;39359:34;39355:1;39347:6;39343:14;39336:58;39219:182;:::o;39407:366::-;39549:3;39570:67;39634:2;39629:3;39570:67;:::i;:::-;39563:74;;39646:93;39735:3;39646:93;:::i;:::-;39764:2;39759:3;39755:12;39748:19;;39407:366;;;:::o;39779:419::-;39945:4;39983:2;39972:9;39968:18;39960:26;;40032:9;40026:4;40022:20;40018:1;40007:9;40003:17;39996:47;40060:131;40186:4;40060:131;:::i;:::-;40052:139;;39779:419;;;:::o;40204:178::-;40344:30;40340:1;40332:6;40328:14;40321:54;40204:178;:::o;40388:366::-;40530:3;40551:67;40615:2;40610:3;40551:67;:::i;:::-;40544:74;;40627:93;40716:3;40627:93;:::i;:::-;40745:2;40740:3;40736:12;40729:19;;40388:366;;;:::o;40760:419::-;40926:4;40964:2;40953:9;40949:18;40941:26;;41013:9;41007:4;41003:20;40999:1;40988:9;40984:17;40977:47;41041:131;41167:4;41041:131;:::i;:::-;41033:139;;40760:419;;;:::o
Swarm Source
ipfs://0deb9f7422f703e09313463cc151c6355f6db7be14bc68c92fb4fe8456742590
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.