Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 587 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 20853356 | 67 days ago | IN | 0 ETH | 0.00034849 | ||||
Set Approval For... | 20716047 | 86 days ago | IN | 0 ETH | 0.00009287 | ||||
Set Approval For... | 20407345 | 129 days ago | IN | 0 ETH | 0.00010164 | ||||
Set Approval For... | 19626104 | 238 days ago | IN | 0 ETH | 0.00116542 | ||||
Set Approval For... | 19414843 | 268 days ago | IN | 0 ETH | 0.00300666 | ||||
Set Approval For... | 19305584 | 283 days ago | IN | 0 ETH | 0.00154269 | ||||
Set Approval For... | 19161732 | 304 days ago | IN | 0 ETH | 0.00079876 | ||||
Set Approval For... | 19155530 | 304 days ago | IN | 0 ETH | 0.0008408 | ||||
Set Approval For... | 19093588 | 313 days ago | IN | 0 ETH | 0.00034533 | ||||
Set Approval For... | 18802757 | 354 days ago | IN | 0 ETH | 0.00095798 | ||||
Set Approval For... | 18732304 | 364 days ago | IN | 0 ETH | 0.00160499 | ||||
Set Approval For... | 17595600 | 523 days ago | IN | 0 ETH | 0.00067385 | ||||
Set Approval For... | 17446817 | 544 days ago | IN | 0 ETH | 0.00041195 | ||||
Set Approval For... | 17446745 | 544 days ago | IN | 0 ETH | 0.00041195 | ||||
Set Approval For... | 17446532 | 544 days ago | IN | 0 ETH | 0.00041195 | ||||
Set Approval For... | 17446532 | 544 days ago | IN | 0 ETH | 0.00072497 | ||||
Set Approval For... | 16984902 | 609 days ago | IN | 0 ETH | 0.00176191 | ||||
Set Approval For... | 16714790 | 647 days ago | IN | 0 ETH | 0.00112532 | ||||
Set Approval For... | 16609592 | 662 days ago | IN | 0 ETH | 0.00074284 | ||||
Set Approval For... | 16555500 | 669 days ago | IN | 0 ETH | 0.00044221 | ||||
Set Approval For... | 16486217 | 679 days ago | IN | 0 ETH | 0.00120831 | ||||
Set Approval For... | 16432222 | 687 days ago | IN | 0 ETH | 0.00064524 | ||||
Set Approval For... | 16397295 | 692 days ago | IN | 0 ETH | 0.00078351 | ||||
Set Approval For... | 16374593 | 695 days ago | IN | 0 ETH | 0.00073761 | ||||
Set Approval For... | 16321196 | 702 days ago | IN | 0 ETH | 0.00044802 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
BasedFishMafiaWire
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-09 */ // SPDX-License-Identifier: MIT 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); } /** * @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; } } /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } interface LinkTokenInterface { function allowance( address owner, address spender ) external view returns ( uint256 remaining ); function approve( address spender, uint256 value ) external returns ( bool success ); function balanceOf( address owner ) external view returns ( uint256 balance ); function decimals() external view returns ( uint8 decimalPlaces ); function decreaseApproval( address spender, uint256 addedValue ) external returns ( bool success ); function increaseApproval( address spender, uint256 subtractedValue ) external; function name() external view returns ( string memory tokenName ); function symbol() external view returns ( string memory tokenSymbol ); function totalSupply() external view returns ( uint256 totalTokensIssued ); function transfer( address to, uint256 value ) external returns ( bool success ); function transferAndCall( address to, uint256 value, bytes calldata data ) external returns ( bool success ); function transferFrom( address from, address to, uint256 value ) external returns ( bool success ); } /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // wire.sol /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(_msgSender() != operator, "ERC1155: setting approval status for self"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`. * * Emits a {TransferSingle} event. * * Requirements: * * - `account` cannot be the zero address. * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address account, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(account != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][account] += amount; emit TransferSingle(operator, address(0), account, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `account` * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens of token type `id`. */ function _burn( address account, uint256 id, uint256 amount ) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][account] = accountBalance - amount; } emit TransferSingle(operator, account, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address account, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][account] = accountBalance - amount; } } emit TransferBatch(operator, account, address(0), ids, amounts); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } /** * @dev ERC1155 token with pausable token transfers, minting and burning. * * Useful for scenarios such as preventing trades until the end of an evaluation * period, or having an emergency switch for freezing all token transfers in the * event of a large bug. * * _Available since v3.1._ */ abstract contract ERC1155Pausable is ERC1155, Pausable { /** * @dev See {ERC1155-_beforeTokenTransfer}. * * Requirements: * * - the contract must not be paused. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); require(!paused(), "ERC1155Pausable: token transfer while paused"); } } /** * @dev _Available since v3.1._ */ abstract contract ERC1155Receiver is ERC165, IERC1155Receiver { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } } /** * @dev _Available since v3.1._ */ contract ERC1155Holder is ERC1155Receiver { function onERC1155Received( address, address, uint256, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] memory, uint256[] memory, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } } /** * @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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract VRFRequestIDBase { /** * @notice returns the seed which is actually input to the VRF coordinator * * @dev To prevent repetition of VRF output due to repetition of the * @dev user-supplied seed, that seed is combined in a hash with the * @dev user-specific nonce, and the address of the consuming contract. The * @dev risk of repetition is mostly mitigated by inclusion of a blockhash in * @dev the final seed, but the nonce does protect against repetition in * @dev requests which are included in a single block. * * @param _userSeed VRF seed input provided by user * @param _requester Address of the requesting contract * @param _nonce User-specific nonce at the time of the request */ function makeVRFInputSeed( bytes32 _keyHash, uint256 _userSeed, address _requester, uint256 _nonce ) internal pure returns ( uint256 ) { return uint256(keccak256(abi.encode(_keyHash, _userSeed, _requester, _nonce))); } /** * @notice Returns the id for this request * @param _keyHash The serviceAgreement ID to be used for this request * @param _vRFInputSeed The seed to be passed directly to the VRF * @return The id for this request * * @dev Note that _vRFInputSeed is not the seed passed by the consuming * @dev contract, but the one generated by makeVRFInputSeed */ function makeRequestId( bytes32 _keyHash, uint256 _vRFInputSeed ) internal pure returns ( bytes32 ) { return keccak256(abi.encodePacked(_keyHash, _vRFInputSeed)); } } /** **************************************************************************** * @notice Interface for contracts using VRF randomness * ***************************************************************************** * @dev PURPOSE * * @dev Reggie the Random Oracle (not his real job) wants to provide randomness * @dev to Vera the verifier in such a way that Vera can be sure he's not * @dev making his output up to suit himself. Reggie provides Vera a public key * @dev to which he knows the secret key. Each time Vera provides a seed to * @dev Reggie, he gives back a value which is computed completely * @dev deterministically from the seed and the secret key. * * @dev Reggie provides a proof by which Vera can verify that the output was * @dev correctly computed once Reggie tells it to her, but without that proof, * @dev the output is indistinguishable to her from a uniform random sample * @dev from the output space. * * @dev The purpose of this contract is to make it easy for unrelated contracts * @dev to talk to Vera the verifier about the work Reggie is doing, to provide * @dev simple access to a verifiable source of randomness. * ***************************************************************************** * @dev USAGE * * @dev Calling contracts must inherit from VRFConsumerBase, and can * @dev initialize VRFConsumerBase's attributes in their constructor as * @dev shown: * * @dev contract VRFConsumer { * @dev constuctor(<other arguments>, address _vrfCoordinator, address _link) * @dev VRFConsumerBase(_vrfCoordinator, _link) public { * @dev <initialization with other arguments goes here> * @dev } * @dev } * * @dev The oracle will have given you an ID for the VRF keypair they have * @dev committed to (let's call it keyHash), and have told you the minimum LINK * @dev price for VRF service. Make sure your contract has sufficient LINK, and * @dev call requestRandomness(keyHash, fee, seed), where seed is the input you * @dev want to generate randomness from. * * @dev Once the VRFCoordinator has received and validated the oracle's response * @dev to your request, it will call your contract's fulfillRandomness method. * * @dev The randomness argument to fulfillRandomness is the actual random value * @dev generated from your seed. * * @dev The requestId argument is generated from the keyHash and the seed by * @dev makeRequestId(keyHash, seed). If your contract could have concurrent * @dev requests open, you can use the requestId to track which seed is * @dev associated with which randomness. See VRFRequestIDBase.sol for more * @dev details. (See "SECURITY CONSIDERATIONS" for principles to keep in mind, * @dev if your contract could have multiple requests in flight simultaneously.) * * @dev Colliding `requestId`s are cryptographically impossible as long as seeds * @dev differ. (Which is critical to making unpredictable randomness! See the * @dev next section.) * * ***************************************************************************** * @dev SECURITY CONSIDERATIONS * * @dev A method with the ability to call your fulfillRandomness method directly * @dev could spoof a VRF response with any random value, so it's critical that * @dev it cannot be directly called by anything other than this base contract * @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method). * * @dev For your users to trust that your contract's random behavior is free * @dev from malicious interference, it's best if you can write it so that all * @dev behaviors implied by a VRF response are executed *during* your * @dev fulfillRandomness method. If your contract must store the response (or * @dev anything derived from it) and use it later, you must ensure that any * @dev user-significant behavior which depends on that stored value cannot be * @dev manipulated by a subsequent VRF request. * * @dev Similarly, both miners and the VRF oracle itself have some influence * @dev over the order in which VRF responses appear on the blockchain, so if * @dev your contract could have multiple VRF requests in flight simultaneously, * @dev you must ensure that the order in which the VRF responses arrive cannot * @dev be used to manipulate your contract's user-significant behavior. * * @dev Since the ultimate input to the VRF is mixed with the block hash of the * @dev block in which the request is made, user-provided seeds have no impact * @dev on its economic security properties. They are only included for API * @dev compatability with previous versions of this contract. * * @dev Since the block hash of the block which contains the requestRandomness * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful * @dev miner could, in principle, fork the blockchain to evict the block * @dev containing the request, forcing the request to be included in a * @dev different block with a different hash, and therefore a different input * @dev to the VRF. However, such an attack would incur a substantial economic * @dev cost. This cost scales with the number of blocks the VRF oracle waits * @dev until it calls responds to a request. */ abstract contract VRFConsumerBase is VRFRequestIDBase { /** * @notice fulfillRandomness handles the VRF response. Your contract must * @notice implement it. See "SECURITY CONSIDERATIONS" above for important * @notice principles to keep in mind when implementing your fulfillRandomness * @notice method. * * @dev VRFConsumerBase expects its subcontracts to have a method with this * @dev signature, and will call it once it has verified the proof * @dev associated with the randomness. (It is triggered via a call to * @dev rawFulfillRandomness, below.) * * @param requestId The Id initially returned by requestRandomness * @param randomness the VRF output */ function fulfillRandomness( bytes32 requestId, uint256 randomness ) internal virtual; /** * @dev In order to keep backwards compatibility we have kept the user * seed field around. We remove the use of it because given that the blockhash * enters later, it overrides whatever randomness the used seed provides. * Given that it adds no security, and can easily lead to misunderstandings, * we have removed it from usage and can now provide a simpler API. */ uint256 constant private USER_SEED_PLACEHOLDER = 0; /** * @notice requestRandomness initiates a request for VRF output given _seed * * @dev The fulfillRandomness method receives the output, once it's provided * @dev by the Oracle, and verified by the vrfCoordinator. * * @dev The _keyHash must already be registered with the VRFCoordinator, and * @dev the _fee must exceed the fee specified during registration of the * @dev _keyHash. * * @dev The _seed parameter is vestigial, and is kept only for API * @dev compatibility with older versions. It can't *hurt* to mix in some of * @dev your own randomness, here, but it's not necessary because the VRF * @dev oracle will mix the hash of the block containing your request into the * @dev VRF seed it ultimately uses. * * @param _keyHash ID of public key against which randomness is generated * @param _fee The amount of LINK to send with the request * * @return requestId unique ID for this request * * @dev The returned requestId can be used to distinguish responses to * @dev concurrent requests. It is passed as the first argument to * @dev fulfillRandomness. */ function requestRandomness( bytes32 _keyHash, uint256 _fee ) internal returns ( bytes32 requestId ) { LINK.transferAndCall(vrfCoordinator, _fee, abi.encode(_keyHash, USER_SEED_PLACEHOLDER)); // This is the seed passed to VRFCoordinator. The oracle will mix this with // the hash of the block containing this request to obtain the seed/input // which is finally passed to the VRF cryptographic machinery. uint256 vRFSeed = makeVRFInputSeed(_keyHash, USER_SEED_PLACEHOLDER, address(this), nonces[_keyHash]); // nonces[_keyHash] must stay in sync with // VRFCoordinator.nonces[_keyHash][this], which was incremented by the above // successful LINK.transferAndCall (in VRFCoordinator.randomnessRequest). // This provides protection against the user repeating their input seed, // which would result in a predictable/duplicate output, if multiple such // requests appeared in the same block. nonces[_keyHash] = nonces[_keyHash] + 1; return makeRequestId(_keyHash, vRFSeed); } LinkTokenInterface immutable internal LINK; address immutable private vrfCoordinator; // Nonces for each VRF key from which randomness has been requested. // // Must stay in sync with VRFCoordinator[_keyHash][this] mapping(bytes32 /* keyHash */ => uint256 /* nonce */) private nonces; /** * @param _vrfCoordinator address of VRFCoordinator contract * @param _link address of LINK token contract * * @dev https://docs.chain.link/docs/link-token-contracts */ constructor( address _vrfCoordinator, address _link ) { vrfCoordinator = _vrfCoordinator; LINK = LinkTokenInterface(_link); } // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF // proof. rawFulfillRandomness then calls fulfillRandomness, after validating // the origin of the call function rawFulfillRandomness( bytes32 requestId, uint256 randomness ) external { require(msg.sender == vrfCoordinator, "Only VRFCoordinator can fulfill"); fulfillRandomness(requestId, randomness); } } interface Contract { function balanceOf(address owner) external view returns (uint256 balance); function totalSupply() external view returns (uint256 supply); function ownerOf(uint256 tokenId) external view returns (address owner); } contract BasedFishMafiaWire is ERC1155Pausable, ERC1155Holder, VRFConsumerBase { event RandomId(uint id); mapping(address => bool) private m_admin_map; uint private m_salt; Contract private constant m_bfm = Contract(0x138Ff21a21DFC06FbfCcf15F2D9Fd290a660E152); Contract private constant m_zfm = Contract(0xd66247EdA32bAcC0C06DACC80D19281535CE9D35); uint private m_seed; function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155, ERC1155Receiver) returns (bool) { return super.supportsInterface(interfaceId); } function _processAddAdmin(address user) internal { m_admin_map[user] = true; } modifier onlyAdmin() { require(m_admin_map[msg.sender], "must be admin to perform this action"); _; } function addAdmin(address user) external onlyAdmin { _processAddAdmin(user); } constructor() ERC1155("https://basedfishmafia.com/api/wires/wires.json") VRFConsumerBase( 0xf0d54349aDdcf704F77AE15b96510dEA15cb7952, // VRF 0x514910771AF9Ca656af840dff83E8264EcF986CA // LINK ) { _processAddAdmin(msg.sender); } function burn(address user, uint count) external onlyAdmin { _burn(user, 0, count); } function seed() external onlyAdmin returns (bytes32 requestId) { uint fee = 2 * 10 ** 18; bytes32 keyh = 0xAA77729D3466CA35AE8D28B3BBAC7CC36A5031EFDC430821C02BC31A238AF445; require(LINK.balanceOf(address(this)) >= fee, "not enough LINK for transaction"); return requestRandomness(keyh, fee); } function fulfillRandomness(bytes32, uint256 randomness) internal override { m_seed = randomness; } function distribute(uint count) external onlyAdmin { require(m_seed != 0, "need to seed() random value first"); uint bfm_supply = m_bfm.totalSupply(); uint zfm_supply = m_zfm.totalSupply(); uint combined_supply = bfm_supply + zfm_supply; uint numPicked = 0; Contract selContract; uint randomId; address selUser; while (numPicked < count) { randomId = uint(keccak256(abi.encode(m_seed, m_salt++))) % combined_supply; emit RandomId(randomId); if (randomId < bfm_supply) { selContract = m_bfm; } else { selContract = m_zfm; randomId -= bfm_supply; } selUser = selContract.ownerOf(randomId); if (selUser == address(0xE052113bd7D7700d623414a0a4585BCaE754E9d5) || selUser == address(0xCB6eA8Bb9cDF31c1cAcFD207906520aDc249a856) ) { continue; } _mint(selUser, 0, 1, ""); ++numPicked; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"RandomId","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"},{"internalType":"uint256","name":"randomness","type":"uint256"}],"name":"rawFulfillRandomness","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"seed","outputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c06040523480156200001157600080fd5b5073f0d54349addcf704f77ae15b96510dea15cb795273514910771af9ca656af840dff83e8264ecf986ca6040518060600160405280602f815260200162002b86602f91396200006181620000b4565b506003805460ff191690556001600160601b0319606092831b811660a052911b16608052620000ae336001600160a01b03166000908152600560205260409020805460ff19166001179055565b620001b0565b8051620000c9906002906020840190620000cd565b5050565b828054620000db9062000173565b90600052602060002090601f016020900481019282620000ff57600085556200014a565b82601f106200011a57805160ff19168380011785556200014a565b828001600101855582156200014a579182015b828111156200014a5782518255916020019190600101906200012d565b50620001589291506200015c565b5090565b5b808211156200015857600081556001016200015d565b600181811c908216806200018857607f821691505b60208210811415620001aa57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c60a05160601c61299c620001ea60003960008181610d7c01526113de01526000818161082001526113a2015261299c6000f3fe608060405234801561001057600080fd5b50600436106100ff5760003560e01c806391c05b0b11610097578063bc197c8111610066578063bc197c8114610214578063e985e9c51461027d578063f23a6e61146102c6578063f242432a146102fe57600080fd5b806391c05b0b146101c857806394985ddd146101db5780639dc29fac146101ee578063a22cb4651461020157600080fd5b80634e1273f4116100d35780634e1273f4146101825780635c975abb146101a257806370480275146101ad5780637d94792a146101c057600080fd5b8062fdd58e1461010457806301ffc9a71461012a5780630e89341c1461014d5780632eb2c2d61461016d575b600080fd5b6101176101123660046122be565b610311565b6040519081526020015b60405180910390f35b61013d6101383660046123fc565b6103d4565b6040519015158152602001610121565b61016061015b366004612436565b6103e5565b604051610121919061263f565b61018061017b366004612179565b610479565b005b6101956101903660046122ea565b610528565b6040516101219190612607565b60035460ff1661013d565b6101806101bb3660046120ff565b610666565b610117610740565b6101806101d6366004612436565b61090f565b6101806101e93660046123da565b610d64565b6101806101fc3660046122be565b610df3565b61018061020f366004612290565b610e83565b61024c610222366004612179565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610121565b61013d61028b366004612140565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205460ff1690565b61024c6102d4366004612227565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b61018061030c366004612227565b610fa6565b600073ffffffffffffffffffffffffffffffffffffffff83166103a15760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff949094168352929052205490565b60006103df8261104e565b92915050565b6060600280546103f4906126a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610420906126a5565b801561046d5780601f106104425761010080835404028352916020019161046d565b820191906000526020600020905b81548152906001019060200180831161045057829003601f168201915b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff85163314806104a257506104a2853361028b565b6105145760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006064820152608401610398565b61052185858585856110a4565b5050505050565b606081518351146105a15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d6174636800000000000000000000000000000000000000000000006064820152608401610398565b6000835167ffffffffffffffff8111156105bd576105bd612816565b6040519080825280602002602001820160405280156105e6578160200160208202803683370190505b50905060005b845181101561065e5761063185828151811061060a5761060a6127e7565b6020026020010151858381518110610624576106246127e7565b6020026020010151610311565b828281518110610643576106436127e7565b602090810291909101015261065781612744565b90506105ec565b509392505050565b3360009081526005602052604090205460ff166106ea5760405162461bcd60e51b8152602060048201526024808201527f6d7573742062652061646d696e20746f20706572666f726d207468697320616360448201527f74696f6e000000000000000000000000000000000000000000000000000000006064820152608401610398565b61073d8173ffffffffffffffffffffffffffffffffffffffff16600090815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b50565b3360009081526005602052604081205460ff166107c45760405162461bcd60e51b8152602060048201526024808201527f6d7573742062652061646d696e20746f20706572666f726d207468697320616360448201527f74696f6e000000000000000000000000000000000000000000000000000000006064820152608401610398565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152671bc16d674ec80000907faa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af4459082907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a082319060240160206040518083038186803b15801561087757600080fd5b505afa15801561088b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108af919061244f565b10156108fd5760405162461bcd60e51b815260206004820152601f60248201527f6e6f7420656e6f756768204c494e4b20666f72207472616e73616374696f6e006044820152606401610398565b610907818361139e565b925050505b90565b3360009081526005602052604090205460ff166109935760405162461bcd60e51b8152602060048201526024808201527f6d7573742062652061646d696e20746f20706572666f726d207468697320616360448201527f74696f6e000000000000000000000000000000000000000000000000000000006064820152608401610398565b600754610a085760405162461bcd60e51b815260206004820152602160248201527f6e65656420746f207365656428292072616e646f6d2076616c7565206669727360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152608401610398565b600073138ff21a21dfc06fbfccf15f2d9fd290a660e15273ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a6457600080fd5b505afa158015610a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9c919061244f565b9050600073d66247eda32bacc0c06dacc80d19281535ce9d3573ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610afa57600080fd5b505afa158015610b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b32919061244f565b90506000610b408284612676565b90506000808060005b87841015610d5a57600754600680548792916000610b6683612744565b909155506040805160208101939093528201526060016040516020818303038152906040528051906020012060001c610b9f919061277d565b91507f7f67bf8e00fe84bc064a953ec765f995ad389b5f98426788d18dc4ed0fd18a9d82604051610bd291815260200190565b60405180910390a186821015610bfe5773138ff21a21dfc06fbfccf15f2d9fd290a660e1529250610c22565b73d66247eda32bacc0c06dacc80d19281535ce9d359250610c1f878361268e565b91505b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff841690636352211e9060240160206040518083038186803b158015610c8857600080fd5b505afa158015610c9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc09190612123565b905073ffffffffffffffffffffffffffffffffffffffff811673e052113bd7d7700d623414a0a4585bcae754e9d51480610d23575073ffffffffffffffffffffffffffffffffffffffff811673cb6ea8bb9cdf31c1cacfd207906520adc249a856145b15610d2d57610b49565b610d4a81600060016040518060200160405280600081525061153e565b610d5384612744565b9350610b49565b5050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610de95760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c7920565246436f6f7264696e61746f722063616e2066756c66696c6c006044820152606401610398565b60075550565b5050565b3360009081526005602052604090205460ff16610e775760405162461bcd60e51b8152602060048201526024808201527f6d7573742062652061646d696e20746f20706572666f726d207468697320616360448201527f74696f6e000000000000000000000000000000000000000000000000000000006064820152608401610398565b610def82600083611691565b3373ffffffffffffffffffffffffffffffffffffffff83161415610f0f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c6600000000000000000000000000000000000000000000006064820152608401610398565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8516331480610fcf5750610fcf853361028b565b6110415760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f76656400000000000000000000000000000000000000000000006064820152608401610398565b6105218585858585611864565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e00000000000000000000000000000000000000000000000000000000014806103df57506103df82611a61565b815183511461111b5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d617463680000000000000000000000000000000000000000000000006064820152608401610398565b73ffffffffffffffffffffffffffffffffffffffff84166111a45760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610398565b336111b3818787878787611b44565b60005b84518110156113095760008582815181106111d3576111d36127e7565b6020026020010151905060008583815181106111f1576111f16127e7565b6020908102919091018101516000848152808352604080822073ffffffffffffffffffffffffffffffffffffffff8e1683529093529190912054909150818110156112a45760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e73666572000000000000000000000000000000000000000000006064820152608401610398565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8e8116855292528083208585039055908b168252812080548492906112ee908490612676565b925050819055505050508061130290612744565b90506111b6565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161138092919061261a565b60405180910390a4611396818787878787611bbd565b505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634000aea07f00000000000000000000000000000000000000000000000000000000000000008486600060405160200161141b929190918252602082015260400190565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401611448939291906125c9565b602060405180830381600087803b15801561146257600080fd5b505af1158015611476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a91906123bd565b50600083815260046020818152604080842054815180840189905280830186905230606082015260808082018390528351808303909101815260a0909101909252815191830191909120938790529190526114f6906001612676565b6000858152600460205260409020556115368482604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff84166115c75760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610398565b336115e7816000876115d888611e09565b6115e188611e09565b87611b44565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8916845290915281208054859290611624908490612676565b9091555050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff80881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461052181600087878787611e54565b73ffffffffffffffffffffffffffffffffffffffff831661171a5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610398565b336117498185600061172b87611e09565b61173487611e09565b60405180602001604052806000815250611b44565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff88168452909152902054828110156117ec5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c60448201527f616e6365000000000000000000000000000000000000000000000000000000006064820152608401610398565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b73ffffffffffffffffffffffffffffffffffffffff84166118ed5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610398565b336118fd8187876115d888611e09565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8a168452909152902054838110156119a15760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e73666572000000000000000000000000000000000000000000006064820152608401610398565b60008581526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8b81168552925280832087850390559088168252812080548692906119eb908490612676565b9091555050604080518681526020810186905273ffffffffffffffffffffffffffffffffffffffff808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611a58828888888888611e54565b50505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a26000000000000000000000000000000000000000000000000000000001480611af457507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b806103df57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146103df565b60035460ff16156113965760405162461bcd60e51b815260206004820152602c60248201527f455243313135355061757361626c653a20746f6b656e207472616e736665722060448201527f7768696c652070617573656400000000000000000000000000000000000000006064820152608401610398565b73ffffffffffffffffffffffffffffffffffffffff84163b15611396576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c8190611c34908990899088908890889060040161250e565b602060405180830381600087803b158015611c4e57600080fd5b505af1925050508015611c9c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611c9991810190612419565b60015b611d5257611ca8612845565b806308c379a01415611ce25750611cbd612860565b80611cc85750611ce4565b8060405162461bcd60e51b8152600401610398919061263f565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401610398565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014611a585760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e730000000000000000000000000000000000000000000000006064820152608401610398565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611e4357611e436127e7565b602090810291909101015292915050565b73ffffffffffffffffffffffffffffffffffffffff84163b15611396576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e6190611ecb9089908990889088908890600401612579565b602060405180830381600087803b158015611ee557600080fd5b505af1925050508015611f33575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611f3091810190612419565b60015b611f3f57611ca8612845565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014611a585760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e730000000000000000000000000000000000000000000000006064820152608401610398565b600082601f83011261200757600080fd5b8135602061201482612652565b60405161202182826126f9565b8381528281019150858301600585901b8701840188101561204157600080fd5b60005b8581101561206057813584529284019290840190600101612044565b5090979650505050505050565b600082601f83011261207e57600080fd5b813567ffffffffffffffff81111561209857612098612816565b6040516120cd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601826126f9565b8181528460208386010111156120e257600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561211157600080fd5b813561211c81612908565b9392505050565b60006020828403121561213557600080fd5b815161211c81612908565b6000806040838503121561215357600080fd5b823561215e81612908565b9150602083013561216e81612908565b809150509250929050565b600080600080600060a0868803121561219157600080fd5b853561219c81612908565b945060208601356121ac81612908565b9350604086013567ffffffffffffffff808211156121c957600080fd5b6121d589838a01611ff6565b945060608801359150808211156121eb57600080fd5b6121f789838a01611ff6565b9350608088013591508082111561220d57600080fd5b5061221a8882890161206d565b9150509295509295909350565b600080600080600060a0868803121561223f57600080fd5b853561224a81612908565b9450602086013561225a81612908565b93506040860135925060608601359150608086013567ffffffffffffffff81111561228457600080fd5b61221a8882890161206d565b600080604083850312156122a357600080fd5b82356122ae81612908565b9150602083013561216e8161292a565b600080604083850312156122d157600080fd5b82356122dc81612908565b946020939093013593505050565b600080604083850312156122fd57600080fd5b823567ffffffffffffffff8082111561231557600080fd5b818501915085601f83011261232957600080fd5b8135602061233682612652565b60405161234382826126f9565b8381528281019150858301600585901b870184018b101561236357600080fd5b600096505b8487101561238f57803561237b81612908565b835260019690960195918301918301612368565b50965050860135925050808211156123a657600080fd5b506123b385828601611ff6565b9150509250929050565b6000602082840312156123cf57600080fd5b815161211c8161292a565b600080604083850312156123ed57600080fd5b50508035926020909101359150565b60006020828403121561240e57600080fd5b813561211c81612938565b60006020828403121561242b57600080fd5b815161211c81612938565b60006020828403121561244857600080fd5b5035919050565b60006020828403121561246157600080fd5b5051919050565b600081518084526020808501945080840160005b838110156124985781518752958201959082019060010161247c565b509495945050505050565b6000815180845260005b818110156124c9576020818501810151868301820152016124ad565b818111156124db576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a0604083015261254760a0830186612468565b82810360608401526125598186612468565b9050828103608084015261256d81856124a3565b98975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a060808301526125be60a08301846124a3565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006125fe60608301846124a3565b95945050505050565b60208152600061211c6020830184612468565b60408152600061262d6040830185612468565b82810360208401526125fe8185612468565b60208152600061211c60208301846124a3565b600067ffffffffffffffff82111561266c5761266c612816565b5060051b60200190565b60008219821115612689576126896127b8565b500190565b6000828210156126a0576126a06127b8565b500390565b600181811c908216806126b957607f821691505b602082108114156126f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff8211171561273d5761273d612816565b6040525050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612776576127766127b8565b5060010190565b6000826127b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561090c5760046000803e5060005160e01c90565b600060443d101561286e5790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff81602484011181841117156128bc57505050505090565b82850191508151818111156128d45750505050505090565b843d87010160208285010111156128ee5750505050505090565b6128fd602082860101876126f9565b509095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461073d57600080fd5b801515811461073d57600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461073d57600080fdfea264697066735822122064f4a81c1d33d49a27abdc14692452007faa09a922c6822b2b947c651c03f13c64736f6c6343000807003368747470733a2f2f6261736564666973686d616669612e636f6d2f6170692f77697265732f77697265732e6a736f6e
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ff5760003560e01c806391c05b0b11610097578063bc197c8111610066578063bc197c8114610214578063e985e9c51461027d578063f23a6e61146102c6578063f242432a146102fe57600080fd5b806391c05b0b146101c857806394985ddd146101db5780639dc29fac146101ee578063a22cb4651461020157600080fd5b80634e1273f4116100d35780634e1273f4146101825780635c975abb146101a257806370480275146101ad5780637d94792a146101c057600080fd5b8062fdd58e1461010457806301ffc9a71461012a5780630e89341c1461014d5780632eb2c2d61461016d575b600080fd5b6101176101123660046122be565b610311565b6040519081526020015b60405180910390f35b61013d6101383660046123fc565b6103d4565b6040519015158152602001610121565b61016061015b366004612436565b6103e5565b604051610121919061263f565b61018061017b366004612179565b610479565b005b6101956101903660046122ea565b610528565b6040516101219190612607565b60035460ff1661013d565b6101806101bb3660046120ff565b610666565b610117610740565b6101806101d6366004612436565b61090f565b6101806101e93660046123da565b610d64565b6101806101fc3660046122be565b610df3565b61018061020f366004612290565b610e83565b61024c610222366004612179565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610121565b61013d61028b366004612140565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205460ff1690565b61024c6102d4366004612227565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b61018061030c366004612227565b610fa6565b600073ffffffffffffffffffffffffffffffffffffffff83166103a15760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff949094168352929052205490565b60006103df8261104e565b92915050565b6060600280546103f4906126a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610420906126a5565b801561046d5780601f106104425761010080835404028352916020019161046d565b820191906000526020600020905b81548152906001019060200180831161045057829003601f168201915b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff85163314806104a257506104a2853361028b565b6105145760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006064820152608401610398565b61052185858585856110a4565b5050505050565b606081518351146105a15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d6174636800000000000000000000000000000000000000000000006064820152608401610398565b6000835167ffffffffffffffff8111156105bd576105bd612816565b6040519080825280602002602001820160405280156105e6578160200160208202803683370190505b50905060005b845181101561065e5761063185828151811061060a5761060a6127e7565b6020026020010151858381518110610624576106246127e7565b6020026020010151610311565b828281518110610643576106436127e7565b602090810291909101015261065781612744565b90506105ec565b509392505050565b3360009081526005602052604090205460ff166106ea5760405162461bcd60e51b8152602060048201526024808201527f6d7573742062652061646d696e20746f20706572666f726d207468697320616360448201527f74696f6e000000000000000000000000000000000000000000000000000000006064820152608401610398565b61073d8173ffffffffffffffffffffffffffffffffffffffff16600090815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b50565b3360009081526005602052604081205460ff166107c45760405162461bcd60e51b8152602060048201526024808201527f6d7573742062652061646d696e20746f20706572666f726d207468697320616360448201527f74696f6e000000000000000000000000000000000000000000000000000000006064820152608401610398565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152671bc16d674ec80000907faa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af4459082907f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca73ffffffffffffffffffffffffffffffffffffffff16906370a082319060240160206040518083038186803b15801561087757600080fd5b505afa15801561088b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108af919061244f565b10156108fd5760405162461bcd60e51b815260206004820152601f60248201527f6e6f7420656e6f756768204c494e4b20666f72207472616e73616374696f6e006044820152606401610398565b610907818361139e565b925050505b90565b3360009081526005602052604090205460ff166109935760405162461bcd60e51b8152602060048201526024808201527f6d7573742062652061646d696e20746f20706572666f726d207468697320616360448201527f74696f6e000000000000000000000000000000000000000000000000000000006064820152608401610398565b600754610a085760405162461bcd60e51b815260206004820152602160248201527f6e65656420746f207365656428292072616e646f6d2076616c7565206669727360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152608401610398565b600073138ff21a21dfc06fbfccf15f2d9fd290a660e15273ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a6457600080fd5b505afa158015610a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9c919061244f565b9050600073d66247eda32bacc0c06dacc80d19281535ce9d3573ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610afa57600080fd5b505afa158015610b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b32919061244f565b90506000610b408284612676565b90506000808060005b87841015610d5a57600754600680548792916000610b6683612744565b909155506040805160208101939093528201526060016040516020818303038152906040528051906020012060001c610b9f919061277d565b91507f7f67bf8e00fe84bc064a953ec765f995ad389b5f98426788d18dc4ed0fd18a9d82604051610bd291815260200190565b60405180910390a186821015610bfe5773138ff21a21dfc06fbfccf15f2d9fd290a660e1529250610c22565b73d66247eda32bacc0c06dacc80d19281535ce9d359250610c1f878361268e565b91505b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff841690636352211e9060240160206040518083038186803b158015610c8857600080fd5b505afa158015610c9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc09190612123565b905073ffffffffffffffffffffffffffffffffffffffff811673e052113bd7d7700d623414a0a4585bcae754e9d51480610d23575073ffffffffffffffffffffffffffffffffffffffff811673cb6ea8bb9cdf31c1cacfd207906520adc249a856145b15610d2d57610b49565b610d4a81600060016040518060200160405280600081525061153e565b610d5384612744565b9350610b49565b5050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000f0d54349addcf704f77ae15b96510dea15cb79521614610de95760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c7920565246436f6f7264696e61746f722063616e2066756c66696c6c006044820152606401610398565b60075550565b5050565b3360009081526005602052604090205460ff16610e775760405162461bcd60e51b8152602060048201526024808201527f6d7573742062652061646d696e20746f20706572666f726d207468697320616360448201527f74696f6e000000000000000000000000000000000000000000000000000000006064820152608401610398565b610def82600083611691565b3373ffffffffffffffffffffffffffffffffffffffff83161415610f0f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c6600000000000000000000000000000000000000000000006064820152608401610398565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8516331480610fcf5750610fcf853361028b565b6110415760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f76656400000000000000000000000000000000000000000000006064820152608401610398565b6105218585858585611864565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e00000000000000000000000000000000000000000000000000000000014806103df57506103df82611a61565b815183511461111b5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d617463680000000000000000000000000000000000000000000000006064820152608401610398565b73ffffffffffffffffffffffffffffffffffffffff84166111a45760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610398565b336111b3818787878787611b44565b60005b84518110156113095760008582815181106111d3576111d36127e7565b6020026020010151905060008583815181106111f1576111f16127e7565b6020908102919091018101516000848152808352604080822073ffffffffffffffffffffffffffffffffffffffff8e1683529093529190912054909150818110156112a45760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e73666572000000000000000000000000000000000000000000006064820152608401610398565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8e8116855292528083208585039055908b168252812080548492906112ee908490612676565b925050819055505050508061130290612744565b90506111b6565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161138092919061261a565b60405180910390a4611396818787878787611bbd565b505050505050565b60007f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca73ffffffffffffffffffffffffffffffffffffffff16634000aea07f000000000000000000000000f0d54349addcf704f77ae15b96510dea15cb79528486600060405160200161141b929190918252602082015260400190565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401611448939291906125c9565b602060405180830381600087803b15801561146257600080fd5b505af1158015611476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a91906123bd565b50600083815260046020818152604080842054815180840189905280830186905230606082015260808082018390528351808303909101815260a0909101909252815191830191909120938790529190526114f6906001612676565b6000858152600460205260409020556115368482604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff84166115c75760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610398565b336115e7816000876115d888611e09565b6115e188611e09565b87611b44565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8916845290915281208054859290611624908490612676565b9091555050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff80881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461052181600087878787611e54565b73ffffffffffffffffffffffffffffffffffffffff831661171a5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610398565b336117498185600061172b87611e09565b61173487611e09565b60405180602001604052806000815250611b44565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff88168452909152902054828110156117ec5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c60448201527f616e6365000000000000000000000000000000000000000000000000000000006064820152608401610398565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b73ffffffffffffffffffffffffffffffffffffffff84166118ed5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610398565b336118fd8187876115d888611e09565b60008481526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8a168452909152902054838110156119a15760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e73666572000000000000000000000000000000000000000000006064820152608401610398565b60008581526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8b81168552925280832087850390559088168252812080548692906119eb908490612676565b9091555050604080518681526020810186905273ffffffffffffffffffffffffffffffffffffffff808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611a58828888888888611e54565b50505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a26000000000000000000000000000000000000000000000000000000001480611af457507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b806103df57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146103df565b60035460ff16156113965760405162461bcd60e51b815260206004820152602c60248201527f455243313135355061757361626c653a20746f6b656e207472616e736665722060448201527f7768696c652070617573656400000000000000000000000000000000000000006064820152608401610398565b73ffffffffffffffffffffffffffffffffffffffff84163b15611396576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c8190611c34908990899088908890889060040161250e565b602060405180830381600087803b158015611c4e57600080fd5b505af1925050508015611c9c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611c9991810190612419565b60015b611d5257611ca8612845565b806308c379a01415611ce25750611cbd612860565b80611cc85750611ce4565b8060405162461bcd60e51b8152600401610398919061263f565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401610398565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014611a585760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e730000000000000000000000000000000000000000000000006064820152608401610398565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611e4357611e436127e7565b602090810291909101015292915050565b73ffffffffffffffffffffffffffffffffffffffff84163b15611396576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e6190611ecb9089908990889088908890600401612579565b602060405180830381600087803b158015611ee557600080fd5b505af1925050508015611f33575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611f3091810190612419565b60015b611f3f57611ca8612845565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014611a585760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e730000000000000000000000000000000000000000000000006064820152608401610398565b600082601f83011261200757600080fd5b8135602061201482612652565b60405161202182826126f9565b8381528281019150858301600585901b8701840188101561204157600080fd5b60005b8581101561206057813584529284019290840190600101612044565b5090979650505050505050565b600082601f83011261207e57600080fd5b813567ffffffffffffffff81111561209857612098612816565b6040516120cd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601826126f9565b8181528460208386010111156120e257600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561211157600080fd5b813561211c81612908565b9392505050565b60006020828403121561213557600080fd5b815161211c81612908565b6000806040838503121561215357600080fd5b823561215e81612908565b9150602083013561216e81612908565b809150509250929050565b600080600080600060a0868803121561219157600080fd5b853561219c81612908565b945060208601356121ac81612908565b9350604086013567ffffffffffffffff808211156121c957600080fd5b6121d589838a01611ff6565b945060608801359150808211156121eb57600080fd5b6121f789838a01611ff6565b9350608088013591508082111561220d57600080fd5b5061221a8882890161206d565b9150509295509295909350565b600080600080600060a0868803121561223f57600080fd5b853561224a81612908565b9450602086013561225a81612908565b93506040860135925060608601359150608086013567ffffffffffffffff81111561228457600080fd5b61221a8882890161206d565b600080604083850312156122a357600080fd5b82356122ae81612908565b9150602083013561216e8161292a565b600080604083850312156122d157600080fd5b82356122dc81612908565b946020939093013593505050565b600080604083850312156122fd57600080fd5b823567ffffffffffffffff8082111561231557600080fd5b818501915085601f83011261232957600080fd5b8135602061233682612652565b60405161234382826126f9565b8381528281019150858301600585901b870184018b101561236357600080fd5b600096505b8487101561238f57803561237b81612908565b835260019690960195918301918301612368565b50965050860135925050808211156123a657600080fd5b506123b385828601611ff6565b9150509250929050565b6000602082840312156123cf57600080fd5b815161211c8161292a565b600080604083850312156123ed57600080fd5b50508035926020909101359150565b60006020828403121561240e57600080fd5b813561211c81612938565b60006020828403121561242b57600080fd5b815161211c81612938565b60006020828403121561244857600080fd5b5035919050565b60006020828403121561246157600080fd5b5051919050565b600081518084526020808501945080840160005b838110156124985781518752958201959082019060010161247c565b509495945050505050565b6000815180845260005b818110156124c9576020818501810151868301820152016124ad565b818111156124db576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a0604083015261254760a0830186612468565b82810360608401526125598186612468565b9050828103608084015261256d81856124a3565b98975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a060808301526125be60a08301846124a3565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006125fe60608301846124a3565b95945050505050565b60208152600061211c6020830184612468565b60408152600061262d6040830185612468565b82810360208401526125fe8185612468565b60208152600061211c60208301846124a3565b600067ffffffffffffffff82111561266c5761266c612816565b5060051b60200190565b60008219821115612689576126896127b8565b500190565b6000828210156126a0576126a06127b8565b500390565b600181811c908216806126b957607f821691505b602082108114156126f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff8211171561273d5761273d612816565b6040525050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612776576127766127b8565b5060010190565b6000826127b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561090c5760046000803e5060005160e01c90565b600060443d101561286e5790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff81602484011181841117156128bc57505050505090565b82850191508151818111156128d45750505050505090565b843d87010160208285010111156128ee5750505050505090565b6128fd602082860101876126f9565b509095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461073d57600080fd5b801515811461073d57600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461073d57600080fdfea264697066735822122064f4a81c1d33d49a27abdc14692452007faa09a922c6822b2b947c651c03f13c64736f6c63430008070033
Deployed Bytecode Sourcemap
52274:2969:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22974:231;;;;;;:::i;:::-;;:::i;:::-;;;11857:25:1;;;11845:2;11830:18;22974:231:0;;;;;;;;52689:229;;;;;;:::i;:::-;;:::i;:::-;;;11684:14:1;;11677:22;11659:41;;11647:2;11632:18;52689:229:0;11519:187:1;22718:105:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25069:442::-;;;;;;:::i;:::-;;:::i;:::-;;23371:524;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7278:86::-;7349:7;;;;7278:86;;53158:92;;;;;;:::i;:::-;;:::i;53666:334::-;;;:::i;54128:1112::-;;;;;;:::i;:::-;;:::i;51779:233::-;;;;;;:::i;:::-;;:::i;53559:99::-;;;;;;:::i;:::-;;:::i;23968:311::-;;;;;;:::i;:::-;;:::i;37949:255::-;;;;;;:::i;:::-;38160:36;37949:255;;;;;;;;;;;12765:66:1;12753:79;;;12735:98;;12723:2;12708:18;37949:255:0;12591:248:1;24351:168:0;;;;;;:::i;:::-;24474:27;;;;24450:4;24474:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;24351:168;37714:227;;;;;;:::i;:::-;37902:31;37714:227;;;;;;;;24591:401;;;;;;:::i;:::-;;:::i;22974:231::-;23060:7;23088:21;;;23080:77;;;;-1:-1:-1;;;23080:77:0;;14100:2:1;23080:77:0;;;14082:21:1;14139:2;14119:18;;;14112:30;14178:34;14158:18;;;14151:62;14249:13;14229:18;;;14222:41;14280:19;;23080:77:0;;;;;;;;;-1:-1:-1;23175:9:0;:13;;;;;;;;;;;:22;;;;;;;;;;;;;22974:231::o;52689:229::-;52845:4;52874:36;52898:11;52874:23;:36::i;:::-;52867:43;52689:229;-1:-1:-1;;52689:229:0:o;22718:105::-;22778:13;22811:4;22804:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22718:105;;;:::o;25069:442::-;25302:20;;;4651:10;25302:20;;:60;;-1:-1:-1;25326:36:0;25343:4;4651:10;24351:168;:::i;25326:36::-;25280:160;;;;-1:-1:-1;;;25280:160:0;;16506:2:1;25280:160:0;;;16488:21:1;16545:2;16525:18;;;16518:30;16584:34;16564:18;;;16557:62;16655:20;16635:18;;;16628:48;16693:19;;25280:160:0;16304:414:1;25280:160:0;25451:52;25474:4;25480:2;25484:3;25489:7;25498:4;25451:22;:52::i;:::-;25069:442;;;;;:::o;23371:524::-;23527:16;23588:3;:10;23569:8;:15;:29;23561:83;;;;-1:-1:-1;;;23561:83:0;;18915:2:1;23561:83:0;;;18897:21:1;18954:2;18934:18;;;18927:30;18993:34;18973:18;;;18966:62;19064:11;19044:18;;;19037:39;19093:19;;23561:83:0;18713:405:1;23561:83:0;23657:30;23704:8;:15;23690:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23690:30:0;;23657:63;;23738:9;23733:122;23757:8;:15;23753:1;:19;23733:122;;;23813:30;23823:8;23832:1;23823:11;;;;;;;;:::i;:::-;;;;;;;23836:3;23840:1;23836:6;;;;;;;;:::i;:::-;;;;;;;23813:9;:30::i;:::-;23794:13;23808:1;23794:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;23774:3;;;:::i;:::-;;;23733:122;;;-1:-1:-1;23874:13:0;23371:524;-1:-1:-1;;;23371:524:0:o;53158:92::-;53078:10;53066:23;;;;:11;:23;;;;;;;;53058:72;;;;-1:-1:-1;;;53058:72:0;;18100:2:1;53058:72:0;;;18082:21:1;18139:2;18119:18;;;18112:30;18178:34;18158:18;;;18151:62;18249:6;18229:18;;;18222:34;18273:19;;53058:72:0;17898:400:1;53058:72:0;53220:22:::1;53237:4;52986:17:::0;;;;;;:11;:17;;;;;:24;;;;53006:4;52986:24;;;52926:92;53220:22:::1;53158:92:::0;:::o;53666:334::-;53078:10;53710:17;53066:23;;;:11;:23;;;;;;;;53058:72;;;;-1:-1:-1;;;53058:72:0;;18100:2:1;53058:72:0;;;18082:21:1;18139:2;18119:18;;;18112:30;18178:34;18158:18;;;18151:62;18249:6;18229:18;;;18222:34;18273:19;;53058:72:0;17898:400:1;53058:72:0;53874:29:::1;::::0;;;;53897:4:::1;53874:29;::::0;::::1;8843:74:1::0;53751:12:0::1;::::0;53789:66:::1;::::0;53751:12;;53874:4:::1;:14;;::::0;::::1;::::0;8816:18:1;;53874:29:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;53866:80;;;::::0;-1:-1:-1;;;53866:80:0;;15740:2:1;53866:80:0::1;::::0;::::1;15722:21:1::0;15779:2;15759:18;;;15752:30;15818:33;15798:18;;;15791:61;15869:18;;53866:80:0::1;15538:355:1::0;53866:80:0::1;53964:28;53982:4;53988:3;53964:17;:28::i;:::-;53957:35;;;;53141:1;53666:334:::0;:::o;54128:1112::-;53078:10;53066:23;;;;:11;:23;;;;;;;;53058:72;;;;-1:-1:-1;;;53058:72:0;;18100:2:1;53058:72:0;;;18082:21:1;18139:2;18119:18;;;18112:30;18178:34;18158:18;;;18151:62;18249:6;18229:18;;;18222:34;18273:19;;53058:72:0;17898:400:1;53058:72:0;54198:6:::1;::::0;54190:57:::1;;;::::0;-1:-1:-1;;;54190:57:0;;20136:2:1;54190:57:0::1;::::0;::::1;20118:21:1::0;20175:2;20155:18;;;20148:30;20214:34;20194:18;;;20187:62;20285:3;20265:18;;;20258:31;20306:19;;54190:57:0::1;19934:397:1::0;54190:57:0::1;54260:15;52516:42;54278:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54260:37;;54308:15;52609:42;54326:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54308:37:::0;-1:-1:-1;54356:20:0::1;54379:23;54308:37:::0;54379:10;:23:::1;:::i;:::-;54356:46;;54415:14;54444:20:::0;54475:13;54499:15:::1;54525:708;54544:5;54532:9;:17;54525:708;;;54603:6;::::0;54611::::1;:8:::0;;54625:15;;54603:6;54611::::1;:8;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;54592:28:0::1;::::0;;::::1;::::0;::::1;12067:25:1::0;;;;12108:18;;12101:34;12040:18;;54592:28:0::1;;;;;;;;;;;;54582:39;;;;;;54577:45;;:63;;;;:::i;:::-;54566:74;;54660:18;54669:8;54660:18;;;;11857:25:1::0;;11845:2;11830:18;;11711:177;54660:18:0::1;;;;;;;;54710:10;54699:8;:21;54695:182;;;52516:42;54741:19;;54695:182;;;52609:42;::::0;-1:-1:-1;54839:22:0::1;54851:10:::0;54839:22;::::1;:::i;:::-;;;54695:182;54903:29;::::0;;;;::::1;::::0;::::1;11857:25:1::0;;;54903:19:0::1;::::0;::::1;::::0;::::1;::::0;11830:18:1;;54903:29:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54893:39:::0;-1:-1:-1;54951:62:0::1;::::0;::::1;54970:42;54951:62;::::0;:145:::1;;-1:-1:-1::0;55034:62:0::1;::::0;::::1;55053:42;55034:62;54951:145;54947:208;;;55131:8;;54947:208;55171:24;55177:7;55186:1;55189;55171:24;;;;;;;;;;;::::0;:5:::1;:24::i;:::-;55210:11;::::0;::::1;:::i;:::-;;;54525:708;;;54179:1061;;;;;;;54128:1112:::0;:::o;51779:233::-;51895:10;:28;51909:14;51895:28;;51887:72;;;;-1:-1:-1;;;51887:72:0;;17740:2:1;51887:72:0;;;17722:21:1;17779:2;17759:18;;;17752:30;17818:33;17798:18;;;17791:61;17869:18;;51887:72:0;17538:355:1;51887:72:0;54093:6;:19;-1:-1:-1;51779:233:0:o;51966:40::-;51779:233;;:::o;53559:99::-;53078:10;53066:23;;;;:11;:23;;;;;;;;53058:72;;;;-1:-1:-1;;;53058:72:0;;18100:2:1;53058:72:0;;;18082:21:1;18139:2;18119:18;;;18112:30;18178:34;18158:18;;;18151:62;18249:6;18229:18;;;18222:34;18273:19;;53058:72:0;17898:400:1;53058:72:0;53629:21:::1;53635:4;53641:1;53644:5;53629;:21::i;23968:311::-:0;4651:10;24071:24;;;;;24063:78;;;;-1:-1:-1;;;24063:78:0;;18505:2:1;24063:78:0;;;18487:21:1;18544:2;18524:18;;;18517:30;18583:34;18563:18;;;18556:62;18654:11;18634:18;;;18627:39;18683:19;;24063:78:0;18303:405:1;24063:78:0;4651:10;24154:32;;;;:18;:32;;;;;;;;;:42;;;;;;;;;;;;:53;;;;;;;;;;;;;24223:48;;11659:41:1;;;24154:42:0;;4651:10;24223:48;;11632:18:1;24223:48:0;;;;;;;23968:311;;:::o;24591:401::-;24799:20;;;4651:10;24799:20;;:60;;-1:-1:-1;24823:36:0;24840:4;4651:10;24351:168;:::i;24823:36::-;24777:151;;;;-1:-1:-1;;;24777:151:0;;15330:2:1;24777:151:0;;;15312:21:1;15369:2;15349:18;;;15342:30;15408:34;15388:18;;;15381:62;15479:11;15459:18;;;15452:39;15508:19;;24777:151:0;15128:405:1;24777:151:0;24939:45;24957:4;24963:2;24967;24971:6;24979:4;24939:17;:45::i;37390:223::-;37492:4;37516:49;;;37531:34;37516:49;;:89;;;37569:36;37593:11;37569:23;:36::i;27153:1074::-;27380:7;:14;27366:3;:10;:28;27358:81;;;;-1:-1:-1;;;27358:81:0;;19325:2:1;27358:81:0;;;19307:21:1;19364:2;19344:18;;;19337:30;19403:34;19383:18;;;19376:62;19474:10;19454:18;;;19447:38;19502:19;;27358:81:0;19123:404:1;27358:81:0;27458:16;;;27450:66;;;;-1:-1:-1;;;27450:66:0;;16100:2:1;27450:66:0;;;16082:21:1;16139:2;16119:18;;;16112:30;16178:34;16158:18;;;16151:62;16249:7;16229:18;;;16222:35;16274:19;;27450:66:0;15898:401:1;27450:66:0;4651:10;27573:60;4651:10;27604:4;27610:2;27614:3;27619:7;27628:4;27573:20;:60::i;:::-;27651:9;27646:421;27670:3;:10;27666:1;:14;27646:421;;;27702:10;27715:3;27719:1;27715:6;;;;;;;;:::i;:::-;;;;;;;27702:19;;27736:14;27753:7;27761:1;27753:10;;;;;;;;:::i;:::-;;;;;;;;;;;;27780:19;27802:13;;;;;;;;;;:19;;;;;;;;;;;;;27753:10;;-1:-1:-1;27844:21:0;;;;27836:76;;;;-1:-1:-1;;;27836:76:0;;17329:2:1;27836:76:0;;;17311:21:1;17368:2;17348:18;;;17341:30;17407:34;17387:18;;;17380:62;17478:12;17458:18;;;17451:40;17508:19;;27836:76:0;17127:406:1;27836:76:0;27956:9;:13;;;;;;;;;;;:19;;;;;;;;;;;27978:20;;;27956:42;;28028:17;;;;;;;:27;;27978:20;;27956:9;28028:27;;27978:20;;28028:27;:::i;:::-;;;;;;;;27687:380;;;27682:3;;;;:::i;:::-;;;27646:421;;;;28114:2;28084:47;;28108:4;28084:47;;28098:8;28084:47;;;28118:3;28123:7;28084:47;;;;;;;:::i;:::-;;;;;;;;28144:75;28180:8;28190:4;28196:2;28200:3;28205:7;28214:4;28144:35;:75::i;:::-;27347:880;27153:1074;;;;;:::o;49843:1077::-;49953:17;49988:4;:20;;;50009:14;50025:4;50042:8;48673:1;50031:43;;;;;;;;12067:25:1;;;12123:2;12108:18;;12101:34;12055:2;12040:18;;11893:248;50031:43:0;;;;;;;;;;;;;49988:87;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;50310:15:0;50394:16;;;:6;:16;;;;;;;;;41407:51;;;;;12377:25:1;;;12418:18;;;12411:34;;;50387:4:0;12461:18:1;;;12454:83;12553:18;;;;12546:34;;;41407:51:0;;;;;;;;;;12349:19:1;;;;41407:51:0;;;41397:62;;;;;;;;;50848:16;;;;;;;:20;;50867:1;50848:20;:::i;:::-;50829:16;;;;:6;:16;;;;;:39;50882:32;50836:8;50906:7;42024:41;;;;;;;8602:19:1;;;;8637:12;;;8630:28;;;;42024:41:0;;;;;;;;;8674:12:1;;;;42024:41:0;;42014:52;;;;;;41857:215;50882:32;50875:39;49843:1077;-1:-1:-1;;;;49843:1077:0:o;29560:599::-;29718:21;;;29710:67;;;;-1:-1:-1;;;29710:67:0;;19734:2:1;29710:67:0;;;19716:21:1;19773:2;19753:18;;;19746:30;19812:34;19792:18;;;19785:62;19883:3;19863:18;;;19856:31;19904:19;;29710:67:0;19532:397:1;29710:67:0;4651:10;29834:107;4651:10;29790:16;29877:7;29886:21;29904:2;29886:17;:21::i;:::-;29909:25;29927:6;29909:17;:25::i;:::-;29936:4;29834:20;:107::i;:::-;29954:9;:13;;;;;;;;;;;:22;;;;;;;;;;:32;;29980:6;;29954:9;:32;;29980:6;;29954:32;:::i;:::-;;;;-1:-1:-1;;30002:57:0;;;12067:25:1;;;12123:2;12108:18;;12101:34;;;30002:57:0;;;;;30035:1;;30002:57;;;;;;12040:18:1;30002:57:0;;;;;;;30072:79;30103:8;30121:1;30125:7;30134:2;30138:6;30146:4;30072:30;:79::i;31509:675::-;31639:21;;;31631:69;;;;-1:-1:-1;;;31631:69:0;;16925:2:1;31631:69:0;;;16907:21:1;16964:2;16944:18;;;16937:30;17003:34;16983:18;;;16976:62;17074:5;17054:18;;;17047:33;17097:19;;31631:69:0;16723:399:1;31631:69:0;4651:10;31757:105;4651:10;31788:7;31713:16;31809:21;31827:2;31809:17;:21::i;:::-;31832:25;31850:6;31832:17;:25::i;:::-;31757:105;;;;;;;;;;;;:20;:105::i;:::-;31875:22;31900:13;;;;;;;;;;;:22;;;;;;;;;;;31941:24;;;;31933:73;;;;-1:-1:-1;;;31933:73:0;;14512:2:1;31933:73:0;;;14494:21:1;14551:2;14531:18;;;14524:30;14590:34;14570:18;;;14563:62;14661:6;14641:18;;;14634:34;14685:19;;31933:73:0;14310:400:1;31933:73:0;32042:9;:13;;;;;;;;;;;:22;;;;;;;;;;;;;32067:23;;;32042:48;;32119:57;;12067:25:1;;;12108:18;;;12101:34;;;32042:22:0;;32119:57;;;;;;12040:18:1;32119:57:0;;;;;;;31620:564;;31509:675;;;:::o;25975:820::-;26163:16;;;26155:66;;;;-1:-1:-1;;;26155:66:0;;16100:2:1;26155:66:0;;;16082:21:1;16139:2;16119:18;;;16112:30;16178:34;16158:18;;;16151:62;16249:7;16229:18;;;16222:35;16274:19;;26155:66:0;15898:401:1;26155:66:0;4651:10;26278:96;4651:10;26309:4;26315:2;26319:21;26337:2;26319:17;:21::i;26278:96::-;26387:19;26409:13;;;;;;;;;;;:19;;;;;;;;;;;26447:21;;;;26439:76;;;;-1:-1:-1;;;26439:76:0;;17329:2:1;26439:76:0;;;17311:21:1;17368:2;17348:18;;;17341:30;17407:34;17387:18;;;17380:62;17478:12;17458:18;;;17451:40;17508:19;;26439:76:0;17127:406:1;26439:76:0;26551:9;:13;;;;;;;;;;;:19;;;;;;;;;;;26573:20;;;26551:42;;26615:17;;;;;;;:27;;26573:20;;26551:9;26615:27;;26573:20;;26615:27;:::i;:::-;;;;-1:-1:-1;;26660:46:0;;;12067:25:1;;;12123:2;12108:18;;12101:34;;;26660:46:0;;;;;;;;;;;;;;;12040:18:1;26660:46:0;;;;;;;26719:68;26750:8;26760:4;26766:2;26770;26774:6;26782:4;26719:30;:68::i;:::-;26144:651;;25975:820;;;;;:::o;21997:310::-;22099:4;22136:41;;;22151:26;22136:41;;:110;;-1:-1:-1;22194:52:0;;;22209:37;22194:52;22136:110;:163;;;-1:-1:-1;1644:25:0;1629:40;;;;22263:36;1520:157;36793:392;7349:7;;;;37119:9;37111:66;;;;-1:-1:-1;;;37111:66:0;;14917:2:1;37111:66:0;;;14899:21:1;14956:2;14936:18;;;14929:30;14995:34;14975:18;;;14968:62;15066:14;15046:18;;;15039:42;15098:19;;37111:66:0;14715:408:1;35242:813:0;35482:13;;;14073:20;14121:8;35478:570;;35518:79;;;;;:43;;;;;;:79;;35562:8;;35572:4;;35578:3;;35583:7;;35592:4;;35518:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35518:79:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35514:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35910:6;35903:14;;-1:-1:-1;;;35903:14:0;;;;;;;;:::i;35514:523::-;;;35959:62;;-1:-1:-1;;;35959:62:0;;13270:2:1;35959:62:0;;;13252:21:1;13309:2;13289:18;;;13282:30;13348:34;13328:18;;;13321:62;13419:22;13399:18;;;13392:50;13459:19;;35959:62:0;13068:416:1;35514:523:0;35679:60;;;35691:48;35679:60;35675:159;;35764:50;;-1:-1:-1;;;35764:50:0;;13691:2:1;35764:50:0;;;13673:21:1;13730:2;13710:18;;;13703:30;13769:34;13749:18;;;13742:62;13840:10;13820:18;;;13813:38;13868:19;;35764:50:0;13489:404:1;36063:198:0;36183:16;;;36197:1;36183:16;;;;;;;;;36129;;36158:22;;36183:16;;;;;;;;;;;;-1:-1:-1;36183:16:0;36158:41;;36221:7;36210:5;36216:1;36210:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;36248:5;36063:198;-1:-1:-1;;36063:198:0:o;34490:744::-;34705:13;;;14073:20;14121:8;34701:526;;34741:72;;;;;:38;;;;;;:72;;34780:8;;34790:4;;34796:2;;34800:6;;34808:4;;34741:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34741:72:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34737:479;;;;:::i;:::-;34863:55;;;34875:43;34863:55;34859:154;;34943:50;;-1:-1:-1;;;34943:50:0;;13691:2:1;34943:50:0;;;13673:21:1;13730:2;13710:18;;;13703:30;13769:34;13749:18;;;13742:62;13840:10;13820:18;;;13813:38;13868:19;;34943:50:0;13489:404:1;14:735;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;175:6;162:20;201:4;224:43;264:2;224:43;:::i;:::-;296:2;290:9;308:31;336:2;328:6;308:31;:::i;:::-;374:18;;;408:15;;;;-1:-1:-1;443:15:1;;;493:1;489:10;;;477:23;;473:32;;470:41;-1:-1:-1;467:61:1;;;524:1;521;514:12;467:61;546:1;556:163;570:2;567:1;564:9;556:163;;;627:17;;615:30;;665:12;;;;697;;;;588:1;581:9;556:163;;;-1:-1:-1;737:6:1;;14:735;-1:-1:-1;;;;;;;14:735:1:o;754:614::-;796:5;849:3;842:4;834:6;830:17;826:27;816:55;;867:1;864;857:12;816:55;903:6;890:20;929:18;925:2;922:26;919:52;;;951:18;;:::i;:::-;1000:2;994:9;1012:126;1132:4;1063:66;1056:4;1052:2;1048:13;1044:86;1040:97;1032:6;1012:126;:::i;:::-;1162:2;1154:6;1147:18;1208:3;1201:4;1196:2;1188:6;1184:15;1180:26;1177:35;1174:55;;;1225:1;1222;1215:12;1174:55;1289:2;1282:4;1274:6;1270:17;1263:4;1255:6;1251:17;1238:54;1336:1;1312:15;;;1329:4;1308:26;1301:37;;;;1316:6;754:614;-1:-1:-1;;;754:614:1:o;1373:247::-;1432:6;1485:2;1473:9;1464:7;1460:23;1456:32;1453:52;;;1501:1;1498;1491:12;1453:52;1540:9;1527:23;1559:31;1584:5;1559:31;:::i;:::-;1609:5;1373:247;-1:-1:-1;;;1373:247:1:o;1625:251::-;1695:6;1748:2;1736:9;1727:7;1723:23;1719:32;1716:52;;;1764:1;1761;1754:12;1716:52;1796:9;1790:16;1815:31;1840:5;1815:31;:::i;1881:388::-;1949:6;1957;2010:2;1998:9;1989:7;1985:23;1981:32;1978:52;;;2026:1;2023;2016:12;1978:52;2065:9;2052:23;2084:31;2109:5;2084:31;:::i;:::-;2134:5;-1:-1:-1;2191:2:1;2176:18;;2163:32;2204:33;2163:32;2204:33;:::i;:::-;2256:7;2246:17;;;1881:388;;;;;:::o;2274:1071::-;2428:6;2436;2444;2452;2460;2513:3;2501:9;2492:7;2488:23;2484:33;2481:53;;;2530:1;2527;2520:12;2481:53;2569:9;2556:23;2588:31;2613:5;2588:31;:::i;:::-;2638:5;-1:-1:-1;2695:2:1;2680:18;;2667:32;2708:33;2667:32;2708:33;:::i;:::-;2760:7;-1:-1:-1;2818:2:1;2803:18;;2790:32;2841:18;2871:14;;;2868:34;;;2898:1;2895;2888:12;2868:34;2921:61;2974:7;2965:6;2954:9;2950:22;2921:61;:::i;:::-;2911:71;;3035:2;3024:9;3020:18;3007:32;2991:48;;3064:2;3054:8;3051:16;3048:36;;;3080:1;3077;3070:12;3048:36;3103:63;3158:7;3147:8;3136:9;3132:24;3103:63;:::i;:::-;3093:73;;3219:3;3208:9;3204:19;3191:33;3175:49;;3249:2;3239:8;3236:16;3233:36;;;3265:1;3262;3255:12;3233:36;;3288:51;3331:7;3320:8;3309:9;3305:24;3288:51;:::i;:::-;3278:61;;;2274:1071;;;;;;;;:::o;3350:734::-;3454:6;3462;3470;3478;3486;3539:3;3527:9;3518:7;3514:23;3510:33;3507:53;;;3556:1;3553;3546:12;3507:53;3595:9;3582:23;3614:31;3639:5;3614:31;:::i;:::-;3664:5;-1:-1:-1;3721:2:1;3706:18;;3693:32;3734:33;3693:32;3734:33;:::i;:::-;3786:7;-1:-1:-1;3840:2:1;3825:18;;3812:32;;-1:-1:-1;3891:2:1;3876:18;;3863:32;;-1:-1:-1;3946:3:1;3931:19;;3918:33;3974:18;3963:30;;3960:50;;;4006:1;4003;3996:12;3960:50;4029:49;4070:7;4061:6;4050:9;4046:22;4029:49;:::i;4089:382::-;4154:6;4162;4215:2;4203:9;4194:7;4190:23;4186:32;4183:52;;;4231:1;4228;4221:12;4183:52;4270:9;4257:23;4289:31;4314:5;4289:31;:::i;:::-;4339:5;-1:-1:-1;4396:2:1;4381:18;;4368:32;4409:30;4368:32;4409:30;:::i;4476:315::-;4544:6;4552;4605:2;4593:9;4584:7;4580:23;4576:32;4573:52;;;4621:1;4618;4611:12;4573:52;4660:9;4647:23;4679:31;4704:5;4679:31;:::i;:::-;4729:5;4781:2;4766:18;;;;4753:32;;-1:-1:-1;;;4476:315:1:o;4796:1288::-;4914:6;4922;4975:2;4963:9;4954:7;4950:23;4946:32;4943:52;;;4991:1;4988;4981:12;4943:52;5031:9;5018:23;5060:18;5101:2;5093:6;5090:14;5087:34;;;5117:1;5114;5107:12;5087:34;5155:6;5144:9;5140:22;5130:32;;5200:7;5193:4;5189:2;5185:13;5181:27;5171:55;;5222:1;5219;5212:12;5171:55;5258:2;5245:16;5280:4;5303:43;5343:2;5303:43;:::i;:::-;5375:2;5369:9;5387:31;5415:2;5407:6;5387:31;:::i;:::-;5453:18;;;5487:15;;;;-1:-1:-1;5522:11:1;;;5564:1;5560:10;;;5552:19;;5548:28;;5545:41;-1:-1:-1;5542:61:1;;;5599:1;5596;5589:12;5542:61;5621:1;5612:10;;5631:238;5645:2;5642:1;5639:9;5631:238;;;5716:3;5703:17;5733:31;5758:5;5733:31;:::i;:::-;5777:18;;5663:1;5656:9;;;;;5815:12;;;;5847;;5631:238;;;-1:-1:-1;5888:6:1;-1:-1:-1;;5932:18:1;;5919:32;;-1:-1:-1;;5963:16:1;;;5960:36;;;5992:1;5989;5982:12;5960:36;;6015:63;6070:7;6059:8;6048:9;6044:24;6015:63;:::i;:::-;6005:73;;;4796:1288;;;;;:::o;6089:245::-;6156:6;6209:2;6197:9;6188:7;6184:23;6180:32;6177:52;;;6225:1;6222;6215:12;6177:52;6257:9;6251:16;6276:28;6298:5;6276:28;:::i;6339:248::-;6407:6;6415;6468:2;6456:9;6447:7;6443:23;6439:32;6436:52;;;6484:1;6481;6474:12;6436:52;-1:-1:-1;;6507:23:1;;;6577:2;6562:18;;;6549:32;;-1:-1:-1;6339:248:1:o;6592:245::-;6650:6;6703:2;6691:9;6682:7;6678:23;6674:32;6671:52;;;6719:1;6716;6709:12;6671:52;6758:9;6745:23;6777:30;6801:5;6777:30;:::i;6842:249::-;6911:6;6964:2;6952:9;6943:7;6939:23;6935:32;6932:52;;;6980:1;6977;6970:12;6932:52;7012:9;7006:16;7031:30;7055:5;7031:30;:::i;7096:180::-;7155:6;7208:2;7196:9;7187:7;7183:23;7179:32;7176:52;;;7224:1;7221;7214:12;7176:52;-1:-1:-1;7247:23:1;;7096:180;-1:-1:-1;7096:180:1:o;7281:184::-;7351:6;7404:2;7392:9;7383:7;7379:23;7375:32;7372:52;;;7420:1;7417;7410:12;7372:52;-1:-1:-1;7443:16:1;;7281:184;-1:-1:-1;7281:184:1:o;7470:435::-;7523:3;7561:5;7555:12;7588:6;7583:3;7576:19;7614:4;7643:2;7638:3;7634:12;7627:19;;7680:2;7673:5;7669:14;7701:1;7711:169;7725:6;7722:1;7719:13;7711:169;;;7786:13;;7774:26;;7820:12;;;;7855:15;;;;7747:1;7740:9;7711:169;;;-1:-1:-1;7896:3:1;;7470:435;-1:-1:-1;;;;;7470:435:1:o;7910:530::-;7951:3;7989:5;7983:12;8016:6;8011:3;8004:19;8041:1;8051:162;8065:6;8062:1;8059:13;8051:162;;;8127:4;8183:13;;;8179:22;;8173:29;8155:11;;;8151:20;;8144:59;8080:12;8051:162;;;8231:6;8228:1;8225:13;8222:87;;;8297:1;8290:4;8281:6;8276:3;8272:16;8268:27;8261:38;8222:87;-1:-1:-1;8354:2:1;8342:15;8359:66;8338:88;8329:98;;;;8429:4;8325:109;;7910:530;-1:-1:-1;;7910:530:1:o;8928:849::-;9250:4;9279:42;9360:2;9352:6;9348:15;9337:9;9330:34;9412:2;9404:6;9400:15;9395:2;9384:9;9380:18;9373:43;;9452:3;9447:2;9436:9;9432:18;9425:31;9479:57;9531:3;9520:9;9516:19;9508:6;9479:57;:::i;:::-;9584:9;9576:6;9572:22;9567:2;9556:9;9552:18;9545:50;9618:44;9655:6;9647;9618:44;:::i;:::-;9604:58;;9711:9;9703:6;9699:22;9693:3;9682:9;9678:19;9671:51;9739:32;9764:6;9756;9739:32;:::i;:::-;9731:40;8928:849;-1:-1:-1;;;;;;;;8928:849:1:o;9782:583::-;10004:4;10033:42;10114:2;10106:6;10102:15;10091:9;10084:34;10166:2;10158:6;10154:15;10149:2;10138:9;10134:18;10127:43;;10206:6;10201:2;10190:9;10186:18;10179:34;10249:6;10244:2;10233:9;10229:18;10222:34;10293:3;10287;10276:9;10272:19;10265:32;10314:45;10354:3;10343:9;10339:19;10331:6;10314:45;:::i;:::-;10306:53;9782:583;-1:-1:-1;;;;;;;9782:583:1:o;10370:408::-;10585:42;10577:6;10573:55;10562:9;10555:74;10665:6;10660:2;10649:9;10645:18;10638:34;10708:2;10703;10692:9;10688:18;10681:30;10536:4;10728:44;10768:2;10757:9;10753:18;10745:6;10728:44;:::i;:::-;10720:52;10370:408;-1:-1:-1;;;;;10370:408:1:o;10783:261::-;10962:2;10951:9;10944:21;10925:4;10982:56;11034:2;11023:9;11019:18;11011:6;10982:56;:::i;11049:465::-;11306:2;11295:9;11288:21;11269:4;11332:56;11384:2;11373:9;11369:18;11361:6;11332:56;:::i;:::-;11436:9;11428:6;11424:22;11419:2;11408:9;11404:18;11397:50;11464:44;11501:6;11493;11464:44;:::i;12844:219::-;12993:2;12982:9;12975:21;12956:4;13013:44;13053:2;13042:9;13038:18;13030:6;13013:44;:::i;20771:183::-;20831:4;20864:18;20856:6;20853:30;20850:56;;;20886:18;;:::i;:::-;-1:-1:-1;20931:1:1;20927:14;20943:4;20923:25;;20771:183::o;20959:128::-;20999:3;21030:1;21026:6;21023:1;21020:13;21017:39;;;21036:18;;:::i;:::-;-1:-1:-1;21072:9:1;;20959:128::o;21092:125::-;21132:4;21160:1;21157;21154:8;21151:34;;;21165:18;;:::i;:::-;-1:-1:-1;21202:9:1;;21092:125::o;21222:437::-;21301:1;21297:12;;;;21344;;;21365:61;;21419:4;21411:6;21407:17;21397:27;;21365:61;21472:2;21464:6;21461:14;21441:18;21438:38;21435:218;;;21509:77;21506:1;21499:88;21610:4;21607:1;21600:15;21638:4;21635:1;21628:15;21435:218;;21222:437;;;:::o;21664:308::-;21770:66;21765:2;21759:4;21755:13;21751:86;21743:6;21739:99;21904:6;21892:10;21889:22;21868:18;21856:10;21853:34;21850:62;21847:88;;;21915:18;;:::i;:::-;21951:2;21944:22;-1:-1:-1;;21664:308:1:o;21977:195::-;22016:3;22047:66;22040:5;22037:77;22034:103;;;22117:18;;:::i;:::-;-1:-1:-1;22164:1:1;22153:13;;21977:195::o;22177:266::-;22209:1;22235;22225:189;;22270:77;22267:1;22260:88;22371:4;22368:1;22361:15;22399:4;22396:1;22389:15;22225:189;-1:-1:-1;22428:9:1;;22177:266::o;22448:184::-;22500:77;22497:1;22490:88;22597:4;22594:1;22587:15;22621:4;22618:1;22611:15;22637:184;22689:77;22686:1;22679:88;22786:4;22783:1;22776:15;22810:4;22807:1;22800:15;22826:184;22878:77;22875:1;22868:88;22975:4;22972:1;22965:15;22999:4;22996:1;22989:15;23015:179;23050:3;23092:1;23074:16;23071:23;23068:120;;;23138:1;23135;23132;23117:23;-1:-1:-1;23175:1:1;23169:8;23164:3;23160:18;23015:179;:::o;23199:731::-;23238:3;23280:4;23262:16;23259:26;23256:39;;;23199:731;:::o;23256:39::-;23322:2;23316:9;23344:66;23465:2;23447:16;23443:25;23440:1;23434:4;23419:50;23498:4;23492:11;23522:16;23557:18;23628:2;23621:4;23613:6;23609:17;23606:25;23601:2;23593:6;23590:14;23587:45;23584:58;;;23635:5;;;;;23199:731;:::o;23584:58::-;23672:6;23666:4;23662:17;23651:28;;23708:3;23702:10;23735:2;23727:6;23724:14;23721:27;;;23741:5;;;;;;23199:731;:::o;23721:27::-;23825:2;23806:16;23800:4;23796:27;23792:36;23785:4;23776:6;23771:3;23767:16;23763:27;23760:69;23757:82;;;23832:5;;;;;;23199:731;:::o;23757:82::-;23848:57;23899:4;23890:6;23882;23878:19;23874:30;23868:4;23848:57;:::i;:::-;-1:-1:-1;23921:3:1;;23199:731;-1:-1:-1;;;;;23199:731:1:o;23935:154::-;24021:42;24014:5;24010:54;24003:5;24000:65;23990:93;;24079:1;24076;24069:12;24094:118;24180:5;24173:13;24166:21;24159:5;24156:32;24146:60;;24202:1;24199;24192:12;24217:177;24302:66;24295:5;24291:78;24284:5;24281:89;24271:117;;24384:1;24381;24374:12
Swarm Source
ipfs://64f4a81c1d33d49a27abdc14692452007faa09a922c6822b2b947c651c03f13c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.