ERC-721
NFT
Overview
Max Total Supply
1,000 FDD
Holders
218
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
2 FDDLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
FDDealerz
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-05-09 */ //SPDX-License-Identifier: MIT /** *Submitted for verification at FtmScan.com on 2021-10-11 */ // File: @openzeppelin/contracts/utils/Context.sol pragma solidity >=0.6.0 <0.8.8; /* * @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 GSN 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 payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // 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/access/Ownable.sol pragma solidity >=0.6.0 <0.8.8; /** * @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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // 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); } } // 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); } // OpenZeppelin Contracts v4.4.1 (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); } // 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); } // 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; } } // OpenZeppelin Contracts v4.4.1 (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); } // OpenZeppelin Contracts (last updated v4.5.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 {} } // 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); } // 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(); } } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721URIStorage.sol) pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return _tokenURI; } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } //Written by Tritonn in 2021/2022 //A nifty algorithm for setting up a pool of possible numbers, and selecting them pseudo-randomly //Each number in the pool is only ever used once, and the order is not predetermined /* Integrate this by having your contract extend this (ex: "contract Util is ClampedRandomizer {}") and instantiating an instance in it's constructor (ex: "constructor(uint256 size) ClampedRandomizer(size)"). The generated results will range from 0-size, and can be acquired by calling _genClampedNonce() in your contract. */ contract ClampedRandomizer { uint256 private _scopeIndex = 0; //Clamping cache for random TokenID generation in the anti-sniping algo uint256 private immutable _scopeCap; //Size of initial randomized number pool & max generated value (zero indexed) mapping(uint256 => uint256) _swappedIDs; //TokenID cache for random TokenID generation in the anti-sniping algo constructor(uint256 scopeCap) { _scopeCap = scopeCap; } function _genClampedNonce() virtual public returns(uint256) { uint256 scope = _scopeCap-_scopeIndex; uint256 swap; uint256 result; uint256 i = randomNumber() % scope; //Setup the value to swap in for the selected number if (_swappedIDs[scope-1] == 0){ swap = scope-1; } else { swap = _swappedIDs[scope-1]; } //Select a random number, swap it out with an unselected one then shorten the selection range by 1 if (_swappedIDs[i] == 0){ result = i; _swappedIDs[i] = swap; } else { result = _swappedIDs[i]; _swappedIDs[i] = swap; } _scopeIndex++; return result; } function randomNumber() internal view returns(uint256){ return uint256(keccak256(abi.encodePacked(block.difficulty, block.timestamp))); } } /** * @title CustomizeableERC721 contract * @dev Extends ERC721 Non-Fungible Token Standard basic implementation */ contract FDDealerz is ERC721, ERC721Enumerable, ERC721URIStorage, Ownable { address private _nftBuilder; //The public key of the NFT building/handling backend. Private key must be securely stored by the app string private _baseURIExtended = ""; //URL for placeholder JSON metadata before the true image is generated //IMPORTANT! NFT generation constraints uint256[] emptyTables = [151,1565,1617,1843,1929,1941,2249,2257,2437,275,39,774]; address public tritWallet = 0x3e05c7FFfEfe9030523c1eb14E50ace5B0da9Cf7; ClampedRandomizer P1 = new ClampedRandomizer(1000); ClampedRandomizer P2 = new ClampedRandomizer(1000); ClampedRandomizer P3 = new ClampedRandomizer(1000); ClampedRandomizer[] phaseRandomizers = [P1, P2, P3]; ERC721 public fantomDrugs = ERC721(0x10476aFCb828fc2320c5B4af83c56e068f4D0286); uint256 public phaseIndex = 0; uint256[] public phaseCaps = [1000,2000,3000]; uint256 public immutable maxPerTx; //Max allowed mints per transaction uint256 public immutable mintsPerWallet; //Max allowed mints per wallet uint256 public price; //mint price in wei, can be altered via setPrice() uint256 public highifyFee; mapping(uint256 => uint256) public _balances; uint256 _percentageScope = 100; bool public hasSaleStarted = false; //Pauses/unpauses minting mapping(address => uint256) userCredit; //Free mint credits tracked here mapping(address => uint256) public _mintedAmount; //Storage for how many paid mints a wallet has performed mapping(uint256 => uint256[]) _traits; //Composition index for the custom NFTs mapping(uint256 => uint256[]) _effects; //Composition index for the custom NFTs mapping(uint256 => address) private _payee; mapping(uint256 => uint256) private _percentage; uint256[] giveawayMints = [8,7,7]; constructor( string memory name, string memory symbol, string memory defaultURI, uint256 priceWei, uint256 mintsPerTx, uint256 walletAllowance ) ERC721(name, symbol) { maxPerTx = mintsPerTx; mintsPerWallet = walletAllowance; setDefaultURI(defaultURI); setPriceWei(priceWei); _payee[0] = address(0x7f8fd0e91010c579440D65e9b5D69054cCe67E96); _payee[1] = address(0x57d91B54e67FE58dB2A90033615C51a554F82105); _payee[2] = address(0x4002587449bDBbAB2D60037a338602bAa9d4d0fc); _payee[3] = address(0x78d0a0a7bCeD90877B064C2B9ddf1E58B3a4Cd93); _percentage[0] = 300; _percentage[1] = 375; _percentage[2] = 300; _percentage[3] = 25; } //define NFT building server app's public key function setNftBuilder(address newBuilder) public onlyOwner { _nftBuilder = newBuilder; } function setTritWallet(address newAddy) public { require(msg.sender == tritWallet); tritWallet = newAddy; } function setPriceWei(uint256 newPrice) public onlyOwner { price = newPrice; } function setPriceFtm(uint256 newPrice) public onlyOwner { uint256 ftm = 1 ether; price = newPrice * ftm; } function setHighifyFee(uint256 val) public onlyOwner { highifyFee = val; } function tokensOfOwner(address _owner) external view returns(uint256[] memory ) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { // Return an empty array return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } } function mint(uint256 mintAmount) public payable { require(mintAmount > 0); require(hasSaleStarted == true, "Minting is not currently enabled"); require(totalSupply() + mintAmount <= phaseCaps[phaseIndex], "Mint exceeds current allocation"); require(_mintedAmount[msg.sender] < mintsPerWallet, "mintsPerWallet exceeded"); require(mintAmount <= maxPerTx, "maxPerTx exceeded"); require(msg.value == price*mintAmount, "Incorrect msg.value"); for (uint i = 0; i < mintAmount; i++) { uint256 tokenId = phaseRandomizers[phaseIndex]._genClampedNonce() + 1 + (1000*phaseIndex); _safeMint(msg.sender, tokenId); } for (uint i = 0; i < 4; i++){ uint256 payout = ((msg.value*_percentage[i])/_percentageScope)/10; _balances[i] = _balances[i] + payout; } } function highifyPayment() public payable { require(msg.value == highifyFee); } function setTokenURI(uint256 tokenId, string calldata URI, uint256[] calldata effects) public { require(msg.sender == _nftBuilder || msg.sender == owner(), "only the authorized builder or contract owner may set URI"); _effects[tokenId] = effects; super._setTokenURI(tokenId, URI); } function setTokenURIBurn(address origin, uint256 tokenId, uint256 burnId, string calldata URI, uint256[] calldata effects) public { require(msg.sender == _nftBuilder || msg.sender == owner(), "only the authorized builder or contract owner may set URI"); require(fantomDrugs.ownerOf(burnId) == origin); fantomDrugs.safeTransferFrom(origin, address(1), burnId); _effects[tokenId] = effects; super._setTokenURI(tokenId, URI); } function mintCredit() public { require(hasSaleStarted == true, "Minting is not currently enabled"); require(totalSupply() < phaseCaps[phaseIndex], "Exceeds current allocation"); require(userCredit[msg.sender] >= 1, "Not enough Credits"); uint256 tokenId = phaseRandomizers[phaseIndex]._genClampedNonce() + 1 + (1000*phaseIndex); _safeMint(msg.sender, tokenId); userCredit[msg.sender] -= 1; } function balanceOfCredit(address owner) public view virtual returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return userCredit[owner]; } function setDefaultURI(string memory defaultURI) public onlyOwner { _baseURIExtended = defaultURI; } function _baseURI() internal view virtual override returns (string memory) { return _baseURIExtended; } function advancePhase() public onlyOwner { if (hasSaleStarted == false && phaseIndex == 0) { hasSaleStarted = true; mintToEntitled(); } else if (phaseIndex < 2) { require(totalSupply() >= phaseCaps[phaseIndex], "phase not yet sold out"); phaseIndex++; mintToEntitled(); } } function mintToEntitled() private { for(uint256 i = 0; i < emptyTables.length; i++) { try fantomDrugs.ownerOf(emptyTables[i]) { address to = fantomDrugs.ownerOf(emptyTables[i]); uint256 tokenId = phaseRandomizers[phaseIndex]._genClampedNonce() + 1 + (1000*phaseIndex); _safeMint(to, tokenId); } catch(bytes memory) {} } for(uint i = 0; i < giveawayMints[phaseIndex]; i++) { uint256 tokenId = phaseRandomizers[phaseIndex]._genClampedNonce() + 1 + (1000*phaseIndex); _safeMint(owner(), tokenId); } address[3] memory devs = [tritWallet, _payee[1], _payee[2]]; for(uint i = 0; i < 3; i++) { for(uint256 j = 0; j < 3; j++) { uint256 tokenId = phaseRandomizers[phaseIndex]._genClampedNonce() + 1 + (1000*phaseIndex); _safeMint(devs[i], tokenId); } } } function startSale() public onlyOwner { hasSaleStarted = true; } function pauseSale() public onlyOwner { hasSaleStarted = false; } function withdrawFTM() public { for (uint i = 0; i < 4; i++){ payable(_payee[i]).transfer(_balances[i]); _balances[i] = 0; } } function addCredit(address owner, uint256 credits) public onlyOwner { userCredit[owner] += credits; } function changePayeeAddress(uint256 index, address newAddress) public { if (index == 0){ require(msg.sender == tritWallet, "only _payeeZeroAdmin can change _payee[0]"); _payee[0] = newAddress; } else { require(msg.sender == _payee[index], "only current payees can change their reception address"); _payee[index] = newAddress; } } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } receive() external payable { for (uint i = 0; i < 4; i++){ uint256 payout = ((msg.value*_percentage[i])/_percentageScope)/10; _balances[i] = _balances[i] + payout; } } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"defaultURI","type":"string"},{"internalType":"uint256","name":"priceWei","type":"uint256"},{"internalType":"uint256","name":"mintsPerTx","type":"uint256"},{"internalType":"uint256","name":"walletAllowance","type":"uint256"}],"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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_mintedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"credits","type":"uint256"}],"name":"addCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"advancePhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOfCredit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"newAddress","type":"address"}],"name":"changePayeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fantomDrugs","outputs":[{"internalType":"contract ERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"highifyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"highifyPayment","outputs":[],"stateMutability":"payable","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":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintsPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"phaseCaps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phaseIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"defaultURI","type":"string"}],"name":"setDefaultURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setHighifyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newBuilder","type":"address"}],"name":"setNftBuilder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPriceFtm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPriceWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"URI","type":"string"},{"internalType":"uint256[]","name":"effects","type":"uint256[]"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"origin","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"burnId","type":"uint256"},{"internalType":"string","name":"URI","type":"string"},{"internalType":"uint256[]","name":"effects","type":"uint256[]"}],"name":"setTokenURIBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddy","type":"address"}],"name":"setTritWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSale","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tritWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFTM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040819052600060c08190526200001b91600d91620005d1565b5060408051610180810182526097815261061d6020820152610651918101919091526107336060820152610789608082015261079560a08201526108c960c08201526108d160e082015261098561010082015261011361012082015260276101408201526103066101608201526200009890600e90600c62000660565b50600f80546001600160a01b031916733e05c7fffefe9030523c1eb14e50ace5b0da9cf71790556040516103e890620000d190620006a4565b908152602001604051809103906000f080158015620000f4573d6000803e3d6000fd5b50601080546001600160a01b0319166001600160a01b03929092169190911790556040516103e8906200012790620006a4565b908152602001604051809103906000f0801580156200014a573d6000803e3d6000fd5b50601180546001600160a01b0319166001600160a01b03929092169190911790556040516103e8906200017d90620006a4565b908152602001604051809103906000f080158015620001a0573d6000803e3d6000fd5b50601280546001600160a01b0319166001600160a01b0392831690811790915560408051606081018252601054841681526011549093166020840152820152620001ef906013906003620006b2565b50601480546001600160a01b0319167310476afcb828fc2320c5b4af83c56e068f4d02861790556000601555604080516060810182526103e881526107d06020820152610bb8918101919091526200024c90601690600362000660565b506064601a55601b805460ff191690556040805160608101825260088152600760208201819052918101919091526200028a9060229060036200070a565b503480156200029857600080fd5b5060405162004ace38038062004ace833981016040819052620002bb916200081b565b855186908690620002d4906000906020850190620005d1565b508051620002ea906001906020840190620005d1565b5050506000620002ff6200051560201b60201c565b600b80546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350608082905260a0819052620003628462000519565b6200036d8362000581565b50507f29ab76e7ca72530a8284597fb76b039d796325740b21528d71ade454c6f2dbe980546001600160a01b0319908116737f8fd0e91010c579440d65e9b5d69054cce67e96179091557f156774b33c8bc7cb83eda4cbc43b36c7c9490ff8913c488ccd5132cfc71344ea805482167357d91b54e67fe58db2a90033615c51a554f821051790557f2c5f9a2e204d4db70ad0f9037679e33061b4c51a386497019bee969e16be28d780548216734002587449bdbbab2d60037a338602baa9d4d0fc1790557f1ae1eab41a4db68d73559dd6c8b7ac16a4bc819634768486d35edbff05543abf80549091167378d0a0a7bced90877b064c2b9ddf1e58b3a4cd9317905550506021602052505061012c7f97ea4a93fb5e400340102ffa4fa5d31ef170c1e583d2cb268c876db385f80bb08190556101777f2b59c9df127166d3570f589f0cb7377a6b175795e70ab275ebf42fa16c0a23f4557f914a2534c436de5a3f77164e6b9b90d20144139ce899b6a8d30a442e7b9ef53355600360005260197fbae8fb7bb9008c9bfa6625328b7613a2bedfb2f936a7718f51173039a77c107c556200091b565b3390565b600b546001600160a01b03163314620005685760405162461bcd60e51b8152602060048201819052602482015260008051602062004aae83398151915260448201526064015b60405180910390fd5b80516200057d90600d906020840190620005d1565b5050565b600b546001600160a01b03163314620005cc5760405162461bcd60e51b8152602060048201819052602482015260008051602062004aae83398151915260448201526064016200055f565b601755565b828054620005df90620008c8565b90600052602060002090601f0160209004810192826200060357600085556200064e565b82601f106200061e57805160ff19168380011785556200064e565b828001600101855582156200064e579182015b828111156200064e57825182559160200191906001019062000631565b506200065c9291506200074d565b5090565b8280548282559060005260206000209081019282156200064e579160200282015b828111156200064e578251829061ffff1690559160200191906001019062000681565b610298806200481683390190565b8280548282559060005260206000209081019282156200064e579160200282015b828111156200064e57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620006d3565b8280548282559060005260206000209081019282156200064e579160200282015b828111156200064e578251829060ff169055916020019190600101906200072b565b5b808211156200065c57600081556001016200074e565b600082601f8301126200077657600080fd5b81516001600160401b038082111562000793576200079362000905565b604051601f8301601f19908116603f01168101908282118183101715620007be57620007be62000905565b81604052838152602092508683858801011115620007db57600080fd5b600091505b83821015620007ff5785820183015181830184015290820190620007e0565b83821115620008115760008385830101525b9695505050505050565b60008060008060008060c087890312156200083557600080fd5b86516001600160401b03808211156200084d57600080fd5b6200085b8a838b0162000764565b975060208901519150808211156200087257600080fd5b620008808a838b0162000764565b965060408901519150808211156200089757600080fd5b50620008a689828a0162000764565b945050606087015192506080870151915060a087015190509295509295509295565b600181811c90821680620008dd57607f821691505b60208210811415620008ff57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160a051613ec76200094f600039600081816105b201526118700152600081816109c101526118de0152613ec76000f3fe6080604052600436106103225760003560e01c80637b493768116101a5578063b66a0e5d116100ec578063da1b9e0811610095578063ef5001a41161006f578063ef5001a414610964578063f2fde38b1461097a578063f3234a671461099a578063f968adbe146109af57600080fd5b8063da1b9e08146108ce578063e985e9c5146108ee578063ed64892b1461093757600080fd5b8063c1e4dfda116100c6578063c1e4dfda1461086e578063c87b56dd1461088e578063d7d5afbd146108ae57600080fd5b8063b66a0e5d14610824578063b88d4fde14610839578063be25a7181461085957600080fd5b806395d89b411161014e578063a22cb46511610128578063a22cb465146107c4578063b0130cd4146107e4578063b64255bc1461080457600080fd5b806395d89b4114610786578063a035b1fe1461079b578063a0712d68146107b157600080fd5b80638462151c1161017f5780638462151c1461071b5780638da5cb5b1461074857806390d5117a1461076657600080fd5b80637b493768146106d35780637d27d66c146106f35780637dcbb9541461071357600080fd5b8063384242be116102695780634cd68e33116102125780636352211e116101ec5780636352211e1461067e57806370a082311461069e578063715018a6146106be57600080fd5b80634cd68e33146106345780634f6ccce71461064957806355367ba91461066957600080fd5b806342842e0e1161024357806342842e0e146105d4578063488c0876146105f45780634c1a86421461061457600080fd5b8063384242be146105535780633d24a36b1461057357806340221e20146105a057600080fd5b8063175a2977116102cb57806323b872dd116102a557806323b872dd146104fd57806324ba05af1461051d5780632f745c591461053357600080fd5b8063175a2977146104ae57806318160ddd146104ce5780631c8b232d146104e357600080fd5b8063081812fc116102fc578063081812fc14610428578063095ea7b31461046057806314a1fc351461048057600080fd5b806301ffc9a7146103af57806302f5c7b4146103e457806306fdde031461040657600080fd5b366103aa5760005b60048110156103a757601a546000828152602160205260408120549091600a916103549034613d12565b61035e9190613cfe565b6103689190613cfe565b600083815260196020526040902054909150610385908290613ce6565b600083815260196020526040902055508061039f81613da9565b91505061032a565b50005b600080fd5b3480156103bb57600080fd5b506103cf6103ca366004613aa4565b6109e3565b60405190151581526020015b60405180910390f35b3480156103f057600080fd5b506104046103ff366004613b27565b6109f4565b005b34801561041257600080fd5b5061041b610a46565b6040516103db9190613cd3565b34801561043457600080fd5b50610448610443366004613b27565b610ad8565b6040516001600160a01b0390911681526020016103db565b34801561046c57600080fd5b5061040461047b3660046139e2565b610b6d565b34801561048c57600080fd5b506104a061049b36600461387b565b610c9f565b6040519081526020016103db565b3480156104ba57600080fd5b506104a06104c9366004613b27565b610d26565b3480156104da57600080fd5b506008546104a0565b3480156104ef57600080fd5b50601b546103cf9060ff1681565b34801561050957600080fd5b506104046105183660046138ee565b610d47565b34801561052957600080fd5b506104a060155481565b34801561053f57600080fd5b506104a061054e3660046139e2565b610dce565b34801561055f57600080fd5b5061040461056e36600461387b565b610e76565b34801561057f57600080fd5b506104a061058e366004613b27565b60196020526000908152604090205481565b3480156105ac57600080fd5b506104a07f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e057600080fd5b506104046105ef3660046138ee565b610ee0565b34801561060057600080fd5b50601454610448906001600160a01b031681565b34801561062057600080fd5b5061040461062f366004613b27565b610efb565b34801561064057600080fd5b50610404610f5d565b34801561065557600080fd5b506104a0610664366004613b27565b610fda565b34801561067557600080fd5b5061040461107e565b34801561068a57600080fd5b50610448610699366004613b27565b6110d2565b3480156106aa57600080fd5b506104a06106b936600461387b565b61115d565b3480156106ca57600080fd5b506104046111e4565b3480156106df57600080fd5b506104046106ee366004613b59565b611276565b3480156106ff57600080fd5b5061040461070e3660046139e2565b6113f9565b610404611472565b34801561072757600080fd5b5061073b61073636600461387b565b611482565b6040516103db9190613c8f565b34801561075457600080fd5b50600b546001600160a01b0316610448565b34801561077257600080fd5b50610404610781366004613a0e565b611541565b34801561079257600080fd5b5061041b611769565b3480156107a757600080fd5b506104a060175481565b6104046107bf366004613b27565b611778565b3480156107d057600080fd5b506104046107df3660046139af565b611b1f565b3480156107f057600080fd5b506104046107ff36600461387b565b611b2a565b34801561081057600080fd5b5061040461081f366004613b7e565b611b63565b34801561083057600080fd5b50610404611c59565b34801561084557600080fd5b5061040461085436600461392f565b611cb0565b34801561086557600080fd5b50610404611d3e565b34801561087a57600080fd5b50610404610889366004613b27565b611e52565b34801561089a57600080fd5b5061041b6108a9366004613b27565b611e9f565b3480156108ba57600080fd5b50600f54610448906001600160a01b031681565b3480156108da57600080fd5b506104046108e9366004613ade565b611eaa565b3480156108fa57600080fd5b506103cf6109093660046138b5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561094357600080fd5b506104a061095236600461387b565b601d6020526000908152604090205481565b34801561097057600080fd5b506104a060185481565b34801561098657600080fd5b5061040461099536600461387b565b611f05565b3480156109a657600080fd5b50610404612025565b3480156109bb57600080fd5b506104a07f000000000000000000000000000000000000000000000000000000000000000081565b60006109ee82612252565b92915050565b600b546001600160a01b03163314610a415760405162461bcd60e51b81526020600482018190526024820152600080516020613e7283398151915260448201526064015b60405180910390fd5b601855565b606060008054610a5590613d74565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8190613d74565b8015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610b515760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a38565b506000908152600460205260409020546001600160a01b031690565b6000610b78826110d2565b9050806001600160a01b0316836001600160a01b03161415610c025760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610a38565b336001600160a01b0382161480610c1e5750610c1e8133610909565b610c905760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a38565b610c9a8383612290565b505050565b60006001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a38565b506001600160a01b03166000908152601c602052604090205490565b60168181548110610d3657600080fd5b600091825260209091200154905081565b610d5133826122fe565b610dc35760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610a38565b610c9a8383836123f5565b6000610dd98361115d565b8210610e4d5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610a38565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600b546001600160a01b03163314610ebe5760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b610c9a83838360405180602001604052806000815250611cb0565b600b546001600160a01b03163314610f435760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b670de0b6b3a7640000610f568183613d12565b6017555050565b60005b6004811015610fd7576000818152602080805260408083205460199092528083205490516001600160a01b039092169281156108fc029290818181858888f19350505050158015610fb5573d6000803e3d6000fd5b5060008181526019602052604081205580610fcf81613da9565b915050610f60565b50565b6000610fe560085490565b82106110595760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610a38565b6008828154811061106c5761106c613e1a565b90600052602060002001549050919050565b600b546001600160a01b031633146110c65760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b601b805460ff19169055565b6000818152600260205260408120546001600160a01b0316806109ee5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610a38565b60006001600160a01b0382166111c85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a38565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b0316331461122c5760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b600b546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600b80546001600160a01b0319169055565b8161134357600f546001600160a01b031633146112fb5760405162461bcd60e51b815260206004820152602960248201527f6f6e6c79205f70617965655a65726f41646d696e2063616e206368616e67652060448201527f5f70617965655b305d00000000000000000000000000000000000000000000006064820152608401610a38565b60008052602080527f29ab76e7ca72530a8284597fb76b039d796325740b21528d71ade454c6f2dbe980546001600160a01b0383166001600160a01b03199091161790555050565b60008281526020805260409020546001600160a01b031633146113ce5760405162461bcd60e51b815260206004820152603660248201527f6f6e6c792063757272656e74207061796565732063616e206368616e6765207460448201527f6865697220726563657074696f6e2061646472657373000000000000000000006064820152608401610a38565b6000828152602080526040902080546001600160a01b0319166001600160a01b0383161790555b5050565b600b546001600160a01b031633146114415760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b6001600160a01b0382166000908152601c602052604081208054839290611469908490613ce6565b90915550505050565b601854341461148057600080fd5b565b6060600061148f8361115d565b9050806114b05760408051600080825260208201909252905b509392505050565b60008167ffffffffffffffff8111156114cb576114cb613e30565b6040519080825280602002602001820160405280156114f4578160200160208202803683370190505b50905060005b828110156114a85761150c8582610dce565b82828151811061151e5761151e613e1a565b60209081029190910101528061153381613da9565b9150506114fa565b50919050565b600c546001600160a01b03163314806115645750600b546001600160a01b031633145b6115d65760405162461bcd60e51b815260206004820152603960248201527f6f6e6c792074686520617574686f72697a6564206275696c646572206f72206360448201527f6f6e7472616374206f776e6572206d61792073657420555249000000000000006064820152608401610a38565b6014546040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b03898116921690636352211e9060240160206040518083038186803b15801561163557600080fd5b505afa158015611649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166d9190613898565b6001600160a01b03161461168057600080fd5b6014546040517f42842e0e0000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301526001602483015260448201889052909116906342842e0e90606401600060405180830381600087803b1580156116ee57600080fd5b505af1158015611702573d6000803e3d6000fd5b5050506000878152601f6020526040902061171f915083836136a3565b506117608685858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506125cd92505050565b50505050505050565b606060018054610a5590613d74565b6000811161178557600080fd5b601b5460ff1615156001146117dc5760405162461bcd60e51b815260206004820181905260248201527f4d696e74696e67206973206e6f742063757272656e746c7920656e61626c65646044820152606401610a38565b6016601554815481106117f1576117f1613e1a565b90600052602060002001548161180660085490565b6118109190613ce6565b111561185e5760405162461bcd60e51b815260206004820152601f60248201527f4d696e7420657863656564732063757272656e7420616c6c6f636174696f6e006044820152606401610a38565b336000908152601d60205260409020547f0000000000000000000000000000000000000000000000000000000000000000116118dc5760405162461bcd60e51b815260206004820152601760248201527f6d696e747350657257616c6c65742065786365656465640000000000000000006044820152606401610a38565b7f000000000000000000000000000000000000000000000000000000000000000081111561194c5760405162461bcd60e51b815260206004820152601160248201527f6d617850657254782065786365656465640000000000000000000000000000006044820152606401610a38565b8060175461195a9190613d12565b34146119a85760405162461bcd60e51b815260206004820152601360248201527f496e636f7272656374206d73672e76616c7565000000000000000000000000006044820152606401610a38565b60005b81811015611a9e5760006015546103e86119c59190613d12565b6013601554815481106119da576119da613e1a565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b031663b09532496040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611a3257600080fd5b505af1158015611a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6a9190613b40565b611a75906001613ce6565b611a7f9190613ce6565b9050611a8b3382612676565b5080611a9681613da9565b9150506119ab565b5060005b60048110156113f557601a546000828152602160205260408120549091600a91611acc9034613d12565b611ad69190613cfe565b611ae09190613cfe565b600083815260196020526040902054909150611afd908290613ce6565b6000838152601960205260409020555080611b1781613da9565b915050611aa2565b6113f5338383612690565b600f546001600160a01b03163314611b4157600080fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b0316331480611b865750600b546001600160a01b031633145b611bf85760405162461bcd60e51b815260206004820152603960248201527f6f6e6c792074686520617574686f72697a6564206275696c646572206f72206360448201527f6f6e7472616374206f776e6572206d61792073657420555249000000000000006064820152608401610a38565b6000858152601f60205260409020611c119083836136a3565b50611c528585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506125cd92505050565b5050505050565b600b546001600160a01b03163314611ca15760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b601b805460ff19166001179055565b611cba33836122fe565b611d2c5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610a38565b611d388484848461275f565b50505050565b600b546001600160a01b03163314611d865760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b601b5460ff16158015611d995750601554155b15611db357601b805460ff191660011790556114806127dd565b6002601554101561148057601660155481548110611dd357611dd3613e1a565b9060005260206000200154611de760085490565b1015611e355760405162461bcd60e51b815260206004820152601660248201527f7068617365206e6f742079657420736f6c64206f7574000000000000000000006044820152606401610a38565b60158054906000611e4583613da9565b91905055506114806127dd565b600b546001600160a01b03163314611e9a5760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b601755565b60606109ee82612d22565b600b546001600160a01b03163314611ef25760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b80516113f590600d9060208401906136ee565b600b546001600160a01b03163314611f4d5760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b6001600160a01b038116611fc95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a38565b600b546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b601b5460ff16151560011461207c5760405162461bcd60e51b815260206004820181905260248201527f4d696e74696e67206973206e6f742063757272656e746c7920656e61626c65646044820152606401610a38565b60166015548154811061209157612091613e1a565b90600052602060002001546120a560085490565b106120f25760405162461bcd60e51b815260206004820152601a60248201527f457863656564732063757272656e7420616c6c6f636174696f6e0000000000006044820152606401610a38565b336000908152601c6020526040902054600111156121525760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f756768204372656469747300000000000000000000000000006044820152606401610a38565b60006015546103e86121649190613d12565b60136015548154811061217957612179613e1a565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b031663b09532496040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156121d157600080fd5b505af11580156121e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122099190613b40565b612214906001613ce6565b61221e9190613ce6565b905061222a3382612676565b336000908152601c6020526040812080546001929061224a908490613d31565b909155505050565b60006001600160e01b031982167f780e9d630000000000000000000000000000000000000000000000000000000014806109ee57506109ee82612e68565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906122c5826110d2565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166123775760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a38565b6000612382836110d2565b9050806001600160a01b0316846001600160a01b031614806123c957506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806123ed5750836001600160a01b03166123e284610ad8565b6001600160a01b0316145b949350505050565b826001600160a01b0316612408826110d2565b6001600160a01b0316146124845760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610a38565b6001600160a01b0382166124ff5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a38565b61250a838383612f03565b612515600082612290565b6001600160a01b038316600090815260036020526040812080546001929061253e908490613d31565b90915550506001600160a01b038216600090815260036020526040812080546001929061256c908490613ce6565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000828152600260205260409020546001600160a01b03166126575760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201527f6578697374656e7420746f6b656e0000000000000000000000000000000000006064820152608401610a38565b6000828152600a602090815260409091208251610c9a928401906136ee565b6113f5828260405180602001604052806000815250612f0e565b816001600160a01b0316836001600160a01b031614156126f25760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a38565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61276a8484846123f5565b61277684848484612f8c565b611d385760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610a38565b60005b600e54811015612a5257601454600e80546001600160a01b0390921691636352211e91908490811061281457612814613e1a565b90600052602060002001546040518263ffffffff1660e01b815260040161283d91815260200190565b60206040518083038186803b15801561285557600080fd5b505afa925050508015612885575060408051601f3d908101601f1916820190925261288291810190613898565b60015b6128bf573d8080156128b3576040519150601f19603f3d011682016040523d82523d6000602084013e6128b8565b606091505b5050612a40565b50601454600e80546000926001600160a01b031691636352211e91859081106128ea576128ea613e1a565b90600052602060002001546040518263ffffffff1660e01b815260040161291391815260200190565b60206040518083038186803b15801561292b57600080fd5b505afa15801561293f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129639190613898565b905060006015546103e86129779190613d12565b60136015548154811061298c5761298c613e1a565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b031663b09532496040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156129e457600080fd5b505af11580156129f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1c9190613b40565b612a27906001613ce6565b612a319190613ce6565b9050612a3d8282612676565b50505b80612a4a81613da9565b9150506127e0565b5060005b602260155481548110612a6b57612a6b613e1a565b9060005260206000200154811015612b795760006015546103e8612a8f9190613d12565b601360155481548110612aa457612aa4613e1a565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b031663b09532496040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612afc57600080fd5b505af1158015612b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b349190613b40565b612b3f906001613ce6565b612b499190613ce6565b9050612b66612b60600b546001600160a01b031690565b82612676565b5080612b7181613da9565b915050612a56565b5060408051606081018252600f546001600160a01b0390811682527f156774b33c8bc7cb83eda4cbc43b36c7c9490ff8913c488ccd5132cfc71344ea548116602080840191909152600260009081529080527f2c5f9a2e204d4db70ad0f9037679e33061b4c51a386497019bee969e16be28d75490911692820192909252905b60038110156113f55760005b6003811015612d0f5760006015546103e8612c209190613d12565b601360155481548110612c3557612c35613e1a565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b031663b09532496040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612c8d57600080fd5b505af1158015612ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc59190613b40565b612cd0906001613ce6565b612cda9190613ce6565b9050612cfc848460038110612cf157612cf1613e1a565b602002015182612676565b5080612d0781613da9565b915050612c05565b5080612d1a81613da9565b915050612bf9565b6000818152600260205260409020546060906001600160a01b0316612daf5760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f722060448201527f6e6f6e6578697374656e7420746f6b656e0000000000000000000000000000006064820152608401610a38565b6000828152600a602052604081208054612dc890613d74565b80601f0160208091040260200160405190810160405280929190818152602001828054612df490613d74565b8015612e415780601f10612e1657610100808354040283529160200191612e41565b820191906000526020600020905b815481529060010190602001808311612e2457829003601f168201915b50505050509050600081511115612e585792915050565b612e61836130e4565b9392505050565b60006001600160e01b031982167f80ac58cd000000000000000000000000000000000000000000000000000000001480612ecb57506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806109ee57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316146109ee565b610c9a8383836131cc565b612f188383613284565b612f256000848484612f8c565b610c9a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610a38565b60006001600160a01b0384163b156130d957604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612fd0903390899088908890600401613c53565b602060405180830381600087803b158015612fea57600080fd5b505af192505050801561301a575060408051601f3d908101601f1916820190925261301791810190613ac1565b60015b6130bf573d808015613048576040519150601f19603f3d011682016040523d82523d6000602084013e61304d565b606091505b5080516130b75760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610a38565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506123ed565b506001949350505050565b6000818152600260205260409020546060906001600160a01b03166131715760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610a38565b600061317b6133d2565b9050600081511161319b5760405180602001604052806000815250612e61565b806131a5846133e1565b6040516020016131b6929190613c24565b6040516020818303038152906040529392505050565b6001600160a01b0383166132275761322281600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b61324a565b816001600160a01b0316836001600160a01b03161461324a5761324a8382613513565b6001600160a01b03821661326157610c9a816135b0565b826001600160a01b0316826001600160a01b031614610c9a57610c9a828261365f565b6001600160a01b0382166132da5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a38565b6000818152600260205260409020546001600160a01b03161561333f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a38565b61334b60008383612f03565b6001600160a01b0382166000908152600360205260408120805460019290613374908490613ce6565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6060600d8054610a5590613d74565b60608161342157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561344b578061343581613da9565b91506134449050600a83613cfe565b9150613425565b60008167ffffffffffffffff81111561346657613466613e30565b6040519080825280601f01601f191660200182016040528015613490576020820181803683370190505b5090505b84156123ed576134a5600183613d31565b91506134b2600a86613dc4565b6134bd906030613ce6565b60f81b8183815181106134d2576134d2613e1a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061350c600a86613cfe565b9450613494565b600060016135208461115d565b61352a9190613d31565b60008381526007602052604090205490915080821461357d576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906135c290600190613d31565b600083815260096020526040812054600880549394509092849081106135ea576135ea613e1a565b90600052602060002001549050806008838154811061360b5761360b613e1a565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061364357613643613e04565b6001900381819060005260206000200160009055905550505050565b600061366a8361115d565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b8280548282559060005260206000209081019282156136de579160200282015b828111156136de5782358255916020019190600101906136c3565b506136ea929150613762565b5090565b8280546136fa90613d74565b90600052602060002090601f01602090048101928261371c57600085556136de565b82601f1061373557805160ff19168380011785556136de565b828001600101855582156136de579182015b828111156136de578251825591602001919060010190613747565b5b808211156136ea5760008155600101613763565b600067ffffffffffffffff8084111561379257613792613e30565b604051601f8501601f19908116603f011681019082821181831017156137ba576137ba613e30565b816040528093508581528686860111156137d357600080fd5b858560208301376000602087830101525050509392505050565b60008083601f8401126137ff57600080fd5b50813567ffffffffffffffff81111561381757600080fd5b6020830191508360208260051b850101111561383257600080fd5b9250929050565b60008083601f84011261384b57600080fd5b50813567ffffffffffffffff81111561386357600080fd5b60208301915083602082850101111561383257600080fd5b60006020828403121561388d57600080fd5b8135612e6181613e46565b6000602082840312156138aa57600080fd5b8151612e6181613e46565b600080604083850312156138c857600080fd5b82356138d381613e46565b915060208301356138e381613e46565b809150509250929050565b60008060006060848603121561390357600080fd5b833561390e81613e46565b9250602084013561391e81613e46565b929592945050506040919091013590565b6000806000806080858703121561394557600080fd5b843561395081613e46565b9350602085013561396081613e46565b925060408501359150606085013567ffffffffffffffff81111561398357600080fd5b8501601f8101871361399457600080fd5b6139a387823560208401613777565b91505092959194509250565b600080604083850312156139c257600080fd5b82356139cd81613e46565b9150602083013580151581146138e357600080fd5b600080604083850312156139f557600080fd5b8235613a0081613e46565b946020939093013593505050565b600080600080600080600060a0888a031215613a2957600080fd5b8735613a3481613e46565b96506020880135955060408801359450606088013567ffffffffffffffff80821115613a5f57600080fd5b613a6b8b838c01613839565b909650945060808a0135915080821115613a8457600080fd5b50613a918a828b016137ed565b989b979a50959850939692959293505050565b600060208284031215613ab657600080fd5b8135612e6181613e5b565b600060208284031215613ad357600080fd5b8151612e6181613e5b565b600060208284031215613af057600080fd5b813567ffffffffffffffff811115613b0757600080fd5b8201601f81018413613b1857600080fd5b6123ed84823560208401613777565b600060208284031215613b3957600080fd5b5035919050565b600060208284031215613b5257600080fd5b5051919050565b60008060408385031215613b6c57600080fd5b8235915060208301356138e381613e46565b600080600080600060608688031215613b9657600080fd5b85359450602086013567ffffffffffffffff80821115613bb557600080fd5b613bc189838a01613839565b90965094506040880135915080821115613bda57600080fd5b50613be7888289016137ed565b969995985093965092949392505050565b60008151808452613c10816020860160208601613d48565b601f01601f19169290920160200192915050565b60008351613c36818460208801613d48565b835190830190613c4a818360208801613d48565b01949350505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152613c856080830184613bf8565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613cc757835183529284019291840191600101613cab565b50909695505050505050565b602081526000612e616020830184613bf8565b60008219821115613cf957613cf9613dd8565b500190565b600082613d0d57613d0d613dee565b500490565b6000816000190483118215151615613d2c57613d2c613dd8565b500290565b600082821015613d4357613d43613dd8565b500390565b60005b83811015613d63578181015183820152602001613d4b565b83811115611d385750506000910152565b600181811c90821680613d8857607f821691505b6020821081141561153b57634e487b7160e01b600052602260045260246000fd5b6000600019821415613dbd57613dbd613dd8565b5060010190565b600082613dd357613dd3613dee565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610fd757600080fd5b6001600160e01b031981168114610fd757600080fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220c66d1e1207dcc99531e36120013323b7d89dd349543312e09c795ce078468a7b64736f6c6343000807003360a06040526000805534801561001457600080fd5b506040516102983803806102988339810160408190526100339161003b565b608052610054565b60006020828403121561004d57600080fd5b5051919050565b60805161022a61006e60003960006052015261022a6000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063b095324914610030575b600080fd5b61003861004a565b60405190815260200160405180910390f35b6000806000547f000000000000000000000000000000000000000000000000000000000000000061007b919061018a565b905060008060008361008b61014e565b61009591906101bc565b9050600160006100a5828761018a565b815260200190815260200160002054600014156100ce576100c760018561018a565b92506100ee565b600160006100dc828761018a565b81526020019081526020016000205492505b60008181526001602052604090205461011a576000818152600160205260409020839055905080610131565b600081815260016020526040902080549084905591505b600080549080610140836101a1565b909155509195945050505050565b6000444260405160200161016c929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c905090565b60008282101561019c5761019c6101de565b500390565b60006000198214156101b5576101b56101de565b5060010190565b6000826101d957634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220d78b78ece3122a99701fb74533a7211ec22519dff8529ab5e47714c42c35582164736f6c634300080700334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000000b46443a204465616c65727a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000346444400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106103225760003560e01c80637b493768116101a5578063b66a0e5d116100ec578063da1b9e0811610095578063ef5001a41161006f578063ef5001a414610964578063f2fde38b1461097a578063f3234a671461099a578063f968adbe146109af57600080fd5b8063da1b9e08146108ce578063e985e9c5146108ee578063ed64892b1461093757600080fd5b8063c1e4dfda116100c6578063c1e4dfda1461086e578063c87b56dd1461088e578063d7d5afbd146108ae57600080fd5b8063b66a0e5d14610824578063b88d4fde14610839578063be25a7181461085957600080fd5b806395d89b411161014e578063a22cb46511610128578063a22cb465146107c4578063b0130cd4146107e4578063b64255bc1461080457600080fd5b806395d89b4114610786578063a035b1fe1461079b578063a0712d68146107b157600080fd5b80638462151c1161017f5780638462151c1461071b5780638da5cb5b1461074857806390d5117a1461076657600080fd5b80637b493768146106d35780637d27d66c146106f35780637dcbb9541461071357600080fd5b8063384242be116102695780634cd68e33116102125780636352211e116101ec5780636352211e1461067e57806370a082311461069e578063715018a6146106be57600080fd5b80634cd68e33146106345780634f6ccce71461064957806355367ba91461066957600080fd5b806342842e0e1161024357806342842e0e146105d4578063488c0876146105f45780634c1a86421461061457600080fd5b8063384242be146105535780633d24a36b1461057357806340221e20146105a057600080fd5b8063175a2977116102cb57806323b872dd116102a557806323b872dd146104fd57806324ba05af1461051d5780632f745c591461053357600080fd5b8063175a2977146104ae57806318160ddd146104ce5780631c8b232d146104e357600080fd5b8063081812fc116102fc578063081812fc14610428578063095ea7b31461046057806314a1fc351461048057600080fd5b806301ffc9a7146103af57806302f5c7b4146103e457806306fdde031461040657600080fd5b366103aa5760005b60048110156103a757601a546000828152602160205260408120549091600a916103549034613d12565b61035e9190613cfe565b6103689190613cfe565b600083815260196020526040902054909150610385908290613ce6565b600083815260196020526040902055508061039f81613da9565b91505061032a565b50005b600080fd5b3480156103bb57600080fd5b506103cf6103ca366004613aa4565b6109e3565b60405190151581526020015b60405180910390f35b3480156103f057600080fd5b506104046103ff366004613b27565b6109f4565b005b34801561041257600080fd5b5061041b610a46565b6040516103db9190613cd3565b34801561043457600080fd5b50610448610443366004613b27565b610ad8565b6040516001600160a01b0390911681526020016103db565b34801561046c57600080fd5b5061040461047b3660046139e2565b610b6d565b34801561048c57600080fd5b506104a061049b36600461387b565b610c9f565b6040519081526020016103db565b3480156104ba57600080fd5b506104a06104c9366004613b27565b610d26565b3480156104da57600080fd5b506008546104a0565b3480156104ef57600080fd5b50601b546103cf9060ff1681565b34801561050957600080fd5b506104046105183660046138ee565b610d47565b34801561052957600080fd5b506104a060155481565b34801561053f57600080fd5b506104a061054e3660046139e2565b610dce565b34801561055f57600080fd5b5061040461056e36600461387b565b610e76565b34801561057f57600080fd5b506104a061058e366004613b27565b60196020526000908152604090205481565b3480156105ac57600080fd5b506104a07f0000000000000000000000000000000000000000000000000000000000000bb881565b3480156105e057600080fd5b506104046105ef3660046138ee565b610ee0565b34801561060057600080fd5b50601454610448906001600160a01b031681565b34801561062057600080fd5b5061040461062f366004613b27565b610efb565b34801561064057600080fd5b50610404610f5d565b34801561065557600080fd5b506104a0610664366004613b27565b610fda565b34801561067557600080fd5b5061040461107e565b34801561068a57600080fd5b50610448610699366004613b27565b6110d2565b3480156106aa57600080fd5b506104a06106b936600461387b565b61115d565b3480156106ca57600080fd5b506104046111e4565b3480156106df57600080fd5b506104046106ee366004613b59565b611276565b3480156106ff57600080fd5b5061040461070e3660046139e2565b6113f9565b610404611472565b34801561072757600080fd5b5061073b61073636600461387b565b611482565b6040516103db9190613c8f565b34801561075457600080fd5b50600b546001600160a01b0316610448565b34801561077257600080fd5b50610404610781366004613a0e565b611541565b34801561079257600080fd5b5061041b611769565b3480156107a757600080fd5b506104a060175481565b6104046107bf366004613b27565b611778565b3480156107d057600080fd5b506104046107df3660046139af565b611b1f565b3480156107f057600080fd5b506104046107ff36600461387b565b611b2a565b34801561081057600080fd5b5061040461081f366004613b7e565b611b63565b34801561083057600080fd5b50610404611c59565b34801561084557600080fd5b5061040461085436600461392f565b611cb0565b34801561086557600080fd5b50610404611d3e565b34801561087a57600080fd5b50610404610889366004613b27565b611e52565b34801561089a57600080fd5b5061041b6108a9366004613b27565b611e9f565b3480156108ba57600080fd5b50600f54610448906001600160a01b031681565b3480156108da57600080fd5b506104046108e9366004613ade565b611eaa565b3480156108fa57600080fd5b506103cf6109093660046138b5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561094357600080fd5b506104a061095236600461387b565b601d6020526000908152604090205481565b34801561097057600080fd5b506104a060185481565b34801561098657600080fd5b5061040461099536600461387b565b611f05565b3480156109a657600080fd5b50610404612025565b3480156109bb57600080fd5b506104a07f000000000000000000000000000000000000000000000000000000000000000581565b60006109ee82612252565b92915050565b600b546001600160a01b03163314610a415760405162461bcd60e51b81526020600482018190526024820152600080516020613e7283398151915260448201526064015b60405180910390fd5b601855565b606060008054610a5590613d74565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8190613d74565b8015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610b515760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a38565b506000908152600460205260409020546001600160a01b031690565b6000610b78826110d2565b9050806001600160a01b0316836001600160a01b03161415610c025760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610a38565b336001600160a01b0382161480610c1e5750610c1e8133610909565b610c905760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a38565b610c9a8383612290565b505050565b60006001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a38565b506001600160a01b03166000908152601c602052604090205490565b60168181548110610d3657600080fd5b600091825260209091200154905081565b610d5133826122fe565b610dc35760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610a38565b610c9a8383836123f5565b6000610dd98361115d565b8210610e4d5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610a38565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600b546001600160a01b03163314610ebe5760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b610c9a83838360405180602001604052806000815250611cb0565b600b546001600160a01b03163314610f435760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b670de0b6b3a7640000610f568183613d12565b6017555050565b60005b6004811015610fd7576000818152602080805260408083205460199092528083205490516001600160a01b039092169281156108fc029290818181858888f19350505050158015610fb5573d6000803e3d6000fd5b5060008181526019602052604081205580610fcf81613da9565b915050610f60565b50565b6000610fe560085490565b82106110595760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610a38565b6008828154811061106c5761106c613e1a565b90600052602060002001549050919050565b600b546001600160a01b031633146110c65760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b601b805460ff19169055565b6000818152600260205260408120546001600160a01b0316806109ee5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610a38565b60006001600160a01b0382166111c85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a38565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b0316331461122c5760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b600b546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600b80546001600160a01b0319169055565b8161134357600f546001600160a01b031633146112fb5760405162461bcd60e51b815260206004820152602960248201527f6f6e6c79205f70617965655a65726f41646d696e2063616e206368616e67652060448201527f5f70617965655b305d00000000000000000000000000000000000000000000006064820152608401610a38565b60008052602080527f29ab76e7ca72530a8284597fb76b039d796325740b21528d71ade454c6f2dbe980546001600160a01b0383166001600160a01b03199091161790555050565b60008281526020805260409020546001600160a01b031633146113ce5760405162461bcd60e51b815260206004820152603660248201527f6f6e6c792063757272656e74207061796565732063616e206368616e6765207460448201527f6865697220726563657074696f6e2061646472657373000000000000000000006064820152608401610a38565b6000828152602080526040902080546001600160a01b0319166001600160a01b0383161790555b5050565b600b546001600160a01b031633146114415760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b6001600160a01b0382166000908152601c602052604081208054839290611469908490613ce6565b90915550505050565b601854341461148057600080fd5b565b6060600061148f8361115d565b9050806114b05760408051600080825260208201909252905b509392505050565b60008167ffffffffffffffff8111156114cb576114cb613e30565b6040519080825280602002602001820160405280156114f4578160200160208202803683370190505b50905060005b828110156114a85761150c8582610dce565b82828151811061151e5761151e613e1a565b60209081029190910101528061153381613da9565b9150506114fa565b50919050565b600c546001600160a01b03163314806115645750600b546001600160a01b031633145b6115d65760405162461bcd60e51b815260206004820152603960248201527f6f6e6c792074686520617574686f72697a6564206275696c646572206f72206360448201527f6f6e7472616374206f776e6572206d61792073657420555249000000000000006064820152608401610a38565b6014546040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b03898116921690636352211e9060240160206040518083038186803b15801561163557600080fd5b505afa158015611649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166d9190613898565b6001600160a01b03161461168057600080fd5b6014546040517f42842e0e0000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301526001602483015260448201889052909116906342842e0e90606401600060405180830381600087803b1580156116ee57600080fd5b505af1158015611702573d6000803e3d6000fd5b5050506000878152601f6020526040902061171f915083836136a3565b506117608685858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506125cd92505050565b50505050505050565b606060018054610a5590613d74565b6000811161178557600080fd5b601b5460ff1615156001146117dc5760405162461bcd60e51b815260206004820181905260248201527f4d696e74696e67206973206e6f742063757272656e746c7920656e61626c65646044820152606401610a38565b6016601554815481106117f1576117f1613e1a565b90600052602060002001548161180660085490565b6118109190613ce6565b111561185e5760405162461bcd60e51b815260206004820152601f60248201527f4d696e7420657863656564732063757272656e7420616c6c6f636174696f6e006044820152606401610a38565b336000908152601d60205260409020547f0000000000000000000000000000000000000000000000000000000000000bb8116118dc5760405162461bcd60e51b815260206004820152601760248201527f6d696e747350657257616c6c65742065786365656465640000000000000000006044820152606401610a38565b7f000000000000000000000000000000000000000000000000000000000000000581111561194c5760405162461bcd60e51b815260206004820152601160248201527f6d617850657254782065786365656465640000000000000000000000000000006044820152606401610a38565b8060175461195a9190613d12565b34146119a85760405162461bcd60e51b815260206004820152601360248201527f496e636f7272656374206d73672e76616c7565000000000000000000000000006044820152606401610a38565b60005b81811015611a9e5760006015546103e86119c59190613d12565b6013601554815481106119da576119da613e1a565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b031663b09532496040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611a3257600080fd5b505af1158015611a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6a9190613b40565b611a75906001613ce6565b611a7f9190613ce6565b9050611a8b3382612676565b5080611a9681613da9565b9150506119ab565b5060005b60048110156113f557601a546000828152602160205260408120549091600a91611acc9034613d12565b611ad69190613cfe565b611ae09190613cfe565b600083815260196020526040902054909150611afd908290613ce6565b6000838152601960205260409020555080611b1781613da9565b915050611aa2565b6113f5338383612690565b600f546001600160a01b03163314611b4157600080fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b0316331480611b865750600b546001600160a01b031633145b611bf85760405162461bcd60e51b815260206004820152603960248201527f6f6e6c792074686520617574686f72697a6564206275696c646572206f72206360448201527f6f6e7472616374206f776e6572206d61792073657420555249000000000000006064820152608401610a38565b6000858152601f60205260409020611c119083836136a3565b50611c528585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506125cd92505050565b5050505050565b600b546001600160a01b03163314611ca15760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b601b805460ff19166001179055565b611cba33836122fe565b611d2c5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610a38565b611d388484848461275f565b50505050565b600b546001600160a01b03163314611d865760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b601b5460ff16158015611d995750601554155b15611db357601b805460ff191660011790556114806127dd565b6002601554101561148057601660155481548110611dd357611dd3613e1a565b9060005260206000200154611de760085490565b1015611e355760405162461bcd60e51b815260206004820152601660248201527f7068617365206e6f742079657420736f6c64206f7574000000000000000000006044820152606401610a38565b60158054906000611e4583613da9565b91905055506114806127dd565b600b546001600160a01b03163314611e9a5760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b601755565b60606109ee82612d22565b600b546001600160a01b03163314611ef25760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b80516113f590600d9060208401906136ee565b600b546001600160a01b03163314611f4d5760405162461bcd60e51b81526020600482018190526024820152600080516020613e728339815191526044820152606401610a38565b6001600160a01b038116611fc95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a38565b600b546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b601b5460ff16151560011461207c5760405162461bcd60e51b815260206004820181905260248201527f4d696e74696e67206973206e6f742063757272656e746c7920656e61626c65646044820152606401610a38565b60166015548154811061209157612091613e1a565b90600052602060002001546120a560085490565b106120f25760405162461bcd60e51b815260206004820152601a60248201527f457863656564732063757272656e7420616c6c6f636174696f6e0000000000006044820152606401610a38565b336000908152601c6020526040902054600111156121525760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f756768204372656469747300000000000000000000000000006044820152606401610a38565b60006015546103e86121649190613d12565b60136015548154811061217957612179613e1a565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b031663b09532496040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156121d157600080fd5b505af11580156121e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122099190613b40565b612214906001613ce6565b61221e9190613ce6565b905061222a3382612676565b336000908152601c6020526040812080546001929061224a908490613d31565b909155505050565b60006001600160e01b031982167f780e9d630000000000000000000000000000000000000000000000000000000014806109ee57506109ee82612e68565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906122c5826110d2565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166123775760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a38565b6000612382836110d2565b9050806001600160a01b0316846001600160a01b031614806123c957506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806123ed5750836001600160a01b03166123e284610ad8565b6001600160a01b0316145b949350505050565b826001600160a01b0316612408826110d2565b6001600160a01b0316146124845760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610a38565b6001600160a01b0382166124ff5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a38565b61250a838383612f03565b612515600082612290565b6001600160a01b038316600090815260036020526040812080546001929061253e908490613d31565b90915550506001600160a01b038216600090815260036020526040812080546001929061256c908490613ce6565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000828152600260205260409020546001600160a01b03166126575760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201527f6578697374656e7420746f6b656e0000000000000000000000000000000000006064820152608401610a38565b6000828152600a602090815260409091208251610c9a928401906136ee565b6113f5828260405180602001604052806000815250612f0e565b816001600160a01b0316836001600160a01b031614156126f25760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a38565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61276a8484846123f5565b61277684848484612f8c565b611d385760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610a38565b60005b600e54811015612a5257601454600e80546001600160a01b0390921691636352211e91908490811061281457612814613e1a565b90600052602060002001546040518263ffffffff1660e01b815260040161283d91815260200190565b60206040518083038186803b15801561285557600080fd5b505afa925050508015612885575060408051601f3d908101601f1916820190925261288291810190613898565b60015b6128bf573d8080156128b3576040519150601f19603f3d011682016040523d82523d6000602084013e6128b8565b606091505b5050612a40565b50601454600e80546000926001600160a01b031691636352211e91859081106128ea576128ea613e1a565b90600052602060002001546040518263ffffffff1660e01b815260040161291391815260200190565b60206040518083038186803b15801561292b57600080fd5b505afa15801561293f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129639190613898565b905060006015546103e86129779190613d12565b60136015548154811061298c5761298c613e1a565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b031663b09532496040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156129e457600080fd5b505af11580156129f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1c9190613b40565b612a27906001613ce6565b612a319190613ce6565b9050612a3d8282612676565b50505b80612a4a81613da9565b9150506127e0565b5060005b602260155481548110612a6b57612a6b613e1a565b9060005260206000200154811015612b795760006015546103e8612a8f9190613d12565b601360155481548110612aa457612aa4613e1a565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b031663b09532496040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612afc57600080fd5b505af1158015612b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b349190613b40565b612b3f906001613ce6565b612b499190613ce6565b9050612b66612b60600b546001600160a01b031690565b82612676565b5080612b7181613da9565b915050612a56565b5060408051606081018252600f546001600160a01b0390811682527f156774b33c8bc7cb83eda4cbc43b36c7c9490ff8913c488ccd5132cfc71344ea548116602080840191909152600260009081529080527f2c5f9a2e204d4db70ad0f9037679e33061b4c51a386497019bee969e16be28d75490911692820192909252905b60038110156113f55760005b6003811015612d0f5760006015546103e8612c209190613d12565b601360155481548110612c3557612c35613e1a565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b031663b09532496040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612c8d57600080fd5b505af1158015612ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc59190613b40565b612cd0906001613ce6565b612cda9190613ce6565b9050612cfc848460038110612cf157612cf1613e1a565b602002015182612676565b5080612d0781613da9565b915050612c05565b5080612d1a81613da9565b915050612bf9565b6000818152600260205260409020546060906001600160a01b0316612daf5760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f722060448201527f6e6f6e6578697374656e7420746f6b656e0000000000000000000000000000006064820152608401610a38565b6000828152600a602052604081208054612dc890613d74565b80601f0160208091040260200160405190810160405280929190818152602001828054612df490613d74565b8015612e415780601f10612e1657610100808354040283529160200191612e41565b820191906000526020600020905b815481529060010190602001808311612e2457829003601f168201915b50505050509050600081511115612e585792915050565b612e61836130e4565b9392505050565b60006001600160e01b031982167f80ac58cd000000000000000000000000000000000000000000000000000000001480612ecb57506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806109ee57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316146109ee565b610c9a8383836131cc565b612f188383613284565b612f256000848484612f8c565b610c9a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610a38565b60006001600160a01b0384163b156130d957604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612fd0903390899088908890600401613c53565b602060405180830381600087803b158015612fea57600080fd5b505af192505050801561301a575060408051601f3d908101601f1916820190925261301791810190613ac1565b60015b6130bf573d808015613048576040519150601f19603f3d011682016040523d82523d6000602084013e61304d565b606091505b5080516130b75760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610a38565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506123ed565b506001949350505050565b6000818152600260205260409020546060906001600160a01b03166131715760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610a38565b600061317b6133d2565b9050600081511161319b5760405180602001604052806000815250612e61565b806131a5846133e1565b6040516020016131b6929190613c24565b6040516020818303038152906040529392505050565b6001600160a01b0383166132275761322281600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b61324a565b816001600160a01b0316836001600160a01b03161461324a5761324a8382613513565b6001600160a01b03821661326157610c9a816135b0565b826001600160a01b0316826001600160a01b031614610c9a57610c9a828261365f565b6001600160a01b0382166132da5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a38565b6000818152600260205260409020546001600160a01b03161561333f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a38565b61334b60008383612f03565b6001600160a01b0382166000908152600360205260408120805460019290613374908490613ce6565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6060600d8054610a5590613d74565b60608161342157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561344b578061343581613da9565b91506134449050600a83613cfe565b9150613425565b60008167ffffffffffffffff81111561346657613466613e30565b6040519080825280601f01601f191660200182016040528015613490576020820181803683370190505b5090505b84156123ed576134a5600183613d31565b91506134b2600a86613dc4565b6134bd906030613ce6565b60f81b8183815181106134d2576134d2613e1a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061350c600a86613cfe565b9450613494565b600060016135208461115d565b61352a9190613d31565b60008381526007602052604090205490915080821461357d576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906135c290600190613d31565b600083815260096020526040812054600880549394509092849081106135ea576135ea613e1a565b90600052602060002001549050806008838154811061360b5761360b613e1a565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061364357613643613e04565b6001900381819060005260206000200160009055905550505050565b600061366a8361115d565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b8280548282559060005260206000209081019282156136de579160200282015b828111156136de5782358255916020019190600101906136c3565b506136ea929150613762565b5090565b8280546136fa90613d74565b90600052602060002090601f01602090048101928261371c57600085556136de565b82601f1061373557805160ff19168380011785556136de565b828001600101855582156136de579182015b828111156136de578251825591602001919060010190613747565b5b808211156136ea5760008155600101613763565b600067ffffffffffffffff8084111561379257613792613e30565b604051601f8501601f19908116603f011681019082821181831017156137ba576137ba613e30565b816040528093508581528686860111156137d357600080fd5b858560208301376000602087830101525050509392505050565b60008083601f8401126137ff57600080fd5b50813567ffffffffffffffff81111561381757600080fd5b6020830191508360208260051b850101111561383257600080fd5b9250929050565b60008083601f84011261384b57600080fd5b50813567ffffffffffffffff81111561386357600080fd5b60208301915083602082850101111561383257600080fd5b60006020828403121561388d57600080fd5b8135612e6181613e46565b6000602082840312156138aa57600080fd5b8151612e6181613e46565b600080604083850312156138c857600080fd5b82356138d381613e46565b915060208301356138e381613e46565b809150509250929050565b60008060006060848603121561390357600080fd5b833561390e81613e46565b9250602084013561391e81613e46565b929592945050506040919091013590565b6000806000806080858703121561394557600080fd5b843561395081613e46565b9350602085013561396081613e46565b925060408501359150606085013567ffffffffffffffff81111561398357600080fd5b8501601f8101871361399457600080fd5b6139a387823560208401613777565b91505092959194509250565b600080604083850312156139c257600080fd5b82356139cd81613e46565b9150602083013580151581146138e357600080fd5b600080604083850312156139f557600080fd5b8235613a0081613e46565b946020939093013593505050565b600080600080600080600060a0888a031215613a2957600080fd5b8735613a3481613e46565b96506020880135955060408801359450606088013567ffffffffffffffff80821115613a5f57600080fd5b613a6b8b838c01613839565b909650945060808a0135915080821115613a8457600080fd5b50613a918a828b016137ed565b989b979a50959850939692959293505050565b600060208284031215613ab657600080fd5b8135612e6181613e5b565b600060208284031215613ad357600080fd5b8151612e6181613e5b565b600060208284031215613af057600080fd5b813567ffffffffffffffff811115613b0757600080fd5b8201601f81018413613b1857600080fd5b6123ed84823560208401613777565b600060208284031215613b3957600080fd5b5035919050565b600060208284031215613b5257600080fd5b5051919050565b60008060408385031215613b6c57600080fd5b8235915060208301356138e381613e46565b600080600080600060608688031215613b9657600080fd5b85359450602086013567ffffffffffffffff80821115613bb557600080fd5b613bc189838a01613839565b90965094506040880135915080821115613bda57600080fd5b50613be7888289016137ed565b969995985093965092949392505050565b60008151808452613c10816020860160208601613d48565b601f01601f19169290920160200192915050565b60008351613c36818460208801613d48565b835190830190613c4a818360208801613d48565b01949350505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152613c856080830184613bf8565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613cc757835183529284019291840191600101613cab565b50909695505050505050565b602081526000612e616020830184613bf8565b60008219821115613cf957613cf9613dd8565b500190565b600082613d0d57613d0d613dee565b500490565b6000816000190483118215151615613d2c57613d2c613dd8565b500290565b600082821015613d4357613d43613dd8565b500390565b60005b83811015613d63578181015183820152602001613d4b565b83811115611d385750506000910152565b600181811c90821680613d8857607f821691505b6020821081141561153b57634e487b7160e01b600052602260045260246000fd5b6000600019821415613dbd57613dbd613dd8565b5060010190565b600082613dd357613dd3613dee565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610fd757600080fd5b6001600160e01b031981168114610fd757600080fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220c66d1e1207dcc99531e36120013323b7d89dd349543312e09c795ce078468a7b64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000000b46443a204465616c65727a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000346444400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): FD: Dealerz
Arg [1] : symbol (string): FDD
Arg [2] : defaultURI (string):
Arg [3] : priceWei (uint256): 10000000000000000000
Arg [4] : mintsPerTx (uint256): 5
Arg [5] : walletAllowance (uint256): 3000
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [3] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000bb8
Arg [6] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [7] : 46443a204465616c65727a000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [9] : 4644440000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
48514:9894:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58012:6;58007:171;58028:1;58024;:5;58007:171;;;58095:16;;58050:14;58079;;;:11;:14;;;;;;58050;;58113:2;;58069:24;;:9;:24;:::i;:::-;58068:43;;;;:::i;:::-;58067:48;;;;:::i;:::-;58145:12;;;;:9;:12;;;;;;58050:65;;-1:-1:-1;58145:21:0;;58050:65;;58145:21;:::i;:::-;58130:12;;;;:9;:12;;;;;:36;-1:-1:-1;58140:1:0;58031:3;58140:1;58031:3;:::i;:::-;;;;58007:171;;;;48514:9894;;;;;58193:212;;;;;;;;;;-1:-1:-1;58193:212:0;;;;;:::i;:::-;;:::i;:::-;;;10472:14:1;;10465:22;10447:41;;10435:2;10420:18;58193:212:0;;;;;;;;51770:88;;;;;;;;;;-1:-1:-1;51770:88:0;;;;;:::i;:::-;;:::i;:::-;;24496:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26056:221::-;;;;;;;;;;-1:-1:-1;26056:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8676:55:1;;;8658:74;;8646:2;8631:18;26056:221:0;8512:226:1;25579:411:0;;;;;;;;;;-1:-1:-1;25579:411:0;;;;;:::i;:::-;;:::i;54693:206::-;;;;;;;;;;-1:-1:-1;54693:206:0;;;;;:::i;:::-;;:::i;:::-;;;23230:25:1;;;23218:2;23203:18;54693:206:0;23084:177:1;49420:45:0;;;;;;;;;;-1:-1:-1;49420:45:0;;;;;:::i;:::-;;:::i;39224:113::-;;;;;;;;;;-1:-1:-1;39312:10:0;:17;39224:113;;49827:34;;;;;;;;;;-1:-1:-1;49827:34:0;;;;;;;;26806:339;;;;;;;;;;-1:-1:-1;26806:339:0;;;;;:::i;:::-;;:::i;49384:29::-;;;;;;;;;;;;;;;;38892:256;;;;;;;;;;-1:-1:-1;38892:256:0;;;;;:::i;:::-;;:::i;51285:103::-;;;;;;;;;;-1:-1:-1;51285:103:0;;;;;:::i;:::-;;:::i;49737:44::-;;;;;;;;;;-1:-1:-1;49737:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;49548:39;;;;;;;;;;;;;;;27216:185;;;;;;;;;;-1:-1:-1;27216:185:0;;;;;:::i;:::-;;:::i;49297:78::-;;;;;;;;;;-1:-1:-1;49297:78:0;;;;-1:-1:-1;;;;;49297:78:0;;;51633:129;;;;;;;;;;-1:-1:-1;51633:129:0;;;;;:::i;:::-;;:::i;56695:175::-;;;;;;;;;;;;;:::i;39414:233::-;;;;;;;;;;-1:-1:-1;39414:233:0;;;;;:::i;:::-;;:::i;56608:79::-;;;;;;;;;;;;;:::i;24190:239::-;;;;;;;;;;-1:-1:-1;24190:239:0;;;;;:::i;:::-;;:::i;23920:208::-;;;;;;;;;;-1:-1:-1;23920:208:0;;;;;:::i;:::-;;:::i;11297:148::-;;;;;;;;;;;;;:::i;57005:413::-;;;;;;;;;;-1:-1:-1;57005:413:0;;;;;:::i;:::-;;:::i;56882:115::-;;;;;;;;;;-1:-1:-1;56882:115:0;;;;;:::i;:::-;;:::i;53323:92::-;;;:::i;51866:540::-;;;;;;;;;;-1:-1:-1;51866:540:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;10646:87::-;;;;;;;;;;-1:-1:-1;10719:6:0;;-1:-1:-1;;;;;10719:6:0;10646:87;;53745:474;;;;;;;;;;-1:-1:-1;53745:474:0;;;;;:::i;:::-;;:::i;24665:104::-;;;;;;;;;;;;;:::i;49625:20::-;;;;;;;;;;;;;;;;52414:901;;;;;;:::i;:::-;;:::i;26349:155::-;;;;;;;;;;-1:-1:-1;26349:155:0;;;;;:::i;:::-;;:::i;51396:130::-;;;;;;;;;;-1:-1:-1;51396:130:0;;;;;:::i;:::-;;:::i;53423:314::-;;;;;;;;;;-1:-1:-1;53423:314:0;;;;;:::i;:::-;;:::i;56518:78::-;;;;;;;;;;;;;:::i;27472:328::-;;;;;;;;;;-1:-1:-1;27472:328:0;;;;;:::i;:::-;;:::i;55154:370::-;;;;;;;;;;;;;:::i;51534:91::-;;;;;;;;;;-1:-1:-1;51534:91:0;;;;;:::i;:::-;;:::i;57765:196::-;;;;;;;;;;-1:-1:-1;57765:196:0;;;;;:::i;:::-;;:::i;48981:70::-;;;;;;;;;;-1:-1:-1;48981:70:0;;;;-1:-1:-1;;;;;48981:70:0;;;54907:114;;;;;;;;;;-1:-1:-1;54907:114:0;;;;;:::i;:::-;;:::i;26575:164::-;;;;;;;;;;-1:-1:-1;26575:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;26696:25:0;;;26672:4;26696:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;26575:164;49982:48;;;;;;;;;;-1:-1:-1;49982:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;49703:25;;;;;;;;;;;;;;;;11600:244;;;;;;;;;;-1:-1:-1;11600:244:0;;;;;:::i;:::-;;:::i;54231:454::-;;;;;;;;;;;;;:::i;49472:33::-;;;;;;;;;;;;;;;58193:212;58332:4;58361:36;58385:11;58361:23;:36::i;:::-;58354:43;58193:212;-1:-1:-1;;58193:212:0:o;51770:88::-;10719:6;;-1:-1:-1;;;;;10719:6:0;832:10;10866:23;10858:68;;;;-1:-1:-1;;;10858:68:0;;20568:2:1;10858:68:0;;;20550:21:1;;;20587:18;;;20580:30;-1:-1:-1;;;;;;;;;;;20626:18:1;;;20619:62;20698:18;;10858:68:0;;;;;;;;;51834:10:::1;:16:::0;51770:88::o;24496:100::-;24550:13;24583:5;24576:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24496:100;:::o;26056:221::-;26132:7;29399:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29399:16:0;26152:73;;;;-1:-1:-1;;;26152:73:0;;19800:2:1;26152:73:0;;;19782:21:1;19839:2;19819:18;;;19812:30;19878:34;19858:18;;;19851:62;-1:-1:-1;;;19929:18:1;;;19922:42;19981:19;;26152:73:0;19598:408:1;26152:73:0;-1:-1:-1;26245:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26245:24:0;;26056:221::o;25579:411::-;25660:13;25676:23;25691:7;25676:14;:23::i;:::-;25660:39;;25724:5;-1:-1:-1;;;;;25718:11:0;:2;-1:-1:-1;;;;;25718:11:0;;;25710:57;;;;-1:-1:-1;;;25710:57:0;;21693:2:1;25710:57:0;;;21675:21:1;21732:2;21712:18;;;21705:30;21771:34;21751:18;;;21744:62;21842:3;21822:18;;;21815:31;21863:19;;25710:57:0;21491:397:1;25710:57:0;832:10;-1:-1:-1;;;;;25802:21:0;;;;:62;;-1:-1:-1;25827:37:0;25844:5;832:10;26575:164;:::i;25827:37::-;25780:168;;;;-1:-1:-1;;;25780:168:0;;15877:2:1;25780:168:0;;;15859:21:1;15916:2;15896:18;;;15889:30;15955:34;15935:18;;;15928:62;16026:26;16006:18;;;15999:54;16070:19;;25780:168:0;15675:420:1;25780:168:0;25961:21;25970:2;25974:7;25961:8;:21::i;:::-;25649:341;25579:411;;:::o;54693:206::-;54762:7;-1:-1:-1;;;;;54790:19:0;;54782:74;;;;-1:-1:-1;;;54782:74:0;;16302:2:1;54782:74:0;;;16284:21:1;16341:2;16321:18;;;16314:30;16380:34;16360:18;;;16353:62;-1:-1:-1;;;16431:18:1;;;16424:40;16481:19;;54782:74:0;16100:406:1;54782:74:0;-1:-1:-1;;;;;;54874:17:0;;;;;:10;:17;;;;;;;54693:206::o;49420:45::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49420:45:0;:::o;26806:339::-;27001:41;832:10;27034:7;27001:18;:41::i;:::-;26993:103;;;;-1:-1:-1;;;26993:103:0;;22095:2:1;26993:103:0;;;22077:21:1;22134:2;22114:18;;;22107:30;22173:34;22153:18;;;22146:62;22244:19;22224:18;;;22217:47;22281:19;;26993:103:0;21893:413:1;26993:103:0;27109:28;27119:4;27125:2;27129:7;27109:9;:28::i;38892:256::-;38989:7;39025:23;39042:5;39025:16;:23::i;:::-;39017:5;:31;39009:87;;;;-1:-1:-1;;;39009:87:0;;11597:2:1;39009:87:0;;;11579:21:1;11636:2;11616:18;;;11609:30;11675:34;11655:18;;;11648:62;11746:13;11726:18;;;11719:41;11777:19;;39009:87:0;11395:407:1;39009:87:0;-1:-1:-1;;;;;;39114:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;38892:256::o;51285:103::-;10719:6;;-1:-1:-1;;;;;10719:6:0;832:10;10866:23;10858:68;;;;-1:-1:-1;;;10858:68:0;;20568:2:1;10858:68:0;;;20550:21:1;;;20587:18;;;20580:30;-1:-1:-1;;;;;;;;;;;20626:18:1;;;20619:62;20698:18;;10858:68:0;20366:356:1;10858:68:0;51356:11:::1;:24:::0;;-1:-1:-1;;;;;;51356:24:0::1;-1:-1:-1::0;;;;;51356:24:0;;;::::1;::::0;;;::::1;::::0;;51285:103::o;27216:185::-;27354:39;27371:4;27377:2;27381:7;27354:39;;;;;;;;;;;;:16;:39::i;51633:129::-;10719:6;;-1:-1:-1;;;;;10719:6:0;832:10;10866:23;10858:68;;;;-1:-1:-1;;;10858:68:0;;20568:2:1;10858:68:0;;;20550:21:1;;;20587:18;;;20580:30;-1:-1:-1;;;;;;;;;;;20626:18:1;;;20619:62;20698:18;;10858:68:0;20366:356:1;10858:68:0;51714:7:::1;51740:14;51714:7:::0;51740:8;:14:::1;:::i;:::-;51732:5;:22:::0;-1:-1:-1;;51633:129:0:o;56695:175::-;56741:6;56736:127;56757:1;56753;:5;56736:127;;;56787:9;;;;:6;:9;;;;;;;;56807;:12;;;;;;;56779:41;;-1:-1:-1;;;;;56787:9:0;;;;56779:41;;;;;;;56787:9;56779:41;56807:12;56787:9;56779:41;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56850:1:0;56835:12;;;:9;:12;;;;;:16;56845:1;56760:3;56845:1;56760:3;:::i;:::-;;;;56736:127;;;;56695:175::o;39414:233::-;39489:7;39525:30;39312:10;:17;;39224:113;39525:30;39517:5;:38;39509:95;;;;-1:-1:-1;;;39509:95:0;;22873:2:1;39509:95:0;;;22855:21:1;22912:2;22892:18;;;22885:30;22951:34;22931:18;;;22924:62;23022:14;23002:18;;;22995:42;23054:19;;39509:95:0;22671:408:1;39509:95:0;39622:10;39633:5;39622:17;;;;;;;;:::i;:::-;;;;;;;;;39615:24;;39414:233;;;:::o;56608:79::-;10719:6;;-1:-1:-1;;;;;10719:6:0;832:10;10866:23;10858:68;;;;-1:-1:-1;;;10858:68:0;;20568:2:1;10858:68:0;;;20550:21:1;;;20587:18;;;20580:30;-1:-1:-1;;;;;;;;;;;20626:18:1;;;20619:62;20698:18;;10858:68:0;20366:356:1;10858:68:0;56657:14:::1;:22:::0;;-1:-1:-1;;56657:22:0::1;::::0;;56608:79::o;24190:239::-;24262:7;24298:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24298:16:0;24333:19;24325:73;;;;-1:-1:-1;;;24325:73:0;;17060:2:1;24325:73:0;;;17042:21:1;17099:2;17079:18;;;17072:30;17138:34;17118:18;;;17111:62;17209:11;17189:18;;;17182:39;17238:19;;24325:73:0;16858:405:1;23920:208:0;23992:7;-1:-1:-1;;;;;24020:19:0;;24012:74;;;;-1:-1:-1;;;24012:74:0;;16302:2:1;24012:74:0;;;16284:21:1;16341:2;16321:18;;;16314:30;16380:34;16360:18;;;16353:62;-1:-1:-1;;;16431:18:1;;;16424:40;16481:19;;24012:74:0;16100:406:1;24012:74:0;-1:-1:-1;;;;;;24104:16:0;;;;;:9;:16;;;;;;;23920:208::o;11297:148::-;10719:6;;-1:-1:-1;;;;;10719:6:0;832:10;10866:23;10858:68;;;;-1:-1:-1;;;10858:68:0;;20568:2:1;10858:68:0;;;20550:21:1;;;20587:18;;;20580:30;-1:-1:-1;;;;;;;;;;;20626:18:1;;;20619:62;20698:18;;10858:68:0;20366:356:1;10858:68:0;11388:6:::1;::::0;11367:40:::1;::::0;11404:1:::1;::::0;-1:-1:-1;;;;;11388:6:0::1;::::0;11367:40:::1;::::0;11404:1;;11367:40:::1;11418:6;:19:::0;;-1:-1:-1;;;;;;11418:19:0::1;::::0;;11297:148::o;57005:413::-;57090:10;57086:325;;57138:10;;-1:-1:-1;;;;;57138:10:0;57124;:24;57116:78;;;;-1:-1:-1;;;57116:78:0;;15467:2:1;57116:78:0;;;15449:21:1;15506:2;15486:18;;;15479:30;15545:34;15525:18;;;15518:62;15616:11;15596:18;;;15589:39;15645:19;;57116:78:0;15265:405:1;57116:78:0;57209:9;;;:6;:9;;;:22;;-1:-1:-1;;;;;57209:22:0;;-1:-1:-1;;;;;;57209:22:0;;;;;;57005:413;;:::o;57086:325::-;57286:13;;;;:6;:13;;;;;;-1:-1:-1;;;;;57286:13:0;57272:10;:27;57264:94;;;;-1:-1:-1;;;57264:94:0;;17885:2:1;57264:94:0;;;17867:21:1;17924:2;17904:18;;;17897:30;17963:34;17943:18;;;17936:62;18034:24;18014:18;;;18007:52;18076:19;;57264:94:0;17683:418:1;57264:94:0;57373:13;;;;:6;:13;;;;;:26;;-1:-1:-1;;;;;;57373:26:0;-1:-1:-1;;;;;57373:26:0;;;;;57086:325;57005:413;;:::o;56882:115::-;10719:6;;-1:-1:-1;;;;;10719:6:0;832:10;10866:23;10858:68;;;;-1:-1:-1;;;10858:68:0;;20568:2:1;10858:68:0;;;20550:21:1;;;20587:18;;;20580:30;-1:-1:-1;;;;;;;;;;;20626:18:1;;;20619:62;20698:18;;10858:68:0;20366:356:1;10858:68:0;-1:-1:-1;;;;;56961:17:0;::::1;;::::0;;;:10:::1;:17;::::0;;;;:28;;56982:7;;56961:17;:28:::1;::::0;56982:7;;56961:28:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;56882:115:0:o;53323:92::-;53396:10;;53383:9;:23;53375:32;;;;;;53323:92::o;51866:540::-;51927:16;51957:18;51978:17;51988:6;51978:9;:17::i;:::-;51957:38;-1:-1:-1;52010:15:0;52006:393;;52087:16;;;52101:1;52087:16;;;;;;;;;;;-1:-1:-1;52080:23:0;51866:540;-1:-1:-1;;;51866:540:0:o;52006:393::-;52136:23;52176:10;52162:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52162:25:0;;52136:51;;52202:13;52230:130;52254:10;52246:5;:18;52230:130;;;52310:34;52330:6;52338:5;52310:19;:34::i;:::-;52294:6;52301:5;52294:13;;;;;;;;:::i;:::-;;;;;;;;;;:50;52266:7;;;;:::i;:::-;;;;52230:130;;52006:393;51946:460;51866:540;;;:::o;53745:474::-;53908:11;;-1:-1:-1;;;;;53908:11:0;53894:10;:25;;:50;;-1:-1:-1;10719:6:0;;-1:-1:-1;;;;;10719:6:0;53923:10;:21;53894:50;53886:120;;;;-1:-1:-1;;;53886:120:0;;11171:2:1;53886:120:0;;;11153:21:1;11210:2;11190:18;;;11183:30;11249:34;11229:18;;;11222:62;11320:27;11300:18;;;11293:55;11365:19;;53886:120:0;10969:421:1;53886:120:0;54025:11;;:27;;;;;;;;23230:25:1;;;-1:-1:-1;;;;;54025:37:0;;;;:11;;:19;;23203:18:1;;54025:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;54025:37:0;;54017:46;;;;;;54074:11;;:56;;;;;-1:-1:-1;;;;;9548:15:1;;;54074:56:0;;;9530:34:1;54074:11:0;9580:18:1;;;9573:43;9632:18;;;9625:34;;;54074:11:0;;;;:28;;9442:18:1;;54074:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54141:17:0;;;;:8;:17;;;;;:27;;-1:-1:-1;54161:7:0;;54141:27;:::i;:::-;;54179:32;54198:7;54207:3;;54179:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54179:18:0;;-1:-1:-1;;;54179:32:0:i;:::-;53745:474;;;;;;;:::o;24665:104::-;24721:13;24754:7;24747:14;;;;;:::i;52414:901::-;52495:1;52482:10;:14;52474:23;;;;;;52516:14;;;;:22;;:14;:22;52508:67;;;;-1:-1:-1;;;52508:67:0;;18669:2:1;52508:67:0;;;18651:21:1;;;18688:18;;;18681:30;18747:34;18727:18;;;18720:62;18799:18;;52508:67:0;18467:356:1;52508:67:0;52624:9;52634:10;;52624:21;;;;;;;;:::i;:::-;;;;;;;;;52610:10;52594:13;39312:10;:17;;39224:113;52594:13;:26;;;;:::i;:::-;:51;;52586:95;;;;-1:-1:-1;;;52586:95:0;;22513:2:1;52586:95:0;;;22495:21:1;22552:2;22532:18;;;22525:30;22591:33;22571:18;;;22564:61;22642:18;;52586:95:0;22311:355:1;52586:95:0;52714:10;52700:25;;;;:13;:25;;;;;;52728:14;-1:-1:-1;52692:78:0;;;;-1:-1:-1;;;52692:78:0;;19030:2:1;52692:78:0;;;19012:21:1;19069:2;19049:18;;;19042:30;19108:25;19088:18;;;19081:53;19151:18;;52692:78:0;18828:347:1;52692:78:0;52803:8;52789:10;:22;;52781:52;;;;-1:-1:-1;;;52781:52:0;;14357:2:1;52781:52:0;;;14339:21:1;14396:2;14376:18;;;14369:30;14435:19;14415:18;;;14408:47;14472:18;;52781:52:0;14155:341:1;52781:52:0;52871:10;52865:5;;:16;;;;:::i;:::-;52852:9;:29;52844:61;;;;-1:-1:-1;;;52844:61:0;;20929:2:1;52844:61:0;;;20911:21:1;20968:2;20948:18;;;20941:30;21007:21;20987:18;;;20980:49;21046:18;;52844:61:0;20727:343:1;52844:61:0;52931:6;52926:199;52947:10;52943:1;:14;52926:199;;;52979:15;53057:10;;53052:4;:15;;;;:::i;:::-;52997:16;53014:10;;52997:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;52997:28:0;-1:-1:-1;;;;;52997:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;53047:1;52997:51;:::i;:::-;:71;;;;:::i;:::-;52979:89;;53083:30;53093:10;53105:7;53083:9;:30::i;:::-;-1:-1:-1;52959:3:0;;;;:::i;:::-;;;;52926:199;;;;53142:6;53137:171;53158:1;53154;:5;53137:171;;;53225:16;;53180:14;53209;;;:11;:14;;;;;;53180;;53243:2;;53199:24;;:9;:24;:::i;:::-;53198:43;;;;:::i;:::-;53197:48;;;;:::i;:::-;53275:12;;;;:9;:12;;;;;;53180:65;;-1:-1:-1;53275:21:0;;53180:65;;53275:21;:::i;:::-;53260:12;;;;:9;:12;;;;;:36;-1:-1:-1;53270:1:0;53161:3;53270:1;53161:3;:::i;:::-;;;;53137:171;;26349:155;26444:52;832:10;26477:8;26487;26444:18;:52::i;51396:130::-;51476:10;;-1:-1:-1;;;;;51476:10:0;51462;:24;51454:33;;;;;;51498:10;:20;;-1:-1:-1;;;;;;51498:20:0;-1:-1:-1;;;;;51498:20:0;;;;;;;;;;51396:130::o;53423:314::-;53550:11;;-1:-1:-1;;;;;53550:11:0;53536:10;:25;;:50;;-1:-1:-1;10719:6:0;;-1:-1:-1;;;;;10719:6:0;53565:10;:21;53536:50;53528:120;;;;-1:-1:-1;;;53528:120:0;;11171:2:1;53528:120:0;;;11153:21:1;11210:2;11190:18;;;11183:30;11249:34;11229:18;;;11222:62;11320:27;11300:18;;;11293:55;11365:19;;53528:120:0;10969:421:1;53528:120:0;53659:17;;;;:8;:17;;;;;:27;;53679:7;;53659:27;:::i;:::-;;53697:32;53716:7;53725:3;;53697:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53697:18:0;;-1:-1:-1;;;53697:32:0:i;:::-;53423:314;;;;;:::o;56518:78::-;10719:6;;-1:-1:-1;;;;;10719:6:0;832:10;10866:23;10858:68;;;;-1:-1:-1;;;10858:68:0;;20568:2:1;10858:68:0;;;20550:21:1;;;20587:18;;;20580:30;-1:-1:-1;;;;;;;;;;;20626:18:1;;;20619:62;20698:18;;10858:68:0;20366:356:1;10858:68:0;56567:14:::1;:21:::0;;-1:-1:-1;;56567:21:0::1;56584:4;56567:21;::::0;;56518:78::o;27472:328::-;27647:41;832:10;27680:7;27647:18;:41::i;:::-;27639:103;;;;-1:-1:-1;;;27639:103:0;;22095:2:1;27639:103:0;;;22077:21:1;22134:2;22114:18;;;22107:30;22173:34;22153:18;;;22146:62;22244:19;22224:18;;;22217:47;22281:19;;27639:103:0;21893:413:1;27639:103:0;27753:39;27767:4;27773:2;27777:7;27786:5;27753:13;:39::i;:::-;27472:328;;;;:::o;55154:370::-;10719:6;;-1:-1:-1;;;;;10719:6:0;832:10;10866:23;10858:68;;;;-1:-1:-1;;;10858:68:0;;20568:2:1;10858:68:0;;;20550:21:1;;;20587:18;;;20580:30;-1:-1:-1;;;;;;;;;;;20626:18:1;;;20619:62;20698:18;;10858:68:0;20366:356:1;10858:68:0;55210:14:::1;::::0;::::1;;:23;::::0;::::1;:42;;-1:-1:-1::0;55237:10:0::1;::::0;:15;55210:42:::1;55206:311;;;55269:14;:21:::0;;-1:-1:-1;;55269:21:0::1;55286:4;55269:21;::::0;;55305:16:::1;:14;:16::i;55206:311::-;55356:1;55343:10;;:14;55339:178;;;55399:9;55409:10;;55399:21;;;;;;;;:::i;:::-;;;;;;;;;55382:13;39312:10:::0;:17;;39224:113;55382:13:::1;:38;;55374:73;;;::::0;-1:-1:-1;;;55374:73:0;;15116:2:1;55374:73:0::1;::::0;::::1;15098:21:1::0;15155:2;15135:18;;;15128:30;15194:24;15174:18;;;15167:52;15236:18;;55374:73:0::1;14914:346:1::0;55374:73:0::1;55462:10;:12:::0;;;:10:::1;:12;::::0;::::1;:::i;:::-;;;;;;55489:16;:14;:16::i;51534:91::-:0;10719:6;;-1:-1:-1;;;;;10719:6:0;832:10;10866:23;10858:68;;;;-1:-1:-1;;;10858:68:0;;20568:2:1;10858:68:0;;;20550:21:1;;;20587:18;;;20580:30;-1:-1:-1;;;;;;;;;;;20626:18:1;;;20619:62;20698:18;;10858:68:0;20366:356:1;10858:68:0;51601:5:::1;:16:::0;51534:91::o;57765:196::-;57892:13;57930:23;57945:7;57930:14;:23::i;54907:114::-;10719:6;;-1:-1:-1;;;;;10719:6:0;832:10;10866:23;10858:68;;;;-1:-1:-1;;;10858:68:0;;20568:2:1;10858:68:0;;;20550:21:1;;;20587:18;;;20580:30;-1:-1:-1;;;;;;;;;;;20626:18:1;;;20619:62;20698:18;;10858:68:0;20366:356:1;10858:68:0;54984:29;;::::1;::::0;:16:::1;::::0;:29:::1;::::0;::::1;::::0;::::1;:::i;11600:244::-:0;10719:6;;-1:-1:-1;;;;;10719:6:0;832:10;10866:23;10858:68;;;;-1:-1:-1;;;10858:68:0;;20568:2:1;10858:68:0;;;20550:21:1;;;20587:18;;;20580:30;-1:-1:-1;;;;;;;;;;;20626:18:1;;;20619:62;20698:18;;10858:68:0;20366:356:1;10858:68:0;-1:-1:-1;;;;;11689:22:0;::::1;11681:73;;;::::0;-1:-1:-1;;;11681:73:0;;12428:2:1;11681:73:0::1;::::0;::::1;12410:21:1::0;12467:2;12447:18;;;12440:30;12506:34;12486:18;;;12479:62;12577:8;12557:18;;;12550:36;12603:19;;11681:73:0::1;12226:402:1::0;11681:73:0::1;11791:6;::::0;11770:38:::1;::::0;-1:-1:-1;;;;;11770:38:0;;::::1;::::0;11791:6:::1;::::0;11770:38:::1;::::0;11791:6:::1;::::0;11770:38:::1;11819:6;:17:::0;;-1:-1:-1;;;;;;11819:17:0::1;-1:-1:-1::0;;;;;11819:17:0;;;::::1;::::0;;;::::1;::::0;;11600:244::o;54231:454::-;54279:14;;;;:22;;:14;:22;54271:67;;;;-1:-1:-1;;;54271:67:0;;18669:2:1;54271:67:0;;;18651:21:1;;;18688:18;;;18681:30;18747:34;18727:18;;;18720:62;18799:18;;54271:67:0;18467:356:1;54271:67:0;54373:9;54383:10;;54373:21;;;;;;;;:::i;:::-;;;;;;;;;54357:13;39312:10;:17;;39224:113;54357:13;:37;54349:76;;;;-1:-1:-1;;;54349:76:0;;20213:2:1;54349:76:0;;;20195:21:1;20252:2;20232:18;;;20225:30;20291:28;20271:18;;;20264:56;20337:18;;54349:76:0;20011:350:1;54349:76:0;54455:10;54444:22;;;;:10;:22;;;;;;54470:1;-1:-1:-1;54444:27:0;54436:58;;;;-1:-1:-1;;;54436:58:0;;16713:2:1;54436:58:0;;;16695:21:1;16752:2;16732:18;;;16725:30;16791:20;16771:18;;;16764:48;16829:18;;54436:58:0;16511:342:1;54436:58:0;54507:15;54585:10;;54580:4;:15;;;;:::i;:::-;54525:16;54542:10;;54525:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54525:28:0;-1:-1:-1;;;;;54525:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;54575:1;54525:51;:::i;:::-;:71;;;;:::i;:::-;54507:89;;54607:30;54617:10;54629:7;54607:9;:30::i;:::-;54661:10;54650:22;;;;:10;:22;;;;;:27;;54676:1;;54650:22;:27;;54676:1;;54650:27;:::i;:::-;;;;-1:-1:-1;;;54231:454:0:o;38584:224::-;38686:4;-1:-1:-1;;;;;;38710:50:0;;38725:35;38710:50;;:90;;;38764:36;38788:11;38764:23;:36::i;33456:174::-;33531:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;33531:29:0;-1:-1:-1;;;;;33531:29:0;;;;;;;;:24;;33585:23;33531:24;33585:14;:23::i;:::-;-1:-1:-1;;;;;33576:46:0;;;;;;;;;;;33456:174;;:::o;29604:348::-;29697:4;29399:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29399:16:0;29714:73;;;;-1:-1:-1;;;29714:73:0;;14703:2:1;29714:73:0;;;14685:21:1;14742:2;14722:18;;;14715:30;14781:34;14761:18;;;14754:62;-1:-1:-1;;;14832:18:1;;;14825:42;14884:19;;29714:73:0;14501:408:1;29714:73:0;29798:13;29814:23;29829:7;29814:14;:23::i;:::-;29798:39;;29867:5;-1:-1:-1;;;;;29856:16:0;:7;-1:-1:-1;;;;;29856:16:0;;:52;;;-1:-1:-1;;;;;;26696:25:0;;;26672:4;26696:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;29876:32;29856:87;;;;29936:7;-1:-1:-1;;;;;29912:31:0;:20;29924:7;29912:11;:20::i;:::-;-1:-1:-1;;;;;29912:31:0;;29856:87;29848:96;29604:348;-1:-1:-1;;;;29604:348:0:o;32713:625::-;32872:4;-1:-1:-1;;;;;32845:31:0;:23;32860:7;32845:14;:23::i;:::-;-1:-1:-1;;;;;32845:31:0;;32837:81;;;;-1:-1:-1;;;32837:81:0;;12835:2:1;32837:81:0;;;12817:21:1;12874:2;12854:18;;;12847:30;12913:34;12893:18;;;12886:62;12984:7;12964:18;;;12957:35;13009:19;;32837:81:0;12633:401:1;32837:81:0;-1:-1:-1;;;;;32937:16:0;;32929:65;;;;-1:-1:-1;;;32929:65:0;;13598:2:1;32929:65:0;;;13580:21:1;13637:2;13617:18;;;13610:30;13676:34;13656:18;;;13649:62;13747:6;13727:18;;;13720:34;13771:19;;32929:65:0;13396:400:1;32929:65:0;33007:39;33028:4;33034:2;33038:7;33007:20;:39::i;:::-;33111:29;33128:1;33132:7;33111:8;:29::i;:::-;-1:-1:-1;;;;;33153:15:0;;;;;;:9;:15;;;;;:20;;33172:1;;33153:15;:20;;33172:1;;33153:20;:::i;:::-;;;;-1:-1:-1;;;;;;;33184:13:0;;;;;;:9;:13;;;;;:18;;33201:1;;33184:13;:18;;33201:1;;33184:18;:::i;:::-;;;;-1:-1:-1;;33213:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33213:21:0;-1:-1:-1;;;;;33213:21:0;;;;;;;;;33252:27;;33213:16;;33252:27;;;;;;;25649:341;25579:411;;:::o;45776:217::-;29375:4;29399:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29399:16:0;45868:75;;;;-1:-1:-1;;;45868:75:0;;17470:2:1;45868:75:0;;;17452:21:1;17509:2;17489:18;;;17482:30;17548:34;17528:18;;;17521:62;17619:16;17599:18;;;17592:44;17653:19;;45868:75:0;17268:410:1;45868:75:0;45954:19;;;;:10;:19;;;;;;;;:31;;;;;;;;:::i;30294:110::-;30370:26;30380:2;30384:7;30370:26;;;;;;;;;;;;:9;:26::i;33772:315::-;33927:8;-1:-1:-1;;;;;33918:17:0;:5;-1:-1:-1;;;;;33918:17:0;;;33910:55;;;;-1:-1:-1;;;33910:55:0;;14003:2:1;33910:55:0;;;13985:21:1;14042:2;14022:18;;;14015:30;14081:27;14061:18;;;14054:55;14126:18;;33910:55:0;13801:349:1;33910:55:0;-1:-1:-1;;;;;33976:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;33976:46:0;;;;;;;;;;34038:41;;10447::1;;;34038::0;;10420:18:1;34038:41:0;;;;;;;33772:315;;;:::o;28682:::-;28839:28;28849:4;28855:2;28859:7;28839:9;:28::i;:::-;28886:48;28909:4;28915:2;28919:7;28928:5;28886:22;:48::i;:::-;28878:111;;;;-1:-1:-1;;;28878:111:0;;12009:2:1;28878:111:0;;;11991:21:1;12048:2;12028:18;;;12021:30;12087:34;12067:18;;;12060:62;-1:-1:-1;;;12138:18:1;;;12131:48;12196:19;;28878:111:0;11807:414:1;55532:978:0;55581:9;55577:369;55600:11;:18;55596:22;;55577:369;;;55644:11;;55664;:14;;-1:-1:-1;;;;;55644:11:0;;;;:19;;55664:11;55676:1;;55664:14;;;;;;:::i;:::-;;;;;;;;;55644:35;;;;;;;;;;;;;23230:25:1;;23218:2;23203:18;;23084:177;55644:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55644:35:0;;;;;;;;-1:-1:-1;;55644:35:0;;;;;;;;;;;;:::i;:::-;;;55640:295;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55913:22;55640:295;;;-1:-1:-1;55712:11:0;;55732;:14;;55699:10;;-1:-1:-1;;;;;55712:11:0;;:19;;55744:1;;55732:14;;;;;;:::i;:::-;;;;;;;;;55712:35;;;;;;;;;;;;;23230:25:1;;23218:2;23203:18;;23084:177;55712:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55699:48;;55766:15;55844:10;;55839:4;:15;;;;:::i;:::-;55784:16;55801:10;;55784:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;55784:28:0;-1:-1:-1;;;;;55784:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;55834:1;55784:51;:::i;:::-;:71;;;;:::i;:::-;55766:89;;55874:22;55884:2;55888:7;55874:9;:22::i;:::-;55680:232;;55640:295;55620:3;;;;:::i;:::-;;;;55577:369;;;;55960:6;55956:210;55976:13;55990:10;;55976:25;;;;;;;;:::i;:::-;;;;;;;;;55972:1;:29;55956:210;;;56023:15;56101:10;;56096:4;:15;;;;:::i;:::-;56041:16;56058:10;;56041:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;56041:28:0;-1:-1:-1;;;;;56041:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;56091:1;56041:51;:::i;:::-;:71;;;;:::i;:::-;56023:89;;56127:27;56137:7;10719:6;;-1:-1:-1;;;;;10719:6:0;;10646:87;56137:7;56146;56127:9;:27::i;:::-;-1:-1:-1;56003:3:0;;;;:::i;:::-;;;;55956:210;;;-1:-1:-1;56178:59:0;;;;;;;;56204:10;;-1:-1:-1;;;;;56204:10:0;;;56178:59;;56216:9;;;;56178:59;;;;;;;;56234:1;56178:22;56227:9;;;;;;;;;;;56178:59;;;;;;;;56248:255;56268:1;56264;:5;56248:255;;;56295:9;56291:201;56314:1;56310;:5;56291:201;;;56341:15;56419:10;;56414:4;:15;;;;:::i;:::-;56359:16;56376:10;;56359:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;56359:28:0;-1:-1:-1;;;;;56359:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;56409:1;56359:51;:::i;:::-;:71;;;;:::i;:::-;56341:89;;56449:27;56459:4;56464:1;56459:7;;;;;;;:::i;:::-;;;;;56468;56449:9;:27::i;:::-;-1:-1:-1;56317:3:0;;;;:::i;:::-;;;;56291:201;;;-1:-1:-1;56271:3:0;;;;:::i;:::-;;;;56248:255;;45158:464;29375:4;29399:16;;;:7;:16;;;;;;45231:13;;-1:-1:-1;;;;;29399:16:0;45257:78;;;;-1:-1:-1;;;45257:78:0;;19382:2:1;45257:78:0;;;19364:21:1;19421:2;19401:18;;;19394:30;19460:34;19440:18;;;19433:62;19531:19;19511:18;;;19504:47;19568:19;;45257:78:0;19180:413:1;45257:78:0;45348:23;45374:19;;;:10;:19;;;;;45348:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45526:1;45506:9;45500:23;:27;45496:76;;;45551:9;45158:464;-1:-1:-1;;45158:464:0:o;45496:76::-;45591:23;45606:7;45591:14;:23::i;:::-;45584:30;45158:464;-1:-1:-1;;;45158:464:0:o;23551:305::-;23653:4;-1:-1:-1;;;;;;23690:40:0;;23705:25;23690:40;;:105;;-1:-1:-1;;;;;;;23747:48:0;;23762:33;23747:48;23690:105;:158;;;-1:-1:-1;21212:25:0;-1:-1:-1;;;;;;21197:40:0;;;23812:36;21088:157;57430:204;57581:45;57608:4;57614:2;57618:7;57581:26;:45::i;30631:321::-;30761:18;30767:2;30771:7;30761:5;:18::i;:::-;30812:54;30843:1;30847:2;30851:7;30860:5;30812:22;:54::i;:::-;30790:154;;;;-1:-1:-1;;;30790:154:0;;12009:2:1;30790:154:0;;;11991:21:1;12048:2;12028:18;;;12021:30;12087:34;12067:18;;;12060:62;-1:-1:-1;;;12138:18:1;;;12131:48;12196:19;;30790:154:0;11807:414:1;34652:799:0;34807:4;-1:-1:-1;;;;;34828:13:0;;2571:19;:23;34824:620;;34864:72;;-1:-1:-1;;;34864:72:0;;-1:-1:-1;;;;;34864:36:0;;;;;:72;;832:10;;34915:4;;34921:7;;34930:5;;34864:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34864:72:0;;;;;;;;-1:-1:-1;;34864:72:0;;;;;;;;;;;;:::i;:::-;;;34860:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35106:13:0;;35102:272;;35149:60;;-1:-1:-1;;;35149:60:0;;12009:2:1;35149:60:0;;;11991:21:1;12048:2;12028:18;;;12021:30;12087:34;12067:18;;;12060:62;-1:-1:-1;;;12138:18:1;;;12131:48;12196:19;;35149:60:0;11807:414:1;35102:272:0;35324:6;35318:13;35309:6;35305:2;35301:15;35294:38;34860:529;-1:-1:-1;;;;;;34987:51:0;-1:-1:-1;;;34987:51:0;;-1:-1:-1;34980:58:0;;34824:620;-1:-1:-1;35428:4:0;34652:799;;;;;;:::o;24840:334::-;29375:4;29399:16;;;:7;:16;;;;;;24913:13;;-1:-1:-1;;;;;29399:16:0;24939:76;;;;-1:-1:-1;;;24939:76:0;;21277:2:1;24939:76:0;;;21259:21:1;21316:2;21296:18;;;21289:30;21355:34;21335:18;;;21328:62;21426:17;21406:18;;;21399:45;21461:19;;24939:76:0;21075:411:1;24939:76:0;25028:21;25052:10;:8;:10::i;:::-;25028:34;;25104:1;25086:7;25080:21;:25;:86;;;;;;;;;;;;;;;;;25132:7;25141:18;:7;:16;:18::i;:::-;25115:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25073:93;24840:334;-1:-1:-1;;;24840:334:0:o;40260:589::-;-1:-1:-1;;;;;40466:18:0;;40462:187;;40501:40;40533:7;41676:10;:17;;41649:24;;;;:15;:24;;;;;:44;;;41704:24;;;;;;;;;;;;41572:164;40501:40;40462:187;;;40571:2;-1:-1:-1;;;;;40563:10:0;:4;-1:-1:-1;;;;;40563:10:0;;40559:90;;40590:47;40623:4;40629:7;40590:32;:47::i;:::-;-1:-1:-1;;;;;40663:16:0;;40659:183;;40696:45;40733:7;40696:36;:45::i;40659:183::-;40769:4;-1:-1:-1;;;;;40763:10:0;:2;-1:-1:-1;;;;;40763:10:0;;40759:83;;40790:40;40818:2;40822:7;40790:27;:40::i;31288:439::-;-1:-1:-1;;;;;31368:16:0;;31360:61;;;;-1:-1:-1;;;31360:61:0;;18308:2:1;31360:61:0;;;18290:21:1;;;18327:18;;;18320:30;18386:34;18366:18;;;18359:62;18438:18;;31360:61:0;18106:356:1;31360:61:0;29375:4;29399:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29399:16:0;:30;31432:58;;;;-1:-1:-1;;;31432:58:0;;13241:2:1;31432:58:0;;;13223:21:1;13280:2;13260:18;;;13253:30;13319;13299:18;;;13292:58;13367:18;;31432:58:0;13039:352:1;31432:58:0;31503:45;31532:1;31536:2;31540:7;31503:20;:45::i;:::-;-1:-1:-1;;;;;31561:13:0;;;;;;:9;:13;;;;;:18;;31578:1;;31561:13;:18;;31578:1;;31561:18;:::i;:::-;;;;-1:-1:-1;;31590:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31590:21:0;-1:-1:-1;;;;;31590:21:0;;;;;;;;31629:33;;31590:16;;;31629:33;;31590:16;;31629:33;57005:413;;:::o;55029:117::-;55089:13;55122:16;55115:23;;;;;:::i;12162:723::-;12218:13;12439:10;12435:53;;-1:-1:-1;;12466:10:0;;;;;;;;;;;;;;;;;;12162:723::o;12435:53::-;12513:5;12498:12;12554:78;12561:9;;12554:78;;12587:8;;;;:::i;:::-;;-1:-1:-1;12610:10:0;;-1:-1:-1;12618:2:0;12610:10;;:::i;:::-;;;12554:78;;;12642:19;12674:6;12664:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12664:17:0;;12642:39;;12692:154;12699:10;;12692:154;;12726:11;12736:1;12726:11;;:::i;:::-;;-1:-1:-1;12795:10:0;12803:2;12795:5;:10;:::i;:::-;12782:24;;:2;:24;:::i;:::-;12769:39;;12752:6;12759;12752:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;12823:11:0;12832:2;12823:11;;:::i;:::-;;;12692:154;;42363:988;42629:22;42679:1;42654:22;42671:4;42654:16;:22::i;:::-;:26;;;;:::i;:::-;42691:18;42712:26;;;:17;:26;;;;;;42629:51;;-1:-1:-1;42845:28:0;;;42841:328;;-1:-1:-1;;;;;42912:18:0;;42890:19;42912:18;;;:12;:18;;;;;;;;:34;;;;;;;;;42963:30;;;;;;:44;;;43080:30;;:17;:30;;;;;:43;;;42841:328;-1:-1:-1;43265:26:0;;;;:17;:26;;;;;;;;43258:33;;;-1:-1:-1;;;;;43309:18:0;;;;;:12;:18;;;;;:34;;;;;;;43302:41;42363:988::o;43646:1079::-;43924:10;:17;43899:22;;43924:21;;43944:1;;43924:21;:::i;:::-;43956:18;43977:24;;;:15;:24;;;;;;44350:10;:26;;43899:46;;-1:-1:-1;43977:24:0;;43899:46;;44350:26;;;;;;:::i;:::-;;;;;;;;;44328:48;;44414:11;44389:10;44400;44389:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;44494:28;;;:15;:28;;;;;;;:41;;;44666:24;;;;;44659:31;44701:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;43717:1008;;;43646:1079;:::o;41150:221::-;41235:14;41252:20;41269:2;41252:16;:20::i;:::-;-1:-1:-1;;;;;41283:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;41328:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;41150:221:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:367::-;713:8;723:6;777:3;770:4;762:6;758:17;754:27;744:55;;795:1;792;785:12;744:55;-1:-1:-1;818:20:1;;861:18;850:30;;847:50;;;893:1;890;883:12;847:50;930:4;922:6;918:17;906:29;;990:3;983:4;973:6;970:1;966:14;958:6;954:27;950:38;947:47;944:67;;;1007:1;1004;997:12;944:67;650:367;;;;;:::o;1022:348::-;1074:8;1084:6;1138:3;1131:4;1123:6;1119:17;1115:27;1105:55;;1156:1;1153;1146:12;1105:55;-1:-1:-1;1179:20:1;;1222:18;1211:30;;1208:50;;;1254:1;1251;1244:12;1208:50;1291:4;1283:6;1279:17;1267:29;;1343:3;1336:4;1327:6;1319;1315:19;1311:30;1308:39;1305:59;;;1360:1;1357;1350:12;1375:247;1434:6;1487:2;1475:9;1466:7;1462:23;1458:32;1455:52;;;1503:1;1500;1493:12;1455:52;1542:9;1529:23;1561:31;1586:5;1561:31;:::i;1627:251::-;1697:6;1750:2;1738:9;1729:7;1725:23;1721:32;1718:52;;;1766:1;1763;1756:12;1718:52;1798:9;1792:16;1817:31;1842:5;1817:31;:::i;1883:388::-;1951:6;1959;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;2067:9;2054:23;2086:31;2111:5;2086:31;:::i;:::-;2136:5;-1:-1:-1;2193:2:1;2178:18;;2165:32;2206:33;2165:32;2206:33;:::i;:::-;2258:7;2248:17;;;1883:388;;;;;:::o;2276:456::-;2353:6;2361;2369;2422:2;2410:9;2401:7;2397:23;2393:32;2390:52;;;2438:1;2435;2428:12;2390:52;2477:9;2464:23;2496:31;2521:5;2496:31;:::i;:::-;2546:5;-1:-1:-1;2603:2:1;2588:18;;2575:32;2616:33;2575:32;2616:33;:::i;:::-;2276:456;;2668:7;;-1:-1:-1;;;2722:2:1;2707:18;;;;2694:32;;2276:456::o;2737:794::-;2832:6;2840;2848;2856;2909:3;2897:9;2888:7;2884:23;2880:33;2877:53;;;2926:1;2923;2916:12;2877:53;2965:9;2952:23;2984:31;3009:5;2984:31;:::i;:::-;3034:5;-1:-1:-1;3091:2:1;3076:18;;3063:32;3104:33;3063:32;3104:33;:::i;:::-;3156:7;-1:-1:-1;3210:2:1;3195:18;;3182:32;;-1:-1:-1;3265:2:1;3250:18;;3237:32;3292:18;3281:30;;3278:50;;;3324:1;3321;3314:12;3278:50;3347:22;;3400:4;3392:13;;3388:27;-1:-1:-1;3378:55:1;;3429:1;3426;3419:12;3378:55;3452:73;3517:7;3512:2;3499:16;3494:2;3490;3486:11;3452:73;:::i;:::-;3442:83;;;2737:794;;;;;;;:::o;3536:416::-;3601:6;3609;3662:2;3650:9;3641:7;3637:23;3633:32;3630:52;;;3678:1;3675;3668:12;3630:52;3717:9;3704:23;3736:31;3761:5;3736:31;:::i;:::-;3786:5;-1:-1:-1;3843:2:1;3828:18;;3815:32;3885:15;;3878:23;3866:36;;3856:64;;3916:1;3913;3906:12;3957:315;4025:6;4033;4086:2;4074:9;4065:7;4061:23;4057:32;4054:52;;;4102:1;4099;4092:12;4054:52;4141:9;4128:23;4160:31;4185:5;4160:31;:::i;:::-;4210:5;4262:2;4247:18;;;;4234:32;;-1:-1:-1;;;3957:315:1:o;4277:1020::-;4411:6;4419;4427;4435;4443;4451;4459;4512:3;4500:9;4491:7;4487:23;4483:33;4480:53;;;4529:1;4526;4519:12;4480:53;4568:9;4555:23;4587:31;4612:5;4587:31;:::i;:::-;4637:5;-1:-1:-1;4689:2:1;4674:18;;4661:32;;-1:-1:-1;4740:2:1;4725:18;;4712:32;;-1:-1:-1;4795:2:1;4780:18;;4767:32;4818:18;4848:14;;;4845:34;;;4875:1;4872;4865:12;4845:34;4914:59;4965:7;4956:6;4945:9;4941:22;4914:59;:::i;:::-;4992:8;;-1:-1:-1;4888:85:1;-1:-1:-1;5080:3:1;5065:19;;5052:33;;-1:-1:-1;5097:16:1;;;5094:36;;;5126:1;5123;5116:12;5094:36;;5165:72;5229:7;5218:8;5207:9;5203:24;5165:72;:::i;:::-;4277:1020;;;;-1:-1:-1;4277:1020:1;;-1:-1:-1;4277:1020:1;;;;5139:98;;-1:-1:-1;;;4277:1020:1:o;5302:245::-;5360:6;5413:2;5401:9;5392:7;5388:23;5384:32;5381:52;;;5429:1;5426;5419:12;5381:52;5468:9;5455:23;5487:30;5511:5;5487:30;:::i;5552:249::-;5621:6;5674:2;5662:9;5653:7;5649:23;5645:32;5642:52;;;5690:1;5687;5680:12;5642:52;5722:9;5716:16;5741:30;5765:5;5741:30;:::i;5806:450::-;5875:6;5928:2;5916:9;5907:7;5903:23;5899:32;5896:52;;;5944:1;5941;5934:12;5896:52;5984:9;5971:23;6017:18;6009:6;6006:30;6003:50;;;6049:1;6046;6039:12;6003:50;6072:22;;6125:4;6117:13;;6113:27;-1:-1:-1;6103:55:1;;6154:1;6151;6144:12;6103:55;6177:73;6242:7;6237:2;6224:16;6219:2;6215;6211:11;6177:73;:::i;6261:180::-;6320:6;6373:2;6361:9;6352:7;6348:23;6344:32;6341:52;;;6389:1;6386;6379:12;6341:52;-1:-1:-1;6412:23:1;;6261:180;-1:-1:-1;6261:180:1:o;6446:184::-;6516:6;6569:2;6557:9;6548:7;6544:23;6540:32;6537:52;;;6585:1;6582;6575:12;6537:52;-1:-1:-1;6608:16:1;;6446:184;-1:-1:-1;6446:184:1:o;6635:315::-;6703:6;6711;6764:2;6752:9;6743:7;6739:23;6735:32;6732:52;;;6780:1;6777;6770:12;6732:52;6816:9;6803:23;6793:33;;6876:2;6865:9;6861:18;6848:32;6889:31;6914:5;6889:31;:::i;6955:815::-;7071:6;7079;7087;7095;7103;7156:2;7144:9;7135:7;7131:23;7127:32;7124:52;;;7172:1;7169;7162:12;7124:52;7208:9;7195:23;7185:33;;7269:2;7258:9;7254:18;7241:32;7292:18;7333:2;7325:6;7322:14;7319:34;;;7349:1;7346;7339:12;7319:34;7388:59;7439:7;7430:6;7419:9;7415:22;7388:59;:::i;:::-;7466:8;;-1:-1:-1;7362:85:1;-1:-1:-1;7554:2:1;7539:18;;7526:32;;-1:-1:-1;7570:16:1;;;7567:36;;;7599:1;7596;7589:12;7567:36;;7638:72;7702:7;7691:8;7680:9;7676:24;7638:72;:::i;:::-;6955:815;;;;-1:-1:-1;6955:815:1;;-1:-1:-1;7729:8:1;;7612:98;6955:815;-1:-1:-1;;;6955:815:1:o;7775:257::-;7816:3;7854:5;7848:12;7881:6;7876:3;7869:19;7897:63;7953:6;7946:4;7941:3;7937:14;7930:4;7923:5;7919:16;7897:63;:::i;:::-;8014:2;7993:15;-1:-1:-1;;7989:29:1;7980:39;;;;8021:4;7976:50;;7775:257;-1:-1:-1;;7775:257:1:o;8037:470::-;8216:3;8254:6;8248:13;8270:53;8316:6;8311:3;8304:4;8296:6;8292:17;8270:53;:::i;:::-;8386:13;;8345:16;;;;8408:57;8386:13;8345:16;8442:4;8430:17;;8408:57;:::i;:::-;8481:20;;8037:470;-1:-1:-1;;;;8037:470:1:o;8743:519::-;8945:4;-1:-1:-1;;;;;9055:2:1;9047:6;9043:15;9032:9;9025:34;9107:2;9099:6;9095:15;9090:2;9079:9;9075:18;9068:43;;9147:6;9142:2;9131:9;9127:18;9120:34;9190:3;9185:2;9174:9;9170:18;9163:31;9211:45;9251:3;9240:9;9236:19;9228:6;9211:45;:::i;:::-;9203:53;8743:519;-1:-1:-1;;;;;;8743:519:1:o;9670:632::-;9841:2;9893:21;;;9963:13;;9866:18;;;9985:22;;;9812:4;;9841:2;10064:15;;;;10038:2;10023:18;;;9812:4;10107:169;10121:6;10118:1;10115:13;10107:169;;;10182:13;;10170:26;;10251:15;;;;10216:12;;;;10143:1;10136:9;10107:169;;;-1:-1:-1;10293:3:1;;9670:632;-1:-1:-1;;;;;;9670:632:1:o;10745:219::-;10894:2;10883:9;10876:21;10857:4;10914:44;10954:2;10943:9;10939:18;10931:6;10914:44;:::i;23266:128::-;23306:3;23337:1;23333:6;23330:1;23327:13;23324:39;;;23343:18;;:::i;:::-;-1:-1:-1;23379:9:1;;23266:128::o;23399:120::-;23439:1;23465;23455:35;;23470:18;;:::i;:::-;-1:-1:-1;23504:9:1;;23399:120::o;23524:168::-;23564:7;23630:1;23626;23622:6;23618:14;23615:1;23612:21;23607:1;23600:9;23593:17;23589:45;23586:71;;;23637:18;;:::i;:::-;-1:-1:-1;23677:9:1;;23524:168::o;23697:125::-;23737:4;23765:1;23762;23759:8;23756:34;;;23770:18;;:::i;:::-;-1:-1:-1;23807:9:1;;23697:125::o;23827:258::-;23899:1;23909:113;23923:6;23920:1;23917:13;23909:113;;;23999:11;;;23993:18;23980:11;;;23973:39;23945:2;23938:10;23909:113;;;24040:6;24037:1;24034:13;24031:48;;;-1:-1:-1;;24075:1:1;24057:16;;24050:27;23827:258::o;24090:437::-;24169:1;24165:12;;;;24212;;;24233:61;;24287:4;24279:6;24275:17;24265:27;;24233:61;24340:2;24332:6;24329:14;24309:18;24306:38;24303:218;;;-1:-1:-1;;;24374:1:1;24367:88;24478:4;24475:1;24468:15;24506:4;24503:1;24496:15;24532:135;24571:3;-1:-1:-1;;24592:17:1;;24589:43;;;24612:18;;:::i;:::-;-1:-1:-1;24659:1:1;24648:13;;24532:135::o;24672:112::-;24704:1;24730;24720:35;;24735:18;;:::i;:::-;-1:-1:-1;24769:9:1;;24672:112::o;24789:184::-;-1:-1:-1;;;24838:1:1;24831:88;24938:4;24935:1;24928:15;24962:4;24959:1;24952:15;24978:184;-1:-1:-1;;;25027:1:1;25020:88;25127:4;25124:1;25117:15;25151:4;25148:1;25141:15;25167:184;-1:-1:-1;;;25216:1:1;25209:88;25316:4;25313:1;25306:15;25340:4;25337:1;25330:15;25356:184;-1:-1:-1;;;25405:1:1;25398:88;25505:4;25502:1;25495:15;25529:4;25526:1;25519:15;25545:184;-1:-1:-1;;;25594:1:1;25587:88;25694:4;25691:1;25684:15;25718:4;25715:1;25708:15;25734:154;-1:-1:-1;;;;;25813:5:1;25809:54;25802:5;25799:65;25789:93;;25878:1;25875;25868:12;25893:177;-1:-1:-1;;;;;;25971:5:1;25967:78;25960:5;25957:89;25947:117;;26060:1;26057;26050:12
Swarm Source
ipfs://d78b78ece3122a99701fb74533a7211ec22519dff8529ab5e47714c42c355821
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.