Contract
0xc9b45da95b0545f3c675950a7d422b33f9d44a2d
18
Contract Overview
Balance:
0 ETH
ETH Value:
$0.00
My Name Tag:
Not Available
TokenTracker:
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
DroEats
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2022-05-14 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/DroEats.sol pragma solidity >=0.7.0 <0.9.0; contract DroEats is ERC721Enumerable, Ownable { using Strings for uint256; mapping(address => bool) nftOwner; modifier notOwner(address o) { require(nftOwner[o] == false, "DE: You can mint only one"); _; } string baseURI; string public baseExtension = ".json"; uint256 public MAX_SUPPLY = 3500; uint256 public TEAM_TREASURY = 500; bool public paused = true; bool public treasuryClaimed = false; constructor( string memory _name, string memory _symbol, string memory _initBaseURI) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function mint() public notOwner(msg.sender) { uint256 supply = totalSupply(); require(!paused, "DE: Contract is paused"); if(!treasuryClaimed) { require(supply < MAX_SUPPLY - TEAM_TREASURY, "DE: Public mint supply exceded, remaining tokens are reserved for the team"); } else require(supply < MAX_SUPPLY, "DE: Mint supply exceded"); _safeMint(msg.sender, supply); nftOwner[msg.sender] = true; } function claimTeamTreasury () public onlyOwner { uint256 supply = totalSupply(); require(!paused, "DE: Contract is paused"); for(uint i=0; i<TEAM_TREASURY; i++) { _safeMint(msg.sender, supply + i); } nftOwner[msg.sender] = true; treasuryClaimed = true; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } }
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEAM_TREASURY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimTeamTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d908051906020019062000051929190620002da565b50610dac600e556101f4600f556001601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff021916908315150217905550348015620000a157600080fd5b506040516200460c3803806200460c8339818101604052810190620000c7919062000408565b82828160009080519060200190620000e1929190620002da565b508060019080519060200190620000fa929190620002da565b5050506200011d620001116200013760201b60201c565b6200013f60201b60201c565b6200012e816200020560201b60201c565b505050620006c8565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002156200013760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200023b620002b060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000294576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028b90620004e8565b60405180910390fd5b80600c9080519060200190620002ac929190620002da565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002e890620005b0565b90600052602060002090601f0160209004810192826200030c576000855562000358565b82601f106200032757805160ff191683800117855562000358565b8280016001018555821562000358579182015b82811115620003575782518255916020019190600101906200033a565b5b5090506200036791906200036b565b5090565b5b80821115620003865760008160009055506001016200036c565b5090565b6000620003a16200039b8462000533565b6200050a565b905082815260208101848484011115620003c057620003bf6200067f565b5b620003cd8482856200057a565b509392505050565b600082601f830112620003ed57620003ec6200067a565b5b8151620003ff8482602086016200038a565b91505092915050565b60008060006060848603121562000424576200042362000689565b5b600084015167ffffffffffffffff81111562000445576200044462000684565b5b6200045386828701620003d5565b935050602084015167ffffffffffffffff81111562000477576200047662000684565b5b6200048586828701620003d5565b925050604084015167ffffffffffffffff811115620004a957620004a862000684565b5b620004b786828701620003d5565b9150509250925092565b6000620004d060208362000569565b9150620004dd826200069f565b602082019050919050565b600060208201905081810360008301526200050381620004c1565b9050919050565b60006200051662000529565b9050620005248282620005e6565b919050565b6000604051905090565b600067ffffffffffffffff8211156200055157620005506200064b565b5b6200055c826200068e565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200059a5780820151818401526020810190506200057d565b83811115620005aa576000848401525b50505050565b60006002820490506001821680620005c957607f821691505b60208210811415620005e057620005df6200061c565b5b50919050565b620005f1826200068e565b810181811067ffffffffffffffff821117156200061357620006126200064b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b613f3480620006d86000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806355f804b311610104578063a22cb465116100a2578063d86ba1c511610071578063d86ba1c51461050a578063da3ef23f14610514578063e985e9c514610530578063f2fde38b14610560576101cf565b8063a22cb46514610484578063b88d4fde146104a0578063c6682862146104bc578063c87b56dd146104da576101cf565b806370a08231116100de57806370a082311461040e578063715018a61461043e5780638da5cb5b1461044857806395d89b4114610466576101cf565b806355f804b3146103a45780635c975abb146103c05780636352211e146103de576101cf565b806318160ddd1161017157806332cb6b0c1161014b57806332cb6b0c1461031c578063416aab491461033a57806342842e0e146103585780634f6ccce714610374576101cf565b806318160ddd146102b257806323b872dd146102d05780632f745c59146102ec576101cf565b8063081812fc116101ad578063081812fc1461023e578063095ea7b31461026e5780631249c58b1461028a578063134a194414610294576101cf565b806301ffc9a7146101d457806302329a291461020457806306fdde0314610220575b600080fd5b6101ee60048036038101906101e99190612b7f565b61057c565b6040516101fb9190613138565b60405180910390f35b61021e60048036038101906102199190612b52565b6105f6565b005b61022861068f565b6040516102359190613153565b60405180910390f35b61025860048036038101906102539190612c22565b610721565b60405161026591906130d1565b60405180910390f35b61028860048036038101906102839190612b12565b6107a6565b005b6102926108be565b005b61029c610ac3565b6040516102a99190613435565b60405180910390f35b6102ba610ac9565b6040516102c79190613435565b60405180910390f35b6102ea60048036038101906102e591906129fc565b610ad6565b005b61030660048036038101906103019190612b12565b610b36565b6040516103139190613435565b60405180910390f35b610324610bdb565b6040516103319190613435565b60405180910390f35b610342610be1565b60405161034f9190613138565b60405180910390f35b610372600480360381019061036d91906129fc565b610bf4565b005b61038e60048036038101906103899190612c22565b610c14565b60405161039b9190613435565b60405180910390f35b6103be60048036038101906103b99190612bd9565b610c85565b005b6103c8610d1b565b6040516103d59190613138565b60405180910390f35b6103f860048036038101906103f39190612c22565b610d2e565b60405161040591906130d1565b60405180910390f35b6104286004803603810190610423919061298f565b610de0565b6040516104359190613435565b60405180910390f35b610446610e98565b005b610450610f20565b60405161045d91906130d1565b60405180910390f35b61046e610f4a565b60405161047b9190613153565b60405180910390f35b61049e60048036038101906104999190612ad2565b610fdc565b005b6104ba60048036038101906104b59190612a4f565b610ff2565b005b6104c4611054565b6040516104d19190613153565b60405180910390f35b6104f460048036038101906104ef9190612c22565b6110e2565b6040516105019190613153565b60405180910390f35b61051261118c565b005b61052e60048036038101906105299190612bd9565b611310565b005b61054a600480360381019061054591906129bc565b6113a6565b6040516105579190613138565b60405180910390f35b61057a6004803603810190610575919061298f565b61143a565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105ef57506105ee82611532565b5b9050919050565b6105fe611614565b73ffffffffffffffffffffffffffffffffffffffff1661061c610f20565b73ffffffffffffffffffffffffffffffffffffffff1614610672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066990613375565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b60606000805461069e906136a0565b80601f01602080910402602001604051908101604052809291908181526020018280546106ca906136a0565b80156107175780601f106106ec57610100808354040283529160200191610717565b820191906000526020600020905b8154815290600101906020018083116106fa57829003601f168201915b5050505050905090565b600061072c8261161c565b61076b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076290613335565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107b182610d2e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610822576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610819906133b5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610841611614565b73ffffffffffffffffffffffffffffffffffffffff161480610870575061086f8161086a611614565b6113a6565b5b6108af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a6906132b5565b60405180910390fd5b6108b98383611688565b505050565b3360001515600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094990613235565b60405180910390fd5b600061095c610ac9565b9050601060009054906101000a900460ff16156109ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a5906133d5565b60405180910390fd5b601060019054906101000a900460ff16610a1857600f54600e546109d291906135b6565b8110610a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0a90613355565b60405180910390fd5b610a5d565b600e548110610a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5390613175565b60405180910390fd5b5b610a673382611741565b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b6000600880549050905090565b610ae7610ae1611614565b8261175f565b610b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1d906133f5565b60405180910390fd5b610b3183838361183d565b505050565b6000610b4183610de0565b8210610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7990613195565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600e5481565b601060019054906101000a900460ff1681565b610c0f83838360405180602001604052806000815250610ff2565b505050565b6000610c1e610ac9565b8210610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5690613415565b60405180910390fd5b60088281548110610c7357610c72613839565b5b90600052602060002001549050919050565b610c8d611614565b73ffffffffffffffffffffffffffffffffffffffff16610cab610f20565b73ffffffffffffffffffffffffffffffffffffffff1614610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf890613375565b60405180910390fd5b80600c9080519060200190610d179291906127a3565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce906132f5565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e48906132d5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ea0611614565b73ffffffffffffffffffffffffffffffffffffffff16610ebe610f20565b73ffffffffffffffffffffffffffffffffffffffff1614610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b90613375565b60405180910390fd5b610f1e6000611aa4565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f59906136a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610f85906136a0565b8015610fd25780601f10610fa757610100808354040283529160200191610fd2565b820191906000526020600020905b815481529060010190602001808311610fb557829003601f168201915b5050505050905090565b610fee610fe7611614565b8383611b6a565b5050565b611003610ffd611614565b8361175f565b611042576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611039906133f5565b60405180910390fd5b61104e84848484611cd7565b50505050565b600d8054611061906136a0565b80601f016020809104026020016040519081016040528092919081815260200182805461108d906136a0565b80156110da5780601f106110af576101008083540402835291602001916110da565b820191906000526020600020905b8154815290600101906020018083116110bd57829003601f168201915b505050505081565b60606110ed8261161c565b61112c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112390613395565b60405180910390fd5b6000611136611d33565b905060008151116111565760405180602001604052806000815250611184565b8061116084611dc5565b600d604051602001611174939291906130a0565b6040516020818303038152906040525b915050919050565b611194611614565b73ffffffffffffffffffffffffffffffffffffffff166111b2610f20565b73ffffffffffffffffffffffffffffffffffffffff1614611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90613375565b60405180910390fd5b6000611212610ac9565b9050601060009054906101000a900460ff1615611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b906133d5565b60405180910390fd5b60005b600f5481101561129957611286338284611281919061352f565b611741565b808061129190613703565b915050611267565b506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff02191690831515021790555050565b611318611614565b73ffffffffffffffffffffffffffffffffffffffff16611336610f20565b73ffffffffffffffffffffffffffffffffffffffff161461138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138390613375565b60405180910390fd5b80600d90805190602001906113a29291906127a3565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611442611614565b73ffffffffffffffffffffffffffffffffffffffff16611460610f20565b73ffffffffffffffffffffffffffffffffffffffff16146114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90613375565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d906131d5565b60405180910390fd5b61152f81611aa4565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806115fd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061160d575061160c82611f26565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166116fb83610d2e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61175b828260405180602001604052806000815250611f90565b5050565b600061176a8261161c565b6117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090613295565b60405180910390fd5b60006117b483610d2e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806117f657506117f581856113a6565b5b8061183457508373ffffffffffffffffffffffffffffffffffffffff1661181c84610721565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661185d82610d2e565b73ffffffffffffffffffffffffffffffffffffffff16146118b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118aa906131f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90613255565b60405180910390fd5b61192e838383611feb565b611939600082611688565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461198991906135b6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e0919061352f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a9f8383836120ff565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd090613275565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cca9190613138565b60405180910390a3505050565b611ce284848461183d565b611cee84848484612104565b611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d24906131b5565b60405180910390fd5b50505050565b6060600c8054611d42906136a0565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6e906136a0565b8015611dbb5780601f10611d9057610100808354040283529160200191611dbb565b820191906000526020600020905b815481529060010190602001808311611d9e57829003601f168201915b5050505050905090565b60606000821415611e0d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f21565b600082905060005b60008214611e3f578080611e2890613703565b915050600a82611e389190613585565b9150611e15565b60008167ffffffffffffffff811115611e5b57611e5a613868565b5b6040519080825280601f01601f191660200182016040528015611e8d5781602001600182028036833780820191505090505b5090505b60008514611f1a57600182611ea691906135b6565b9150600a85611eb5919061374c565b6030611ec1919061352f565b60f81b818381518110611ed757611ed6613839565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f139190613585565b9450611e91565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611f9a838361229b565b611fa76000848484612104565b611fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdd906131b5565b60405180910390fd5b505050565b611ff6838383612475565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612039576120348161247a565b612078565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146120775761207683826124c3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120bb576120b681612630565b6120fa565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146120f9576120f88282612701565b5b5b505050565b505050565b60006121258473ffffffffffffffffffffffffffffffffffffffff16612780565b1561228e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261214e611614565b8786866040518563ffffffff1660e01b815260040161217094939291906130ec565b602060405180830381600087803b15801561218a57600080fd5b505af19250505080156121bb57506040513d601f19601f820116820180604052508101906121b89190612bac565b60015b61223e573d80600081146121eb576040519150601f19603f3d011682016040523d82523d6000602084013e6121f0565b606091505b50600081511415612236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222d906131b5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612293565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561230b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230290613315565b60405180910390fd5b6123148161161c565b15612354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234b90613215565b60405180910390fd5b61236060008383611feb565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123b0919061352f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612471600083836120ff565b5050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016124d084610de0565b6124da91906135b6565b90506000600760008481526020019081526020016000205490508181146125bf576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061264491906135b6565b905060006009600084815260200190815260200160002054905060006008838154811061267457612673613839565b5b90600052602060002001549050806008838154811061269657612695613839565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806126e5576126e461380a565b5b6001900381819060005260206000200160009055905550505050565b600061270c83610de0565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546127af906136a0565b90600052602060002090601f0160209004810192826127d15760008555612818565b82601f106127ea57805160ff1916838001178555612818565b82800160010185558215612818579182015b828111156128175782518255916020019190600101906127fc565b5b5090506128259190612829565b5090565b5b8082111561284257600081600090555060010161282a565b5090565b600061285961285484613475565b613450565b9050828152602081018484840111156128755761287461389c565b5b61288084828561365e565b509392505050565b600061289b612896846134a6565b613450565b9050828152602081018484840111156128b7576128b661389c565b5b6128c284828561365e565b509392505050565b6000813590506128d981613ea2565b92915050565b6000813590506128ee81613eb9565b92915050565b60008135905061290381613ed0565b92915050565b60008151905061291881613ed0565b92915050565b600082601f83011261293357612932613897565b5b8135612943848260208601612846565b91505092915050565b600082601f83011261296157612960613897565b5b8135612971848260208601612888565b91505092915050565b60008135905061298981613ee7565b92915050565b6000602082840312156129a5576129a46138a6565b5b60006129b3848285016128ca565b91505092915050565b600080604083850312156129d3576129d26138a6565b5b60006129e1858286016128ca565b92505060206129f2858286016128ca565b9150509250929050565b600080600060608486031215612a1557612a146138a6565b5b6000612a23868287016128ca565b9350506020612a34868287016128ca565b9250506040612a458682870161297a565b9150509250925092565b60008060008060808587031215612a6957612a686138a6565b5b6000612a77878288016128ca565b9450506020612a88878288016128ca565b9350506040612a998782880161297a565b925050606085013567ffffffffffffffff811115612aba57612ab96138a1565b5b612ac68782880161291e565b91505092959194509250565b60008060408385031215612ae957612ae86138a6565b5b6000612af7858286016128ca565b9250506020612b08858286016128df565b9150509250929050565b60008060408385031215612b2957612b286138a6565b5b6000612b37858286016128ca565b9250506020612b488582860161297a565b9150509250929050565b600060208284031215612b6857612b676138a6565b5b6000612b76848285016128df565b91505092915050565b600060208284031215612b9557612b946138a6565b5b6000612ba3848285016128f4565b91505092915050565b600060208284031215612bc257612bc16138a6565b5b6000612bd084828501612909565b91505092915050565b600060208284031215612bef57612bee6138a6565b5b600082013567ffffffffffffffff811115612c0d57612c0c6138a1565b5b612c198482850161294c565b91505092915050565b600060208284031215612c3857612c376138a6565b5b6000612c468482850161297a565b91505092915050565b612c58816135ea565b82525050565b612c67816135fc565b82525050565b6000612c78826134ec565b612c828185613502565b9350612c9281856020860161366d565b612c9b816138ab565b840191505092915050565b6000612cb1826134f7565b612cbb8185613513565b9350612ccb81856020860161366d565b612cd4816138ab565b840191505092915050565b6000612cea826134f7565b612cf48185613524565b9350612d0481856020860161366d565b80840191505092915050565b60008154612d1d816136a0565b612d278186613524565b94506001821660008114612d425760018114612d5357612d86565b60ff19831686528186019350612d86565b612d5c856134d7565b60005b83811015612d7e57815481890152600182019150602081019050612d5f565b838801955050505b50505092915050565b6000612d9c601783613513565b9150612da7826138bc565b602082019050919050565b6000612dbf602b83613513565b9150612dca826138e5565b604082019050919050565b6000612de2603283613513565b9150612ded82613934565b604082019050919050565b6000612e05602683613513565b9150612e1082613983565b604082019050919050565b6000612e28602583613513565b9150612e33826139d2565b604082019050919050565b6000612e4b601c83613513565b9150612e5682613a21565b602082019050919050565b6000612e6e601983613513565b9150612e7982613a4a565b602082019050919050565b6000612e91602483613513565b9150612e9c82613a73565b604082019050919050565b6000612eb4601983613513565b9150612ebf82613ac2565b602082019050919050565b6000612ed7602c83613513565b9150612ee282613aeb565b604082019050919050565b6000612efa603883613513565b9150612f0582613b3a565b604082019050919050565b6000612f1d602a83613513565b9150612f2882613b89565b604082019050919050565b6000612f40602983613513565b9150612f4b82613bd8565b604082019050919050565b6000612f63602083613513565b9150612f6e82613c27565b602082019050919050565b6000612f86602c83613513565b9150612f9182613c50565b604082019050919050565b6000612fa9604a83613513565b9150612fb482613c9f565b606082019050919050565b6000612fcc602083613513565b9150612fd782613d14565b602082019050919050565b6000612fef602f83613513565b9150612ffa82613d3d565b604082019050919050565b6000613012602183613513565b915061301d82613d8c565b604082019050919050565b6000613035601683613513565b915061304082613ddb565b602082019050919050565b6000613058603183613513565b915061306382613e04565b604082019050919050565b600061307b602c83613513565b915061308682613e53565b604082019050919050565b61309a81613654565b82525050565b60006130ac8286612cdf565b91506130b88285612cdf565b91506130c48284612d10565b9150819050949350505050565b60006020820190506130e66000830184612c4f565b92915050565b60006080820190506131016000830187612c4f565b61310e6020830186612c4f565b61311b6040830185613091565b818103606083015261312d8184612c6d565b905095945050505050565b600060208201905061314d6000830184612c5e565b92915050565b6000602082019050818103600083015261316d8184612ca6565b905092915050565b6000602082019050818103600083015261318e81612d8f565b9050919050565b600060208201905081810360008301526131ae81612db2565b9050919050565b600060208201905081810360008301526131ce81612dd5565b9050919050565b600060208201905081810360008301526131ee81612df8565b9050919050565b6000602082019050818103600083015261320e81612e1b565b9050919050565b6000602082019050818103600083015261322e81612e3e565b9050919050565b6000602082019050818103600083015261324e81612e61565b9050919050565b6000602082019050818103600083015261326e81612e84565b9050919050565b6000602082019050818103600083015261328e81612ea7565b9050919050565b600060208201905081810360008301526132ae81612eca565b9050919050565b600060208201905081810360008301526132ce81612eed565b9050919050565b600060208201905081810360008301526132ee81612f10565b9050919050565b6000602082019050818103600083015261330e81612f33565b9050919050565b6000602082019050818103600083015261332e81612f56565b9050919050565b6000602082019050818103600083015261334e81612f79565b9050919050565b6000602082019050818103600083015261336e81612f9c565b9050919050565b6000602082019050818103600083015261338e81612fbf565b9050919050565b600060208201905081810360008301526133ae81612fe2565b9050919050565b600060208201905081810360008301526133ce81613005565b9050919050565b600060208201905081810360008301526133ee81613028565b9050919050565b6000602082019050818103600083015261340e8161304b565b9050919050565b6000602082019050818103600083015261342e8161306e565b9050919050565b600060208201905061344a6000830184613091565b92915050565b600061345a61346b565b905061346682826136d2565b919050565b6000604051905090565b600067ffffffffffffffff8211156134905761348f613868565b5b613499826138ab565b9050602081019050919050565b600067ffffffffffffffff8211156134c1576134c0613868565b5b6134ca826138ab565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061353a82613654565b915061354583613654565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561357a5761357961377d565b5b828201905092915050565b600061359082613654565b915061359b83613654565b9250826135ab576135aa6137ac565b5b828204905092915050565b60006135c182613654565b91506135cc83613654565b9250828210156135df576135de61377d565b5b828203905092915050565b60006135f582613634565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561368b578082015181840152602081019050613670565b8381111561369a576000848401525b50505050565b600060028204905060018216806136b857607f821691505b602082108114156136cc576136cb6137db565b5b50919050565b6136db826138ab565b810181811067ffffffffffffffff821117156136fa576136f9613868565b5b80604052505050565b600061370e82613654565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137415761374061377d565b5b600182019050919050565b600061375782613654565b915061376283613654565b925082613772576137716137ac565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f44453a204d696e7420737570706c792065786365646564000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f44453a20596f752063616e206d696e74206f6e6c79206f6e6500000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f44453a205075626c6963206d696e7420737570706c7920657863656465642c2060008201527f72656d61696e696e6720746f6b656e732061726520726573657276656420666f60208201527f7220746865207465616d00000000000000000000000000000000000000000000604082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f44453a20436f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b613eab816135ea565b8114613eb657600080fd5b50565b613ec2816135fc565b8114613ecd57600080fd5b50565b613ed981613608565b8114613ee457600080fd5b50565b613ef081613654565b8114613efb57600080fd5b5056fea264697066735822122098ce66a4c4b6f441da921964870b197e0434d058b0d61acf7349919c37980ec164736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000744726f4561747300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000444524f45000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d61593154557a66316b516a34733547335743616b79654658717a66526964696f6a544d35543465376d7a4d6d2f00000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000744726f4561747300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000444524f45000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d61593154557a66316b516a34733547335743616b79654658717a66526964696f6a544d35543465376d7a4d6d2f00000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): DroEats
Arg [1] : _symbol (string): DROE
Arg [2] : _initBaseURI (string): ipfs://QmaY1TUzf1kQj4s5G3WCakyeFXqzfRidiojTM5T4e7mzMm/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 44726f4561747300000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 44524f4500000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d61593154557a66316b516a34733547335743616b796546
Arg [9] : 58717a66526964696f6a544d35543465376d7a4d6d2f00000000000000000000
Deployed ByteCode Sourcemap
45580:2208:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39353:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47709:73;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26172:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27732:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27255:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46307:447;;;:::i;:::-;;45922:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39993:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28482:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39661:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45885:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45991:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28892:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40183:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47475:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45961:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25866:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25596:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;:::i;:::-;;4079:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26341:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28025:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29148:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45843:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47069:399;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46761:301;;;:::i;:::-;;47580:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28251:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4988:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39353:224;39455:4;39494:35;39479:50;;;:11;:50;;;;:90;;;;39533:36;39557:11;39533:23;:36::i;:::-;39479:90;39472:97;;39353:224;;;:::o;47709:73::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47770:6:::1;47761;;:15;;;;;;;;;;;;;;;;;;47709:73:::0;:::o;26172:100::-;26226:13;26259:5;26252:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26172:100;:::o;27732:221::-;27808:7;27836:16;27844:7;27836;:16::i;:::-;27828:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27921:15;:24;27937:7;27921:24;;;;;;;;;;;;;;;;;;;;;27914:31;;27732:221;;;:::o;27255:411::-;27336:13;27352:23;27367:7;27352:14;:23::i;:::-;27336:39;;27400:5;27394:11;;:2;:11;;;;27386:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27494:5;27478:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27503:37;27520:5;27527:12;:10;:12::i;:::-;27503:16;:37::i;:::-;27478:62;27456:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27637:21;27646:2;27650:7;27637:8;:21::i;:::-;27325:341;27255:411;;:::o;46307:447::-;46339:10;45766:5;45751:20;;:8;:11;45760:1;45751:11;;;;;;;;;;;;;;;;;;;;;;;;;:20;;;45743:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;46361:14:::1;46378:13;:11;:13::i;:::-;46361:30;;46407:6;;;;;;;;;;;46406:7;46398:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;46451:15;;;;;;;;;;;46447:231;;46512:13;;46499:10;;:26;;;;:::i;:::-;46490:6;:35;46482:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;46447:231;;;46640:10;;46631:6;:19;46623:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;46447:231;46685:29;46695:10;46707:6;46685:9;:29::i;:::-;46744:4;46721:8;:20;46730:10;46721:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;46354:400;46307:447:::0;:::o;45922:34::-;;;;:::o;39993:113::-;40054:7;40081:10;:17;;;;40074:24;;39993:113;:::o;28482:339::-;28677:41;28696:12;:10;:12::i;:::-;28710:7;28677:18;:41::i;:::-;28669:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28785:28;28795:4;28801:2;28805:7;28785:9;:28::i;:::-;28482:339;;;:::o;39661:256::-;39758:7;39794:23;39811:5;39794:16;:23::i;:::-;39786:5;:31;39778:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39883:12;:19;39896:5;39883:19;;;;;;;;;;;;;;;:26;39903:5;39883:26;;;;;;;;;;;;39876:33;;39661:256;;;;:::o;45885:32::-;;;;:::o;45991:35::-;;;;;;;;;;;;;:::o;28892:185::-;29030:39;29047:4;29053:2;29057:7;29030:39;;;;;;;;;;;;:16;:39::i;:::-;28892:185;;;:::o;40183:233::-;40258:7;40294:30;:28;:30::i;:::-;40286:5;:38;40278:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40391:10;40402:5;40391:17;;;;;;;;:::i;:::-;;;;;;;;;;40384:24;;40183:233;;;:::o;47475:98::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47556:11:::1;47546:7;:21;;;;;;;;;;;;:::i;:::-;;47475:98:::0;:::o;45961:25::-;;;;;;;;;;;;;:::o;25866:239::-;25938:7;25958:13;25974:7;:16;25982:7;25974:16;;;;;;;;;;;;;;;;;;;;;25958:32;;26026:1;26009:19;;:5;:19;;;;26001:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26092:5;26085:12;;;25866:239;;;:::o;25596:208::-;25668:7;25713:1;25696:19;;:5;:19;;;;25688:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25780:9;:16;25790:5;25780:16;;;;;;;;;;;;;;;;25773:23;;25596:208;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;26341:104::-;26397:13;26430:7;26423:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26341:104;:::o;28025:155::-;28120:52;28139:12;:10;:12::i;:::-;28153:8;28163;28120:18;:52::i;:::-;28025:155;;:::o;29148:328::-;29323:41;29342:12;:10;:12::i;:::-;29356:7;29323:18;:41::i;:::-;29315:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29429:39;29443:4;29449:2;29453:7;29462:5;29429:13;:39::i;:::-;29148:328;;;;:::o;45843:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47069:399::-;47142:13;47183:16;47191:7;47183;:16::i;:::-;47167:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;47274:28;47305:10;:8;:10::i;:::-;47274:41;;47360:1;47335:14;47329:28;:32;:133;;;;;;;;;;;;;;;;;47397:14;47413:18;:7;:16;:18::i;:::-;47433:13;47380:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47329:133;47322:140;;;47069:399;;;:::o;46761:301::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46815:14:::1;46832:13;:11;:13::i;:::-;46815:30;;46861:6;;;;;;;;;;;46860:7;46852:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;46905:6;46901:93;46917:13;;46915:1;:15;46901:93;;;46953:33;46963:10;46984:1;46975:6;:10;;;;:::i;:::-;46953:9;:33::i;:::-;46932:3;;;;;:::i;:::-;;;;46901:93;;;;47023:4;47000:8;:20;47009:10;47000:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;47052:4;47034:15;;:22;;;;;;;;;;;;;;;;;;46808:254;46761:301::o:0;47580:122::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47679:17:::1;47663:13;:33;;;;;;;;;;;;:::i;:::-;;47580:122:::0;:::o;28251:164::-;28348:4;28372:18;:25;28391:5;28372:25;;;;;;;;;;;;;;;:35;28398:8;28372:35;;;;;;;;;;;;;;;;;;;;;;;;;28365:42;;28251:164;;;;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;25227:305::-;25329:4;25381:25;25366:40;;;:11;:40;;;;:105;;;;25438:33;25423:48;;;:11;:48;;;;25366:105;:158;;;;25488:36;25512:11;25488:23;:36::i;:::-;25366:158;25346:178;;25227:305;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;30986:127::-;31051:4;31103:1;31075:30;;:7;:16;31083:7;31075:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31068:37;;30986:127;;;:::o;35132:174::-;35234:2;35207:15;:24;35223:7;35207:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35290:7;35286:2;35252:46;;35261:23;35276:7;35261:14;:23::i;:::-;35252:46;;;;;;;;;;;;35132:174;;:::o;31970:110::-;32046:26;32056:2;32060:7;32046:26;;;;;;;;;;;;:9;:26::i;:::-;31970:110;;:::o;31280:348::-;31373:4;31398:16;31406:7;31398;:16::i;:::-;31390:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31474:13;31490:23;31505:7;31490:14;:23::i;:::-;31474:39;;31543:5;31532:16;;:7;:16;;;:52;;;;31552:32;31569:5;31576:7;31552:16;:32::i;:::-;31532:52;:87;;;;31612:7;31588:31;;:20;31600:7;31588:11;:20::i;:::-;:31;;;31532:87;31524:96;;;31280:348;;;;:::o;34389:625::-;34548:4;34521:31;;:23;34536:7;34521:14;:23::i;:::-;:31;;;34513:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34627:1;34613:16;;:2;:16;;;;34605:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34683:39;34704:4;34710:2;34714:7;34683:20;:39::i;:::-;34787:29;34804:1;34808:7;34787:8;:29::i;:::-;34848:1;34829:9;:15;34839:4;34829:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34877:1;34860:9;:13;34870:2;34860:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34908:2;34889:7;:16;34897:7;34889:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34947:7;34943:2;34928:27;;34937:4;34928:27;;;;;;;;;;;;34968:38;34988:4;34994:2;34998:7;34968:19;:38::i;:::-;34389:625;;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;35448:315::-;35603:8;35594:17;;:5;:17;;;;35586:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35690:8;35652:18;:25;35671:5;35652:25;;;;;;;;;;;;;;;:35;35678:8;35652:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35736:8;35714:41;;35729:5;35714:41;;;35746:8;35714:41;;;;;;:::i;:::-;;;;;;;;35448:315;;;:::o;30358:::-;30515:28;30525:4;30531:2;30535:7;30515:9;:28::i;:::-;30562:48;30585:4;30591:2;30595:7;30604:5;30562:22;:48::i;:::-;30554:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30358:315;;;;:::o;46194:106::-;46254:13;46287:7;46280:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46194:106;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;16886:157::-;16971:4;17010:25;16995:40;;;:11;:40;;;;16988:47;;16886:157;;;:::o;32307:321::-;32437:18;32443:2;32447:7;32437:5;:18::i;:::-;32488:54;32519:1;32523:2;32527:7;32536:5;32488:22;:54::i;:::-;32466:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32307:321;;;:::o;41029:589::-;41173:45;41200:4;41206:2;41210:7;41173:26;:45::i;:::-;41251:1;41235:18;;:4;:18;;;41231:187;;;41270:40;41302:7;41270:31;:40::i;:::-;41231:187;;;41340:2;41332:10;;:4;:10;;;41328:90;;41359:47;41392:4;41398:7;41359:32;:47::i;:::-;41328:90;41231:187;41446:1;41432:16;;:2;:16;;;41428:183;;;41465:45;41502:7;41465:36;:45::i;:::-;41428:183;;;41538:4;41532:10;;:2;:10;;;41528:83;;41559:40;41587:2;41591:7;41559:27;:40::i;:::-;41528:83;41428:183;41029:589;;;:::o;38210:125::-;;;;:::o;36328:799::-;36483:4;36504:15;:2;:13;;;:15::i;:::-;36500:620;;;36556:2;36540:36;;;36577:12;:10;:12::i;:::-;36591:4;36597:7;36606:5;36540:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36536:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36799:1;36782:6;:13;:18;36778:272;;;36825:60;;;;;;;;;;:::i;:::-;;;;;;;;36778:272;37000:6;36994:13;36985:6;36981:2;36977:15;36970:38;36536:529;36673:41;;;36663:51;;;:6;:51;;;;36656:58;;;;;36500:620;37104:4;37097:11;;36328:799;;;;;;;:::o;32964:439::-;33058:1;33044:16;;:2;:16;;;;33036:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33117:16;33125:7;33117;:16::i;:::-;33116:17;33108:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33179:45;33208:1;33212:2;33216:7;33179:20;:45::i;:::-;33254:1;33237:9;:13;33247:2;33237:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33285:2;33266:7;:16;33274:7;33266:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33330:7;33326:2;33305:33;;33322:1;33305:33;;;;;;;;;;;;33351:44;33379:1;33383:2;33387:7;33351:19;:44::i;:::-;32964:439;;:::o;37699:126::-;;;;:::o;42341:164::-;42445:10;:17;;;;42418:15;:24;42434:7;42418:24;;;;;;;;;;;:44;;;;42473:10;42489:7;42473:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42341:164;:::o;43132:988::-;43398:22;43448:1;43423:22;43440:4;43423:16;:22::i;:::-;:26;;;;:::i;:::-;43398:51;;43460:18;43481:17;:26;43499:7;43481:26;;;;;;;;;;;;43460:47;;43628:14;43614:10;:28;43610:328;;43659:19;43681:12;:18;43694:4;43681:18;;;;;;;;;;;;;;;:34;43700:14;43681:34;;;;;;;;;;;;43659:56;;43765:11;43732:12;:18;43745:4;43732:18;;;;;;;;;;;;;;;:30;43751:10;43732:30;;;;;;;;;;;:44;;;;43882:10;43849:17;:30;43867:11;43849:30;;;;;;;;;;;:43;;;;43644:294;43610:328;44034:17;:26;44052:7;44034:26;;;;;;;;;;;44027:33;;;44078:12;:18;44091:4;44078:18;;;;;;;;;;;;;;;:34;44097:14;44078:34;;;;;;;;;;;44071:41;;;43213:907;;43132:988;;:::o;44415:1079::-;44668:22;44713:1;44693:10;:17;;;;:21;;;;:::i;:::-;44668:46;;44725:18;44746:15;:24;44762:7;44746:24;;;;;;;;;;;;44725:45;;45097:19;45119:10;45130:14;45119:26;;;;;;;;:::i;:::-;;;;;;;;;;45097:48;;45183:11;45158:10;45169;45158:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45294:10;45263:15;:28;45279:11;45263:28;;;;;;;;;;;:41;;;;45435:15;:24;45451:7;45435:24;;;;;;;;;;;45428:31;;;45470:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44486:1008;;;44415:1079;:::o;41919:221::-;42004:14;42021:20;42038:2;42021:16;:20::i;:::-;42004:37;;42079:7;42052:12;:16;42065:2;42052:16;;;;;;;;;;;;;;;:24;42069:6;42052:24;;;;;;;;;;;:34;;;;42126:6;42097:17;:26;42115:7;42097:26;;;;;;;;;;;:35;;;;41993:147;41919:221;;:::o;6780:326::-;6840:4;7097:1;7075:7;:19;;;:23;7068:30;;6780:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:118::-;7574:24;7592:5;7574:24;:::i;:::-;7569:3;7562:37;7487:118;;:::o;7611:109::-;7692:21;7707:5;7692:21;:::i;:::-;7687:3;7680:34;7611:109;;:::o;7726:360::-;7812:3;7840:38;7872:5;7840:38;:::i;:::-;7894:70;7957:6;7952:3;7894:70;:::i;:::-;7887:77;;7973:52;8018:6;8013:3;8006:4;7999:5;7995:16;7973:52;:::i;:::-;8050:29;8072:6;8050:29;:::i;:::-;8045:3;8041:39;8034:46;;7816:270;7726:360;;;;:::o;8092:364::-;8180:3;8208:39;8241:5;8208:39;:::i;:::-;8263:71;8327:6;8322:3;8263:71;:::i;:::-;8256:78;;8343:52;8388:6;8383:3;8376:4;8369:5;8365:16;8343:52;:::i;:::-;8420:29;8442:6;8420:29;:::i;:::-;8415:3;8411:39;8404:46;;8184:272;8092:364;;;;:::o;8462:377::-;8568:3;8596:39;8629:5;8596:39;:::i;:::-;8651:89;8733:6;8728:3;8651:89;:::i;:::-;8644:96;;8749:52;8794:6;8789:3;8782:4;8775:5;8771:16;8749:52;:::i;:::-;8826:6;8821:3;8817:16;8810:23;;8572:267;8462:377;;;;:::o;8869:845::-;8972:3;9009:5;9003:12;9038:36;9064:9;9038:36;:::i;:::-;9090:89;9172:6;9167:3;9090:89;:::i;:::-;9083:96;;9210:1;9199:9;9195:17;9226:1;9221:137;;;;9372:1;9367:341;;;;9188:520;;9221:137;9305:4;9301:9;9290;9286:25;9281:3;9274:38;9341:6;9336:3;9332:16;9325:23;;9221:137;;9367:341;9434:38;9466:5;9434:38;:::i;:::-;9494:1;9508:154;9522:6;9519:1;9516:13;9508:154;;;9596:7;9590:14;9586:1;9581:3;9577:11;9570:35;9646:1;9637:7;9633:15;9622:26;;9544:4;9541:1;9537:12;9532:17;;9508:154;;;9691:6;9686:3;9682:16;9675:23;;9374:334;;9188:520;;8976:738;;8869:845;;;;:::o;9720:366::-;9862:3;9883:67;9947:2;9942:3;9883:67;:::i;:::-;9876:74;;9959:93;10048:3;9959:93;:::i;:::-;10077:2;10072:3;10068:12;10061:19;;9720:366;;;:::o;10092:::-;10234:3;10255:67;10319:2;10314:3;10255:67;:::i;:::-;10248:74;;10331:93;10420:3;10331:93;:::i;:::-;10449:2;10444:3;10440:12;10433:19;;10092:366;;;:::o;10464:::-;10606:3;10627:67;10691:2;10686:3;10627:67;:::i;:::-;10620:74;;10703:93;10792:3;10703:93;:::i;:::-;10821:2;10816:3;10812:12;10805:19;;10464:366;;;:::o;10836:::-;10978:3;10999:67;11063:2;11058:3;10999:67;:::i;:::-;10992:74;;11075:93;11164:3;11075:93;:::i;:::-;11193:2;11188:3;11184:12;11177:19;;10836:366;;;:::o;11208:::-;11350:3;11371:67;11435:2;11430:3;11371:67;:::i;:::-;11364:74;;11447:93;11536:3;11447:93;:::i;:::-;11565:2;11560:3;11556:12;11549:19;;11208:366;;;:::o;11580:::-;11722:3;11743:67;11807:2;11802:3;11743:67;:::i;:::-;11736:74;;11819:93;11908:3;11819:93;:::i;:::-;11937:2;11932:3;11928:12;11921:19;;11580:366;;;:::o;11952:::-;12094:3;12115:67;12179:2;12174:3;12115:67;:::i;:::-;12108:74;;12191:93;12280:3;12191:93;:::i;:::-;12309:2;12304:3;12300:12;12293:19;;11952:366;;;:::o;12324:::-;12466:3;12487:67;12551:2;12546:3;12487:67;:::i;:::-;12480:74;;12563:93;12652:3;12563:93;:::i;:::-;12681:2;12676:3;12672:12;12665:19;;12324:366;;;:::o;12696:::-;12838:3;12859:67;12923:2;12918:3;12859:67;:::i;:::-;12852:74;;12935:93;13024:3;12935:93;:::i;:::-;13053:2;13048:3;13044:12;13037:19;;12696:366;;;:::o;13068:::-;13210:3;13231:67;13295:2;13290:3;13231:67;:::i;:::-;13224:74;;13307:93;13396:3;13307:93;:::i;:::-;13425:2;13420:3;13416:12;13409:19;;13068:366;;;:::o;13440:::-;13582:3;13603:67;13667:2;13662:3;13603:67;:::i;:::-;13596:74;;13679:93;13768:3;13679:93;:::i;:::-;13797:2;13792:3;13788:12;13781:19;;13440:366;;;:::o;13812:::-;13954:3;13975:67;14039:2;14034:3;13975:67;:::i;:::-;13968:74;;14051:93;14140:3;14051:93;:::i;:::-;14169:2;14164:3;14160:12;14153:19;;13812:366;;;:::o;14184:::-;14326:3;14347:67;14411:2;14406:3;14347:67;:::i;:::-;14340:74;;14423:93;14512:3;14423:93;:::i;:::-;14541:2;14536:3;14532:12;14525:19;;14184:366;;;:::o;14556:::-;14698:3;14719:67;14783:2;14778:3;14719:67;:::i;:::-;14712:74;;14795:93;14884:3;14795:93;:::i;:::-;14913:2;14908:3;14904:12;14897:19;;14556:366;;;:::o;14928:::-;15070:3;15091:67;15155:2;15150:3;15091:67;:::i;:::-;15084:74;;15167:93;15256:3;15167:93;:::i;:::-;15285:2;15280:3;15276:12;15269:19;;14928:366;;;:::o;15300:::-;15442:3;15463:67;15527:2;15522:3;15463:67;:::i;:::-;15456:74;;15539:93;15628:3;15539:93;:::i;:::-;15657:2;15652:3;15648:12;15641:19;;15300:366;;;:::o;15672:::-;15814:3;15835:67;15899:2;15894:3;15835:67;:::i;:::-;15828:74;;15911:93;16000:3;15911:93;:::i;:::-;16029:2;16024:3;16020:12;16013:19;;15672:366;;;:::o;16044:::-;16186:3;16207:67;16271:2;16266:3;16207:67;:::i;:::-;16200:74;;16283:93;16372:3;16283:93;:::i;:::-;16401:2;16396:3;16392:12;16385:19;;16044:366;;;:::o;16416:::-;16558:3;16579:67;16643:2;16638:3;16579:67;:::i;:::-;16572:74;;16655:93;16744:3;16655:93;:::i;:::-;16773:2;16768:3;16764:12;16757:19;;16416:366;;;:::o;16788:::-;16930:3;16951:67;17015:2;17010:3;16951:67;:::i;:::-;16944:74;;17027:93;17116:3;17027:93;:::i;:::-;17145:2;17140:3;17136:12;17129:19;;16788:366;;;:::o;17160:::-;17302:3;17323:67;17387:2;17382:3;17323:67;:::i;:::-;17316:74;;17399:93;17488:3;17399:93;:::i;:::-;17517:2;17512:3;17508:12;17501:19;;17160:366;;;:::o;17532:::-;17674:3;17695:67;17759:2;17754:3;17695:67;:::i;:::-;17688:74;;17771:93;17860:3;17771:93;:::i;:::-;17889:2;17884:3;17880:12;17873:19;;17532:366;;;:::o;17904:118::-;17991:24;18009:5;17991:24;:::i;:::-;17986:3;17979:37;17904:118;;:::o;18028:589::-;18253:3;18275:95;18366:3;18357:6;18275:95;:::i;:::-;18268:102;;18387:95;18478:3;18469:6;18387:95;:::i;:::-;18380:102;;18499:92;18587:3;18578:6;18499:92;:::i;:::-;18492:99;;18608:3;18601:10;;18028:589;;;;;;:::o;18623:222::-;18716:4;18754:2;18743:9;18739:18;18731:26;;18767:71;18835:1;18824:9;18820:17;18811:6;18767:71;:::i;:::-;18623:222;;;;:::o;18851:640::-;19046:4;19084:3;19073:9;19069:19;19061:27;;19098:71;19166:1;19155:9;19151:17;19142:6;19098:71;:::i;:::-;19179:72;19247:2;19236:9;19232:18;19223:6;19179:72;:::i;:::-;19261;19329:2;19318:9;19314:18;19305:6;19261:72;:::i;:::-;19380:9;19374:4;19370:20;19365:2;19354:9;19350:18;19343:48;19408:76;19479:4;19470:6;19408:76;:::i;:::-;19400:84;;18851:640;;;;;;;:::o;19497:210::-;19584:4;19622:2;19611:9;19607:18;19599:26;;19635:65;19697:1;19686:9;19682:17;19673:6;19635:65;:::i;:::-;19497:210;;;;:::o;19713:313::-;19826:4;19864:2;19853:9;19849:18;19841:26;;19913:9;19907:4;19903:20;19899:1;19888:9;19884:17;19877:47;19941:78;20014:4;20005:6;19941:78;:::i;:::-;19933:86;;19713:313;;;;:::o;20032:419::-;20198:4;20236:2;20225:9;20221:18;20213:26;;20285:9;20279:4;20275:20;20271:1;20260:9;20256:17;20249:47;20313:131;20439:4;20313:131;:::i;:::-;20305:139;;20032:419;;;:::o;20457:::-;20623:4;20661:2;20650:9;20646:18;20638:26;;20710:9;20704:4;20700:20;20696:1;20685:9;20681:17;20674:47;20738:131;20864:4;20738:131;:::i;:::-;20730:139;;20457:419;;;:::o;20882:::-;21048:4;21086:2;21075:9;21071:18;21063:26;;21135:9;21129:4;21125:20;21121:1;21110:9;21106:17;21099:47;21163:131;21289:4;21163:131;:::i;:::-;21155:139;;20882:419;;;:::o;21307:::-;21473:4;21511:2;21500:9;21496:18;21488:26;;21560:9;21554:4;21550:20;21546:1;21535:9;21531:17;21524:47;21588:131;21714:4;21588:131;:::i;:::-;21580:139;;21307:419;;;:::o;21732:::-;21898:4;21936:2;21925:9;21921:18;21913:26;;21985:9;21979:4;21975:20;21971:1;21960:9;21956:17;21949:47;22013:131;22139:4;22013:131;:::i;:::-;22005:139;;21732:419;;;:::o;22157:::-;22323:4;22361:2;22350:9;22346:18;22338:26;;22410:9;22404:4;22400:20;22396:1;22385:9;22381:17;22374:47;22438:131;22564:4;22438:131;:::i;:::-;22430:139;;22157:419;;;:::o;22582:::-;22748:4;22786:2;22775:9;22771:18;22763:26;;22835:9;22829:4;22825:20;22821:1;22810:9;22806:17;22799:47;22863:131;22989:4;22863:131;:::i;:::-;22855:139;;22582:419;;;:::o;23007:::-;23173:4;23211:2;23200:9;23196:18;23188:26;;23260:9;23254:4;23250:20;23246:1;23235:9;23231:17;23224:47;23288:131;23414:4;23288:131;:::i;:::-;23280:139;;23007:419;;;:::o;23432:::-;23598:4;23636:2;23625:9;23621:18;23613:26;;23685:9;23679:4;23675:20;23671:1;23660:9;23656:17;23649:47;23713:131;23839:4;23713:131;:::i;:::-;23705:139;;23432:419;;;:::o;23857:::-;24023:4;24061:2;24050:9;24046:18;24038:26;;24110:9;24104:4;24100:20;24096:1;24085:9;24081:17;24074:47;24138:131;24264:4;24138:131;:::i;:::-;24130:139;;23857:419;;;:::o;24282:::-;24448:4;24486:2;24475:9;24471:18;24463:26;;24535:9;24529:4;24525:20;24521:1;24510:9;24506:17;24499:47;24563:131;24689:4;24563:131;:::i;:::-;24555:139;;24282:419;;;:::o;24707:::-;24873:4;24911:2;24900:9;24896:18;24888:26;;24960:9;24954:4;24950:20;24946:1;24935:9;24931:17;24924:47;24988:131;25114:4;24988:131;:::i;:::-;24980:139;;24707:419;;;:::o;25132:::-;25298:4;25336:2;25325:9;25321:18;25313:26;;25385:9;25379:4;25375:20;25371:1;25360:9;25356:17;25349:47;25413:131;25539:4;25413:131;:::i;:::-;25405:139;;25132:419;;;:::o;25557:::-;25723:4;25761:2;25750:9;25746:18;25738:26;;25810:9;25804:4;25800:20;25796:1;25785:9;25781:17;25774:47;25838:131;25964:4;25838:131;:::i;:::-;25830:139;;25557:419;;;:::o;25982:::-;26148:4;26186:2;26175:9;26171:18;26163:26;;26235:9;26229:4;26225:20;26221:1;26210:9;26206:17;26199:47;26263:131;26389:4;26263:131;:::i;:::-;26255:139;;25982:419;;;:::o;26407:::-;26573:4;26611:2;26600:9;26596:18;26588:26;;26660:9;26654:4;26650:20;26646:1;26635:9;26631:17;26624:47;26688:131;26814:4;26688:131;:::i;:::-;26680:139;;26407:419;;;:::o;26832:::-;26998:4;27036:2;27025:9;27021:18;27013:26;;27085:9;27079:4;27075:20;27071:1;27060:9;27056:17;27049:47;27113:131;27239:4;27113:131;:::i;:::-;27105:139;;26832:419;;;:::o;27257:::-;27423:4;27461:2;27450:9;27446:18;27438:26;;27510:9;27504:4;27500:20;27496:1;27485:9;27481:17;27474:47;27538:131;27664:4;27538:131;:::i;:::-;27530:139;;27257:419;;;:::o;27682:::-;27848:4;27886:2;27875:9;27871:18;27863:26;;27935:9;27929:4;27925:20;27921:1;27910:9;27906:17;27899:47;27963:131;28089:4;27963:131;:::i;:::-;27955:139;;27682:419;;;:::o;28107:::-;28273:4;28311:2;28300:9;28296:18;28288:26;;28360:9;28354:4;28350:20;28346:1;28335:9;28331:17;28324:47;28388:131;28514:4;28388:131;:::i;:::-;28380:139;;28107:419;;;:::o;28532:::-;28698:4;28736:2;28725:9;28721:18;28713:26;;28785:9;28779:4;28775:20;28771:1;28760:9;28756:17;28749:47;28813:131;28939:4;28813:131;:::i;:::-;28805:139;;28532:419;;;:::o;28957:::-;29123:4;29161:2;29150:9;29146:18;29138:26;;29210:9;29204:4;29200:20;29196:1;29185:9;29181:17;29174:47;29238:131;29364:4;29238:131;:::i;:::-;29230:139;;28957:419;;;:::o;29382:222::-;29475:4;29513:2;29502:9;29498:18;29490:26;;29526:71;29594:1;29583:9;29579:17;29570:6;29526:71;:::i;:::-;29382:222;;;;:::o;29610:129::-;29644:6;29671:20;;:::i;:::-;29661:30;;29700:33;29728:4;29720:6;29700:33;:::i;:::-;29610:129;;;:::o;29745:75::-;29778:6;29811:2;29805:9;29795:19;;29745:75;:::o;29826:307::-;29887:4;29977:18;29969:6;29966:30;29963:56;;;29999:18;;:::i;:::-;29963:56;30037:29;30059:6;30037:29;:::i;:::-;30029:37;;30121:4;30115;30111:15;30103:23;;29826:307;;;:::o;30139:308::-;30201:4;30291:18;30283:6;30280:30;30277:56;;;30313:18;;:::i;:::-;30277:56;30351:29;30373:6;30351:29;:::i;:::-;30343:37;;30435:4;30429;30425:15;30417:23;;30139:308;;;:::o;30453:141::-;30502:4;30525:3;30517:11;;30548:3;30545:1;30538:14;30582:4;30579:1;30569:18;30561:26;;30453:141;;;:::o;30600:98::-;30651:6;30685:5;30679:12;30669:22;;30600:98;;;:::o;30704:99::-;30756:6;30790:5;30784:12;30774:22;;30704:99;;;:::o;30809:168::-;30892:11;30926:6;30921:3;30914:19;30966:4;30961:3;30957:14;30942:29;;30809:168;;;;:::o;30983:169::-;31067:11;31101:6;31096:3;31089:19;31141:4;31136:3;31132:14;31117:29;;30983:169;;;;:::o;31158:148::-;31260:11;31297:3;31282:18;;31158:148;;;;:::o;31312:305::-;31352:3;31371:20;31389:1;31371:20;:::i;:::-;31366:25;;31405:20;31423:1;31405:20;:::i;:::-;31400:25;;31559:1;31491:66;31487:74;31484:1;31481:81;31478:107;;;31565:18;;:::i;:::-;31478:107;31609:1;31606;31602:9;31595:16;;31312:305;;;;:::o;31623:185::-;31663:1;31680:20;31698:1;31680:20;:::i;:::-;31675:25;;31714:20;31732:1;31714:20;:::i;:::-;31709:25;;31753:1;31743:35;;31758:18;;:::i;:::-;31743:35;31800:1;31797;31793:9;31788:14;;31623:185;;;;:::o;31814:191::-;31854:4;31874:20;31892:1;31874:20;:::i;:::-;31869:25;;31908:20;31926:1;31908:20;:::i;:::-;31903:25;;31947:1;31944;31941:8;31938:34;;;31952:18;;:::i;:::-;31938:34;31997:1;31994;31990:9;31982:17;;31814:191;;;;:::o;32011:96::-;32048:7;32077:24;32095:5;32077:24;:::i;:::-;32066:35;;32011:96;;;:::o;32113:90::-;32147:7;32190:5;32183:13;32176:21;32165:32;;32113:90;;;:::o;32209:149::-;32245:7;32285:66;32278:5;32274:78;32263:89;;32209:149;;;:::o;32364:126::-;32401:7;32441:42;32434:5;32430:54;32419:65;;32364:126;;;:::o;32496:77::-;32533:7;32562:5;32551:16;;32496:77;;;:::o;32579:154::-;32663:6;32658:3;32653;32640:30;32725:1;32716:6;32711:3;32707:16;32700:27;32579:154;;;:::o;32739:307::-;32807:1;32817:113;32831:6;32828:1;32825:13;32817:113;;;32916:1;32911:3;32907:11;32901:18;32897:1;32892:3;32888:11;32881:39;32853:2;32850:1;32846:10;32841:15;;32817:113;;;32948:6;32945:1;32942:13;32939:101;;;33028:1;33019:6;33014:3;33010:16;33003:27;32939:101;32788:258;32739:307;;;:::o;33052:320::-;33096:6;33133:1;33127:4;33123:12;33113:22;;33180:1;33174:4;33170:12;33201:18;33191:81;;33257:4;33249:6;33245:17;33235:27;;33191:81;33319:2;33311:6;33308:14;33288:18;33285:38;33282:84;;;33338:18;;:::i;:::-;33282:84;33103:269;33052:320;;;:::o;33378:281::-;33461:27;33483:4;33461:27;:::i;:::-;33453:6;33449:40;33591:6;33579:10;33576:22;33555:18;33543:10;33540:34;33537:62;33534:88;;;33602:18;;:::i;:::-;33534:88;33642:10;33638:2;33631:22;33421:238;33378:281;;:::o;33665:233::-;33704:3;33727:24;33745:5;33727:24;:::i;:::-;33718:33;;33773:66;33766:5;33763:77;33760:103;;;33843:18;;:::i;:::-;33760:103;33890:1;33883:5;33879:13;33872:20;;33665:233;;;:::o;33904:176::-;33936:1;33953:20;33971:1;33953:20;:::i;:::-;33948:25;;33987:20;34005:1;33987:20;:::i;:::-;33982:25;;34026:1;34016:35;;34031:18;;:::i;:::-;34016:35;34072:1;34069;34065:9;34060:14;;33904:176;;;;:::o;34086:180::-;34134:77;34131:1;34124:88;34231:4;34228:1;34221:15;34255:4;34252:1;34245:15;34272:180;34320:77;34317:1;34310:88;34417:4;34414:1;34407:15;34441:4;34438:1;34431:15;34458:180;34506:77;34503:1;34496:88;34603:4;34600:1;34593:15;34627:4;34624:1;34617:15;34644:180;34692:77;34689:1;34682:88;34789:4;34786:1;34779:15;34813:4;34810:1;34803:15;34830:180;34878:77;34875:1;34868:88;34975:4;34972:1;34965:15;34999:4;34996:1;34989:15;35016:180;35064:77;35061:1;35054:88;35161:4;35158:1;35151:15;35185:4;35182:1;35175:15;35202:117;35311:1;35308;35301:12;35325:117;35434:1;35431;35424:12;35448:117;35557:1;35554;35547:12;35571:117;35680:1;35677;35670:12;35694:102;35735:6;35786:2;35782:7;35777:2;35770:5;35766:14;35762:28;35752:38;;35694:102;;;:::o;35802:173::-;35942:25;35938:1;35930:6;35926:14;35919:49;35802:173;:::o;35981:230::-;36121:34;36117:1;36109:6;36105:14;36098:58;36190:13;36185:2;36177:6;36173:15;36166:38;35981:230;:::o;36217:237::-;36357:34;36353:1;36345:6;36341:14;36334:58;36426:20;36421:2;36413:6;36409:15;36402:45;36217:237;:::o;36460:225::-;36600:34;36596:1;36588:6;36584:14;36577:58;36669:8;36664:2;36656:6;36652:15;36645:33;36460:225;:::o;36691:224::-;36831:34;36827:1;36819:6;36815:14;36808:58;36900:7;36895:2;36887:6;36883:15;36876:32;36691:224;:::o;36921:178::-;37061:30;37057:1;37049:6;37045:14;37038:54;36921:178;:::o;37105:175::-;37245:27;37241:1;37233:6;37229:14;37222:51;37105:175;:::o;37286:223::-;37426:34;37422:1;37414:6;37410:14;37403:58;37495:6;37490:2;37482:6;37478:15;37471:31;37286:223;:::o;37515:175::-;37655:27;37651:1;37643:6;37639:14;37632:51;37515:175;:::o;37696:231::-;37836:34;37832:1;37824:6;37820:14;37813:58;37905:14;37900:2;37892:6;37888:15;37881:39;37696:231;:::o;37933:243::-;38073:34;38069:1;38061:6;38057:14;38050:58;38142:26;38137:2;38129:6;38125:15;38118:51;37933:243;:::o;38182:229::-;38322:34;38318:1;38310:6;38306:14;38299:58;38391:12;38386:2;38378:6;38374:15;38367:37;38182:229;:::o;38417:228::-;38557:34;38553:1;38545:6;38541:14;38534:58;38626:11;38621:2;38613:6;38609:15;38602:36;38417:228;:::o;38651:182::-;38791:34;38787:1;38779:6;38775:14;38768:58;38651:182;:::o;38839:231::-;38979:34;38975:1;38967:6;38963:14;38956:58;39048:14;39043:2;39035:6;39031:15;39024:39;38839:231;:::o;39076:298::-;39216:34;39212:1;39204:6;39200:14;39193:58;39285:34;39280:2;39272:6;39268:15;39261:59;39354:12;39349:2;39341:6;39337:15;39330:37;39076:298;:::o;39380:182::-;39520:34;39516:1;39508:6;39504:14;39497:58;39380:182;:::o;39568:234::-;39708:34;39704:1;39696:6;39692:14;39685:58;39777:17;39772:2;39764:6;39760:15;39753:42;39568:234;:::o;39808:220::-;39948:34;39944:1;39936:6;39932:14;39925:58;40017:3;40012:2;40004:6;40000:15;39993:28;39808:220;:::o;40034:172::-;40174:24;40170:1;40162:6;40158:14;40151:48;40034:172;:::o;40212:236::-;40352:34;40348:1;40340:6;40336:14;40329:58;40421:19;40416:2;40408:6;40404:15;40397:44;40212:236;:::o;40454:231::-;40594:34;40590:1;40582:6;40578:14;40571:58;40663:14;40658:2;40650:6;40646:15;40639:39;40454:231;:::o;40691:122::-;40764:24;40782:5;40764:24;:::i;:::-;40757:5;40754:35;40744:63;;40803:1;40800;40793:12;40744:63;40691:122;:::o;40819:116::-;40889:21;40904:5;40889:21;:::i;:::-;40882:5;40879:32;40869:60;;40925:1;40922;40915:12;40869:60;40819:116;:::o;40941:120::-;41013:23;41030:5;41013:23;:::i;:::-;41006:5;41003:34;40993:62;;41051:1;41048;41041:12;40993:62;40941:120;:::o;41067:122::-;41140:24;41158:5;41140:24;:::i;:::-;41133:5;41130:35;41120:63;;41179:1;41176;41169:12;41120:63;41067:122;:::o
Metadata Hash
98ce66a4c4b6f441da921964870b197e0434d058b0d61acf7349919c37980ec1
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.