UNPKG

secretstore-contracts

Version:

Secret Store permissioning and service contracts collection and toolkit.

1,084 lines (1,083 loc) 154 kB
{ "contractName": "ERC165Checker", "abi": [], "bytecode": "0x604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146080604052600080fd00a165627a7a7230582098bcbbed1bd7b49562a79a8802827e7363ae29f5f39f974b419d64e1ed9cb4c90029", "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fd00a165627a7a7230582098bcbbed1bd7b49562a79a8802827e7363ae29f5f39f974b419d64e1ed9cb4c90029", "sourceMap": "193:5019:13:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24", "deployedSourceMap": "193:5019:13:-;;;;;;;;", "source": "pragma solidity ^0.4.24;\n\n/**\n * @title ERC165Checker\n * @dev Use `using ERC165Checker for address`; to include this library\n * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _InterfaceId_Invalid = 0xffffffff;\n\n bytes4 private constant _InterfaceId_ERC165 = 0x01ffc9a7;\n /**\n * 0x01ffc9a7 ===\n * bytes4(keccak256('supportsInterface(bytes4)'))\n */\n\n /**\n * @notice Query if a contract supports ERC165\n * @param account The address of the contract to query for support of ERC165\n * @return true if the contract at account implements ERC165\n */\n function _supportsERC165(address account)\n internal\n view\n returns (bool)\n {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return _supportsERC165Interface(account, _InterfaceId_ERC165) &&\n !_supportsERC165Interface(account, _InterfaceId_Invalid);\n }\n\n /**\n * @notice Query if a contract implements an interface, also checks support of ERC165\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Interface identification is specified in ERC-165.\n */\n function _supportsInterface(address account, bytes4 interfaceId)\n internal\n view\n returns (bool)\n {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return _supportsERC165(account) &&\n _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @notice Query if a contract implements interfaces, also checks support of ERC165\n * @param account The address of the contract to query for support of an interface\n * @param interfaceIds A list of interface identifiers, as specified in ERC-165\n * @return true if the contract at account indicates support all interfaces in the\n * interfaceIds list, false otherwise\n * @dev Interface identification is specified in ERC-165.\n */\n function _supportsAllInterfaces(address account, bytes4[] interfaceIds)\n internal\n view\n returns (bool)\n {\n // query support of ERC165 itself\n if (!_supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with the `supportsERC165` method in this library.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId)\n private\n view\n returns (bool)\n {\n // success determines whether the staticcall succeeded and result determines\n // whether the contract at account indicates support of _interfaceId\n (bool success, bool result) = _callERC165SupportsInterface(\n account, interfaceId);\n\n return (success && result);\n }\n\n /**\n * @notice Calls the function with selector 0x01ffc9a7 (ERC165) and suppresses throw\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return success true if the STATICCALL succeeded, false otherwise\n * @return result true if the STATICCALL succeeded and the contract at account\n * indicates support of the interface with identifier interfaceId, false otherwise\n */\n function _callERC165SupportsInterface(\n address account,\n bytes4 interfaceId\n )\n private\n view\n returns (bool success, bool result)\n {\n bytes memory encodedParams = abi.encodeWithSelector(\n _InterfaceId_ERC165,\n interfaceId\n );\n\n // solium-disable-next-line security/no-inline-assembly\n assembly {\n let encodedParams_data := add(0x20, encodedParams)\n let encodedParams_size := mload(encodedParams)\n\n let output := mload(0x40) // Find empty storage location using \"free memory pointer\"\n mstore(output, 0x0)\n\n success := staticcall(\n 30000, // 30k gas\n account, // To addr\n encodedParams_data,\n encodedParams_size,\n output,\n 0x20 // Outputs are 32 bytes long\n )\n\n result := mload(output) // Load the result\n }\n }\n}\n", "sourcePath": "openzeppelin-solidity/contracts/introspection/ERC165Checker.sol", "ast": { "absolutePath": "openzeppelin-solidity/contracts/introspection/ERC165Checker.sol", "exportedSymbols": { "ERC165Checker": [ 2485 ] }, "id": 2486, "nodeType": "SourceUnit", "nodes": [ { "id": 2350, "literals": [ "solidity", "^", "0.4", ".24" ], "nodeType": "PragmaDirective", "src": "0:24:13" }, { "baseContracts": [], "contractDependencies": [], "contractKind": "library", "documentation": "@title ERC165Checker\n@dev Use `using ERC165Checker for address`; to include this library\nhttps://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md", "fullyImplemented": true, "id": 2485, "linearizedBaseContracts": [ 2485 ], "name": "ERC165Checker", "nodeType": "ContractDefinition", "nodes": [ { "constant": true, "id": 2353, "name": "_InterfaceId_Invalid", "nodeType": "VariableDeclaration", "scope": 2485, "src": "291:57:13", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" }, "typeName": { "id": 2351, "name": "bytes4", "nodeType": "ElementaryTypeName", "src": "291:6:13", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } }, "value": { "argumentTypes": null, "hexValue": "30786666666666666666", "id": 2352, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "338:10:13", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_4294967295_by_1", "typeString": "int_const 4294967295" }, "value": "0xffffffff" }, "visibility": "private" }, { "constant": true, "id": 2356, "name": "_InterfaceId_ERC165", "nodeType": "VariableDeclaration", "scope": 2485, "src": "353:56:13", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" }, "typeName": { "id": 2354, "name": "bytes4", "nodeType": "ElementaryTypeName", "src": "353:6:13", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } }, "value": { "argumentTypes": null, "hexValue": "30783031666663396137", "id": 2355, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "399:10:13", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_33540519_by_1", "typeString": "int_const 33540519" }, "value": "0x01ffc9a7" }, "visibility": "private" }, { "body": { "id": 2374, "nodeType": "Block", "src": "788:302:13", "statements": [ { "expression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bool", "typeString": "bool" }, "id": 2372, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 2364, "name": "account", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2358, "src": "990:7:13", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 2365, "name": "_InterfaceId_ERC165", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2356, "src": "999:19:13", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } ], "id": 2363, "name": "_supportsERC165Interface", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2463, "src": "965:24:13", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$", "typeString": "function (address,bytes4) view returns (bool)" } }, "id": 2366, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "965:54:13", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "BinaryOperation", "operator": "&&", "rightExpression": { "argumentTypes": null, "id": 2371, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "!", "prefix": true, "src": "1029:56:13", "subExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 2368, "name": "account", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2358, "src": "1055:7:13", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 2369, "name": "_InterfaceId_Invalid", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2353, "src": "1064:20:13", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } ], "id": 2367, "name": "_supportsERC165Interface", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2463, "src": "1030:24:13", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$", "typeString": "function (address,bytes4) view returns (bool)" } }, "id": 2370, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1030:55:13", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "965:120:13", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "functionReturnParameters": 2362, "id": 2373, "nodeType": "Return", "src": "958:127:13" } ] }, "documentation": "@notice Query if a contract supports ERC165\n@param account The address of the contract to query for support of ERC165\n@return true if the contract at account implements ERC165", "id": 2375, "implemented": true, "isConstructor": false, "isDeclaredConst": true, "modifiers": [], "name": "_supportsERC165", "nodeType": "FunctionDefinition", "parameters": { "id": 2359, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 2358, "name": "account", "nodeType": "VariableDeclaration", "scope": 2375, "src": "728:15:13", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 2357, "name": "address", "nodeType": "ElementaryTypeName", "src": "728:7:13", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" } ], "src": "727:17:13" }, "payable": false, "returnParameters": { "id": 2362, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 2361, "name": "", "nodeType": "VariableDeclaration", "scope": 2375, "src": "780:4:13", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 2360, "name": "bool", "nodeType": "ElementaryTypeName", "src": "780:4:13", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "779:6:13" }, "scope": 2485, "src": "703:387:13", "stateMutability": "view", "superFunction": null, "visibility": "internal" }, { "body": { "id": 2393, "nodeType": "Block", "src": "1651:178:13", "statements": [ { "expression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bool", "typeString": "bool" }, "id": 2391, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 2385, "name": "account", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2377, "src": "1760:7:13", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" } ], "id": 2384, "name": "_supportsERC165", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2375, "src": "1744:15:13", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", "typeString": "function (address) view returns (bool)" } }, "id": 2386, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1744:24:13", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "BinaryOperation", "operator": "&&", "rightExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 2388, "name": "account", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2377, "src": "1803:7:13", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 2389, "name": "interfaceId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2379, "src": "1812:11:13", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } ], "id": 2387, "name": "_supportsERC165Interface", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2463, "src": "1778:24:13", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$", "typeString": "function (address,bytes4) view returns (bool)" } }, "id": 2390, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "1778:46:13", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "1744:80:13", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "functionReturnParameters": 2383, "id": 2392, "nodeType": "Return", "src": "1737:87:13" } ] }, "documentation": "@notice Query if a contract implements an interface, also checks support of ERC165\n@param account The address of the contract to query for support of an interface\n@param interfaceId The interface identifier, as specified in ERC-165\n@return true if the contract at account indicates support of the interface with\nidentifier interfaceId, false otherwise\n@dev Interface identification is specified in ERC-165.", "id": 2394, "implemented": true, "isConstructor": false, "isDeclaredConst": true, "modifiers": [], "name": "_supportsInterface", "nodeType": "FunctionDefinition", "parameters": { "id": 2380, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 2377, "name": "account", "nodeType": "VariableDeclaration", "scope": 2394, "src": "1571:15:13", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 2376, "name": "address", "nodeType": "ElementaryTypeName", "src": "1571:7:13", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 2379, "name": "interfaceId", "nodeType": "VariableDeclaration", "scope": 2394, "src": "1588:18:13", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" }, "typeName": { "id": 2378, "name": "bytes4", "nodeType": "ElementaryTypeName", "src": "1588:6:13", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } }, "value": null, "visibility": "internal" } ], "src": "1570:37:13" }, "payable": false, "returnParameters": { "id": 2383, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 2382, "name": "", "nodeType": "VariableDeclaration", "scope": 2394, "src": "1643:4:13", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 2381, "name": "bool", "nodeType": "ElementaryTypeName", "src": "1643:4:13", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "1642:6:13" }, "scope": 2485, "src": "1543:286:13", "stateMutability": "view", "superFunction": null, "visibility": "internal" }, { "body": { "id": 2438, "nodeType": "Block", "src": "2398:370:13", "statements": [ { "condition": { "argumentTypes": null, "id": 2407, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "!", "prefix": true, "src": "2446:25:13", "subExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 2405, "name": "account", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2396, "src": "2463:7:13", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" } ], "id": 2404, "name": "_supportsERC165", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2375, "src": "2447:15:13", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", "typeString": "function (address) view returns (bool)" } }, "id": 2406, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2447:24:13", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 2411, "nodeType": "IfStatement", "src": "2442:58:13", "trueBody": { "id": 2410, "nodeType": "Block", "src": "2473:27:13", "statements": [ { "expression": { "argumentTypes": null, "hexValue": "66616c7365", "id": 2408, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "2488:5:13", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "false" }, "functionReturnParameters": 2403, "id": 2409, "nodeType": "Return", "src": "2481:12:13" } ] } }, { "body": { "id": 2434, "nodeType": "Block", "src": "2612:102:13", "statements": [ { "condition": { "argumentTypes": null, "id": 2429, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "!", "prefix": true, "src": "2624:51:13", "subExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 2424, "name": "account", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2396, "src": "2650:7:13", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 2425, "name": "interfaceIds", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2399, "src": "2659:12:13", "typeDescriptions": { "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr", "typeString": "bytes4[] memory" } }, "id": 2427, "indexExpression": { "argumentTypes": null, "id": 2426, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2413, "src": "2672:1:13", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "2659:15:13", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } ], "id": 2423, "name": "_supportsERC165Interface", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2463, "src": "2625:24:13", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$", "typeString": "function (address,bytes4) view returns (bool)" } }, "id": 2428, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2625:50:13", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 2433, "nodeType": "IfStatement", "src": "2620:88:13", "trueBody": { "id": 2432, "nodeType": "Block", "src": "2677:31:13", "statements": [ { "expression": { "argumentTypes": null, "hexValue": "66616c7365", "id": 2430, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "2694:5:13", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "false" }, "functionReturnParameters": 2403, "id": 2431, "nodeType": "Return", "src": "2687:12:13" } ] } } ] }, "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 2419, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 2416, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2413, "src": "2582:1:13", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "<", "rightExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 2417, "name": "interfaceIds", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2399, "src": "2586:12:13", "typeDescriptions": { "typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr", "typeString": "bytes4[] memory" } }, "id": 2418, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "2586:19:13", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "2582:23:13", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 2435, "initializationExpression": { "assignments": [ 2413 ], "declarations": [ { "constant": false, "id": 2413, "name": "i", "nodeType": "VariableDeclaration", "scope": 2439, "src": "2567:9:13", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 2412, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2567:7:13", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 2415, "initialValue": { "argumentTypes": null, "hexValue": "30", "id": 2414, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "2579:1:13", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "nodeType": "VariableDeclarationStatement", "src": "2567:13:13" }, "loopExpression": { "expression": { "argumentTypes": null, "id": 2421, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "++", "prefix": false, "src": "2607:3:13", "subExpression": { "argumentTypes": null, "id": 2420, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2413, "src": "2607:1:13", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 2422, "nodeType": "ExpressionStatement", "src": "2607:3:13" }, "nodeType": "ForStatement", "src": "2562:152:13" }, { "expression": { "argumentTypes": null, "hexValue": "74727565", "id": 2436, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "2759:4:13", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "true" }, "functionReturnParameters": 2403, "id": 2437, "nodeType": "Return",