More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 242 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 55595426 | 244 days ago | IN | 0 POL | 0.00938327 | ||||
Set Approval For... | 52177365 | 333 days ago | IN | 0 POL | 0.01286953 | ||||
Set Approval For... | 51547857 | 349 days ago | IN | 0 POL | 0.02199803 | ||||
Set Approval For... | 48665766 | 422 days ago | IN | 0 POL | 0.0053499 | ||||
Set Approval For... | 47832075 | 444 days ago | IN | 0 POL | 0.00150152 | ||||
Set Approval For... | 45863304 | 493 days ago | IN | 0 POL | 0.00255969 | ||||
Set Approval For... | 42372943 | 582 days ago | IN | 0 POL | 0.0095301 | ||||
Set Approval For... | 37968743 | 697 days ago | IN | 0 POL | 0.00298286 | ||||
Safe Transfer Fr... | 37884383 | 699 days ago | IN | 0 POL | 0.00328796 | ||||
Set Approval For... | 37386110 | 711 days ago | IN | 0 POL | 0.00080897 | ||||
Set Approval For... | 37206887 | 715 days ago | IN | 0 POL | 0.00235685 | ||||
Set Approval For... | 35993454 | 745 days ago | IN | 0 POL | 0.0023059 | ||||
Safe Transfer Fr... | 35993423 | 745 days ago | IN | 0 POL | 0.0027165 | ||||
Set Approval For... | 35930957 | 747 days ago | IN | 0 POL | 0.01814196 | ||||
Safe Transfer Fr... | 35767043 | 751 days ago | IN | 0 POL | 0.00163002 | ||||
Set Approval For... | 34995585 | 770 days ago | IN | 0 POL | 0.00164874 | ||||
Set Approval For... | 34968901 | 771 days ago | IN | 0 POL | 0.00166412 | ||||
Set Approval For... | 34724876 | 777 days ago | IN | 0 POL | 0.00403058 | ||||
Safe Transfer Fr... | 34519392 | 782 days ago | IN | 0 POL | 0.00696375 | ||||
Set Approval For... | 34311421 | 787 days ago | IN | 0 POL | 0.00138354 | ||||
Set Approval For... | 34269755 | 788 days ago | IN | 0 POL | 0.0351552 | ||||
Set Approval For... | 34098014 | 792 days ago | IN | 0 POL | 0.00138354 | ||||
Set Approval For... | 34097622 | 792 days ago | IN | 0 POL | 0.00138354 | ||||
Safe Transfer Fr... | 34027974 | 794 days ago | IN | 0 POL | 0.0017739 | ||||
Set Approval For... | 33557626 | 805 days ago | IN | 0 POL | 0.00138354 |
Loading...
Loading
Contract Name:
SentientLabsMultiPass
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-01-11 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/[email protected]/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/[email protected]/security/Pausable.sol // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @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()); } } // File: @openzeppelin/[email protected]/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/[email protected]/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/[email protected]/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/[email protected]/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/[email protected]/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/[email protected]/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @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; } // File: @openzeppelin/[email protected]/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/[email protected]/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @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 { _setApprovalForAll(_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 `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, 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 `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, 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 from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); 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: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @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; } } // File: @openzeppelin/[email protected]/token/ERC1155/extensions/ERC1155Supply.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ 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); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] -= amounts[i]; } } } } // File: multipass3.sol pragma solidity ^0.8.2; contract SentientLabsMultiPass is ERC1155, Ownable, Pausable, ERC1155Supply { mapping (uint256 => string) private _uris; bool public _frozen; constructor() ERC1155("https://sentientlabs.app/tokens/{id}.json") { _frozen = false; } function freeze() public onlyOwner { _frozen = true; } function setURI(string memory newuri) public onlyOwner { _setURI(newuri); } function uri(uint256 tokenId) override public view returns (string memory) { return(_uris[tokenId]); } function setTokenUri(uint256 tokenId, string memory tokenUri) public onlyOwner { require(!_frozen, "Uri frozen"); _uris[tokenId] = tokenUri; } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function mint(address account, uint256 id, uint256 amount, bytes memory data) public onlyOwner { _mint(account, id, amount, data); } function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public onlyOwner { _mintBatch(to, ids, amounts, data); } function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal whenNotPaused override(ERC1155, ERC1155Supply) { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } }
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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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":[],"name":"_frozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeze","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":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"tokenUri","type":"string"}],"name":"setTokenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","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":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051806060016040528060298152602001620021b560299139620000378162000060565b50620000433362000079565b6003805460ff60a01b191690556006805460ff19169055620001ae565b805162000075906002906020840190620000cb565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000d99062000171565b90600052602060002090601f016020900481019282620000fd576000855562000148565b82601f106200011857805160ff191683800117855562000148565b8280016001018555821562000148579182015b82811115620001485782518255916020019190600101906200012b565b50620001569291506200015a565b5090565b5b808211156200015657600081556001016200015b565b600181811c908216806200018657607f821691505b60208210811415620001a857634e487b7160e01b600052602260045260246000fd5b50919050565b611ff780620001be6000396000f3fe608060405234801561001057600080fd5b50600436106101415760003560e01c80635c975abb116100b85780638da5cb5b1161007c5780638da5cb5b14610291578063a22cb465146102ac578063bd85b039146102bf578063e985e9c5146102df578063f242432a1461031b578063f2fde38b1461032e57600080fd5b80635c975abb1461025457806362a5af3b14610266578063715018a61461026e578063731133e9146102765780638456cb591461028957600080fd5b80632d80edcc1161010a5780632d80edcc146101d75780632eb2c2d6146101e45780633f4ba83a146101f75780634e1273f4146101ff5780634f558e791461021f57806357f7789e1461024157600080fd5b8062fdd58e1461014657806301ffc9a71461016c57806302fe53051461018f5780630e89341c146101a45780631f7fdffa146101c4575b600080fd5b6101596101543660046115a4565b610341565b6040519081526020015b60405180910390f35b61017f61017a3660046115e4565b6103d8565b6040519015158152602001610163565b6101a261019d3660046116bf565b61042a565b005b6101b76101b23660046116fc565b610460565b6040516101639190611762565b6101a26101d236600461180a565b610502565b60065461017f9060ff1681565b6101a26101f23660046118a3565b61053e565b6101a26105d5565b61021261020d36600461194d565b610609565b6040516101639190611a53565b61017f61022d3660046116fc565b600090815260046020526040902054151590565b6101a261024f366004611a66565b610733565b600354600160a01b900460ff1661017f565b6101a26107c1565b6101a26107fa565b6101a2610284366004611aa3565b61082e565b6101a2610864565b6003546040516001600160a01b039091168152602001610163565b6101a26102ba366004611af8565b610896565b6101596102cd3660046116fc565b60009081526004602052604090205490565b61017f6102ed366004611b34565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101a2610329366004611b67565b6108a5565b6101a261033c366004611bcc565b61092c565b60006001600160a01b0383166103b25760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061040957506001600160e01b031982166303a24d0760e21b145b8061042457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6003546001600160a01b031633146104545760405162461bcd60e51b81526004016103a990611be7565b61045d816109c4565b50565b600081815260056020526040902080546060919061047d90611c1c565b80601f01602080910402602001604051908101604052809291908181526020018280546104a990611c1c565b80156104f65780601f106104cb576101008083540402835291602001916104f6565b820191906000526020600020905b8154815290600101906020018083116104d957829003601f168201915b50505050509050919050565b6003546001600160a01b0316331461052c5760405162461bcd60e51b81526004016103a990611be7565b610538848484846109d7565b50505050565b6001600160a01b03851633148061055a575061055a85336102ed565b6105c15760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016103a9565b6105ce8585858585610b31565b5050505050565b6003546001600160a01b031633146105ff5760405162461bcd60e51b81526004016103a990611be7565b610607610cdb565b565b6060815183511461066e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016103a9565b6000835167ffffffffffffffff81111561068a5761068a611608565b6040519080825280602002602001820160405280156106b3578160200160208202803683370190505b50905060005b845181101561072b576106fe8582815181106106d7576106d7611c57565b60200260200101518583815181106106f1576106f1611c57565b6020026020010151610341565b82828151811061071057610710611c57565b602090810291909101015261072481611c83565b90506106b9565b509392505050565b6003546001600160a01b0316331461075d5760405162461bcd60e51b81526004016103a990611be7565b60065460ff161561079d5760405162461bcd60e51b815260206004820152600a6024820152692ab93490333937bd32b760b11b60448201526064016103a9565b600082815260056020908152604090912082516107bc928401906114ef565b505050565b6003546001600160a01b031633146107eb5760405162461bcd60e51b81526004016103a990611be7565b6006805460ff19166001179055565b6003546001600160a01b031633146108245760405162461bcd60e51b81526004016103a990611be7565b6106076000610d78565b6003546001600160a01b031633146108585760405162461bcd60e51b81526004016103a990611be7565b61053884848484610dca565b6003546001600160a01b0316331461088e5760405162461bcd60e51b81526004016103a990611be7565b610607610ea0565b6108a1338383610f28565b5050565b6001600160a01b0385163314806108c157506108c185336102ed565b61091f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016103a9565b6105ce8585858585611009565b6003546001600160a01b031633146109565760405162461bcd60e51b81526004016103a990611be7565b6001600160a01b0381166109bb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103a9565b61045d81610d78565b80516108a19060029060208401906114ef565b6001600160a01b0384166109fd5760405162461bcd60e51b81526004016103a990611c9e565b8151835114610a1e5760405162461bcd60e51b81526004016103a990611cdf565b33610a2e81600087878787611126565b60005b8451811015610ac957838181518110610a4c57610a4c611c57565b6020026020010151600080878481518110610a6957610a69611c57565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254610ab19190611d27565b90915550819050610ac181611c83565b915050610a31565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610b1a929190611d3f565b60405180910390a46105ce81600087878787611181565b8151835114610b525760405162461bcd60e51b81526004016103a990611cdf565b6001600160a01b038416610b785760405162461bcd60e51b81526004016103a990611d6d565b33610b87818787878787611126565b60005b8451811015610c6d576000858281518110610ba757610ba7611c57565b602002602001015190506000858381518110610bc557610bc5611c57565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015610c155760405162461bcd60e51b81526004016103a990611db2565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610c52908490611d27565b9250508190555050505080610c6690611c83565b9050610b8a565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610cbd929190611d3f565b60405180910390a4610cd3818787878787611181565b505050505050565b600354600160a01b900460ff16610d2b5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016103a9565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038416610df05760405162461bcd60e51b81526004016103a990611c9e565b33610e1081600087610e01886112dd565b610e0a886112dd565b87611126565b6000848152602081815260408083206001600160a01b038916845290915281208054859290610e40908490611d27565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46105ce81600087878787611328565b600354600160a01b900460ff1615610eed5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016103a9565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610d5b3390565b816001600160a01b0316836001600160a01b03161415610f9c5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016103a9565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661102f5760405162461bcd60e51b81526004016103a990611d6d565b3361103f818787610e01886112dd565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156110805760405162461bcd60e51b81526004016103a990611db2565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906110bd908490611d27565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461111d828888888888611328565b50505050505050565b600354600160a01b900460ff16156111735760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016103a9565b610cd38686868686866113e3565b6001600160a01b0384163b15610cd35760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906111c59089908990889088908890600401611dfc565b6020604051808303816000875af1925050508015611200575060408051601f3d908101601f191682019092526111fd91810190611e5a565b60015b6112ad5761120c611e77565b806308c379a014156112465750611221611e93565b8061122c5750611248565b8060405162461bcd60e51b81526004016103a99190611762565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016103a9565b6001600160e01b0319811663bc197c8160e01b1461111d5760405162461bcd60e51b81526004016103a990611f1d565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061131757611317611c57565b602090810291909101015292915050565b6001600160a01b0384163b15610cd35760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061136c9089908990889088908890600401611f65565b6020604051808303816000875af19250505080156113a7575060408051601f3d908101601f191682019092526113a491810190611e5a565b60015b6113b35761120c611e77565b6001600160e01b0319811663f23a6e6160e01b1461111d5760405162461bcd60e51b81526004016103a990611f1d565b6001600160a01b03851661146a5760005b83518110156114685782818151811061140f5761140f611c57565b60200260200101516004600086848151811061142d5761142d611c57565b6020026020010151815260200190815260200160002060008282546114529190611d27565b90915550611461905081611c83565b90506113f4565b505b6001600160a01b038416610cd35760005b835181101561111d5782818151811061149657611496611c57565b6020026020010151600460008684815181106114b4576114b4611c57565b6020026020010151815260200190815260200160002060008282546114d99190611faa565b909155506114e8905081611c83565b905061147b565b8280546114fb90611c1c565b90600052602060002090601f01602090048101928261151d5760008555611563565b82601f1061153657805160ff1916838001178555611563565b82800160010185558215611563579182015b82811115611563578251825591602001919060010190611548565b5061156f929150611573565b5090565b5b8082111561156f5760008155600101611574565b80356001600160a01b038116811461159f57600080fd5b919050565b600080604083850312156115b757600080fd5b6115c083611588565b946020939093013593505050565b6001600160e01b03198116811461045d57600080fd5b6000602082840312156115f657600080fd5b8135611601816115ce565b9392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff8111828210171561164457611644611608565b6040525050565b600082601f83011261165c57600080fd5b813567ffffffffffffffff81111561167657611676611608565b60405161168d601f8301601f19166020018261161e565b8181528460208386010111156116a257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156116d157600080fd5b813567ffffffffffffffff8111156116e857600080fd5b6116f48482850161164b565b949350505050565b60006020828403121561170e57600080fd5b5035919050565b6000815180845260005b8181101561173b5760208185018101518683018201520161171f565b8181111561174d576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006116016020830184611715565b600067ffffffffffffffff82111561178f5761178f611608565b5060051b60200190565b600082601f8301126117aa57600080fd5b813560206117b782611775565b6040516117c4828261161e565b83815260059390931b85018201928281019150868411156117e457600080fd5b8286015b848110156117ff57803583529183019183016117e8565b509695505050505050565b6000806000806080858703121561182057600080fd5b61182985611588565b9350602085013567ffffffffffffffff8082111561184657600080fd5b61185288838901611799565b9450604087013591508082111561186857600080fd5b61187488838901611799565b9350606087013591508082111561188a57600080fd5b506118978782880161164b565b91505092959194509250565b600080600080600060a086880312156118bb57600080fd5b6118c486611588565b94506118d260208701611588565b9350604086013567ffffffffffffffff808211156118ef57600080fd5b6118fb89838a01611799565b9450606088013591508082111561191157600080fd5b61191d89838a01611799565b9350608088013591508082111561193357600080fd5b506119408882890161164b565b9150509295509295909350565b6000806040838503121561196057600080fd5b823567ffffffffffffffff8082111561197857600080fd5b818501915085601f83011261198c57600080fd5b8135602061199982611775565b6040516119a6828261161e565b83815260059390931b85018201928281019150898411156119c657600080fd5b948201945b838610156119eb576119dc86611588565b825294820194908201906119cb565b96505086013592505080821115611a0157600080fd5b50611a0e85828601611799565b9150509250929050565b600081518084526020808501945080840160005b83811015611a4857815187529582019590820190600101611a2c565b509495945050505050565b6020815260006116016020830184611a18565b60008060408385031215611a7957600080fd5b82359150602083013567ffffffffffffffff811115611a9757600080fd5b611a0e8582860161164b565b60008060008060808587031215611ab957600080fd5b611ac285611588565b93506020850135925060408501359150606085013567ffffffffffffffff811115611aec57600080fd5b6118978782880161164b565b60008060408385031215611b0b57600080fd5b611b1483611588565b915060208301358015158114611b2957600080fd5b809150509250929050565b60008060408385031215611b4757600080fd5b611b5083611588565b9150611b5e60208401611588565b90509250929050565b600080600080600060a08688031215611b7f57600080fd5b611b8886611588565b9450611b9660208701611588565b93506040860135925060608601359150608086013567ffffffffffffffff811115611bc057600080fd5b6119408882890161164b565b600060208284031215611bde57600080fd5b61160182611588565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680611c3057607f821691505b60208210811415611c5157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611c9757611c97611c6d565b5060010190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60008219821115611d3a57611d3a611c6d565b500190565b604081526000611d526040830185611a18565b8281036020840152611d648185611a18565b95945050505050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6001600160a01b0386811682528516602082015260a060408201819052600090611e2890830186611a18565b8281036060840152611e3a8186611a18565b90508281036080840152611e4e8185611715565b98975050505050505050565b600060208284031215611e6c57600080fd5b8151611601816115ce565b600060033d1115611e905760046000803e5060005160e01c5b90565b600060443d1015611ea15790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611ed157505050505090565b8285019150815181811115611ee95750505050505090565b843d8701016020828501011115611f035750505050505090565b611f126020828601018761161e565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611f9f90830184611715565b979650505050505050565b600082821015611fbc57611fbc611c6d565b50039056fea264697066735822122029b29190435606589b26499399c182a1b596a992ff77643c81f87e2ae5e8846a64736f6c634300080b003368747470733a2f2f73656e7469656e746c6162732e6170702f746f6b656e732f7b69647d2e6a736f6e
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101415760003560e01c80635c975abb116100b85780638da5cb5b1161007c5780638da5cb5b14610291578063a22cb465146102ac578063bd85b039146102bf578063e985e9c5146102df578063f242432a1461031b578063f2fde38b1461032e57600080fd5b80635c975abb1461025457806362a5af3b14610266578063715018a61461026e578063731133e9146102765780638456cb591461028957600080fd5b80632d80edcc1161010a5780632d80edcc146101d75780632eb2c2d6146101e45780633f4ba83a146101f75780634e1273f4146101ff5780634f558e791461021f57806357f7789e1461024157600080fd5b8062fdd58e1461014657806301ffc9a71461016c57806302fe53051461018f5780630e89341c146101a45780631f7fdffa146101c4575b600080fd5b6101596101543660046115a4565b610341565b6040519081526020015b60405180910390f35b61017f61017a3660046115e4565b6103d8565b6040519015158152602001610163565b6101a261019d3660046116bf565b61042a565b005b6101b76101b23660046116fc565b610460565b6040516101639190611762565b6101a26101d236600461180a565b610502565b60065461017f9060ff1681565b6101a26101f23660046118a3565b61053e565b6101a26105d5565b61021261020d36600461194d565b610609565b6040516101639190611a53565b61017f61022d3660046116fc565b600090815260046020526040902054151590565b6101a261024f366004611a66565b610733565b600354600160a01b900460ff1661017f565b6101a26107c1565b6101a26107fa565b6101a2610284366004611aa3565b61082e565b6101a2610864565b6003546040516001600160a01b039091168152602001610163565b6101a26102ba366004611af8565b610896565b6101596102cd3660046116fc565b60009081526004602052604090205490565b61017f6102ed366004611b34565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101a2610329366004611b67565b6108a5565b6101a261033c366004611bcc565b61092c565b60006001600160a01b0383166103b25760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061040957506001600160e01b031982166303a24d0760e21b145b8061042457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6003546001600160a01b031633146104545760405162461bcd60e51b81526004016103a990611be7565b61045d816109c4565b50565b600081815260056020526040902080546060919061047d90611c1c565b80601f01602080910402602001604051908101604052809291908181526020018280546104a990611c1c565b80156104f65780601f106104cb576101008083540402835291602001916104f6565b820191906000526020600020905b8154815290600101906020018083116104d957829003601f168201915b50505050509050919050565b6003546001600160a01b0316331461052c5760405162461bcd60e51b81526004016103a990611be7565b610538848484846109d7565b50505050565b6001600160a01b03851633148061055a575061055a85336102ed565b6105c15760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016103a9565b6105ce8585858585610b31565b5050505050565b6003546001600160a01b031633146105ff5760405162461bcd60e51b81526004016103a990611be7565b610607610cdb565b565b6060815183511461066e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016103a9565b6000835167ffffffffffffffff81111561068a5761068a611608565b6040519080825280602002602001820160405280156106b3578160200160208202803683370190505b50905060005b845181101561072b576106fe8582815181106106d7576106d7611c57565b60200260200101518583815181106106f1576106f1611c57565b6020026020010151610341565b82828151811061071057610710611c57565b602090810291909101015261072481611c83565b90506106b9565b509392505050565b6003546001600160a01b0316331461075d5760405162461bcd60e51b81526004016103a990611be7565b60065460ff161561079d5760405162461bcd60e51b815260206004820152600a6024820152692ab93490333937bd32b760b11b60448201526064016103a9565b600082815260056020908152604090912082516107bc928401906114ef565b505050565b6003546001600160a01b031633146107eb5760405162461bcd60e51b81526004016103a990611be7565b6006805460ff19166001179055565b6003546001600160a01b031633146108245760405162461bcd60e51b81526004016103a990611be7565b6106076000610d78565b6003546001600160a01b031633146108585760405162461bcd60e51b81526004016103a990611be7565b61053884848484610dca565b6003546001600160a01b0316331461088e5760405162461bcd60e51b81526004016103a990611be7565b610607610ea0565b6108a1338383610f28565b5050565b6001600160a01b0385163314806108c157506108c185336102ed565b61091f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016103a9565b6105ce8585858585611009565b6003546001600160a01b031633146109565760405162461bcd60e51b81526004016103a990611be7565b6001600160a01b0381166109bb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103a9565b61045d81610d78565b80516108a19060029060208401906114ef565b6001600160a01b0384166109fd5760405162461bcd60e51b81526004016103a990611c9e565b8151835114610a1e5760405162461bcd60e51b81526004016103a990611cdf565b33610a2e81600087878787611126565b60005b8451811015610ac957838181518110610a4c57610a4c611c57565b6020026020010151600080878481518110610a6957610a69611c57565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254610ab19190611d27565b90915550819050610ac181611c83565b915050610a31565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610b1a929190611d3f565b60405180910390a46105ce81600087878787611181565b8151835114610b525760405162461bcd60e51b81526004016103a990611cdf565b6001600160a01b038416610b785760405162461bcd60e51b81526004016103a990611d6d565b33610b87818787878787611126565b60005b8451811015610c6d576000858281518110610ba757610ba7611c57565b602002602001015190506000858381518110610bc557610bc5611c57565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015610c155760405162461bcd60e51b81526004016103a990611db2565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610c52908490611d27565b9250508190555050505080610c6690611c83565b9050610b8a565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610cbd929190611d3f565b60405180910390a4610cd3818787878787611181565b505050505050565b600354600160a01b900460ff16610d2b5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016103a9565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038416610df05760405162461bcd60e51b81526004016103a990611c9e565b33610e1081600087610e01886112dd565b610e0a886112dd565b87611126565b6000848152602081815260408083206001600160a01b038916845290915281208054859290610e40908490611d27565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46105ce81600087878787611328565b600354600160a01b900460ff1615610eed5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016103a9565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610d5b3390565b816001600160a01b0316836001600160a01b03161415610f9c5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016103a9565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661102f5760405162461bcd60e51b81526004016103a990611d6d565b3361103f818787610e01886112dd565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156110805760405162461bcd60e51b81526004016103a990611db2565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906110bd908490611d27565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461111d828888888888611328565b50505050505050565b600354600160a01b900460ff16156111735760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016103a9565b610cd38686868686866113e3565b6001600160a01b0384163b15610cd35760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906111c59089908990889088908890600401611dfc565b6020604051808303816000875af1925050508015611200575060408051601f3d908101601f191682019092526111fd91810190611e5a565b60015b6112ad5761120c611e77565b806308c379a014156112465750611221611e93565b8061122c5750611248565b8060405162461bcd60e51b81526004016103a99190611762565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016103a9565b6001600160e01b0319811663bc197c8160e01b1461111d5760405162461bcd60e51b81526004016103a990611f1d565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061131757611317611c57565b602090810291909101015292915050565b6001600160a01b0384163b15610cd35760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061136c9089908990889088908890600401611f65565b6020604051808303816000875af19250505080156113a7575060408051601f3d908101601f191682019092526113a491810190611e5a565b60015b6113b35761120c611e77565b6001600160e01b0319811663f23a6e6160e01b1461111d5760405162461bcd60e51b81526004016103a990611f1d565b6001600160a01b03851661146a5760005b83518110156114685782818151811061140f5761140f611c57565b60200260200101516004600086848151811061142d5761142d611c57565b6020026020010151815260200190815260200160002060008282546114529190611d27565b90915550611461905081611c83565b90506113f4565b505b6001600160a01b038416610cd35760005b835181101561111d5782818151811061149657611496611c57565b6020026020010151600460008684815181106114b4576114b4611c57565b6020026020010151815260200190815260200160002060008282546114d99190611faa565b909155506114e8905081611c83565b905061147b565b8280546114fb90611c1c565b90600052602060002090601f01602090048101928261151d5760008555611563565b82601f1061153657805160ff1916838001178555611563565b82800160010185558215611563579182015b82811115611563578251825591602001919060010190611548565b5061156f929150611573565b5090565b5b8082111561156f5760008155600101611574565b80356001600160a01b038116811461159f57600080fd5b919050565b600080604083850312156115b757600080fd5b6115c083611588565b946020939093013593505050565b6001600160e01b03198116811461045d57600080fd5b6000602082840312156115f657600080fd5b8135611601816115ce565b9392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff8111828210171561164457611644611608565b6040525050565b600082601f83011261165c57600080fd5b813567ffffffffffffffff81111561167657611676611608565b60405161168d601f8301601f19166020018261161e565b8181528460208386010111156116a257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156116d157600080fd5b813567ffffffffffffffff8111156116e857600080fd5b6116f48482850161164b565b949350505050565b60006020828403121561170e57600080fd5b5035919050565b6000815180845260005b8181101561173b5760208185018101518683018201520161171f565b8181111561174d576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006116016020830184611715565b600067ffffffffffffffff82111561178f5761178f611608565b5060051b60200190565b600082601f8301126117aa57600080fd5b813560206117b782611775565b6040516117c4828261161e565b83815260059390931b85018201928281019150868411156117e457600080fd5b8286015b848110156117ff57803583529183019183016117e8565b509695505050505050565b6000806000806080858703121561182057600080fd5b61182985611588565b9350602085013567ffffffffffffffff8082111561184657600080fd5b61185288838901611799565b9450604087013591508082111561186857600080fd5b61187488838901611799565b9350606087013591508082111561188a57600080fd5b506118978782880161164b565b91505092959194509250565b600080600080600060a086880312156118bb57600080fd5b6118c486611588565b94506118d260208701611588565b9350604086013567ffffffffffffffff808211156118ef57600080fd5b6118fb89838a01611799565b9450606088013591508082111561191157600080fd5b61191d89838a01611799565b9350608088013591508082111561193357600080fd5b506119408882890161164b565b9150509295509295909350565b6000806040838503121561196057600080fd5b823567ffffffffffffffff8082111561197857600080fd5b818501915085601f83011261198c57600080fd5b8135602061199982611775565b6040516119a6828261161e565b83815260059390931b85018201928281019150898411156119c657600080fd5b948201945b838610156119eb576119dc86611588565b825294820194908201906119cb565b96505086013592505080821115611a0157600080fd5b50611a0e85828601611799565b9150509250929050565b600081518084526020808501945080840160005b83811015611a4857815187529582019590820190600101611a2c565b509495945050505050565b6020815260006116016020830184611a18565b60008060408385031215611a7957600080fd5b82359150602083013567ffffffffffffffff811115611a9757600080fd5b611a0e8582860161164b565b60008060008060808587031215611ab957600080fd5b611ac285611588565b93506020850135925060408501359150606085013567ffffffffffffffff811115611aec57600080fd5b6118978782880161164b565b60008060408385031215611b0b57600080fd5b611b1483611588565b915060208301358015158114611b2957600080fd5b809150509250929050565b60008060408385031215611b4757600080fd5b611b5083611588565b9150611b5e60208401611588565b90509250929050565b600080600080600060a08688031215611b7f57600080fd5b611b8886611588565b9450611b9660208701611588565b93506040860135925060608601359150608086013567ffffffffffffffff811115611bc057600080fd5b6119408882890161164b565b600060208284031215611bde57600080fd5b61160182611588565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680611c3057607f821691505b60208210811415611c5157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611c9757611c97611c6d565b5060010190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60008219821115611d3a57611d3a611c6d565b500190565b604081526000611d526040830185611a18565b8281036020840152611d648185611a18565b95945050505050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6001600160a01b0386811682528516602082015260a060408201819052600090611e2890830186611a18565b8281036060840152611e3a8186611a18565b90508281036080840152611e4e8185611715565b98975050505050505050565b600060208284031215611e6c57600080fd5b8151611601816115ce565b600060033d1115611e905760046000803e5060005160e01c5b90565b600060443d1015611ea15790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611ed157505050505090565b8285019150815181811115611ee95750505050505090565b843d8701016020828501011115611f035750505050505090565b611f126020828601018761161e565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611f9f90830184611715565b979650505050505050565b600082821015611fbc57611fbc611c6d565b50039056fea264697066735822122029b29190435606589b26499399c182a1b596a992ff77643c81f87e2ae5e8846a64736f6c634300080b0033
Deployed Bytecode Sourcemap
40757:1579:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25389:231;;;;;;:::i;:::-;;:::i;:::-;;;597:25:1;;;585:2;570:18;25389:231:0;;;;;;;;24412:310;;;;;;:::i;:::-;;:::i;:::-;;;1184:14:1;;1177:22;1159:41;;1147:2;1132:18;24412:310:0;1019:187:1;41105:89:0;;;;;;:::i;:::-;;:::i;:::-;;41202:116;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;41820:191::-;;;;;;:::i;:::-;;:::i;40892:19::-;;;;;;;;;27328:442;;;;;;:::i;:::-;;:::i;41570:65::-;;;:::i;25786:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;39834:122::-;;;;;;:::i;:::-;39891:4;39712:16;;;:12;:16;;;;;;-1:-1:-1;;;39834:122:0;41326:167;;;;;;:::i;:::-;;:::i;2070:86::-;2141:7;;-1:-1:-1;;;2141:7:0;;;;2070:86;;41029:68;;;:::i;4975:103::-;;;:::i;41643:169::-;;;;;;:::i;:::-;;:::i;41501:61::-;;;:::i;4324:87::-;4397:6;;4324:87;;-1:-1:-1;;;;;4397:6:0;;;9109:51:1;;9097:2;9082:18;4324:87:0;8963:203:1;26383:155:0;;;;;;:::i;:::-;;:::i;39623:113::-;;;;;;:::i;:::-;39685:7;39712:16;;;:12;:16;;;;;;;39623:113;26610:168;;;;;;:::i;:::-;-1:-1:-1;;;;;26733:27:0;;;26709:4;26733:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;26610:168;26850:401;;;;;;:::i;:::-;;:::i;5233:201::-;;;;;;:::i;:::-;;:::i;25389:231::-;25475:7;-1:-1:-1;;;;;25503:21:0;;25495:77;;;;-1:-1:-1;;;25495:77:0;;10793:2:1;25495:77:0;;;10775:21:1;10832:2;10812:18;;;10805:30;10871:34;10851:18;;;10844:62;-1:-1:-1;;;10922:18:1;;;10915:41;10973:19;;25495:77:0;;;;;;;;;-1:-1:-1;25590:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;25590:22:0;;;;;;;;;;;;25389:231::o;24412:310::-;24514:4;-1:-1:-1;;;;;;24551:41:0;;-1:-1:-1;;;24551:41:0;;:110;;-1:-1:-1;;;;;;;24609:52:0;;-1:-1:-1;;;24609:52:0;24551:110;:163;;;-1:-1:-1;;;;;;;;;;15852:40:0;;;24678:36;24531:183;24412:310;-1:-1:-1;;24412:310:0:o;41105:89::-;4397:6;;-1:-1:-1;;;;;4397:6:0;798:10;4544:23;4536:68;;;;-1:-1:-1;;;4536:68:0;;;;;;;:::i;:::-;41171:15:::1;41179:6;41171:7;:15::i;:::-;41105:89:::0;:::o;41202:116::-;41295:14;;;;:5;:14;;;;;41288:22;;41262:13;;41295:14;41288:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41202:116;;;:::o;41820:191::-;4397:6;;-1:-1:-1;;;;;4397:6:0;798:10;4544:23;4536:68;;;;-1:-1:-1;;;4536:68:0;;;;;;;:::i;:::-;41969:34:::1;41980:2;41984:3;41989:7;41998:4;41969:10;:34::i;:::-;41820:191:::0;;;;:::o;27328:442::-;-1:-1:-1;;;;;27561:20:0;;798:10;27561:20;;:60;;-1:-1:-1;27585:36:0;27602:4;798:10;26610:168;:::i;27585:36::-;27539:160;;;;-1:-1:-1;;;27539:160:0;;11951:2:1;27539:160:0;;;11933:21:1;11990:2;11970:18;;;11963:30;12029:34;12009:18;;;12002:62;-1:-1:-1;;;12080:18:1;;;12073:48;12138:19;;27539:160:0;11749:414:1;27539:160:0;27710:52;27733:4;27739:2;27743:3;27748:7;27757:4;27710:22;:52::i;:::-;27328:442;;;;;:::o;41570:65::-;4397:6;;-1:-1:-1;;;;;4397:6:0;798:10;4544:23;4536:68;;;;-1:-1:-1;;;4536:68:0;;;;;;;:::i;:::-;41617:10:::1;:8;:10::i;:::-;41570:65::o:0;25786:524::-;25942:16;26003:3;:10;25984:8;:15;:29;25976:83;;;;-1:-1:-1;;;25976:83:0;;12370:2:1;25976:83:0;;;12352:21:1;12409:2;12389:18;;;12382:30;12448:34;12428:18;;;12421:62;-1:-1:-1;;;12499:18:1;;;12492:39;12548:19;;25976:83:0;12168:405:1;25976:83:0;26072:30;26119:8;:15;26105:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26105:30:0;;26072:63;;26153:9;26148:122;26172:8;:15;26168:1;:19;26148:122;;;26228:30;26238:8;26247:1;26238:11;;;;;;;;:::i;:::-;;;;;;;26251:3;26255:1;26251:6;;;;;;;;:::i;:::-;;;;;;;26228:9;:30::i;:::-;26209:13;26223:1;26209:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;26189:3;;;:::i;:::-;;;26148:122;;;-1:-1:-1;26289:13:0;25786:524;-1:-1:-1;;;25786:524:0:o;41326:167::-;4397:6;;-1:-1:-1;;;;;4397:6:0;798:10;4544:23;4536:68;;;;-1:-1:-1;;;4536:68:0;;;;;;;:::i;:::-;41425:7:::1;::::0;::::1;;41424:8;41416:31;;;::::0;-1:-1:-1;;;41416:31:0;;13184:2:1;41416:31:0::1;::::0;::::1;13166:21:1::0;13223:2;13203:18;;;13196:30;-1:-1:-1;;;13242:18:1;;;13235:40;13292:18;;41416:31:0::1;12982:334:1::0;41416:31:0::1;41459:14;::::0;;;:5:::1;:14;::::0;;;;;;;:25;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;41326:167:::0;;:::o;41029:68::-;4397:6;;-1:-1:-1;;;;;4397:6:0;798:10;4544:23;4536:68;;;;-1:-1:-1;;;4536:68:0;;;;;;;:::i;:::-;41075:7:::1;:14:::0;;-1:-1:-1;;41075:14:0::1;41085:4;41075:14;::::0;;41029:68::o;4975:103::-;4397:6;;-1:-1:-1;;;;;4397:6:0;798:10;4544:23;4536:68;;;;-1:-1:-1;;;4536:68:0;;;;;;;:::i;:::-;5040:30:::1;5067:1;5040:18;:30::i;41643:169::-:0;4397:6;;-1:-1:-1;;;;;4397:6:0;798:10;4544:23;4536:68;;;;-1:-1:-1;;;4536:68:0;;;;;;;:::i;:::-;41772:32:::1;41778:7;41787:2;41791:6;41799:4;41772:5;:32::i;41501:61::-:0;4397:6;;-1:-1:-1;;;;;4397:6:0;798:10;4544:23;4536:68;;;;-1:-1:-1;;;4536:68:0;;;;;;;:::i;:::-;41546:8:::1;:6;:8::i;26383:155::-:0;26478:52;798:10;26511:8;26521;26478:18;:52::i;:::-;26383:155;;:::o;26850:401::-;-1:-1:-1;;;;;27058:20:0;;798:10;27058:20;;:60;;-1:-1:-1;27082:36:0;27099:4;798:10;26610:168;:::i;27082:36::-;27036:151;;;;-1:-1:-1;;;27036:151:0;;13523:2:1;27036:151:0;;;13505:21:1;13562:2;13542:18;;;13535:30;13601:34;13581:18;;;13574:62;-1:-1:-1;;;13652:18:1;;;13645:39;13701:19;;27036:151:0;13321:405:1;27036:151:0;27198:45;27216:4;27222:2;27226;27230:6;27238:4;27198:17;:45::i;5233:201::-;4397:6;;-1:-1:-1;;;;;4397:6:0;798:10;4544:23;4536:68;;;;-1:-1:-1;;;4536:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5322:22:0;::::1;5314:73;;;::::0;-1:-1:-1;;;5314:73:0;;13933:2:1;5314:73:0::1;::::0;::::1;13915:21:1::0;13972:2;13952:18;;;13945:30;14011:34;13991:18;;;13984:62;-1:-1:-1;;;14062:18:1;;;14055:36;14108:19;;5314:73:0::1;13731:402:1::0;5314:73:0::1;5398:28;5417:8;5398:18;:28::i;31330:88::-:0;31397:13;;;;:4;;:13;;;;;:::i;32729:735::-;-1:-1:-1;;;;;32907:16:0;;32899:62;;;;-1:-1:-1;;;32899:62:0;;;;;;;:::i;:::-;32994:7;:14;32980:3;:10;:28;32972:81;;;;-1:-1:-1;;;32972:81:0;;;;;;;:::i;:::-;798:10;33110:66;798:10;33066:16;33153:2;33157:3;33162:7;33171:4;33110:20;:66::i;:::-;33194:9;33189:103;33213:3;:10;33209:1;:14;33189:103;;;33270:7;33278:1;33270:10;;;;;;;;:::i;:::-;;;;;;;33245:9;:17;33255:3;33259:1;33255:6;;;;;;;;:::i;:::-;;;;;;;33245:17;;;;;;;;;;;:21;33263:2;-1:-1:-1;;;;;33245:21:0;-1:-1:-1;;;;;33245:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;33225:3:0;;-1:-1:-1;33225:3:0;;;:::i;:::-;;;;33189:103;;;;33345:2;-1:-1:-1;;;;;33309:53:0;33341:1;-1:-1:-1;;;;;33309:53:0;33323:8;-1:-1:-1;;;;;33309:53:0;;33349:3;33354:7;33309:53;;;;;;;:::i;:::-;;;;;;;;33375:81;33411:8;33429:1;33433:2;33437:3;33442:7;33451:4;33375:35;:81::i;29412:1074::-;29639:7;:14;29625:3;:10;:28;29617:81;;;;-1:-1:-1;;;29617:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29717:16:0;;29709:66;;;;-1:-1:-1;;;29709:66:0;;;;;;;:::i;:::-;798:10;29832:60;798:10;29863:4;29869:2;29873:3;29878:7;29887:4;29832:20;:60::i;:::-;29910:9;29905:421;29929:3;:10;29925:1;:14;29905:421;;;29961:10;29974:3;29978:1;29974:6;;;;;;;;:::i;:::-;;;;;;;29961:19;;29995:14;30012:7;30020:1;30012:10;;;;;;;;:::i;:::-;;;;;;;;;;;;30039:19;30061:13;;;;;;;;;;-1:-1:-1;;;;;30061:19:0;;;;;;;;;;;;30012:10;;-1:-1:-1;30103:21:0;;;;30095:76;;;;-1:-1:-1;;;30095:76:0;;;;;;;:::i;:::-;30215:9;:13;;;;;;;;;;;-1:-1:-1;;;;;30215:19:0;;;;;;;;;;30237:20;;;30215:42;;30287:17;;;;;;;:27;;30237:20;;30215:9;30287:27;;30237:20;;30287:27;:::i;:::-;;;;;;;;29946:380;;;29941:3;;;;:::i;:::-;;;29905:421;;;;30373:2;-1:-1:-1;;;;;30343:47:0;30367:4;-1:-1:-1;;;;;30343:47:0;30357:8;-1:-1:-1;;;;;30343:47:0;;30377:3;30382:7;30343:47;;;;;;;:::i;:::-;;;;;;;;30403:75;30439:8;30449:4;30455:2;30459:3;30464:7;30473:4;30403:35;:75::i;:::-;29606:880;29412:1074;;;;;:::o;3129:120::-;2141:7;;-1:-1:-1;;;2141:7:0;;;;2665:41;;;;-1:-1:-1;;;2665:41:0;;16571:2:1;2665:41:0;;;16553:21:1;16610:2;16590:18;;;16583:30;-1:-1:-1;;;16629:18:1;;;16622:50;16689:18;;2665:41:0;16369:344:1;2665:41:0;3188:7:::1;:15:::0;;-1:-1:-1;;;;3188:15:0::1;::::0;;3219:22:::1;798:10:::0;3228:12:::1;3219:22;::::0;-1:-1:-1;;;;;9127:32:1;;;9109:51;;9097:2;9082:18;3219:22:0::1;;;;;;;3129:120::o:0;5594:191::-;5687:6;;;-1:-1:-1;;;;;5704:17:0;;;-1:-1:-1;;;;;;5704:17:0;;;;;;;5737:40;;5687:6;;;5704:17;5687:6;;5737:40;;5668:16;;5737:40;5657:128;5594:191;:::o;31804:569::-;-1:-1:-1;;;;;31957:16:0;;31949:62;;;;-1:-1:-1;;;31949:62:0;;;;;;;:::i;:::-;798:10;32068:102;798:10;32024:16;32111:2;32115:21;32133:2;32115:17;:21::i;:::-;32138:25;32156:6;32138:17;:25::i;:::-;32165:4;32068:20;:102::i;:::-;32183:9;:13;;;;;;;;;;;-1:-1:-1;;;;;32183:17:0;;;;;;;;;:27;;32204:6;;32183:9;:27;;32204:6;;32183:27;:::i;:::-;;;;-1:-1:-1;;32226:52:0;;;16892:25:1;;;16948:2;16933:18;;16926:34;;;-1:-1:-1;;;;;32226:52:0;;;;32259:1;;32226:52;;;;;;16865:18:1;32226:52:0;;;;;;;32291:74;32322:8;32340:1;32344:2;32348;32352:6;32360:4;32291:30;:74::i;2870:118::-;2141:7;;-1:-1:-1;;;2141:7:0;;;;2395:9;2387:38;;;;-1:-1:-1;;;2387:38:0;;17173:2:1;2387:38:0;;;17155:21:1;17212:2;17192:18;;;17185:30;-1:-1:-1;;;17231:18:1;;;17224:46;17287:18;;2387:38:0;16971:340:1;2387:38:0;2930:7:::1;:14:::0;;-1:-1:-1;;;;2930:14:0::1;-1:-1:-1::0;;;2930:14:0::1;::::0;;2960:20:::1;2967:12;798:10:::0;;718:98;35598:331;35753:8;-1:-1:-1;;;;;35744:17:0;:5;-1:-1:-1;;;;;35744:17:0;;;35736:71;;;;-1:-1:-1;;;35736:71:0;;17518:2:1;35736:71:0;;;17500:21:1;17557:2;17537:18;;;17530:30;17596:34;17576:18;;;17569:62;-1:-1:-1;;;17647:18:1;;;17640:39;17696:19;;35736:71:0;17316:405:1;35736:71:0;-1:-1:-1;;;;;35818:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;35818:46:0;;;;;;;;;;35880:41;;1159::1;;;35880::0;;1132:18:1;35880:41:0;;;;;;;35598:331;;;:::o;28234:820::-;-1:-1:-1;;;;;28422:16:0;;28414:66;;;;-1:-1:-1;;;28414:66:0;;;;;;;:::i;:::-;798:10;28537:96;798:10;28568:4;28574:2;28578:21;28596:2;28578:17;:21::i;28537:96::-;28646:19;28668:13;;;;;;;;;;;-1:-1:-1;;;;;28668:19:0;;;;;;;;;;28706:21;;;;28698:76;;;;-1:-1:-1;;;28698:76:0;;;;;;;:::i;:::-;28810:9;:13;;;;;;;;;;;-1:-1:-1;;;;;28810:19:0;;;;;;;;;;28832:20;;;28810:42;;28874:17;;;;;;;:27;;28832:20;;28810:9;28874:27;;28832:20;;28874:27;:::i;:::-;;;;-1:-1:-1;;28919:46:0;;;16892:25:1;;;16948:2;16933:18;;16926:34;;;-1:-1:-1;;;;;28919:46:0;;;;;;;;;;;;;;16865:18:1;28919:46:0;;;;;;;28978:68;29009:8;29019:4;29025:2;29029;29033:6;29041:4;28978:30;:68::i;:::-;28403:651;;28234:820;;;;;:::o;42019:314::-;2141:7;;-1:-1:-1;;;2141:7:0;;;;2395:9;2387:38;;;;-1:-1:-1;;;2387:38:0;;17173:2:1;2387:38:0;;;17155:21:1;17212:2;17192:18;;;17185:30;-1:-1:-1;;;17231:18:1;;;17224:46;17287:18;;2387:38:0;16971:340:1;2387:38:0;42259:66:::1;42286:8;42296:4;42302:2;42306:3;42311:7;42320:4;42259:26;:66::i;37866:813::-:0;-1:-1:-1;;;;;38106:13:0;;6941:20;6989:8;38102:570;;38142:79;;-1:-1:-1;;;38142:79:0;;-1:-1:-1;;;;;38142:43:0;;;;;:79;;38186:8;;38196:4;;38202:3;;38207:7;;38216:4;;38142:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38142:79:0;;;;;;;;-1:-1:-1;;38142:79:0;;;;;;;;;;;;:::i;:::-;;;38138:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38534:6;38527:14;;-1:-1:-1;;;38527:14:0;;;;;;;;:::i;38138:523::-;;;38583:62;;-1:-1:-1;;;38583:62:0;;19874:2:1;38583:62:0;;;19856:21:1;19913:2;19893:18;;;19886:30;19952:34;19932:18;;;19925:62;-1:-1:-1;;;20003:18:1;;;19996:50;20063:19;;38583:62:0;19672:416:1;38138:523:0;-1:-1:-1;;;;;;38303:60:0;;-1:-1:-1;;;38303:60:0;38299:159;;38388:50;;-1:-1:-1;;;38388:50:0;;;;;;;:::i;38687:198::-;38807:16;;;38821:1;38807:16;;;;;;;;;38753;;38782:22;;38807:16;;;;;;;;;;;;-1:-1:-1;38807:16:0;38782:41;;38845:7;38834:5;38840:1;38834:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;38872:5;38687:198;-1:-1:-1;;38687:198:0:o;37114:744::-;-1:-1:-1;;;;;37329:13:0;;6941:20;6989:8;37325:526;;37365:72;;-1:-1:-1;;;37365:72:0;;-1:-1:-1;;;;;37365:38:0;;;;;:72;;37404:8;;37414:4;;37420:2;;37424:6;;37432:4;;37365:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37365:72:0;;;;;;;;-1:-1:-1;;37365:72:0;;;;;;;;;;;;:::i;:::-;;;37361:479;;;;:::i;:::-;-1:-1:-1;;;;;;37487:55:0;;-1:-1:-1;;;37487:55:0;37483:154;;37567:50;;-1:-1:-1;;;37567:50:0;;;;;;;:::i;40031:655::-;-1:-1:-1;;;;;40353:18:0;;40349:160;;40393:9;40388:110;40412:3;:10;40408:1;:14;40388:110;;;40472:7;40480:1;40472:10;;;;;;;;:::i;:::-;;;;;;;40448:12;:20;40461:3;40465:1;40461:6;;;;;;;;:::i;:::-;;;;;;;40448:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;40424:3:0;;-1:-1:-1;40424:3:0;;:::i;:::-;;;40388:110;;;;40349:160;-1:-1:-1;;;;;40525:16:0;;40521:158;;40563:9;40558:110;40582:3;:10;40578:1;:14;40558:110;;;40642:7;40650:1;40642:10;;;;;;;;:::i;:::-;;;;;;;40618:12;:20;40631:3;40635:1;40631:6;;;;;;;;:::i;:::-;;;;;;;40618:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;40594:3:0;;-1:-1:-1;40594:3:0;;:::i;:::-;;;40558:110;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:1:o;633:131::-;-1:-1:-1;;;;;;707:32:1;;697:43;;687:71;;754:1;751;744:12;769:245;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;935:9;922:23;954:30;978:5;954:30;:::i;:::-;1003:5;769:245;-1:-1:-1;;;769:245:1:o;1211:127::-;1272:10;1267:3;1263:20;1260:1;1253:31;1303:4;1300:1;1293:15;1327:4;1324:1;1317:15;1343:249;1453:2;1434:13;;-1:-1:-1;;1430:27:1;1418:40;;1488:18;1473:34;;1509:22;;;1470:62;1467:88;;;1535:18;;:::i;:::-;1571:2;1564:22;-1:-1:-1;;1343:249:1:o;1597:556::-;1640:5;1693:3;1686:4;1678:6;1674:17;1670:27;1660:55;;1711:1;1708;1701:12;1660:55;1747:6;1734:20;1773:18;1769:2;1766:26;1763:52;;;1795:18;;:::i;:::-;1844:2;1838:9;1856:67;1911:2;1892:13;;-1:-1:-1;;1888:27:1;1917:4;1884:38;1838:9;1856:67;:::i;:::-;1947:2;1939:6;1932:18;1993:3;1986:4;1981:2;1973:6;1969:15;1965:26;1962:35;1959:55;;;2010:1;2007;2000:12;1959:55;2074:2;2067:4;2059:6;2055:17;2048:4;2040:6;2036:17;2023:54;2121:1;2097:15;;;2114:4;2093:26;2086:37;;;;2101:6;1597:556;-1:-1:-1;;;1597:556:1:o;2158:322::-;2227:6;2280:2;2268:9;2259:7;2255:23;2251:32;2248:52;;;2296:1;2293;2286:12;2248:52;2336:9;2323:23;2369:18;2361:6;2358:30;2355:50;;;2401:1;2398;2391:12;2355:50;2424;2466:7;2457:6;2446:9;2442:22;2424:50;:::i;:::-;2414:60;2158:322;-1:-1:-1;;;;2158:322:1:o;2485:180::-;2544:6;2597:2;2585:9;2576:7;2572:23;2568:32;2565:52;;;2613:1;2610;2603:12;2565:52;-1:-1:-1;2636:23:1;;2485:180;-1:-1:-1;2485:180:1:o;2670:472::-;2712:3;2750:5;2744:12;2777:6;2772:3;2765:19;2802:1;2812:162;2826:6;2823:1;2820:13;2812:162;;;2888:4;2944:13;;;2940:22;;2934:29;2916:11;;;2912:20;;2905:59;2841:12;2812:162;;;2992:6;2989:1;2986:13;2983:87;;;3058:1;3051:4;3042:6;3037:3;3033:16;3029:27;3022:38;2983:87;-1:-1:-1;3124:2:1;3103:15;-1:-1:-1;;3099:29:1;3090:39;;;;3131:4;3086:50;;2670:472;-1:-1:-1;;2670:472:1:o;3147:220::-;3296:2;3285:9;3278:21;3259:4;3316:45;3357:2;3346:9;3342:18;3334:6;3316:45;:::i;3372:183::-;3432:4;3465:18;3457:6;3454:30;3451:56;;;3487:18;;:::i;:::-;-1:-1:-1;3532:1:1;3528:14;3544:4;3524:25;;3372:183::o;3560:724::-;3614:5;3667:3;3660:4;3652:6;3648:17;3644:27;3634:55;;3685:1;3682;3675:12;3634:55;3721:6;3708:20;3747:4;3770:43;3810:2;3770:43;:::i;:::-;3842:2;3836:9;3854:31;3882:2;3874:6;3854:31;:::i;:::-;3920:18;;;4012:1;4008:10;;;;3996:23;;3992:32;;;3954:15;;;;-1:-1:-1;4036:15:1;;;4033:35;;;4064:1;4061;4054:12;4033:35;4100:2;4092:6;4088:15;4112:142;4128:6;4123:3;4120:15;4112:142;;;4194:17;;4182:30;;4232:12;;;;4145;;4112:142;;;-1:-1:-1;4272:6:1;3560:724;-1:-1:-1;;;;;;3560:724:1:o;4289:869::-;4434:6;4442;4450;4458;4511:3;4499:9;4490:7;4486:23;4482:33;4479:53;;;4528:1;4525;4518:12;4479:53;4551:29;4570:9;4551:29;:::i;:::-;4541:39;;4631:2;4620:9;4616:18;4603:32;4654:18;4695:2;4687:6;4684:14;4681:34;;;4711:1;4708;4701:12;4681:34;4734:61;4787:7;4778:6;4767:9;4763:22;4734:61;:::i;:::-;4724:71;;4848:2;4837:9;4833:18;4820:32;4804:48;;4877:2;4867:8;4864:16;4861:36;;;4893:1;4890;4883:12;4861:36;4916:63;4971:7;4960:8;4949:9;4945:24;4916:63;:::i;:::-;4906:73;;5032:2;5021:9;5017:18;5004:32;4988:48;;5061:2;5051:8;5048:16;5045:36;;;5077:1;5074;5067:12;5045:36;;5100:52;5144:7;5133:8;5122:9;5118:24;5100:52;:::i;:::-;5090:62;;;4289:869;;;;;;;:::o;5163:944::-;5317:6;5325;5333;5341;5349;5402:3;5390:9;5381:7;5377:23;5373:33;5370:53;;;5419:1;5416;5409:12;5370:53;5442:29;5461:9;5442:29;:::i;:::-;5432:39;;5490:38;5524:2;5513:9;5509:18;5490:38;:::i;:::-;5480:48;;5579:2;5568:9;5564:18;5551:32;5602:18;5643:2;5635:6;5632:14;5629:34;;;5659:1;5656;5649:12;5629:34;5682:61;5735:7;5726:6;5715:9;5711:22;5682:61;:::i;:::-;5672:71;;5796:2;5785:9;5781:18;5768:32;5752:48;;5825:2;5815:8;5812:16;5809:36;;;5841:1;5838;5831:12;5809:36;5864:63;5919:7;5908:8;5897:9;5893:24;5864:63;:::i;:::-;5854:73;;5980:3;5969:9;5965:19;5952:33;5936:49;;6010:2;6000:8;5997:16;5994:36;;;6026:1;6023;6016:12;5994:36;;6049:52;6093:7;6082:8;6071:9;6067:24;6049:52;:::i;:::-;6039:62;;;5163:944;;;;;;;;:::o;6112:1208::-;6230:6;6238;6291:2;6279:9;6270:7;6266:23;6262:32;6259:52;;;6307:1;6304;6297:12;6259:52;6347:9;6334:23;6376:18;6417:2;6409:6;6406:14;6403:34;;;6433:1;6430;6423:12;6403:34;6471:6;6460:9;6456:22;6446:32;;6516:7;6509:4;6505:2;6501:13;6497:27;6487:55;;6538:1;6535;6528:12;6487:55;6574:2;6561:16;6596:4;6619:43;6659:2;6619:43;:::i;:::-;6691:2;6685:9;6703:31;6731:2;6723:6;6703:31;:::i;:::-;6769:18;;;6857:1;6853:10;;;;6845:19;;6841:28;;;6803:15;;;;-1:-1:-1;6881:19:1;;;6878:39;;;6913:1;6910;6903:12;6878:39;6937:11;;;;6957:148;6973:6;6968:3;6965:15;6957:148;;;7039:23;7058:3;7039:23;:::i;:::-;7027:36;;6990:12;;;;7083;;;;6957:148;;;7124:6;-1:-1:-1;;7168:18:1;;7155:32;;-1:-1:-1;;7199:16:1;;;7196:36;;;7228:1;7225;7218:12;7196:36;;7251:63;7306:7;7295:8;7284:9;7280:24;7251:63;:::i;:::-;7241:73;;;6112:1208;;;;;:::o;7325:435::-;7378:3;7416:5;7410:12;7443:6;7438:3;7431:19;7469:4;7498:2;7493:3;7489:12;7482:19;;7535:2;7528:5;7524:14;7556:1;7566:169;7580:6;7577:1;7574:13;7566:169;;;7641:13;;7629:26;;7675:12;;;;7710:15;;;;7602:1;7595:9;7566:169;;;-1:-1:-1;7751:3:1;;7325:435;-1:-1:-1;;;;;7325:435:1:o;7765:261::-;7944:2;7933:9;7926:21;7907:4;7964:56;8016:2;8005:9;8001:18;7993:6;7964:56;:::i;8031:390::-;8109:6;8117;8170:2;8158:9;8149:7;8145:23;8141:32;8138:52;;;8186:1;8183;8176:12;8138:52;8222:9;8209:23;8199:33;;8283:2;8272:9;8268:18;8255:32;8310:18;8302:6;8299:30;8296:50;;;8342:1;8339;8332:12;8296:50;8365;8407:7;8398:6;8387:9;8383:22;8365:50;:::i;8426:532::-;8521:6;8529;8537;8545;8598:3;8586:9;8577:7;8573:23;8569:33;8566:53;;;8615:1;8612;8605:12;8566:53;8638:29;8657:9;8638:29;:::i;:::-;8628:39;;8714:2;8703:9;8699:18;8686:32;8676:42;;8765:2;8754:9;8750:18;8737:32;8727:42;;8820:2;8809:9;8805:18;8792:32;8847:18;8839:6;8836:30;8833:50;;;8879:1;8876;8869:12;8833:50;8902;8944:7;8935:6;8924:9;8920:22;8902:50;:::i;9171:347::-;9236:6;9244;9297:2;9285:9;9276:7;9272:23;9268:32;9265:52;;;9313:1;9310;9303:12;9265:52;9336:29;9355:9;9336:29;:::i;:::-;9326:39;;9415:2;9404:9;9400:18;9387:32;9462:5;9455:13;9448:21;9441:5;9438:32;9428:60;;9484:1;9481;9474:12;9428:60;9507:5;9497:15;;;9171:347;;;;;:::o;9523:260::-;9591:6;9599;9652:2;9640:9;9631:7;9627:23;9623:32;9620:52;;;9668:1;9665;9658:12;9620:52;9691:29;9710:9;9691:29;:::i;:::-;9681:39;;9739:38;9773:2;9762:9;9758:18;9739:38;:::i;:::-;9729:48;;9523:260;;;;;:::o;9788:607::-;9892:6;9900;9908;9916;9924;9977:3;9965:9;9956:7;9952:23;9948:33;9945:53;;;9994:1;9991;9984:12;9945:53;10017:29;10036:9;10017:29;:::i;:::-;10007:39;;10065:38;10099:2;10088:9;10084:18;10065:38;:::i;:::-;10055:48;;10150:2;10139:9;10135:18;10122:32;10112:42;;10201:2;10190:9;10186:18;10173:32;10163:42;;10256:3;10245:9;10241:19;10228:33;10284:18;10276:6;10273:30;10270:50;;;10316:1;10313;10306:12;10270:50;10339;10381:7;10372:6;10361:9;10357:22;10339:50;:::i;10400:186::-;10459:6;10512:2;10500:9;10491:7;10487:23;10483:32;10480:52;;;10528:1;10525;10518:12;10480:52;10551:29;10570:9;10551:29;:::i;11003:356::-;11205:2;11187:21;;;11224:18;;;11217:30;11283:34;11278:2;11263:18;;11256:62;11350:2;11335:18;;11003:356::o;11364:380::-;11443:1;11439:12;;;;11486;;;11507:61;;11561:4;11553:6;11549:17;11539:27;;11507:61;11614:2;11606:6;11603:14;11583:18;11580:38;11577:161;;;11660:10;11655:3;11651:20;11648:1;11641:31;11695:4;11692:1;11685:15;11723:4;11720:1;11713:15;11577:161;;11364:380;;;:::o;12578:127::-;12639:10;12634:3;12630:20;12627:1;12620:31;12670:4;12667:1;12660:15;12694:4;12691:1;12684:15;12710:127;12771:10;12766:3;12762:20;12759:1;12752:31;12802:4;12799:1;12792:15;12826:4;12823:1;12816:15;12842:135;12881:3;-1:-1:-1;;12902:17:1;;12899:43;;;12922:18;;:::i;:::-;-1:-1:-1;12969:1:1;12958:13;;12842:135::o;14138:397::-;14340:2;14322:21;;;14379:2;14359:18;;;14352:30;14418:34;14413:2;14398:18;;14391:62;-1:-1:-1;;;14484:2:1;14469:18;;14462:31;14525:3;14510:19;;14138:397::o;14540:404::-;14742:2;14724:21;;;14781:2;14761:18;;;14754:30;14820:34;14815:2;14800:18;;14793:62;-1:-1:-1;;;14886:2:1;14871:18;;14864:38;14934:3;14919:19;;14540:404::o;14949:128::-;14989:3;15020:1;15016:6;15013:1;15010:13;15007:39;;;15026:18;;:::i;:::-;-1:-1:-1;15062:9:1;;14949:128::o;15082:465::-;15339:2;15328:9;15321:21;15302:4;15365:56;15417:2;15406:9;15402:18;15394:6;15365:56;:::i;:::-;15469:9;15461:6;15457:22;15452:2;15441:9;15437:18;15430:50;15497:44;15534:6;15526;15497:44;:::i;:::-;15489:52;15082:465;-1:-1:-1;;;;;15082:465:1:o;15552:401::-;15754:2;15736:21;;;15793:2;15773:18;;;15766:30;15832:34;15827:2;15812:18;;15805:62;-1:-1:-1;;;15898:2:1;15883:18;;15876:35;15943:3;15928:19;;15552:401::o;15958:406::-;16160:2;16142:21;;;16199:2;16179:18;;;16172:30;16238:34;16233:2;16218:18;;16211:62;-1:-1:-1;;;16304:2:1;16289:18;;16282:40;16354:3;16339:19;;15958:406::o;17726:827::-;-1:-1:-1;;;;;18123:15:1;;;18105:34;;18175:15;;18170:2;18155:18;;18148:43;18085:3;18222:2;18207:18;;18200:31;;;18048:4;;18254:57;;18291:19;;18283:6;18254:57;:::i;:::-;18359:9;18351:6;18347:22;18342:2;18331:9;18327:18;18320:50;18393:44;18430:6;18422;18393:44;:::i;:::-;18379:58;;18486:9;18478:6;18474:22;18468:3;18457:9;18453:19;18446:51;18514:33;18540:6;18532;18514:33;:::i;:::-;18506:41;17726:827;-1:-1:-1;;;;;;;;17726:827:1:o;18558:249::-;18627:6;18680:2;18668:9;18659:7;18655:23;18651:32;18648:52;;;18696:1;18693;18686:12;18648:52;18728:9;18722:16;18747:30;18771:5;18747:30;:::i;18812:179::-;18847:3;18889:1;18871:16;18868:23;18865:120;;;18935:1;18932;18929;18914:23;-1:-1:-1;18972:1:1;18966:8;18961:3;18957:18;18865:120;18812:179;:::o;18996:671::-;19035:3;19077:4;19059:16;19056:26;19053:39;;;18996:671;:::o;19053:39::-;19119:2;19113:9;-1:-1:-1;;19184:16:1;19180:25;;19177:1;19113:9;19156:50;19235:4;19229:11;19259:16;19294:18;19365:2;19358:4;19350:6;19346:17;19343:25;19338:2;19330:6;19327:14;19324:45;19321:58;;;19372:5;;;;;18996:671;:::o;19321:58::-;19409:6;19403:4;19399:17;19388:28;;19445:3;19439:10;19472:2;19464:6;19461:14;19458:27;;;19478:5;;;;;;18996:671;:::o;19458:27::-;19562:2;19543:16;19537:4;19533:27;19529:36;19522:4;19513:6;19508:3;19504:16;19500:27;19497:69;19494:82;;;19569:5;;;;;;18996:671;:::o;19494:82::-;19585:57;19636:4;19627:6;19619;19615:19;19611:30;19605:4;19585:57;:::i;:::-;-1:-1:-1;19658:3:1;;18996:671;-1:-1:-1;;;;;18996:671:1:o;20093:404::-;20295:2;20277:21;;;20334:2;20314:18;;;20307:30;20373:34;20368:2;20353:18;;20346:62;-1:-1:-1;;;20439:2:1;20424:18;;20417:38;20487:3;20472:19;;20093:404::o;20502:561::-;-1:-1:-1;;;;;20799:15:1;;;20781:34;;20851:15;;20846:2;20831:18;;20824:43;20898:2;20883:18;;20876:34;;;20941:2;20926:18;;20919:34;;;20761:3;20984;20969:19;;20962:32;;;20724:4;;21011:46;;21037:19;;21029:6;21011:46;:::i;:::-;21003:54;20502:561;-1:-1:-1;;;;;;;20502:561:1:o;21068:125::-;21108:4;21136:1;21133;21130:8;21127:34;;;21141:18;;:::i;:::-;-1:-1:-1;21178:9:1;;21068:125::o
Swarm Source
ipfs://29b29190435606589b26499399c182a1b596a992ff77643c81f87e2ae5e8846a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.